У вас вопросы?
У нас ответы:) SamZan.net

НЕльцина Кафедра Технологий и Средств Связи Оценка работы

Работа добавлена на сайт samzan.net: 2016-03-30

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 1.2.2025

Министерство образования Российской Федерации

Уральский Федеральный Университет имени первого президента РФ Б.Н.Ельцина

Кафедра Технологий и Средств Связи

  Оценка работы

  

Отчет

по учебной практике

                                                                                                    Руководитель         Плохих О.В.

                                                                                                    Студент                  Лаптев С.А.

                                                                                                    Группа Р-200802 

Екатеринбург 2011

Цель учебной практики - получение новых знаний и совершенствование практических навыков по дисциплинам информационного цикла.

Задачи:

  1.  выполнить    практические    упражнения, предусмотренные   программой   вычислительной   практики  для   студентов, обучающихся по тому или иному направлению;
  2.  выполнить     индивидуальное      задание,      которое      выдается
    руководителем практики.
  3.  получить     представление     об     основах     работы     современных
    вычислительных машин;
  4.  знать и уметь пользоваться операционной системой современного компьютера;
  5.  уметь      составлять      модель      информационного      процесса,
    разрабатывать    алгоритм    решения    задачи,    составлять    и    отлаживать
    программы на языке высокого уровня;
  6.  владеть навыками работы с пакетами прикладных программ на
    уровне квалифицированного пользователя;

Задание:

Расшифровать текст на русском языке, если известно, что он зашифрован при помощи одного перемешанного алфавита. Размер текста не ограничен. Текст содержит слова, разделенные знаками препинания, пробелами и символами конца строки, и берется из файла.

Введение:

Анализировать частоту повторения букв можно двумя способами. Способ 1. Взять текст, найти в нем уникальные словоформы и анализировать их. Способ 2. Не искать в тексте уникальные слова, а сразу перейти к подсчету частоты повторения букв. Получаем частоту букв в русском тексте, а не в русских словах. Поэтому для решения задачи, мне пришлось проанализировать частоту букв для различных текстов и изменить данную в задаче частоту на другую, так как данная частота подходит только для неповторяющихся слов, а не для текста. Так же используя разную величину погрешности, можно более точно расшифровывать текст. Для работы написанной программы подходит только объемный текст, так как в нем должны присутствовать все буквы алфавита, поэтому текст можно брать только из файла.


Решение:

#include "stdafx.h"

#include <windows.h>

#include <string.h>

#include <conio.h>

#include <stdio.h>

#include <time.h>

#include <iostream>

using namespace std;

const int  KEY_ENTER = 13;                  //клавиши

const int  KEY_UP    = 72;

const int  KEY_DOWN  = 80;  

int  smenu=1;

int menu();

void DrawBorder(HANDLE);

void DrawMenu(HANDLE,int);

int tshifr();

void main()

{

 setlocale(0,"rus");

 int choose;  // Выбранный пункт меню

 system("cls");

 while (1)

  {

   choose = menu();

   switch (choose)

    {

     case 1:

      system("cls");

      tshifr();

      break;

     case 2:

      exit(18);

    }

  }

 return;

}

// Выбор пункта меню

int menu()

{

system("cls");

HANDLE display;

display = GetStdHandle(STD_OUTPUT_HANDLE);

 DrawBorder(display); // Рисуем рамочку вокруг меню

// Опрос клавиш

int key=0;

DrawMenu(display,smenu); // Рисуем пункты меню

 while (key!=KEY_ENTER)

{

 key = getch();

 // Нажали вверх?

 if (key==KEY_UP)

 {

  // Переходим к предыдущему пункту меню,

  // если можем и перерисовываем меню

  if (--smenu<1)

   smenu=1;

  DrawMenu(display,smenu);

 }

 // нажали вниз?

 else if (key==KEY_DOWN)

 {

  // Переходим к следующему пункту меню,

  // если можем и перерисовываем меню

  if (++smenu>2)

   smenu=2;

  DrawMenu(display,smenu);

 }

}

return smenu;

}

void DrawBorder(HANDLE display)

