Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмизация и программирование. Учебное пособие
.pdf
61
Задание. Удалить все созданные файлы.
Текст программы.
Var a,b: file of real;
c: file of integer;
BEGIN
Assign(a,’c:\a.dat’);
Assign(b,’c:\b.dat’);
Assign(c,’c:\primer.dat’);
Erase(a);
Erase(b);
Erase(c);
END.
Задания для самостоятельной работы
1. Заполните с клавиатуры файл, состоящий из 15 целых чисел. Выведи-
те его содержимое на экран. Найдите наибольшее число в файле.
2. Заполните файл нечётными числами из промежутка от 1 до 70. Выведите его содержимое на экран. Найдите сумму элементов файла.
3. Заполните файл случайными целыми числами из промежутка [-50..50].
Выведите его содержимое на экран. Создайте второй файл и поместите в
него все числа из первого файла кратные 3. Выведите содержимое файла
на экран.
4. Заполните с клавиатуры файл десятью целыми числами. Выведите его
содержимое на экран. Создайте второй файл и поместите в него все числа из первого файла, которые больше или равны.
5. Напишите программу для удаления всех созданных ранее файлов.
15. ТЕКСТОВЫЕ ФАЙЛЫ
Текстовые файлы предназначены для хранения текстовой информации.
Текстовый файл представляет собой совокупность строк переменной длины.
Доступ к каждой строке возможен лишь последовательно, начиная с первой.
При создании текстового файла в конце каждой записи (строки) ставится
специальный признак EOLN (End OfLiNe - конец строки), а в конце всего
файла - признак EOF (End Of File - конец файла). Для описания соответствующих файловых переменных используется стандартный тип text.
Пример:
Var t: text;

62
Процедуры и функции для работы с текстовыми файлами
Также как и при работе с типизированными файлами для связи физического файла с файловой переменной используется процедура Assign.
Файлы создаются процедурой Rewrite, открываются для чтения процедурой Reset, закрываются Close. Помимо уже известных нам процедур, для
работы с текстовыми файлами используются несколько новых.
Append(t) – открывает существующий текстовый файл для добавления информации в конец файла.
Readln(t, v1, v2, v3, ... vn) – читает информацию из текстового
файла t и записывает её в переменные v1, v2,... vn. Тип переменных может быть не только строковым, но также целым или вещественным.
Writeln(t,v1,v2,v3, ... vn) – записывает информацию в текстовый
файл и добавляет в файл признак конца строки. v1, v2, ... vn - переменные целого, вещественного или строкового типа, содержащие информацию, помещаемую в файл.
При работе с текстовыми файлами можно также использовать процедуры Read и Write, но нужно помнить, что после операций чтения
или записи переход к следующей строке осуществляется только в случае
исчерпания текущей строки. Процедуры Readln и Writeln позволяют совершить этот переход, не дожидаясь конца строки. Поскольку в Паскале
представлен большой и удобный инструментарий для работы со строками, использование Readln и Writeln является более предпочтительным.
Например, мы можем прочитать целую строку из файла, а затем обработать её процедурами и функциями, предназначенными для работы со
строковыми значениями.
Также применяется несколько специфических функций:
Eoln(t) – используется для определения конца строки. Возвращает
значение true, если текущий указатель находится за последней компонентой строки, false в противном случае.
SeekEoln(t) – производит поиск конца текущей строки файла. Перемещает указатель к следующему значению в строке. Если достигнут
конец строки, возвращается true.
SeekEof(t) – производит поиск конца файла. Перемещает указатель
к следующему значению. Если достигнут конец файла, возвращается true.
Задание. Создать текстовый файл, состоящий из 7 строк. Сохранить его на диске C под именем spisok.txt
Текст программы.
Var s:string;
t:text;

63
i:integer;
BEGIN
Assign(t,'С:\spisok.txt');
Rewrite(t);
for i:=1 to 7 do begin
Write('Введите строку №', i,' ');
Readln(s);
Writeln(t, s);
end;
Close (t);
END.
Задание. В файле spisok.txt найти общее количество символов
(сумму длин всех строк). Полученный результат записать в конец файла. Вывести на экран содержимое файла.
Текст программы.
Var s :string;
t: text;
n:integer;
BEGIN
Assign(t,'C:\spisok.txt');
Reset(t);
n:=0;
While not (EOF(t)) do begin
Readln(t,s);
n:=n+length(s);
end;
Close (t);
Append(t);
Writeln(t, 'Общее количество символов в файле -', n);
Close (t);
Writeln(‘Вывод содержимого файла’);
Reset(t);
While not (EOF(t)) do begin
Readln(t,s);
Writeln(s);
end;
Close (t);
End.

