Дисциплина «Основы алгоритмизации и программирования»
План лабораторной работы
Анализ задачи: в тексте задачи не конкретизируется максимальный размер строки, которую необходимо ввести с клавиатуры, поэтому использовать для решения задачи типизированный файл будет неверно (для этих файлов запись должна иметь фиксированный размер). Для решения задачи будет использовать возможности работы Pascal/Delphi с текстовыми файлами.
Решение задачи
- Создаем новое консольное приложение в Delphi
Открываем Delphi и в меню File выбираем «File — New — Other«:
В открывшемся окне выбираем в списке слева пункт «Delphi», а справа — «Console Application»:
Delphi создаст новый консольный проект:
2. Пишем код программы для работы с текстовым файлов в соответствии с заданием
program TextFiles;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
var F: TextFile;
s: string;
begin
AssignFile(F, 'text.txt');
Rewrite(F);
repeat
writeln('Введите новую строку:');
Readln(s);
if Length(S)>0 then
Writeln(F, s);
until Length(s)=0;
CloseFile(F);
end.
Рассмотрим алгоритм решения этой задачи:
1. Определяем переменные в разделе var
F: TextFile;
— это файловая переменная для работы с текстовым файлом
s: string;
— это переменная для хранения строки, введенной пользователем с клавиатуры
2. Ассоциируем файловую переменную с внешним файлом на диске:
AssignFile(F, 'text.txt');
Более подробно об этой процедуре — см. здесь.
3. После того, как файловая переменная ассоциирована с внешним файлом, открываем текстовый файл, используя метод Rewrite.
Rewrite(F);
Для открытия текстового файла в Pascal/Delphi могут использоваться три метода — Rewrite, Reset и Append. Однако, так как в тексте задачи не ставится вопрос о том, должен ли файл создаваться заново или файл должен сохраняться и так далее, то я использовал кратчайший путь решения задачи, используя метод Rewrite, который создает новый файл (если файл отсутствует на диске) и открывает его.
4. Создаем цикл с постусловием repeat…until в котором запрашиваем у пользователя ввод очередной строки
repeat
writeln('Введите новую строку:');
Readln(s);
if Length(S)>0 then
Writeln(F, s);
until Length(s)=0;
Условие выхода из цикла — длина строки (Length(s)) равна нулю. Внутри цикла проверяется длина строки и, если длина строки больше нуля, то строка s записывается в файл — это делается для того, чтобы пустая строка не записалась в файл перед выходом из программы.
Цикл repeat..until можно заменить на цикл с предусловием while..do, например, так:
writeln('Введите новую строку:');
Readln(s);
while Length(s)>0 do
begin
Writeln(F, s);
writeln('Введите новую строку:');
Readln(s);
end;
Улучшение программы
Для улучшения программы и, возможно, поощрения со стороны преподавателя, можно предложить следующее улучшение нашей программы — вынести строки приглашение ввода от пользователя и имя файла в раздел констант, что позволит упростить внесение изменений в программу, с одной стороны, а, с другой стороны — ваш Delphi-код станет более чистым 🙂 Улучшенная версия нашей программы может выглядеть, например, вот так:
program TextFiles;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
const
cFileName = 'text.txt'; //имя файла для записи
сInputStr = 'Введите новую строку:';//строка-приглашение для пользователя
var F: TextFile;
s: string;
begin
AssignFile(F, cFileName);
Rewrite(F);
writeln(сInputStr);
Readln(s);
while Length(s)>0 do
begin
Writeln(F, s);
writeln(сInputStr);
Readln(s);
end;
CloseFile(F);
end.




Оставить комментарий