{

// Определяем координаты рамки, цвет её, вид

const int left = 80/2-32/2;

const int top  = 20/2-6/2;

char ramka[2][33];

strcpy(ramka[0],"+------------------------------+");

strcpy(ramka[1],"|                              |");

 COORD position;

// Устанавливаем цвет и координаты

 position.X = left;

position.Y = top;

SetConsoleTextAttribute(display,FOREGROUND_GREEN|FOREGROUND_INTENSITY);

SetConsoleCursorPosition(display,position);

// выводим верхнюю часть рамки

printf("%s",ramka[0]);

// выводим середину

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

{

 position.X = left;

 position.Y++;

 SetConsoleCursorPosition(display,position);

 printf("%s",ramka[1]);

}

// выводим нижнюю часть

position.X = left;

 position.Y++;

SetConsoleCursorPosition(display,position);

 printf("%s",ramka[0]);

// Устанавливаем курсор в левый верхний угол

 position.X = 0;

position.Y = 0;

SetConsoleCursorPosition(display,position);

SetConsoleTextAttribute(display,FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);

return;

}

void DrawMenu(HANDLE dis,int select)

{

// Константы выбирающие место вывода на экран

 const int left = 80/2-32/2+1;

const int top  = 20/2- 6/2+1;

COORD pos;

char textmenu[2][31];

// Пункты меню5

strcpy(textmenu[0],"  1. Расшифровка              ");

 

strcpy(textmenu[1],"  2. Выход                    ");

 

// Вывод пунктов меню

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

{

 // В зависимости от выбранного пункта меню выставляем цвет

 if (select==i+1)

  SetConsoleTextAttribute(dis,BACKGROUND_GREEN);

 else

  SetConsoleTextAttribute(dis,FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY);

 // Выводим

 pos.X = left;

 pos.Y = top+i;

 SetConsoleCursorPosition(dis,pos);

 printf("%s",textmenu[i]);

 }

// Устанавливаем курсор в левый верхний угол

 pos.X = 0;

pos.Y = 0;

SetConsoleCursorPosition(dis,pos);

SetConsoleTextAttribute(dis,FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);

return;

}

int tshifr()