64
Задание. Создайте текстовый файл twin.txt. Перепишите в него все
символы из файла spisok.txt, кроме символа 'a'. Выведите на экран содержимое файла twin.txt.
Текст программы.
Var t, t1: text;
s:string;
c:char;
BEGIN
Assign(t,'d:\spisok.txt');
Assign(t1,'d:\twin.txt');
Reset(t);
Rewrite(t1);
While not EOF(t) do begin
Read(t, c);
if c <> ’a’ then Write (t1, c);
end;
Close (t);
Close (t1);
Writeln(‘Вывод содержимого файла.’);
Reset(t1);
While not (EOF(t1)) do begin
Readln(t1,s);
Writeln(s);
end;
Close (t1);
End.
Задания для самостоятельной работы
1. Создайте файл baza.txt, состоящий из 20 строк
2. Для файла baza.txt найдите среднее количество символов в строке.
3. Для файла baza.txt найдите наименьшее количество символов в строке.
4. Создайте файл itog.txt. Перепишите в него всю информацию из файла
baza.txt, удваивая при этом каждое вхождение буквы “z”.
5. Создайте файл result.txt. Перепишите в него всю информацию из фай-
ла baza.txt, заменяя буквы “f” на символ “*”.
6. Напишите программу для удаления созданных ранее файлов.

65
16. ЗАПИСИ
Под записью в Паскале понимают фиксированное число элементов
одного или нескольких типов. То есть в отличие от массивов, в которых
могут содержаться элементы одного типа, в записях могут содержаться
элементы как одного, так и разных типов. Например, в формате записи
можно организовать единицу хранения информации о книгах в библиотеке: автор, название книги, издательство, год издания, цена. Первые три
элемента относятся к строковому типу данных, четвертый к целому, а
цена - к вещественному типу. Элементы записи называются полями записи, с ними можно выполнять действия, допустимые с данными соответствующих типов.
Перед использованием типа-запись его рекомендуется описать в
разделе описания типов по следующей схеме
type Имя типа = record
Список полей1: тип1;
Список полей2: тип2;
………………………..
end;
Все идентификаторы полей в записи должны быть различными.
Пример:
type card = record
author: string [15];
title, firm: string [20];
year: integer ;
price: real
end;
После описания типа-записи появляется возможность его использования в программе. Например, можно описать переменную соответствующего типа.
Пример:
Var book: card;
Обращение к полю выполняется с помощью составного имени (селектора записи), которое схематично можно представить так
Имя записи . имя поля

66
Пример:
book.author:= ’Толстой Л.Н.’; //Присваиваем полю записи значение
book.title:=’Война и мир’;
Readln(book.price); // Заполняем поле записи с клавиатуры
При работе с записями для упрощения и сокращения составных имен
можно использовать оператор with. Он имеет следующий вид
with имя записи do оператор;
После слова do, при обращении к полям записи, указывать их “роди-
теля” уже не нужно.
Пример:
With book do begin
author:= ’Толстой Л.Н.’;
title:=’Война и мир’;
Readln(price);
end;
На практике записи обычно используют совместно с другими фор-
мами хранения данных (обычно массивами или файлами).
Задание. Создать файл записей о книгах, хранящихся на складе
(5 книг).
Текст программы.
type card = record // Описываем тип запись
author:string[15];
title: string[100];
price: real;
end;
Var a: card;
f: file of card;
i:integer;
BEGIN
Assign(f, ‘c:\books.dat’); // Заполняем файл
Rewrite(f);
for i:=1 to 5 do begin
Writeln('----------------------------------------------');
Writeln('Введите информацию по лоту №', i);
Write('автор-'); Readln(a.author);
Write('название- '); Readln(a.title);

67
Write('цена-'); Readln(a.price);
Write(f,a);
end;
Close(f);
END.
Задание. В файле books.dat найти все книги по фамилии автора, вве-
дённой пользователем.
Текст программы.
type card = record
author:string[15];
title: string[100];
price: real;
end;
Var a: card;
f: file of card;
i:integer;
s:string;
BEGIN
Assign(f, ‘c:\books.dat’);
Reset(f)
write('Введите фамилию автора для поиска');
Readln(s);
i:=0;
Repeat;
Read(f, a);
if a.author=s then begin
i:=i+1;
Writeln(‘Автор -’, a.author);
Writeln(‘ Название - ’, a.title);
Writeln(‘ Цена ’, a.price);
Writeln;
end;
Until EOF(f);
Writeln(‘общее количество найденных записей - ’, i);
Close(f)
END.
Задание. В файле books.dat найти автора с самой короткой фамилией и выведите информацию по любой его книге.

