Тип данных Записи (Record) в Паскале
Составила учитель информатики
ПУ ТМТЛ им. С. Демиреля
С. Конгаз
Радова А.Ф.
2024-2025 уч. год
Определение: Запись – это структура данных, которая состоит из фиксированного числа компонент, называемых полями. Каждое поле может иметь свой тип данных.
Общий вид описания типа record в языке программирования Pascal:
type t = record
id11, id12, …: type1;
id21, id22, …: type2;
...
end;
здесь начинаются
с id - идентификаторы (имена) полей;
с type – типы полей;
t – имя записи.
Пример 1. Данные комплексного типа можно описать переменной типа record.
type complex = record
re, im: real
end;
var c: complex;
Здесь :
complex – имя типа (имя записи),
c – имя переменной, которая относится к записи. Переменная c состоит из двух полей: re и im , которые имеют один и тот же тип (real).
Эти поля переменной c обозначаются как c.re и c.im.
Пример 2. Даты событий можно описать следующим образом:
В этом примере описан тип data и переменная d, принадлежащая этому типу.
Переменная d описана как запись, состоящая из трех полей :
Каждое поле содержит соответственно данные:
- целое число в пределах от 1 до 12 (номер месяца),
- целое число от 1 до 31 (день),
- целое число (год).
Поле deni переменной d записывается как d.deni.
type data = record
mesiact: 1..12;
deni: 1..31;
god: integer
end;
var d: data;
Например , чтобы заслать в d дату 04.10.2024, надо выполнить следующие операторы:
d.mesiact := 10;
d.deni := 04;
d.god := 2024;
Запись так же может быть элементом других структур.
Например, введем тип family (семья: отец, мать, 1-й ребенок, 2-й ребенок):
Type
family = (papa, mama, rebionok1, rebionok2);
var
denirojdenia= array[family] of date;
где date – описанная выше запись.
Переменная denirojdenia есть массив, состоящий из записей – дат рождения членов семьи. Каждая дата рождения имеет тип date, который может быть описан в программе.
Для занесения даты рождения, например, papa, достаточно выполнить операторы:
denirojdenia[papa].mesiact := 10;
denirojdenia[papa].deni := 7;
denirojdenia[papa].god := 1975;
Оператор With
Оператор with используется для удобства работы с переменными типа record (запись).
Общий вид:
with a do st;
здесь a – имя переменной типа record, st – операции.
В операциях st при ссылках на компоненты записи имя a можно опускать.
Пример. Присвоение полям записи при использовании оператора with:
with denirojdenia[papa] do
begin
mesiact := 10;
deni := 7;
god := 1975;
end;
Задание.
Написать программу, которая выведет на экран даты рождения всех членов семьи.
Задачи.
№ 1. Частота встречаемости символа в строке.
Определить, как часто встречается определенный символ в строке.
Описание переменных:
s – строка;
c – символ;
count – количество найденных символов в строке;
freq – частота встречаемости, определяемая по формуле (n / len) * 100.
Алгоритм решения задачи:
Получить строку и символ.
Определить длину строки.
Перебрать каждый символ в строке:
если очередной символ строки совпадает с заданным символом, то увеличить счетчик символов count на единицу.
Вычислить значение частоты встречаемости и вывести ее на экран.
№ 1. Решение.
count := 0;
var
for i:=1 to length(s) do
s: string;
c: char;
count, i: byte;
freq: real;
if s[i] = c then
begin
count := count + 1;
write('String: ');
freq := (count / length(s)) * 100;
readln(s);
writeln('Frequency: ', freq:5:2, '%');
write('Char: ');
readln(c);
end.
№ 2. Четные и нечетные символы разделить по разным строкам.
Создайте из четных символов строки str1 строку str2 и из нечетных символов - строку str3.
Алгоритм решения задачи:
- Измерим длину строки.
- В цикле перебираем символы от 1-го до последнего (его индекс равен значению длины строки).
- Если индекс очередного символа нечетный, то добавляем этот символ в конец строки str3.
- Иначе - добавляем к str2.
№ 2. Решение.
var
str1,str2,str3: string;
l,i: byte;
begin
readln(str1);
str2 := '';
str3 := '';
l := length(str1);
for i:=1 to l do
if odd(i) then
str3 := str3 + str1[i]
else
str2 := str2 + str1[i];
writeln(str2);
writeln(str3);
end.
Задача №3. Из ведомости 3-х студентов с их оценками ( порядковый номер, Ф.И.О. и три оценки) определить количество отличников и средний бал каждого студента.
№ 3. Решение.
Program Spic;
Type wed = record {Тип wed включает 3 поля: n, fio, bal}
For j:= 1 to 3 do
n : integer ;
begin
fio : string[40] ;
write ( 'Vvedite ocenky: ' );
bal : array [1..3] of integer {Поле bal – массив из 3 оценок }
readln ( bal [j] );
s := s+ bal [j];
end;
Var spisok : wed ; {Запись spicok типа wed}
end;
if s=15 then kol:=kol+1; {подсчет количества отличников}
i, j, kol, s : integer; sr : real;
sr := s/3; writeln ( fio, ', Sredniy bal = ', sr:4:1); end;
Begin
writeln ( ' Kolichestvo otlichnikov = ', kol );
kol:=0; {kol- количество отличников}
readln;
With spisok do {with присоединяет имя записи spisok ко всем }
For i:=1 to 3 do { полям внутри цикла For по i }
end.
begin
n:=i;
Write (' Vvedite FIO # ', i ,' ');
Readln (fio);
s:=0;