{

setlocale(LC_ALL, "rus");

int aa;

aa=0;

char ff[25], buf[100000];

FILE*lol;

 cout<<"Введите название файла: ";

 cin>>ff;

 lol=fopen(ff, "rt");

if(lol==NULL)

{

 printf("He удается открыть файл.\n");

 system("pause");

 exit(1);

}

while((buf[aa]=fgetc(lol))!=EOF)

{

 printf("%c", buf[aa]);

 aa++;

}

int ii;

float a,b,v,g,d,e,yo,zh,z,i,yi,k,l,m,n,o,p,r,s,t,y,f,x,c,ch,sh,sha,tv,bi,mz,ay,yu,ya;

a=b=v=g=d=e=yo=zh=z=i=yi=k=l=m=n=o=p=r=s=t=y=f=x=c=ch=sh=sha=tv=bi=ay=yu=ya=mz=0;

float shifr[34], alf[34];

alf[1]=0.067043804;

alf[2]=0.014601330;

alf[3]=0.029432001;

alf[4]=0.012690161;

alf[5]=0.027673725;

alf[6]=0.059399128;

alf[7]=0.0038987845;

alf[8]=0.0081033558;

alf[9]=0.012231480;

alf[10]=0.046020947;

alf[11]=0.0073388885;

alf[12]=0.023316260;

alf[13]=0.027215045;

alf[14]=0.025609663;

alf[15]=0.050378412;

alf[16]=0.085467473;

alf[17]=0.026144790;

alf[18]=0.035165507;

alf[19]=0.036388654;

alf[20]=0.061697248;

alf[21]=0.024157174;

alf[22]=0.0016818286;

alf[23]=0.0071859951;

alf[24]=0.0023698495;

alf[25]=0.010778992;

alf[26]=0.0056570601;

alf[27]=0.0019111689;

alf[28]=0.00030578702;

alf[29]=0.013683969;

alf[30]=0.017582754;

alf[31]=0.0041281246;

alf[32]=0.0079504624;

alf[33]=0.016588945;

for(ii=0;ii<aa;ii++)

{

 if((buf[ii]=='а')||(buf[ii]=='А'))

  a++;

 if((buf[ii]=='б')||(buf[ii]=='Б'))

  b++;

 if((buf[ii]=='в')||(buf[ii]=='В'))

  v++;

 if((buf[ii]=='г')||(buf[ii]=='Г'))

  g++;

 if((buf[ii]=='д')||(buf[ii]=='Д'))

  d++;

 if((buf[ii]=='е')||(buf[ii]=='Е'))

  e++;

 if((buf[ii]=='ё')||(buf[ii]=='Ё'))

  yo++;

 if((buf[ii]=='ж')||(buf[ii]=='Ж'))

  zh++;

 if((buf[ii]=='з')||(buf[ii]=='З'))

  z++;

 if((buf[ii]=='и')||(buf[ii]=='И'))

  i++;

 if((buf[ii]=='й')||(buf[ii]=='Й'))

  yi++;

 if((buf[ii]=='к')||(buf[ii]=='К'))

  k++;

 if((buf[ii]=='л')||(buf[ii]=='Л'))

  l++;

 if((buf[ii]=='м')||(buf[ii]=='М'))

  m++;

 if((buf[ii]=='н')||(buf[ii]=='Н'))

  n++;

 if((buf[ii]=='о')||(buf[ii]=='О'))

  o++;

 if((buf[ii]=='п')||(buf[ii]=='П'))

  p++;

 if((buf[ii]=='р')||(buf[ii]=='Р'))

  r++;

 if((buf[ii]=='с')||(buf[ii]=='С'))

  s++;

 if((buf[ii]=='т')||(buf[ii]=='Т'))

  t++;

 if((buf[ii]=='у')||(buf[ii]=='У'))

  y++;

 if((buf[ii]=='ф')||(buf[ii]=='Ф'))

  f++;

 if((buf[ii]=='х')||(buf[ii]=='Х'))

  x++;

 if((buf[ii]=='ц')||(buf[ii]=='Ц'))

  c++;

 if((buf[ii]=='ч')||(buf[ii]=='Ч'))

  ch++;

 if((buf[ii]=='ш')||(buf[ii]=='Ш'))

  sh++;

 if((buf[ii]=='щ')||(buf[ii]=='Щ'))

  sha++;

 if((buf[ii]=='ъ')||(buf[ii]=='Ъ'))

  tv++;

 if((buf[ii]=='ы')||(buf[ii]=='Ы'))

  bi++;

 if((buf[ii]=='ь')||(buf[ii]=='Ь'))

  mz++;

 if((buf[ii]=='э')||(buf[ii]=='Э'))

  ay++;

 if((buf[ii]=='ю')||(buf[ii]=='Ю'))

  yu++;

 if((buf[ii]=='я')||(buf[ii]=='Я'))

  ya++;

}

shifr[1]=a/aa;

shifr[2]=b/aa;

shifr[3]=v/aa;

shifr[4]=g/aa;

shifr[5]=d/aa;

shifr[6]=e/aa;

shifr[7]=yo/aa;

shifr[8]=zh/aa;

shifr[9]=z/aa;

shifr[10]=i/aa;

shifr[11]=yi/aa;

shifr[12]=k/aa;

shifr[13]=l/aa;

shifr[14]=m/aa;

shifr[15]=n/aa;

shifr[16]=o/aa;

shifr[17]=p/aa;

shifr[18]=r/aa;

shifr[19]=s/aa;

shifr[20]=t/aa;

shifr[21]=y/aa;

shifr[22]=f/aa;

shifr[23]=x/aa;

shifr[24]=c/aa;

shifr[25]=ch/aa;

shifr[26]=sh/aa;

shifr[27]=sha/aa;

shifr[28]=tv/aa;

shifr[29]=bi/aa;

shifr[30]=mz/aa;

shifr[31]=ay/aa;

shifr[32]=yu/aa;

shifr[33]=ya/aa;

int q;

char valf[34];

q=32;

float sum;

for(q=1;q<34;q++)

{

for(ii=1;ii<34;ii++)

{

 if((shifr[ii]-alf[q]<0.0002)&&(shifr[ii]-alf[q]>-0.0002))

 {

  if(q==1)

   valf[ii]='а';

  if(q==2)

   valf[ii]='б';

  if(q==3)

   valf[ii]='в';

  if(q==4)

   valf[ii]='г';

  if(q==5)

   valf[ii]='д';

  if(q==6)

   valf[ii]='е';

  if(q==7)

   valf[ii]='ё';

  if(q==8)

   valf[ii]='ж';

  if(q==9)

   valf[ii]='з';

  if(q==10)

   valf[ii]='и';

  if(q==11)

   valf[ii]='й';

  if(q==12)

   valf[ii]='к';

  if(q==13)

   valf[ii]='л';

  if(q==14)

   valf[ii]='м';

  if(q==15)

   valf[ii]='н';

  if(q==16)

   valf[ii]='о';

  if(q==17)

   valf[ii]='п';

  if(q==18)

   valf[ii]='р';

  if(q==19)

   valf[ii]='с';

  if(q==20)

   valf[ii]='т';

  if(q==21)

   valf[ii]='у';

  if(q==22)

   valf[ii]='ф';

  if(q==23)

   valf[ii]='х';

  if(q==24)

   valf[ii]='ц';

  if(q==25)

   valf[ii]='ч';

  if(q==26)

   valf[ii]='ш';

  if(q==27)

   valf[ii]='щ';

  if(q==28)

   valf[ii]='ъ';

  if(q==29)

   valf[ii]='ы';

  if(q==30)

   valf[ii]='ь';

  if(q==31)

   valf[ii]='э';

  if(q==32)

   valf[ii]='ю';

  if(q==33)

   valf[ii]='Я';

 }

}

}

for(q=0;q<aa;q++)

{

if((buf[q]=='а')||(buf[q]=='н')||(buf[q]=='ъ')||(buf[q]=='Ж')||(buf[q]=='З')

 ||(buf[q]=='б')||(buf[q]=='о')||(buf[q]=='ы')||(buf[q]=='И')||(buf[q]=='Ф')

 ||(buf[q]=='в')||(buf[q]=='п')||(buf[q]=='ь')||(buf[q]=='Й')||(buf[q]=='Х')

 ||(buf[q]=='г')||(buf[q]=='р')||(buf[q]=='э')||(buf[q]=='К')||(buf[q]=='Ц')

 ||(buf[q]=='д')||(buf[q]=='с')||(buf[q]=='ю')||(buf[q]=='Л')||(buf[q]=='Ч')

 ||(buf[q]=='е')||(buf[q]=='т')||(buf[q]=='я')||(buf[q]=='М')||(buf[q]=='Ш')

 ||(buf[q]=='ё')||(buf[q]=='у')||(buf[q]=='А')||(buf[q]=='Н')||(buf[q]=='Щ')

 ||(buf[q]=='ж')||(buf[q]=='ф')||(buf[q]=='Б')||(buf[q]=='О')||(buf[q]=='Ъ')

 ||(buf[q]=='з')||(buf[q]=='х')||(buf[q]=='В')||(buf[q]=='П')||(buf[q]=='Ы')

 ||(buf[q]=='и')||(buf[q]=='ц')||(buf[q]=='Г')||(buf[q]=='Р')||(buf[q]=='Ь')

 ||(buf[q]=='й')||(buf[q]=='ч')||(buf[q]=='Д')||(buf[q]=='С')||(buf[q]=='Э')

 ||(buf[q]=='к')||(buf[q]=='ш')||(buf[q]=='Е')||(buf[q]=='Т')||(buf[q]=='Ю')

 ||(buf[q]=='л')||(buf[q]=='щ')||(buf[q]=='Ё')||(buf[q]=='У')||(buf[q]=='Я')

 ||(buf[q]=='м'))

{

 if((buf[q]=='а')||(buf[q]=='А'))

  printf("%c",valf[1]);

 if((buf[q]=='б')||(buf[q]=='Б'))

  printf("%c",valf[2]);

 if((buf[q]=='в')||(buf[q]=='В'))

  printf("%c",valf[3]);

 if((buf[q]=='г')||(buf[q]=='Г'))

  printf("%c",valf[4]);

 if((buf[q]=='д')||(buf[q]=='Д'))

  printf("%c",valf[5]);

 if((buf[q]=='е')||(buf[q]=='Е'))

  printf("%c",valf[6]);

 if((buf[q]=='ё')||(buf[q]=='Ё'))

  printf("%c",valf[7]);

 if((buf[q]=='ж')||(buf[q]=='Ж'))

  printf("%c",valf[8]);

 if((buf[q]=='з')||(buf[q]=='З'))

  printf("%c",valf[9]);

 if((buf[q]=='и')||(buf[q]=='И'))

  printf("%c",valf[10]);

 if((buf[q]=='й')||(buf[q]=='Й'))

  printf("%c",valf[11]);

 if((buf[q]=='к')||(buf[q]=='К'))

  printf("%c",valf[12]);

 if((buf[q]=='л')||(buf[q]=='Л'))

  printf("%c",valf[13]);

 if((buf[q]=='м')||(buf[q]=='М'))

  printf("%c",valf[14]);

 if((buf[q]=='н')||(buf[q]=='Н'))

  printf("%c",valf[15]);

 if((buf[q]=='о')||(buf[q]=='О'))

  printf("%c",valf[16]);

 if((buf[q]=='п')||(buf[q]=='П'))

  printf("%c",valf[17]);

 if((buf[q]=='р')||(buf[q]=='Р'))

  printf("%c",valf[18]);

 if((buf[q]=='с')||(buf[q]=='С'))

  printf("%c",valf[19]);

 if((buf[q]=='т')||(buf[q]=='Т'))

  printf("%c",valf[20]);

 if((buf[q]=='у')||(buf[q]=='У'))

  printf("%c",valf[21]);

 if((buf[q]=='ф')||(buf[q]=='Ф'))

  printf("%c",valf[22]);

 if((buf[q]=='х')||(buf[q]=='Х'))

  printf("%c",valf[23]);

 if((buf[q]=='ц')||(buf[q]=='Ц'))

  printf("%c",valf[24]);

 if((buf[q]=='ч')||(buf[q]=='Ч'))

  printf("%c",valf[25]);

 if((buf[q]=='ш')||(buf[q]=='Ш'))

  printf("%c",valf[26]);

 if((buf[q]=='щ')||(buf[q]=='Щ'))

  printf("%c",valf[27]);

 if((buf[q]=='ъ')||(buf[q]=='Ъ'))

  printf("%c",valf[28]);

 if((buf[q]=='ы')||(buf[q]=='Ы'))

  printf("%c",valf[29]);

 if((buf[q]=='ь')||(buf[q]=='Ь'))

  printf("%c",valf[30]);

 if((buf[q]=='э')||(buf[q]=='Э'))

  printf("%c",valf[31]);

 if((buf[q]=='ю')||(buf[q]=='Ю'))

  printf("%c",valf[32]);

 if((buf[q]=='я')||(buf[q]=='Я'))

  printf("%c",valf[33]);

}

else printf("%c",buf[q]);

}

system("pause");

return 0;

}