68
Текст программы.
type card = record
author:string[15];
title: string[100];
price: real;
end;
Var a, min: card;
f: file of card;
BEGIN
Assign(f, ‘c:\books.dat’);
Reset(f);
Read(f, min); // Предполагаем, что фамилия первой записи самая
//короткая
Repeat
Read(f, a);
If length(a.author)< length(min.author) then min:=a;
Until EOF(f);
Writeln(‘Данные по автору с самой короткой фамилией ’);
With min do begin
Writeln(‘Автор -’, author);
Writeln(‘ Название - ’, title);
Writeln(‘ Цена ’, price);
end;
Close(f)
END.
Особой разновидностью записей являются "записи с вариантами",
которые объявляются с помощью зарезервированного слова case. Такие
записи позволяют одновременно сохранять данные, часть структуры которых совпадает по форме, а часть различается.
Пример:
Var
Figura: record // переменная типа запись
x: real; // текущая координата x
y: real; // текущая координата y
Case Tip: (Kvadrat, Krug, Treug) of // вариантная часть
Triangle: (side1, side2, ugol: real); // параметры треугольника
Square: (side: real); // параметры квадрата
Circle: (Radius: real); // параметры окружности
end;

69
В приведённом примере описана переменная типа запись, предназначенная для хранения параметров геометрических фигур (квадрата,
треугольника и окружности). Для треугольника задаются две стороны и
угол между ними, для квадрата одна сторона, для окружности её радиус.
Общей частью являются координаты центра фигуры x, y. Вариантная
часть может быть только одна и должна располагаться в конце. Начинается она служебным словом case, за которым следует переменная выбора
варианта (в нашем примере - Tip). За каждым возможным значением этой
переменной через двоеточие в круглых скобках записываются поля данного варианта записи с указанием их типов. Круглые скобки необходимы,
если даже для данного варианта записи поля отсутствуют.
Пример:
type figura= record
x,y:integer;
Case Tip:(Kvadrat, Krug, Treug) of
kvadrat: (side: real);
Krug:(radius: real);
Treug: (side1, side2, ugol: real);
end;
Var a,b: figura;
BEGIN
a.x:=20;
a.Tip:=Kvadrat;
a.side:=10;
b.ugol:=30; // Tip для b по умолчанию будет равен Treug
END.
Задания для самостоятельной работы
1. Создайте файл записей, содержащий информацию о 10и грузовых ав-
томобилях автобазы: марка, госномер, грузоподъемность (тонн), расход
топлива на 100 км (литр).
2. Напишите программу, выводящую на экран содержимое созданного
ранее файла.
3. Составьте программу, выводящую всю информацию о машине по её
госномеру.
4. Составьте программу, выводящую всю информацию о самой эконо-
мичной машине (из соотношения грузоподъемность/расход топлива).
5. Напишите программу, выводящую на экран информацию о машинах
грузоподъемностью свыше 5 тонн.
6. Составьте программу, находящую машину с самой большой грузо-
подъемностью.

70
7. Напишите программу, определяющую машин какой марки на автобазе
меньше 5 единиц.
8. Составьте программу, находящую суммарный расход топлива на 100 км
всех машин определённой марки. Марка автомобиля вводится пользователем.
9. Напишите программу, выводящую на экран информацию о машинах,
расход топлива на 100 км которых находится в диапазоне 8-10 литров.
10. Напишите программу, выводящую на экран информацию о машинах,
пробег 100 км которых обходится дороже 5000 руб. Цену топлива вводит
пользователь.
17. СРЕДСТВА КОМПЬЮТЕРНОЙ ГРАФИКИ
Язык Паскаль содержит достаточно много разнообразных инстру-
ментов для реализации средств компьютерной графики. Для использования графики, необходимо подключить специальный модуль GpaphABC,
содержащий большой набор графических процедур, функций констант и
т.д. То есть в раздел описания программы должен начаться с директивы
Uses GpaphABC. Результаты работы программы, применяющей ресурсы
модуля GpaphABC будут отображаться в графическом окне, которое по
умолчанию имеет координаты 640 Х 400 пикселей. Отсчёт координат
начинается с верхнего левого угла.
Для работы с графическим окном используются следующие основ-
ные процедуры:
SetWindowWidth(w: integer); ‒ устанавливает ширину окна.
SetWindowHeight(h: integer); ‒ устанавливает высоту окна.
ClearWindow; ‒ очищает графическое окно белым цветом.
ClearWindow(c: ColorType); ‒ очищает окно цветом c.
SaveWindow(fname: string); ‒ сохраняет содержимое графиче-
ского окна в файл с именем fname.
LoadWindow(fname: string); ‒ выводит в графическое окно ри-
сунок из файла с именем fname. Файл ищется вначале в текущем
каталоге, а затем в каталоге PascalABC\Media\Images.
FillWindow(fname: string); ‒ заполняет графическое окно мозаи-
кой из рисунка, содержащегося в файле с именем fname.
FillWindow(n: integer); ‒ заполняет графическое окно мозаикой
из рисунка с описателем n.
CloseWindow; ‒ закрывает графическое окно.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
