- •Структура программы на Паскале.
- •Стандартные типы Паскаля.
- •Операторы в Паскале.
- •Цикл с параметром.
- •Типовые задачи на операторов цикла.
- •Операторы целочисленного деления.
- •Вложенные циклы.
- •Структурированные типы данных.
- •Массивы.
- •Многомерные массивы.
- •Строки.
- •Множества.
- •Записи.
- •Работа с текстовыми файлами.
- •Особенности работы с текстовым файлом:
- •Типизированные файлы.
- •Особенности работа с типизированными файлами.
- •Подпрограммы.
- •Структура подпрограмм.
- •1. Заголовок
- •2. Описательная часть
- •3. Тело подпрограммы
- •Оформление формальных параметров, которые определяет режим взаимодействия с основной программой.
- •Особенности передачи структурированных данных подпрограммы.
- •Опережающие описания.
- •Функциональный тип. Процедурный тип.
- •Сортировки.
- •Сортировка бинарными включениями.
- •Сортировка простых выборов.
- •Сортировки простым обменом.
- •Шейкер-сортировка.
- •Сортировка Шелла.
- •Модули.
- •Структура модуля.
- •Особенности компиляции программ с подключаемыми модулями.
- •Циклические ссылки модулей друг на друга.
- •Стандартные модули в Паскале.
- •Динамические переменные.
- •Динамические структуры.
- •Однонаправленные списки.
- •Формирование списков. Формирование очереди.
- •Формирование стека.
- •Классическое формирование очереди (по Вирту).
- •Работа со списками.
- •1) Проход по списку;
- •2) Добавление элемента в список;
- •Удаление элемента из списка.
- •«Древовидные структуры»
- •Удаление элемента из дерева
- •Самоупорядочивающийся список
- •Частотный словарь
- •Нерекурсивное формирование дерева
Записи.
Запись – упорядоченное ограниченное количество элементов разного типа.
Упорядоченность структуры «запись» позволяет обращаться к каждому элементу записи – ее полю. При описании записи каждое поле имеет свой идентификатор.
VAR <имя записи>:RECORD
<имя поля записи 1>:тип поля 1;
<имя поля записи 2>:тип поля 2;
<имя поля записи n>:тип записи n;
end;
Перечисление полей записи определяет ее структуру. При вводе записи данную структуру сохраняют, т.е. вводят поля в той последовательности, в которой они описаны. Рекомендуется имена однотипных полей перечислять через запятую и указывать единый тип только в том случае, если они идут вподряд по структуре. В программе для обращения к конкретному полю записи использовать расширенное поле (<имя записи>.<имя поля>).
Над полями записи возможны любые операции, которые позволяет осуществлять тип данного поля. Для сокращения кода программы и упрощения доступа к полям используется только для записей оператор присоединения.
WITH <имя записи> DO
<имя поля>;
оператор;
Работа оператора заключается в том, что если встречается имя поля, вложенного в оператор присоединения, то данное поле присоединяется к имени записи, которое указывается после слова WITH.
Пример. Задана ведомость, в которой 15 студентов. В ней отображены результаты сессии по трем предметам. Определить средний балл группы.
type st=record
fio:string;
o1,o2,o3:2..5;
end;
var ved: array[1..15] of st;
p:integer;
sr:real
begin writeln(‘Введите ведомость’);
for p:=1 to 15 do
readln(ved[p].fio);
readln ved[p].o1, ved[p].o2, ved[p].o3;
end;
sr:=0;
for p:=1 to 15 do
sr:=sr+ved[p].o1+ved[p].o2+ved[p].o3;
sr:=sr/45;
writeln(sr:0:1);
end.
Второй вариант с присоединением:
type st=record
fio:string;
o1,o2,o3:2..5;
end;
var ved: array[1..15] of st;
p:integer;
sr:real
begin writeln(‘Введите ведомость’);
for p:=1 to 15 do
with ved[p] do
begin
readln(fio);
readln (o1,o2,o3);
end;
sr:=0;
for p:=1 to 15 do
sr:=sr+o1+o2+o3;
sr:=sr/45;
writeln(sr:0:1);
end.
Примечание.
Оператор присоединения необходимо использовать (и не использовать) в тех ситуациях, когда во вложенном операторе по алгоритму необходимо использовать одноименные поля разных записей.
Пример. Задана ведомость на 15 студентов. Упорядочить содержимое этой ведомости по алфавиту фамилий.
type st=record
fio:string;
o1,o2,o3:2..5;
end;
var ved:array[1..15] of st;
c,p:integer;
v:st;
begin writeln(‘’);
for p:=1 to 15 do
with ved[p] do
begin readln(fio);
readln(o1,o2,o3);
end;
repeat c:=0;
for p:=1 to 14 do
if ved[p].fio>ved[p+1].fio then begin
v:=ved[p];
ved[p]:=ved[p+1];
ved[p+1]:=v;
c:=c+1;
end;
until c=0;
for p:=1 to 15 do
with ved[p] do begin
writeln(fio,’ ‘,o1,’ ‘,o2,’ ‘,o3);
end.
Файлы
В Паскале реализована работа со всеми видами файлов, а именно:
1) прямого доступа (типизированные);
2) последовательного доступа (текстовые);
3) нетипизированные (побитовая информация).
Алгоритм переназначения информационных потоков ввода-вывода с экранного представления в файловое.
-
В описательной части программы определяем специализированную файловую переменную, тип которой определяет тип файла, с которым в дальнейшем будет работать программа.
VAR
<имя файловой переменной 1>: TEXT;
<имя файловой переменной 2>:FILE OF тип элемента файла;
<имя файловой переменной 3>:FILE.
Кроме того, данная файловая переменная в тексте программы играет огромную роль: по ее средствам осуществляется связь программы с конкретными физическим файлом на диске, определяется направление потока информации и сам поток.
-
В тексте программы для связывания файловой переменной с физическим файлом используется ASSIGN
ASSIGN (<имя файловой переменной>,<имя файла>);
Имя файла – строковая const или строковая переменная. Если имя файла не содержит путь к нему, то в этом случае компилятор будет искать файл в текущей активной аудитории. Assign не контролирует наличие файла на диске. Для работы с файлом необходимо определить направление информационного потока: чтение или запись.
3)
а) REWRITE(<имя файловой переменной>); - открывает путь для файла.
Данная процедура осуществляет следующее действие: если файла на диске нет, то все необходимые манипуляции для его регистрации в операционной системе осуществляются процедурой «rewrite». Файл открывается для записи, маркер файла устанавливается в первую позицию файла.
Если файл есть, то программист, используя rewrite, учитывает, что при его использовании маркер файла устанавливается в первую позицию, а информация, расположенная в этом файле, уничтожается. Rewrite не контролирует наличие файла на диске.
б) для организации чтения информации файл должен быть открыт для чтения. RESET(<имя файловой переменной>) – контролирует наличие файла на диске. Если файл есть, то он открывается для чтения, маркер устанавливается на первый элемент. Если файла нет, то возникает ошибка, программа завершает работу.
4) в соответствии с предыдущим пунктом чтение или запись информации осуществляется процедурами «read/write», но в списке чтения или записи в первой позиции указывается имя файловой переменной, посредством которой осуществляется перенаправление информационного потока. Переменные, в которые осуществляется чтение или запись, носят позиционный характер, т.е. их перечисление определяет запись или чтение.
Примечание.
Программист помнит, что при каждом обращении к файлу маркер файла автоматически смещается в следующую позицию, т.е. если из файла считывается первый элемент, то при следующем обращении «read/write» будет считываться или записываться (n+1) позиция.
5) Если файла формируется, при окончании его формирования указывается маркер конца файла, используется CLOSE <имя файловой переменной>. Если файл считается, то его тоже следует закрывать. Если close не используется, то после завершения работы программы файл автоматически закрывается. В случае записи маркер конца файла не записывается.
6) Установка маркера конца файла позволяет организовывать циклическую обработку файлов до конца файла, т.к. логическая функция EOF становится истинной при чтении этого маркера.