Лабораторная работа №5 Вариант 17
.doc
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ
Лабораторная работа №5
по дисциплине
«Технология программирования»
на тему:
«Программирование алгоритмов кодирования информации»
|
Студент |
|
|
|
Понарьин С.Н. |
|
||||||||
|
|
|
подпись, дата |
|
фамилия, инициалы |
|
||||||||
|
Группа |
|
АС-09 |
|
|
|
|
|||||||
|
|
|
|
|
|
|
||||||||
|
Принял |
|
|
|
Домашнев П.А. |
|
||||||||
|
|
|
|
|
|
|
||||||||
|
ученая степень, звание |
|
подпись, дата |
|
фамилия, инициалы |
|
Липецк 2010
-
1. Задание:
Написать программу, осуществляющую кодирование и раскодирование последовательности из входного файла заданным методом и сохраняющую результат в выходной файл. Имена файлов вводит пользователь. Режим работы с файлам – двоичный. Для алгоритмов шифрования/дешифрования пользователь должен вводить также ключ.
Алгоритм шифрования |
|
17 – метод Вижинера |
|
-
2. Блок-схема программы
-
3. Листинг программы
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <locale.h>
int i,j;
void Coding(char s[100], char key[30])
{
for(i=0;i<strlen(s);i++)
s[i]=s[i]^key[i%strlen(key)];//Шифрование (наложение гаммы)
}
void main()
{
setlocale(LC_ALL,"Rus");
char key[30],s[100],namefile[15],choose;
FILE *fp;
printf("Выберите действие:\n\n");
printf("1 - Закодировать данные\n");
printf("2 - Раскодировать данные\n\n");
scanf("%c",&choose);
if(choose=='1')
{
printf("\nВведите имя файла для считывания строки для
кодирования:\n\n");
scanf("%s",namefile);
strcat(namefile,".txt");
fp=fopen(namefile,"r");
if(!fp)
{
printf("\nОшибка при открытии файла\n");
getch();
return;
}
printf("\nВведите ключ для кодирования:\n\n");
scanf("%s",key);
fgets(s,200,fp);//Считывание строки
printf("\nИсходная строка: \n%s",s);
Coding(s,key);//Кодирование
printf("\n\nЗакодированная строка: \n%s\n\n",s);
fclose(fp);
printf("\nВведите имя файла для записи результата:\n\n");
scanf("%s",namefile);
strcat(namefile,".bin");
fp=fopen(namefile,"wb");
fwrite(&s,sizeof(s),1,fp);
printf("\nЗапись произведена...");
fclose(fp);
getch();
}
else if(choose=='2')
{
printf("\nВведите имя файла для считывания строки для
раскодирования:\n\n");
scanf("%s",namefile);
strcat(namefile,".bin");
fp=fopen(namefile,"rb");
if(!fp)
{
printf("\nОшибка при открытии файла\n");
getch();
return;
}
printf("\nВведите ключ для раскодирования:\n\n");
scanf("%s",key);
fread(&s,sizeof(s),1,fp);;
Coding(s,key);
fclose(fp);
printf("%s",s);
getch();
}
else
return;
}
-
4. Контрольный пример