Курсовая работа по «Теории информации и кодирования»

Автор: Пользователь скрыл имя, 02 Апреля 2013 в 19:38, курсовая работа

Описание работы

В данном курсовом проекте были программно реализованы теоретические знания, полученные в течение всего семестра. Были рассмотрены методы нахождения энтропии зависимых и независимых систем, основные способы кодирования информации. В частности были реализованы методы кодирования Шеннона-Фано и кодирование по Хаффману. Реализованы были также основные методы помехоустойчивого кодирования, коды с обнаружением одиночной ошибки, коды с обнаружение и возможностью исправления одиночной ошибки. Рассмотрены способы шифрования входных сообщений, такие как метод шифрования со смещением, и RSA.

Содержание

Введение…………………………………………………………………………2

Глава 1. Информационные характеристики дискретных
случайных величин…………………………………………………....4
1.1 Задание………….……………………………………………………………4
1.2 Теория………….…………………………………………………………….4
1.3 Программная реализация и алгоритмы…………………………………….5
1.3.1 Запуск программы, входные и выходные данные………………………..5
1.3.2 Алгоритмы и функции……………………………………………………...5
1.3.3 Тестирование………………………………………………………………..7

Глава 2. Оптимальное кодирование……………………………………………..8
2.1 Задание………………………………………………………………………...8
2.2 Теория…………………………………………………………………………8
2.3 Программная реализация и алгоритмы…………………………………….10
2.3.1 Запуск программы, входные и выходные данные .……………………...10
2.3.2 Алгоритмы и функции…………………………………………………….10
2.3.3 Тестирование………………………………………………………………16

Глава 3. Помехоустойчивое кодирование………………...……………………19
3.1 Задание……………………………………………………………………….19
3.2 Теория………………………………………………………………………...19
3.3 Программная реализация и алгоритмы…………………………………….23
3.3.1 Запуск программы, входные и выходные данные .……………………...23
3.3.2 Алгоритмы и функции…………………………………………………….23
3.3.3 Тестирование………………………………………………………………27

Глава 4. Шифрование данных…….…………………………………………….27
4.1 Задание……………………………………………………………………….27
4.2 Теория………………………………………………………………………...27
4.3 Программная реализация и алгоритмы…………………………………….30
4.3.1 Запуск программы, входные и выходные данные .……………………...30
4.3.2 Алгоритмы и функции…………………………………………………….30
4.3.3 Тестирование………………………………………………………………34

5. Заключение……………………………………………………………………35

Приложение 1……………………………………………………………………36
Приложение 2……………………………………………………………………37
Приложение 3……………………………………………………………………41
Приложение 4……………………………………………………………………43

Работа содержит 1 файл

курсач ТИК.docx

— 513.12 Кб (Скачать)

{

  int j=0;

  int i;

  for(i=0;i<n;i++)

  {

  STR[i].code=STR[i].code+C[j];

  if(STR[i].code>26) STR[i].code=STR[i].code-26;//если вышли за рамки алфавита

 

  for(int e=0;e<26;e++)

  if (STR[i].code==ABC[e].code) STR[i].name=ABC[e].name;

 

  j++;

  if(j>=nc) j=0;

  }

    //////////test 

    puts("Шифрованное сообщение:");

for( i=0;i<n;i++) printf("%c",STR[i].name);

printf("\n");

}

void Deshifrovanie(struct alphabet STR[],int n, int C[],int nc,struct alphabet ABC[])

{

  int j=0;

  int i;

  for(i=0;i<n;i++)

  {

  STR[i].code=STR[i].code-C[j];

  if(STR[i].code<1) STR[i].code=STR[i].code+26;//если вышли за рамки алфавита

 

  for(int e=0;e<26;e++)

  if (STR[i].code==ABC[e].code) STR[i].name=ABC[e].name;

 

  j++;

  if(j>=nc) j=0;

  }

  //////////test 

    puts("\nДешированное сообщение:");

for( i=0;i<n;i++) printf("%c",STR[i].name);

 

}

////////////

void SimpleCh(int S[])

