Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №5 Вариант 17

.doc
Скачиваний:
9
Добавлен:
20.06.2014
Размер:
3.63 Mб
Скачать

2

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ

Лабораторная работа №5

по дисциплине

«Технология программирования»

на тему:

«Программирование алгоритмов кодирования информации»

Студент

Понарьин С.Н.

подпись, дата

фамилия, инициалы

Группа

АС-09

Принял

Домашнев П.А.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2010

  1. 1. Задание:

Написать программу, осуществляющую кодирование и раскодирование последовательности из входного файла заданным методом и сохраняющую результат в выходной файл. Имена файлов вводит пользователь. Режим работы с файлам – двоичный. Для алгоритмов шифрования/дешифрования пользователь должен вводить также ключ.

Алгоритм шифрования

17 – метод Вижинера

  1. 2. Блок-схема программы

  1. 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;

}

  1. 4. Контрольный пример