Описание:

Включаем необходимые библиотеки, для начала вводим массив alf  с частотами появления русских букв. Текст с помощью цикла while записываем в массив buf, одновременно определяя количество символов в тексте. Далее создаем переменную для каждой буквы, и считаем сколько раз одна и та же буква повторяется в зашифрованном тексте, потом делим каждую переменную на общее количество букв, и получаем частоту появления зашифрованных букв. Эти частоты заносятся в массив shifr.  Далее используя двойной цикл, перебираем частоты букв и зашифрованных букв, и сравниваем с помощью функции if((shifr[ii]-alf[q]<0.0002)&&(shifr[ii]-alf[q]>-0.0002)). Если частоты близки, то данный двойной цикл сопоставляет обычную букву с зашифрованной. Перебираем так весь алфавит и записываем исправленный алфавит в массив valf. Далее с помощью цикла for перебираем весь текст в массиве buf, и если попадается буква, то она изменяется на расшифрованную из массива valf , если попадается любой другой символ, то он переписывается. Таким образом мы получаем расшифрованный текст.

Список используемой литературы:

www.Spectator.ru




1. Истоки способностей и дарования детей ~ на кончиках их пальцев
2. Внутрішня енергія
3. АВ случае одинаковых ставок налога БПри продаже товаров налогоплательщиком В
4. THE INTERNTIONL TOP MODEL 2014
5. сплющена у полюсов что вызвано вращением Земли вокруг своей оси
6. Модуль- Мой объект Образовательные блоки- Общая информация об аэропорту и его использовании на Играх;
7. Культорологическая роль экспозиции центрального музея древнерусской культуры и искусства им Андрея Рублева Спасо-Андронниковского монастыря
8. Налогообложение прибыли предприятия
9. тема Основным нормативным актом регулирующим отношения в сфере налогооблажения является налоговый кодекс.html
10. 24 ноября 2013 г