- •Министерство образования и науки российской федерации
- •Оглавление предисловие
- •Составление структурных схем алгоритмов и программ
- •Пример 1
- •Пример 2
- •Задания
- •Пример 3
- •Задания
- •Пример 4
- •Пример 5
- •Задания
- •Алфавит языка pascal. Типы данных. Раздел описаний. Оператор присваивания. Ввод-вывод. Составление простейших программ
- •Стандартные процедуры
- •Стандартные функции
- •Пример 1
- •Пример 2
- •Задания
- •Пример 3
- •Задания
- •Задания
- •Использование переменных логического типа. Логический оператор присваивания
- •Логический оператор присваивания
- •R операция_сравнения s
- •Пример 1
- •Задания
- •4. Программирование разветвляющихся структур
- •4.1. Использование в программах условного оператора
- •Пример 1
- •Задания
- •4.2. Использование в программах оператора варианта
- •Case выражение-селектор of метка_случая : оператор;
- •Пример 1
- •Задания
- •5. Использование переменных типа char
- •Задания
- •6. Реализация циклических структур
- •6.1. Применение оператора цикла с параметром
- •Шаг изменения параметра цикла:
- •Пример 1
- •Задания
- •Пример 2
- •Пример 3
- •Задания
- •Пример 4
- •Задания
- •Таким образом изображаются циклы в структурных схемах (в лабораторных работах, курсовых работах и т.Д.). Пример 5
- •Задания
- •Задания
- •Пример 6
- •Задания
- •Не смотря на то, что есть еще другие операторы цикла, обычно вводят и выводят массивы с помощью оператора цикла с параметром.
- •6.2. Применение оператора цикла с постусловием
- •Пример 1
- •Задания
- •6.3. Применение оператора цикла с предусловием
- •Основные различия между операторами циклов с постусловием и предусловием
- •Пример 1
- •Задания
- •6.4. Работа с двухмерными массивами.
- •Задания
- •Пример 1
- •Задания
- •7. Поиск и сортировка числовых данных
- •Пример 1
- •Задания
- •8. Решение задач с применением подпрограмм
- •Procedure имя(список параметров);
- •Var идентификаторы:имя типа;...; var идентификаторы: имя типа
- •Var идентификаторы:имя типа;...;var идентификаторы: имя типа;...; идентификаторы:имя типа;...;идентификаторы:имя типа
- •Идентификаторы:имя типа;идентификаторы:имя типа; ...;идентификаторы:имя типа
- •Локальные переменные доступны только внутри процедур, в которых они определены!
- •Пример 1
- •Задания
- •9. Использование переменных перечисляемого типа
- •Ввод и вывод значений переменных перечисляемого типа запрещен.
- •Задания
- •10. Использование переменных ограниченного типа
- •Задания
- •11. Использование переменных множественного типа
- •Var идентификатор : set of порядковый тип;
- •Запрещен.
- •Правила приоритета для множественных операций:
- •Задания
- •12. Использование записей
- •With префикс[,префикс [...]] do оператор
- •Пример 1
- •Задания
- •13. Работа со строками
- •Каждая переменная типа string вводится отдельной процедурой readln
- •Пример 1
- •Задания
- •14. Работа с файлами
- •Пример 1
- •Пример 2
- •Пример 3
- •Задания
- •Библиографический список
12. Использование записей
Под записью в языке PASCAL понимается структура данных, состоящая из фиксированного числа элементов разного типа.
Составляющие запись объекты называются ее полями. В записи каждое поле имеет свое собственное имя (идентификатор).
В определении типа записи после служебного слова RECORD следует , СПИСОК ПОЛЕЙ, состоящий из одного или нескольких элементов, называемых СЕКЦИЯМИ ЗАПИСИ. Если секций записи более одной, то они разделяются точкой с запятой. Вся последовательность завершается служебным словом END.
ОБЩИЙ ВИД ОПЕРАТОра
Допустим, что мы хотим определить тип данных RECORD с именем adress, и наша запись должна содержать три элемента: улицу (тип string), номер дома и номер квартиры (тип integer). Это будет выглядеть следующим образом:
TYPE
Adress RECORD
street : string;
house, flat : integer
END;
Теперь, располагая определением типа adress, можно объявить одну и более переменных этого типа или даже ряд из элементов типа adress:
VAR
home : adress;
familiy : array [1..100] of adress;
fater : RECORD
street : string;
house, flat : integer
end;
Названия полей записи могут совпадать с именами переменных, констант и других объектов программ, но не могут совпадать с названиями полей других записей.
Чтобы обратиться к именам полей, необходимо написать имя переменной-записи и через точку имя нужного поля. Например:
home.street:='Ленина';
home.house:=25;
home.flat:=1;
for i:=1 to 100 do
begin
readln(familiy[i].street);
readln(familiy[i].house,familiy[i].flat)
end;
home:=familiy[1]; {все поля переменной home равны полям первого элемента массива familiy}
Понятно, что такой синтаксис может стать довольно обременительным, в особенности с записями очень сложной структуры. В качестве альтернативы в языке PASCAL предусмотрено специальное средство, называемое WITH (присоединение). Формально предложение WITH строится по следующей схеме:
With префикс[,префикс [...]] do оператор
где слово префикс обозначает имя одного или нескольких уровней записи. За заголовком WITH ... DO следует любой оператор или группа операторов, заключенные в операторные скобки BEGIN и END.
Например:
for i:=1 to 100 do
WITH familiy[i] do
begin
Readln(street);
Readln(house,flat)
end;
Пример 1
Написать программу, в которой организовать ввод данных для каждого ученика: фамилию, имя, класс и букву класса. Определить, для какого года обучения больше всего классов.
Решение
TYPE
class = RECORD
nom : 1..11; {номер класса}
ch : char {буква класса}
end;
uchenik = RECORD
fam,imya:string[15];
kl : class
end;
VAR
u : array[1..1000] of uchenik;
x : uchenik;
n,i : integer;
Begin
WRITE('сколько учеников в школе?');
Readln(n);
for i:=1 to n do {ввод сведений по всем ученикам}
begin
Writeln(i,'-й уч.');
Writeln('фамилия?'); Readln(u[i].fam);
Writeln('имя?'); Readln(u[i].imya);
Writeln('класс N'); Readln(u[i].kl.nom);
Writeln('буква класса?'); Readln(u[i].kl.ch)
end;
{определим, каких больше классов: 1-х или 2-х или..}
x:=u[1]; {первого ученика берем за основу}
for i:=2 to n do
with u[i],kl do
if ch>x.kl.ch then x:=u[i];
Writeln(x.kl.nom,'-х классов больше всего. Их ',
ord(x.kl.ch)-ord('а')+1);
End.