Отчёт (1080956)

Файл №1080956 Отчёт (Готовые ЛР и ДЗ (ИУ5))Отчёт (1080956)2018-01-11СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

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

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

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

Кафедра ИУ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;

}



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



Характеристики

Тип файла
Документ
Размер
140,48 Kb
Тип материала
Высшее учебное заведение

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов лабораторной работы

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