43150

Разработка алгоритмического и программного обеспечения для работы с текстовыми файлами

Курсовая

Информатика, кибернетика и программирование

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

Русский

2013-11-03

351 KB

5 чел.

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

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

Воронежская государственная лесотехническая академия

Кафедра вычислительной техники и информационных систем

Курсовая работа

По дисциплине «Основы программирования и алгоритмизации»

На тему:

«Разработка алгоритмического и программного обеспечения для работы с текстовыми файлами»

Студент ___________ группы

                      (номер группы)

Руководитель,

_________________________________

                 (ученая степень, ученое звание)

___________

(подпись)

___________

(подпись)

______________

       (Фамилия И. О.)

______________

       (Фамилия И. О.)

Воронеж 2012

ЗАДАНИЕ

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


СОДЕРЖАНИЕ


ВВЕДЕНИЕ

Язык программирования Си был разработан в лабораториях Bell Labs в период с 1969 по 1973 годы. Согласно Ритчи, самый активный период творчества пришёлся на 1972 год. Язык назвали «Си» (C - третья буква латинского алфавита), потому что многие его особенности берут начало от старого языка «Би» (B - вторая буква латинского алфавита). 

С++ - компилируемый статически типизированный язык общего назначения. Являясь одним из самых популярных языков программирования, C++ широко используется для разработки программного обеспечения. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (например, видео игры).

Цель работы

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

Задачи работы

  1.  Создать файл 1, записать текст.
  2.  Создать пустой файл 2.
  3.  Найти самую длинную строку в файле 1, и посчитать количество символов этой строки. Посчитать количество символов остальных строк. Найти количество пробелов, которые нужны для вставки перед строками отличных от самой длинной строки.
  4.  Результаты вывести на экран.
  5.  Так же результат работы записать в фал 2.


1 Описание приложения

1.1 Описание структуры

1.1.1 Описание типа данных

1. Символьный тип данных – Char.

В памяти компьютера тип данных char представляется, как и другие целые типы, числом, однако в действительности это число является кодом символа. Преобразование символа в число и обратно происходит автоматически в соответствии с таблицей кодировки символов ASCII, представленной в приложении «Таблица ASCII-кодов». Например, код символа «равно» (=) представляется в памяти компьютера как число 61 и занимает один байт. При его обозначении в качестве простого символа он должен быть заключен в апострофы. На практике тип char довольно редко используется для хранения отдельных символов и значительно чаще для хранения строк, являющихся массивами символов.

2. Целочисленный тип данных – int.

Тип int является наиболее используемым целым типом С и С++. Единственное, что можно сказать определенно, это то, что число типа int не короче числа типа short и не длиннее числа типа long. Этот тип используется для объявления положительных или отрицательных целых чисел. В 16-разрядных системах числа типа int могут принимать значения от -32 768 до 32 767 и занимают 2 байта. В 32-разрядных системах числа этого типа занимают 4 байта и принимают те же значения, что и длинные целые, поэтому существует потенциальная опасность того, что в 32-разрядных системах не возникнет ошибки превышения возможного значения.
В связи с этим, несмотря на то, что тип int является наиболее естественным для процессора и требуется при использовании многих библиотечных функций, программисты стараются не задавать этот тип в сложных и достаточно важных программах.


1.1.2 Описание файлов по строковым переменным

1. Stdlib.h

Stdlib.h - заголовочный файл стандартной библиотеки языка Си, который содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие. Заголовок вполне совместим с C++ и известен в нём как cstdlib. Название «stdlib» расшифровывается как «standard library» (стандартная библиотека).

2. String

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

3. iostream

iostream - заголовочный файл с классами, функциями и переменными для организации ввода-вывода в языке программирования C++. Он включён в стандартную библиотеку C++. Название образовано от Input/Output Stream («поток ввода-вывода»). В языке C++ и его предшественнике, языке программирования Си, нет встроенной поддержки ввода-вывода, вместо этого используется библиотека функций. iostream управляет вводом-выводом, как и stdio.h в Cи. iostream использует объекты cin, cout, cerr и clog для передачи информации в и из стандартных потоков ввода, вывода, ошибок (без буферизации) и ошибок (с буферизацией) соответственно. Являясь частью стандартной библиотеки C++, эти объекты также являются частью стандартного пространства имён - std.

4. vcl.h

VCL предоставляет огромное количество готовых к использованию компонентов для работы в самых разных областях программирования, таких, например, как интерфейс пользователя (экранные формы и элементы управления - т. н. «контролы», «контроли»), работа с базами данных, взаимодействие с операционной системой, программирование сетевых приложений и прочее.


1.1.3 Работа с файлами складывается из трех шагов.

