Лабораторна робота №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>
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.