Перечислимый (перечисляемый) тип данных
Перечислимый тип = ( Идентификатор {, Идентификатор}). |
Перечисляемый тип задается списком значений, которые может принимать переменная этого типа.
type Day = (Mon, Tue, Wed, Thu , Fri, Sat, Sun);
Color = (White, Red, Black);
Name = (Anna, Oleg, Vova, Gala);
var WorkDay : Day; NameBoy , NameGirl : Name;
Continent : (Africa, Asia, America, Australia, Europe, Antarctica)
begin
WorkDay:=Mon;
NameBoy:=Oleg;
Continent:=Asia;
end.
Идентификаторы всех элементов перечисляемого типа интерпретируются как константы. Например, White, Red, Black – константы типа Color, а Anna, Oleg, Vova, Gala - константы типа Name.
Идентификатор, указанный в списке перечислимого типа, может присутствовать только в одном описании и один раз. Например, следующее ошибочно:
type Boy = (Sasha, Vova, Oleg);
Girl = (Anna, Sasha, Lena);
Name = (Lora, Oleg, Vova, Gala, Lora);
Оператор присваивания для переменной перечислимого типа допустим, если справа стоит значение из описания типа именно этой переменной, например:
WorkDay :=Mon; Continrnt:=Africa; Но ошибочно: NameBoy:=Red;
Вопрос: а такое присваивание: Color:=Red; - верно?
Идентификаторы в списке упорядочены целыми положительными числами, начиная с 0, поэтому к ним применимы функции Pred, Succ, Ord.
Например , следующие выражения истинны :
Ord(Asia)=1; Succ(Vova)=Gala; Pred(Sat)=Fri;
К переменным перечислимого типа не применимы ни арифметические функции, ни процедуры Read и Write !
Перечислимый тип данных употребляется для улучшения читабельности программы.
Ограниченный (диапазонный, интервальный) тип данных
Ограниченный тип = Ограничение .. Ограничение. |
Ограничение = Константа порядкового типа.
Примеры: var X:1..5; Y: ‘A’..’D’; Z: -100 ..100;
Ограниченный тип данных задается на базе какого - либо порядкового типа с указанием более узкого, чем у базового, диапазона возможных значений.
Нижнее Ограничение не должно превышать верхнее.
К переменным ограниченного типа применимы функции Ord, Pred, Succ.
Ограниченный тип данных употребляется для контроля значений переменных, а также для улучшения наглядности программы.
Для подключения контроля диапазона используется директива компилятору {$R+}, для отключения - {$R-}.
const Min = 16; Max = 75;
type Days = (Mon,Tue,Wed,Thu,Fri,Sat,Sun);
WorkDay = Mon . . Fri; FreeDay = Sat . . Sun; Letter = ‘A’ .. ‘Z’;
var Day : Days; Interval : Min .. Max; A : ‘0’ .. ‘9’; B: 0 .. 9; L : Letter;
begin
{$R+}
Write(‘введи большую английскую букву’};
Read(L);
case L of
‘A’ .. ‘Z’ : Writeln(‘ - это большая английская буква!’);
else : Writeln(‘ - это НЕ большая английская буква! ’);
end;
{$R-}
repeat
Write(‘введи любую цифру => ’};
Readln(B);
until (B>=0) and (B<=9) and (B-Trunc(B)=0)
Writeln(“Вы ввели цифру ”, B);
end.
Задача 1 Написать программу, которая по введенному номеру дня недели определяла бы предыдущий и последующий день, и для каждого из этих трех дней выясняла, выходной это или рабочий день.
Program Z1; Uses Crt; type Days=(Mon,Tue,Wed,Thu,Fri,Sat,Sun); var Day,Yesterday,Today,Tomorrow:Days; i:Byte; begin repeat ClrScr; Writeln('1 - понедельник'); Writeln('2 - втоpник'); Writeln('3 - сpеда'); Writeln('4 - четвеpг'); Writeln('5 - пятница'); Writeln('6 - суббота'); Writeln('7 - воскpесенье'); Write('Введи номеp дня => ' ); Readln(i); until (i>0) and (i<8); case i of 1: Today:=Mon; 2: Today:=Tue; 3: Today:=Wed; 4: Today:=Thu; 5: Today:=Fri; 6: Today:=Sat; 7: Today:=Sun; end; if Today=Sun then Tomorrow:=Mon else Tomorrow:=Succ(Today); if Today=Mon then Yesterday:=Sun else Yesterday:=Pred(Today); |
i:=1; repeat case i of 1:begin Write('вчеpа был день '); Day:=Yesterday; end; 2:begin Write('сегодня '); Day:=Today; end; 3:begin Write('завтpа будет '); Day:=Tomorrow; end; end; case Day of Mon : Write(' понедельник'); Tue : Write(' втоpник'); Wed : Write(' сpеда'); Thu : Write(' четвеpг'); Fri : Write(' пятница'); Sat : Write(' суббота'); Sun : Write(' воскpесенье'); end; case Day of Mon .. Fri : Writeln(' - pабочий день '); Sat, Sun : Writeln(' - выходной день'); end; i:=i+1; until i>3; end. |