
- •Псевдокод
- •Один из примеров псевдокода - школьный алгоритмический язык.
- •Блок-схема
- •Запись на псевдокоде
- •Вопросы для самоконтроля
- •Формулы бэкуса-наура
- •Перминов о.Н. Программирование на языке Паскаль
- •Синтаксические диаграммы
- •Алгоритмы сортировки
- •Сортировка с помощью прямого включения
- •Сортировка с помощью прямого выбора (линейная)
- •Сортировка с помощью прямого обмена (пузырьковая)
- •Быстрая сортировка (ч. Хоара, сортировка с помощью разделения)
- •Рекурсия
- •Параметры-процедуры и параметры-функции
- •Символьные типы
- •Строковые типы
- •Строковые типы в Borland Pascal
- •Строковые типы в Delphi
- •Множества
- •Тип "запись" (record)
- •Вариантная часть записи
- •Процедуры и функции для работы с файлами
- •Работа с текстовыми файлами*
- •Работа с типизированными и нетипизированными файлами
- •Типизированные файлы
- •Последовательный и прямой доступ к файлам
- •Нетипизированные (бестиповые) файлы
- •Класс tfilestream (факультатив, для зачета 1 семестра не требуется)
- •Работа с данными файла
- •Закрытие файла
Работа с типизированными и нетипизированными файлами
Read(F, V1[,V2,...,Vn])
Чтение данных из типизированного файла.
Write(F, V1[,V2,...,Vn])
Запись данных в типизированный файл.
V1…Vn – переменные, тип которых совпадает с типом компонентов файла.
BlockRead(var F: File; var Buf; Count: Word [; var Result: Word])
Чтение данных из нетипизированного файла.
BlockWrite(var f:File; var Buf; Count:Word [; var Result:Word])
Запись данных в нетипизированный файл.
Seek(var f; N:LongInt)
Перемещает текущую позицию в открытом файле f на запись с номером N.
FilePos(var f):LongInt
Возвращает текущую позицию в открытом файле f.
FileSize(var f):LongInt
Возвращает текущий размер (число компонентов) открытого файла.
Truncate(var f)
Удаляет часть открытого файла, начиная с текущей позиции, и «подтягивает» на ее место конец файла.
ПРИМЕР 3. Выведите на экран содержимое заданного текстового файла (аналог примера 1 с дополнениями и пояснениями)
Program ReadFromTextFile;
{$APPTYPE CONSOLE}
var
f:Text; {Объявляем файловую переменную f}
FileName, St:String;
begin
Write('Введите имя файла:');
Readln(FileName);
Assign(f,FileName); {Связываем переменную f с заданным файлом}
{$I-} {Отключение проверки ошибок ввода-вывода}
Reset(f); {Открываем файл для чтения}
{$I+}
if IOResult<>0 then {Возникла ошибка при открытии файла}
begin
Write('Файл ',FileName,' не создан');
Readln;
Exit;
end;
while not Eof(F) do {Пока не конец файла}
begin
Readln(F, St); {Считываем строку из файла}
Writeln(St); {и выводим ее на экран}
end;
Close(f); {Закрываем файл}
Readln;
end.
ЗАДАНИЕ 1.
А) Подсчитайте число строк в выводимом файле.
Б) Выведите на экран только четные (нечетные) строки исходного файла.
ПРИМЕР 4. Создайте текстовый файл, содержащий список сотрудников (в каждой строке указывается имя сотрудника и его возраст).
Program WriteToTextFile; Type Person=record Name:String[20]; Age:Byte; end; |
Robert Smith 41 Neil Young 20 Paul Kennedy 55 John Lee 34 |
Var
Man:Person;
f:Text; {Объявляем файловую переменную f}
ch:Char;
Begin
Assign(f,'Persons.txt'); {Связываем переменную f с файлом Persons.txt}
Rewrite(f); {Открываем файл для записи}
repeat
Write('Введите имя:');
Readln(Man.Name);
Write('Введите возраст:');
Readln(Man.Age);
{ Записываем в файл введенные данные }
Writeln(f, Man.Name, ’’:(20-Length(Man.Name)), Man.Age);
Write('Продолжить ввод (Y/N) ?:');
Readln(Ch)
until UpCase(ch)='N';
Close(f); {Закрываем файл}
end.
ЗАДАНИЕ 2. Выведите на экран содержимое текстового файла (оконное приложение Turbo Delphi).
|
Дважды щелкните левой кнопкой мыши на кнопке Button и наберите следующий текст в заготовке процедуры (выделено курсивом):
procedure TForm1.Button1Click(Sender: TObject);
var
f:TextFile; {Объявляем файловую переменную f}
St:String;
begin
AssignFile(f,Edit1.Text); {Связываем переменную f с заданным файлом}
{$I-}
Reset(f);
{$I+}
if IOResult<>0 then
begin
ShowMessage('Файл '+Edit1.Text+' не создан');
Exit;
end;
while not Eof(F) do
begin
Readln(F, St); {Считываем строку из файла}
Memo1.Lines.Add(St); {и выводим ее в Memo-поле}
end;
CloseFile(f) {Закрываем файл}
end;
Отметьте различия в набираемом тексте процедуры и в тексте программы в примере 3.
Ознакомьтесь со всеми файлами приложения, созданными в ходе выполнения данного задания.
ПРИМЕР 5. Имеется текстовый файл, каждая нечетная строка которого содержит название предмета, а каждая четная – оценки, полученные по заданному предмету в течение семестра, например:
Математика
2 3 4
Физика
5 4
Ботаника
5 5 2 1 5 5 5
Создать результирующий текстовый файл и вывести туда результаты обработки исходного файла в формате <название предмета>:<средний балл>, например:
Математика: 3.0
Физика: 4.5
Ботаника: 4.0
РЕШЕНИЕ:
var
f1,f2:text;
name:String;
i,n,s:integer;
filename:string;
begin
filename:='studmark';
Assign(f1,filename+'.in');
Assign(f2,filename+'.out');
Reset(f1);
Rewrite(f2);
while not seekEOF(f1) do
begin
readln(f1,name);
while not SeekEOLN(f1) do
begin
read(f1,i);
s:=s+i;
inc(n);
end;
readln(f1);
writeln(f2,name:20,':', s/n:5:1);
s:=0;
n:=0
end;
Close(f1);
Close(f2);
writeln('>>>OK....');
readln;
end.
ЗАДАНИЕ: Укажите разницу между функциями EOF/SeekEOF и EOLN/SeekEOLN и эффект, который может быть получен при взаимной замене этих функций в вышеприведенной программе при наличии завершающих пробелов в строках с оценками и завершающих пустых строк в исходном файле.
ТЕМА. ТИПИЗИРОВАННЫЕ И НЕТИПИЗИРОВАННЫЕ ФАЙЛЫ