1. Файл открывается. Это означает, что программа "захватывает" заданный по имени файл, сообщает Windows, что далее она будет с ним работать. Данный шаг нужен, чтобы не возникало конфликтов, когда несколько программ одновременно хотят записывать информацию в один и тот же файл. Правда, считывать данные из файла, очевидно, допустимо одновременно множеством программ, поэтому в операции открытия файла обычно уточняется, что файл открывается "на чтение" (считывание информации, которая не меняется) либо "на запись" (данные в файле модифицируются).

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

2. Ведется работа с файлом. Из него данные либо считываются, либо в него записываются.

3. Файл закрывается. После этой операции он снова доступен другим программам для обработки.

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

Текстовые файлы относятся к файлам последовательного доступа, т.к. единицей хранения информации в них являются строки переменной длины. Каждая строка заканчивается специальным признаком, обычно его функцию выполняет пара символов 0D0A – "возврат каретки" и "перевод строки". Самым важным преимуществом текстовых файлов является универсальность формата хранения информации – числовые данные в символьном виде доступны на любом компьютере, при необходимости их может прочитать и человек. Однако это преимущество имеет и обратную сторону медали – преобразование числовых данных из машинных форматов в символьный вид при выводе и обратное преобразование при вводе сопряжено с дополнительными расходами. Кроме того, объем числовых данных в символьном формате занимает в несколько раз больше памяти по сравнению с их машинным представлением.

Текстовый файл может быть создан путем записи на диск символьных и/или числовых данных по заданному формату с помощью оператора fprintf. В качестве признака конца строки здесь заносятся те же самые байты0D0A, которые появляются на диске в результате вывода управляющего символа \n.

Для инициализации текстового файла необходимо завести указатель на структуру типа FILE и открыть файл по оператору fopen в одном из нужных режимов – "rt" (текстовый для чтения), "wt" (текстовый для записи), "at"(текстовый для дозаписи в уже существующий набор данных):

FILE *f1;

   f1=fopen(имя_файла, "режим")

Работаем с потоками на C++ ofstream и ifstream. Используем потоковый ввод/вывод.

Потоки для работы с файлами создаются как объекты следующих классов:

ofstream - для вывода (записи) данных в файл;

ifstream - для ввода (чтения) данных из файла;

fstream - для чтения и для записи данных (двунаправленный обмен).

Чтобы использовать эти классы, в текст программы необходимо включить дополнительный заголовочный файл fstream.h. После этого в программе можно определять конкретные файловые потоки, соответствующих типов (объекты классов ofstream, ifstream, fstream), например, таким образом:

ofstream outFile; // Выходной файловый поток.

ifstream inFile; // Входной файловый поток.

fstream ioFile; // Файловый поток для ввода и вывода.

Создание файлового потока (объекта соответствующего класса) связывает имя потока с выделяемым для него буфером и инициализирует переменные состояния потока. Так как перечисленные классы файловых потоков наследуют свойства класса ios, то и переменные состояния каждого файлового потока наследуются из этого базового класса. Так как файловые классы являются производными от классов ostream (класс ofstream),istream (класс ifstream), stream (класс fstream), то они поддерживают описанный в предыдущих шагах форматированный и бесформатный обмен с файлами. Однако прежде чем выполнить обмен, необходимо открыть соответствующий файл и связать его с файловым потоком.

Открытие файла в самом общем смысле означает процедуру, информирующую систему о тех действиях, которые предполагается выполнять с файлом. Существуют функции стандартной библиотеки языка Сдля открытия файлов fopen(), open(). Но работая с файловыми потоками библиотеки ввода-вывода языка С++, удобнее пользоваться компонентными функциями соответствующих классов.

Создав файловый поток, можно "присоединить" его к конкретному файлу с помощью компонентной функции open(). Функция open() унаследована каждым из файловых классов ofstream, ifsream, fstream от классаfstreambase. С ее помощью можно не только открыть файл, но и связать его с уже определенным потоком. Формат функции:

#include <fstream.h>
#include <conio.h>
#include <iostream.h>
#include <fcntl.h>
#include <io.h>

char k;
--------------------------------------
char god[100];
char kolvo[100];
main()
--------------------------------------
clrscr(); \\
очищает текущее текстовое окно
--------------------------------------
cout<<"\n
Количество томов : "; \\ функция вывода на экран
cin>>kolvo; \\
функция считывания

Функция length. Данная функция предназначена для нахождения длины строки. Используется через оператор присваивания какой-либо переменной.

if (str.length()>max) max=str.length();      //если длина строки больше,

переопределяем максимум.


1.2 Ход решения

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


2 Алгоритм решения

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


2.1 Руководство пользователя

