Перечисляемый тип - Turbo Pascal (29226)
Формулировка задачи:
Здравствуйте, есть список, существует ли возможность присваивать значения mes переменной a[i] не используя операторы case или if?
Решение задачи: «Перечисляемый тип»
textual
Листинг программы
type mesjaz = (jan, fevr, mart, apr, mai, ijun, ijul, avg, sent, okt, noj, dek);
type
data=record
god:1900..3000;
mes:mesjaz;
den:1..30;
End;
var
i,t:integer;
a:array [1..100] of data;
begin
i:=0;
for i:=1 to 3 do
begin
begin
write('год: ');
readln(a[i].god);
write('den: ');
readln(a[i].den);
write('mes: ');
readln(t); //t in [1..12]
a[i].mes:=mesjaz(t-1); //ord(mesaz) in [0..11]
end;
end;
for i:=1 to 3 do
begin
writeln('год=',a[i].god,' День=',a[i].den,' mes=',a[i].mes)
end;
readln
end.
Объяснение кода листинга программы
- Создается перечисленый тип
mesjaz, который содержит 12 элементов, представляющих месяцы года. - Создается тип данных
dataс полямиgod(год),mes(месяц) иden(день). - Создается переменная
iтипаintegerдля индексации массива данных. - Создается переменная
tтипаintegerдля хранения номера месяца. - Создается массив
aтипаarrayс размером 100 элементов, каждый из которых является объектом типаdata. - Задается начальное значение переменной
iравным 0. - Запускается цикл
for, который выполняется 3 раза. - Внутри цикла создается вложенный блок
beginдля каждого месяца. - Внутри вложенного блока
beginвыполняются следующие действия:- Выводится запрос на ввод года.
- Год сохраняется в поле
godобъекта типаdata. - Выводится запрос на ввод дня месяца.
- День сохраняется в поле
denобъекта типаdata. - Выводится запрос на ввод месяца.
- Месяц сохраняется в поле
mesобъекта типаdata. - Значение месяца преобразуется в соответствующий номер месяца.
- После завершения вложенного блока
beginвыводится сообщение о годе, дне и месяце. - Цикл
forзавершается. - Выводится сообщение с информацией о каждом объекте типа
dataв массивеa. - Программа завершается.