Записи (Record) в Рascal ABC
Понятие
Запись – это структура, состоящая из фиксированного числа компонент, называемых полями.
Данные одного поля разных записей имеют один и тот же тип , а разных полей могут иметь разные типы.
Пример.
Данные комплексного вида можно описать переменной типа record .
type complex = record
re, im: real end;
var c: complex;
здесь complex – имя типа, а c – имя переменной. Переменная c состоит из двух полей: re и im , имеющих один и тот же тип (real). Эти поля переменной c обозначаются как c.re и c.im .
Пример.
Даты каких-либо событий можно описать следующим образом:
type date = record
month: 1..12;
day: 1..31;
year: integer
end;
var d: date;
В этом примере описан тип date и переменная d , принадлежащая этому типу.
Например, чтобы заслать в d дату 12.01.2003, надо выполнить следующие операторы:
d.month := 1;
d.day := 12;
d.year := 2003;
Запись может быть компонентой других структур.
Например, введем тип family(семья: отец, мать, 1-й ребенок, 2-й ребенок):
type family = (father, mother, child1, child2);
var birthday: array[family] of date;
где date – описанная выше запись.
Для занесения даты рождения, например, mother, достаточно выполнить операторы:
birthday[mother].month := 5;
birthday[mother].day := 1;
birthday[mother].year := 1965;
Вывести на экран фамилии студентов, чей балл выше среднего по группе.
Задача:
Описание переменных:
arr_studs – группа студентов; average – средний балл в группе.
average then writeln(arr_studs[i].sname); readln end . " width="640"
Код программы:
type
studs = record
sname: string [25];
eval: integer ;
end ;
var
arr_studs: array [1..15] of studs;
sum: integer ;
average: real ;
i,n: byte ;
begin
write('Количество студентов: ');
readln(n);
sum := 0;
for i:=1 to n do
with arr_studs[i] do begin
write(i,'-й студент: ');
readln(sname);
write(' Оценка: ');
readln(eval);
sum := sum + eval;
end ;
average := sum / n;
writeln;
writeln('Студенты с оценкой выше средней:');
for i:=1 to n do
if arr_studs[i].eval average then
writeln(arr_studs[i].sname);
readln
end .
Программа, определяющая количество дней в месяце.
Задача:
Алгоритм решения задачи:
Переменная d имеет тип данных запись и содержит два поля: year – для хранения года и month – для месяца.
Пользователь вводит год и месяц.
Оператор выбора case по номеру месяца определяет количество дней в нем. Ситуация осложняется тем, что в феврале может быть как 28 дней, так и 29 (в високосный год).
Год является високосным, если делится без остатка на 4 и при этом не является последним годом столетия, за исключением того столетия, которое без остатка делится на 400.
Код программы:
type date = record
year:1900..2100;
month:1..12
end ;
var d: date;
begin
write('Год: ');
readln(d.year);
write('Месяц: ');
readln(d.month);
case d.month of
4,6,9,11:
writeln('В этом месяце 30 дней');
1,3,5,7,8,10,12:
writeln('В этом месяце 31 день');
2:
if (d.year mod 400 = 0) or
(d.year mod 100 0) and (d.year mod 4 = 0) then
writeln('В этом месяце 29 дней')
else
writeln('В этом месяце 28 дней');
end ;
readln;
end .
Из ведомости 3-х студентов с их оценками ( порядковый номер, Ф.И.О. и три оценки) определить количество отличников и средний бал каждого студента.
- Program Spic; Type wed = record {Тип wed включает 3 поля: n, fio, bal} n : integer ; fio : string[40] ; bal : array [1..3] of integer {Поле bal – массив из 3 оценок } end;
begin n:=i; Write (' Vvedite FIO '); Readln (fio); s:=0; For j:= 1 to 3 do begin write ( 'Vvedite ocenky: ' ); readln ( bal [j] ); s := s+ bal [j]; end; if s=15 then kol:=kol+1; {подсчет количества отличников} sr := s/3; writeln ( fio, ', Sredniy bal = ',); end; writeln ( ' Kolichestvo otlichnikov); readln; end.
ДОМАШНЕЕ ЗАДАНИЕ
ОПИСАТЬ ПРИ ПОМОЩИ ЯЗЫКА ПАСКАЛЬ АНКЕТУ:
Рабочий
Адрес
Место работы
Дата рождения
ПОЛ
ФИО
Должность
Задания с обработкой записей (самостоятельная работа)
1. Ввести оценки студента по 5 экзаменам. Определить средний балл и подсчитать количество удовлетворительных, хороших и отличных оценок. Напечатать название предмета, если есть «неуд».
2. Дан список студентов и оценка каждого на экзамене (оценки на N экзаменах). Подсчитать количество удовлетворительных оценок, хороших, отлич- ных и средний балл в группе. Напечатать фамилии неуспевающих студентов.
3. Дан список студентов группы. Заполнить его следующими сведениями: фамилия, имя, отчество; имеет ли компьютер (если имеет, то какой и с какого года). Подсчитать сколько студентов имеют ПК.
4. Сформировать пополняемую базу данных «Континент – страны», в которой указать столицы, численность населения, крупные города. Организовать поиск страны по городу, стран или городов на континенте.
5. Сформировать список студентов группы, в котором указать фамилию (имя, отчество); город, в котором получил среднее образование (номер школы, если обучался в Омске). Подсчитать, сколько в группе иногородних студентов.
6. В файле задан список книг (автор, название, год издания). Разработать программу выбора книг, выпущенных ранее заданного года.
7. Сформировать телефонный справочник. По номеру организовать поиск владельца, и наоборот.
8. Сформировать запись «Даты – праздники». Организовать в программе ввод дат, подсчитать число праздничных дней и рабочих.
9. Сформировать запись «английское слово – перевод». Вводя слово (английское или русское), найти перевод или выдать сообщение «нет в словаре». По возможности предусмотреть пополнение словаря.
10. Сформировать запись «операторы PascalABC»: оператор, действие. Подсчитать их количество и число операторов, имеющих повторяющиеся ключевые слова.