Открывается приложение work with files.exе двойным щелчком по иконке. Запускается  приложение. Пользователю выдается сообщение о предложении ввести имя входного файла (имя файла необходимо вводить с расширением). Пользователь вводит имя файла, нажимает Enter. Затем пользователю необходимо будет ввести имя второго файла (так же указывая расширение).После ввода данных на консоль будет выведено результат работы.

2.2 Примеры работы программы

Ввод имен файлов, входного и выходного:

  1.  

Ввод имени начального файла

Рис. 1 Предложение ввести имя файла

Рис. 1.2 При нахождении первого файла программой, просьбы ввести имя второго файла


Рис. 1.3 При успешном выполнении операции, выводится результат работы

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

  1.  

Результат работы в текстовых файлах:

Рис. 2.1 Начальный вид текста в первом текстовом файле

Рис. 2.2 Требуемый результат, центрированный текст

во втором текстовом файле

  1.  

В случае неправильного ввода файла с требуемым расширением, или не нахождения файла:

Рис. 3.1 Неправильный ввод


Рис. 3.2 Файл не найден

3 Анализ работы

Программа работает исправно и выполняет все действия указанные в поставленной задаче. Была разработка алгоритмического и программного обеспечения для работы с текстовыми файлами.


ЛИСТИНГ ПРОГРАММЫ

#include <fstream.h>

#include <conio.h>

#include <iostream.h>

#include <vcl.h>

void main(void)

{

char *pr = new char[100];//строка из файла

string str;

string spc;//строка добавляемых пробелов

char *name1=new char[80];//имена файлов

char *name2=new char[80];

int i,//счетчик

   n,  //количество добавляемых пробелов

   max;//максимальная длина строки файла

 SetConsoleCP(1251);//установка поддержки русских букв

 SetConsoleOutputCP(1251);

 cout << "Vvedite imya vhodnogo faila : ";

 cin >> name1;

 ifstream f;

 f.open(name1,fmOpenRead);//открываем файл для чтения

 if (f.fail()) //если файла нет

   {

     cout << "Fail ne nayden\n";

     getch();

     return;

   }

 cout << "Vvedite imya vahodnogo faila :  ";

 cin >> name2;

 ofstream g(name2);//открыли файл для записи

 max=0;//максимальная длина строки начальная

 cout << "Ishodnyy tekst" << "\n";

 while (! f.eof())  //пока не конец файла

   {

     f.getline(pr,100);//читаем строку

     str=pr;

     cout << str << "\n";//вывод на экран

     if (str.length()>max) max=str.length();//если длина строки больше, переопределяем максимум

   }

 f.close();//закрыли файл

 f.clear(0);//очистили буфер

 f.open(name1,fmOpenRead);  //вновь открыли для чтения

 cout << "Centrirovannyy tekst" << "\n";

 while (! f.eof()) //пока не конец файла

   {

     f.getline(pr,100);//читаем строку

     str=pr;

     n=(max-str.length())/2;//определяем количество пробелов

     spc=" ";//формирование строки пробелов

     for (i=1;i<=n;i++)

       spc=spc+" ";//добавляем пробел

     str=spc+str;//добавляем пробелы в начало строки

     cout << str << "\n";//вывод на экран

     str=str+"\n";

     g.write(str.c_str(),str.length());//запись в файл

   }

 f.close();//закрыли файлы

 g.close();

 getch();

}


ЗАКЛЮЧЕНИЕ

Программа полностью реализована для работ с файлами, и работы с содержанием самого файла, которое выводится в консоль С++ Builder 6. Подробно изучил навыки работы с файлами, функции ввода и вывода на экран, функции считывания и записи данных в файлы. В составлении программы были использованы циклические операторы, операторы условия и другие. Использована функция для нахождения длины строки length. Программа читает текст из разбитого на строки текстового файла, и записывает в выходной файл считанный раннее текст с выравниванием по центру.


СПИСОК ЛИТЕРАТУРЫ

  1.  Джаррод Холингворт, Боб Сворт, Марк Кэшмэн, Поль Густавсон Borland C++ Builder 6. Руководство разработчика = Borland C++ Builder 6 Developer’s Guide. — М.: «Вильямс», 2004. — С. 976
  2.  Страуструп Б. Программирование: принципы и практика использования C++, исправленное издание = Programming: Principles and Practice Using C++. — М.: «Вильямс», 2011. — С. 1248
  3.  Керниган Б., Ритчи Д. Язык программирования Си = The C programming language. — 2-е изд. — М.: Вильямс, 2007. — С. 304. 
  4.  Герберт Шилдт. C: полное руководство, классическое издание = C: The Complete Reference, 4th Edition. — М.: Вильямс, 2010. — С. 704.
  5.  Кочан С. Программирование на языке Си = Programming in C. — 3-е изд. — М.: Вильямс, 2006. — С. 496. 


 

