Написание программы, которая на основе входного текстового файла формирует таблицу частот символов (Лабораторная робота № 2)

Страницы работы

Содержание работы

Лабораторна робота №2

Виконала: ст. гр. Ін-91/2

Татарченко А. С.

Завдання №1.

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

Алфавит русского языка.

Входные данные в программу передаются, как параметры командной строки.

Результирующая таблица должна выводиться в отсортированном по убыванию частот виде.

Кодпрограми:

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <fstream>

#include <iostream>

#include <iomanip>

#include <math.h>

#define ALF_VOL 100 //размер алфавита

#define OUT "rasp.txt" //файл для вывода закона распределения

#define IN "MESS.TXT" //входящее сообщение

#define st (int)'А'

#define fin (int)'Я'

using namespace std;

struct node { //cтруктура для хранения закона распределения частот

              char sym; //символ алфавита

              float pro; //вероятность символа

}s[ALF_VOL];

void sort(int n) //сортируем вероятности появления символов

{

              node temp;

              for(int j=1;j<=n-1;j++) {

                            for(int i=0;i< n-1;i++) {

                                           if(s[i].pro<s[i+1].pro) { //по убыванию

                                                         temp.pro=s[i].pro;

                                                         temp.sym=s[i].sym;

                                                         s[i].pro=s[i+1].pro;

                                                         s[i].sym=s[i+1].sym;

                                                         s[i+1].pro=temp.pro;

                                                         s[i+1].sym=temp.sym;

                                           }

                            }

              }

              return;

}

int build(char* in_f) //строим закон распределения

{

              char c;

              int n=0,fl=0;

              double tot=0;

              ifstream in(in_f/*.c_str()*/);

              if ( !in )  //проверяем открылся ли файл

         cout <<"can`t open ";

              while(in.get( c )) {     //считываем по 1 символу до конца файла

                            fl=0;

                            c=toupper(c); //приводим все символы к верхнему регистру

                            if(c >= st && c <= fin)

                            {

                            for(int i=0; i<n; i++)//смотрим читали ли мы уже такую букву

                                           if(s[i].sym==c)      {  //читали

                                                         s[i].pro++;

                                                         fl=1; //флаг

                                           }

                            if(!fl) { //не читали, записываем

                                           s[n].sym=c;

                                           s[n].pro=1;

                                           n++; //номер текущего элемента

                            }

                            tot+=1; //общее кол-во символов в сообщ

                            }}

              for(int i=0; i<n; i++) //рассчитываем вероятность появления для каждого символа

                            s[i].pro/=tot;

              in.close();

              return n; //количество уникальных символов

}

void print(int n, char* out_f) //выводим в файл символ - вероятность

{

              ofstream out(out_f/*.c_str()*/);

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

                            if(i)

                                           out<<"\r\n";

                            out<<s[i].sym<<" "<<s[i].pro;

              }

              out.close();

              return;

}

int main(int argc, char* argv[])

{

              setlocale(LC_ALL,".1251"); //работаем с русским алфавитом

              int n=build(argv[1]);  //количество записей в структуре закона распределния

              sort(n);

              print(n,argv[2]);

              cin>>n;

              return 0;

}

Приклад роботи програми:

Завдання №2.

Написать программу, которая реализует следующие шифры простой замены:

-  Алгоритм Цезаря с ключем-цифрой;

-  -//- ключем-словом

Программа должна включать алгоритм кодирования и декодирования.

Алгоритмы должны быть представлены в виде функций. Управление ведется через параметры командной строки.

Кодпрограми:

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <fstream>

#include <iostream>

Похожие материалы

Информация о работе

Предмет:
Криптология
Тип:
Отчеты по лабораторным работам
Размер файла:
252 Kb
Скачали:
0