Отчёт (Готовые ЛР и ДЗ (ИУ5))

2018-01-11СтудИзба

Описание файла

Файл "Отчёт" внутри архива находится в следующих папках: Готовые ЛР и ДЗ (ИУ5), отчёты, работа 10-11. Документ из архива "Готовые ЛР и ДЗ (ИУ5)", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "информатика" в общих файлах.

Онлайн просмотр документа "Отчёт"

Текст из документа "Отчёт"

Московский государственный технический

университет им. Н.Э. Баумана.

Факультет «Информатика и управление»

Кафедра ИУ5. Курс «Основы информатики»

Отчет по лабораторной работе №10-11

«Обработка символьных строк»

Выполнил:

Проверил:

студент группы ИУ5-14

преподаватель каф. ИУ5

Шевченко Роман

Папшев И.С.

Подпись и дата:

Подпись и дата:

г. Москва, 2008 г.



Постановка задачи

Провести кодирование и декодирование текста (массива символов) при помощи кода Цезаря с переменным сдвигом по таблице ASCII-кодов. Величина сдвига для каждой позиции в исходном тексте - сумма (по модулю 256) кодов символов слова кодового блокнота, стоящего в блокноте на той же позиции. Если кодовый блокнот имеет слов меньше, чем количество символов в исходном тексте, то по исчерпании слов в нём перейти к первому слову и продолжить.

Исследовать повторяемость символов в закодированном тексте (сколько каких кодов одного и того же исходного символа получено) в зависимости от кодового блокнота и длины исходного текста. Результаты исследования представить в виде таблицы (продумать формат таблицы). Исследование и вывод таблицы результатов следует выполнять в режиме диалога, последовательно вычисляя и выводя результаты для запрашиваемого символа. Статистические данные хранить в массиве int stat[256], Для большей достоверности статистических результатов в качестве исходного текста и кодового блокнота использовать текстовые файлы размером около 1 Кбайта.



Разработка алгоритма

На основе кодового блокнота целесообразно сначала сформировать по заданному правилу целочисленный массив ключей, который затем использовать при кодировании. Эти действия можно оформить в виде отдельной функции. Для кодирования текста можно использовать формулу: x= (y + k)%n

Где:

x – закодированный символ;

y – кодируемый символ;

k – ключ;

n – алфавит(в нашем случае 256);

Так же в случае если получаемый код по ASCII отрицательный, его нужно перевести в положительный.



Описание входных, выходных и вспомогательных данных:

Входные данные:



Выходные данные:

double integral – полученое значение интеграла;

double n - число отрезков, при котором достигнута требуемая точность;

Вспомагательные данные:

double xn, xk – границы интервала интегрирования;

double eps – точность;

double intr_arr[5][3] – хранит вычисленную информацию для метода прямоугольников;

double ints_arr[5][3] - хранит вычисленную информацию для метода Дарбу-Римана;

double dx, x - длина отрезка по x, значение переменной x;

double sc, sn –, вычисленная на прошлом шаге сумма, новая сумма;

double s1, s2, y1, y2 – верхняя и нижняя суммы, высота по y справа и слева;

Текст программы.

#include <iostream>

#include <fstream>

#include <iomanip>

using namespace std;

class bukv_inform{

char name; //буква

int k; //cколькими вариантами закобировался символ

int inform[257][2]; //хранит ASCII-код кодирующих символов и то,

//сколько раз он кодирует введёный символ

char sootvsimvoj[256]; //хранит кодирующие символы

public:

void vvod(char *text, char *codtext, int n); //вычисление информации по введёному символу

void shov(); //вывод таблици

};

void bukv_inform::vvod(char *text, char *codtext, int n)

{

cout <<"Введите интересующий вас символ: ";

cin >>name;

bool t;

k= 0;

int cod;

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

if(text[i] == name){

t= 1;

cod= (int)codtext[i];

if(cod < 0) cod= 256+cod;

for(int j= 0; j < k; j++){

if(cod == inform[j][0]) {

inform[j][1]++;

t= 0;

break;

}

}

if(t){

inform[k][0]= cod;

inform[k][1]= 1;

sootvsimvoj[k]= codtext[i];

k++;

}

}

}

}

void bukv_inform::shov()

{

cout <<"\n № " <<"ASCII-код " <<"Кодовый символ " <<"В программе встречается\n";

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

cout <<setw(3) <<i <<setw(9) <<inform[i][0] <<setw(13);

if(inform[i][0] == 10) cout <<"\\n" <<setw(23)<<inform[i][1] <<"\n";

else if(inform[i][0] == 9) cout <<"\\t" <<setw(23)<<inform[i][1] <<"\n";

else if((inform[i][0] == 149)||(inform[i][0] == 7)) cout <<"\\r" <<setw(23)<<inform[i][1] <<"\n";

else if(inform[i][0] == 13) cout <<"\\f" <<setw(23)<<inform[i][1] <<"\n";

else cout <<sootvsimvoj[i] <<setw(23)<<inform[i][1] <<"\n";

}

}

int main()

{

setlocale(0, "russian");

ifstream in("Input.in");

if(!in){

cout <<"Невозможно открыть файл./n";

system("Pause");

return 1;

}

ofstream out("Output.out");

if(!out){

cout <<"Невозможно открыть файл./n";

system("Pause");

return 1;

}

in.unsetf(ios::skipws); //чтоб пробелы и др. подобные символы считывались из файла

bukv_inform bukva; //Обыявляю объект класса bukv_inform

int cod; //переменная для хранения кода отдельного символа

//---------------------------Создание и заполнение массива---------------------------

int n= 2200;

char *text;

try{

text= new char [n];

}catch(bad_alloc xa){

cout <<"Ошибка.\n";

system("Pause");

return 1;

}

for(n= 0; !in.eof(); n++) //символы считываются пока не обнаружится конец файла, заодно ведётся

//подсчёт считанных элеметов

in >>text[n];

n--;

//---------------------------Cоздание массива ключей---------------------------------

int *scod;

scod= new int [n]; //массив ключей(ключ - сумма кодов одного слова)

scod[0]= 0;

for(int i=0, j= 0;j < n;i= i!=n ? i+1 : 0){

if(text[i] == ' '){

j++;

scod[j]= 0;

}else{

cod= (int)text[i];

if(cod < 0) cod= 256+cod;

scod[j]+= cod;

}

}

//------------------------------------Кодирую текст----------------------------------

char *codtext;

codtext= new char [n]; //закодированный текст

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

cod= (int)text[i];

if(cod < 0) cod= 256+cod;

codtext[i]=(char)((cod+scod[i])%256);

}

//--------------------------Вывод закодированого массива(на экран)--------------------

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

cout <<codtext[i];

cout <<"\n\n";

//--------------------------------------Декодирую текст-------------------------------

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

cod= (int)codtext[i];

if(cod < 0) cod= 256+cod;

text[i]=(char)((cod-scod[i])%256);

}

//----------------------------Вывод декодированого массива(на экран)----------------

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

cout <<text[i];

cout <<"\n\n";

//------------------------------Вывод закодированого массива(в файл)----------------

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

out <<codtext[i];

//-------------------------------------Интерактивная часть---------------------------

char ex;

do{

bukva.vvod(text, codtext, n);

bukva.shov();

cout <<"Выйти?";

cin >>ex;

}while(ex != 'y');

//-------------------------------------------The End---------------------------------

delete [] text;

delete [] codtext;

return 0;

}



Анализ результатов



Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5168
Авторов
на СтудИзбе
438
Средний доход
с одного платного файла
Обучение Подробнее