А также другие работы, которые могут Вас заинтересовать

26331. Итальянское Возрождение 25.17 KB
  К раннему периоду его творчества относится: большое Распятие в церкви Санта Мария Новелла во Флоренции ; Мадонна ди Сан Джорджио Алла Коста Флоренция; Мадонна из частной коллекции. Ко времени ухода из мастерской Вероккио исследователи относят Мадонну с цветком Мадонна Бенуа . Его основные творения в области живописи: Пейзаж долины реки Арно Крещение Христа Благовещение портрет Жинервы де Бенчи Мадонна в скалах дама с горностаем Тайная вечеря Битва при Ангиари Леда с лебедем ...
26332. Испанское Возрождение 38.32 KB
  Вот почему даже такие передовые люди Испании как Сервантес и Лопе де Вега не порывают до конца с католической традицией. К этому направлению принадлежал крупнейший поэт раннего испанского Возрождения Гарсиласо де ла Вега 1503 1536. пасторальный мотив введённый в испанскую литературу Гарсиласо де ла Вега также получил развитие в форме романа. Общественное содержание испанской драмы от Лопе де Вега до Кальдер она составляет полная напряжённого драматизма борьба абсолютной монархии с вольностями старой Испании добытыми испанским...
26333. Северное Возрождение 27.83 KB
  Актуальность этой темы определяется огромной ролью которую Возрождение сыграло в формировании современной западной культуры. Название Нидерланды Нижние земли получил в средние века комплекс территорий расположенных в низовьях Рейна по побережью Северного моря и вдоль рек Шельды и Мааса. После отречения Карла V от престола страна в составе 17 провинций была унаследована в 1556 г. Распространение Реформации в том числе кальвинистской вызвало в Нидерландах при Филиппе II воинствующем католике особенно жестокие преследования...
26334. Английское Возрождение 38.59 KB
  Культура Возрождения с её идейной основой философией и эстетикой гуманизма возникает прежде всего на итальянской почве. Неудивительно что влияние Италии можно заметить у всех английских писателей эпохи Возрождения. Широкий народный фон английского Возрождения его основное достоинство источник таких достижений XVI столетия как Утопия Томаса Мора и театр Шекспира. Вслед за официальной реформацией поднимается новая волна религиозного фанатизма движение пуритан враждебных жизнерадостному светскому духу Возрождения гуманистической...
26335. Исторические предпосылки и характерные черты эпохи Просвещения 18.1 KB
  Исторические предпосылки и характерные черты эпохи Просвещения. Исторические предпосылки: Характерные черты эпохи Просвещения: 18 век важный этап в эволюции западноевропейской культуры. Идеология Просвещения возникла в 17 веке ее родоначальником считается английский философ Д. Представители Просвещения в своих политических философских культурологических взглядах отстаивали могущество разума и свет знаний которые должны победить тьму невежества заблуждений и предрассудков.
26336. Развитие естественнонаучной мысли эпохи Просвещения 12.77 KB
  Развитие естественнонаучной мысли эпохи Просвещения. В истории философской мысли 18 век обычно характеризуется как век Просвещения. Оптимизм Просвещения выражает менталитет крепнувшей буржуазии не случайно родиной Просвещения стала Англия раньше других стран вставшая на путь капиталистического развития. Развитие Просвещения в философии тесно связано с социальнополитическими идеями становлением идеологии.
26337. Английское Просвещение 33.19 KB
  Для просветителей же XVIII в. Философия Основоположник свободомыслия XVIII в. В течение всего XVIII в. Признание ощущения источником нашей мысли великая идея получившая дальнейшее развитие в материализме XVIII в.
26338. Французское Просвещение 48.01 KB
  Жан Жак Руссо Новым этапом в развитии французского Просвещения XVIII в. была деятельность Жан Жака Руссо 1712 1778 идеолога революционной мелкой буржуазии. значительное влияние на якобинцев провозгласивших Руссо своим идейным предшественником. Пройдя суровую жизненную школу Руссо с детства видел страдания народа.
26339. Американское Просвещение 40.96 KB
  Крупнейшие представители американского Просвещения: Франклин Джефферсон Пэйн и другие являются вместе с тем активными революционными деятелями руководящими фигурами в современной им политической борьбе. Представителями радикального якобинского крыла в американском деизме были Томас Пэйн и Этан Аллен. Близкий к взглядам Аллена круг идей но в более развернутом виде содержит вышедшая десять лет спустя книга Пэйна Age of reason Век разума. Томас Пэйн 1737 1809 гг.