{

S[0]=2; //2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

S[1]=3;

S[2]=5;

S[3]=7;

S[4]=11;

S[5]=13;

S[6]=17;

S[7]=19;

    S[8]=23;

S[9]=29;

S[10]=31;

S[11]=37;

S[12]=41;

S[13]=43;

S[14]=47;

S[15]=53;

S[16]=59;

S[17]=61;

S[18]=67;

S[19]=71;

S[20]=73;

S[21]=79;

S[22]=83;

S[23]=89;

S[24]=97;

}

void RSA(int M,int C,int C1,int r)

{

int m1; int m2;

m1=M; m2=M;

 

//printf("\nmes=%d,a=%d,r=%d",M,C,r);

for(int i=0;i<C;i++)

{

M=m1%r;//остаток от деления

m1=M*m2;

//printf("\nM=%d,m1=%d",M,m1);

}

printf("\nШифрованое сообщение  %d",M);

//////////////////////////////////////////////////////

 

m1=M; m2=M;

 

//printf("\nmes=%d,a=%d,r=%d",M,C,r);

for(int i=0;i<C1;i++)

{

M=m1%r;//остаток от деления

m1=M*m2;

//printf("\nM=%d,m1=%d",M,m1);

}

printf("\n\nДешифрованое сообщение  %d",M);

}

 

int _tmain(int argc, _TCHAR* argv[])

{

struct alphabet ABC[26]; //алфавит

struct alphabet STR[50]; //наша строка символов

 

 

int n,i;//n-кол во символов  в вводимой строке

int nc;//nc -кол-во символов  в ключе

char s[50];

int clue[12];

   ////////////

int simple[25];int SN=25;//кол-во простых чисел в таблице

int p1;

int r;

int f;

int a; int alp;

int flag=0;

int mess;int messcode;

 

 

for(int i=0;i<12;i++) clue[i]=0;

 

setlocale(LC_CTYPE,"Russian");//русификация

 

ABCFeling(ABC);//заполнение алфавита

printf("Лабораторная работа  по ТИиК № 4.\nВыполнил: Гильманов  Тимур 4208\n");

///////////////шифрование RSA

     SimpleCh(simple);//заполнили  массив простых чисел от 2-100

puts("\nВведите значение  числа P1 (Р1 должно быть простым  числом):");

 scanf("%d",&p1);

for(int i=2; i<SN;i++)

  { 

if(flag==1) break;

r=p1*simple[i];

f=(p1-1)*(simple[i]-1);

for(int j=0;j<SN;j++)

if(flag==1) break;

else

for(int e=0;e<SN;e++)

    if((simple[j]*simple[e])%f==1)

      {

if(simple[j]!=simple[e])

{

a=simple[j]; alp=simple[e];

printf("\nР2=%d\nr=%d;",simple[i],r);

flag=1;

break;

    }

      }

  }

printf("\nЗначение а=%d-Открытый ключ;\nЗначение alpha=%d-Закрытый ключ;",a,alp);

 puts("\nВведите сообщение(цифру), которое нужно передать");

 scanf("%d",&mess);

messcode=mess;

// messcode=int(pow(mess*1.0,a*1.0))%r;//RSA шифрование

    RSA(messcode,a,alp,r);

 

 

// messcode=int(pow(messcode*1.0,alp*1.0))%r;//RSA дешифрование

 

 

 

 

    

//////////////////шифрование алфавитом  и ключом

puts("\n\nВведите кол символов:");

scanf("%d",&n);

puts("Введите желаемую  строку:");

scanf("%s",&s);

 

for( i=0;i<n;i++) 

{

switch(s[i])

{

   case 'a':STR[i].name='a';STR[i].code=1;break;

   case 'b':STR[i].name='b';STR[i].code=2;break;

   case 'c':STR[i].name='c';STR[i].code=3;break;

   case 'd':STR[i].name='d';STR[i].code=4;break;

 

};

}

//////////test 

//for( i=0;i<n;i++) printf("%c  %d\n",STR[i].name,STR[i].code);

puts("Введите длину ключа\n");

scanf("%d",&nc);

 

    GetClue(clue,nc,ABC);//получение  ключа длиной до 12 символов

    Shifrovanie(STR,n,clue,nc,ABC);//функция  шифрование входной строки

    Deshifrovanie(STR,n,clue,nc,ABC);//функция  дешифровки

 

getch();

return 0;

}

 

 

 

 

 

 

 


Информация о работе Курсовая работа по «Теории информации и кодирования»