Найти ошибки в следующей программе и
объяснить, какие правила языка Паскаль
здесь нарушены:
Program mistake_2;
Type month = (january, february, marth, april, may, june, jule, august,
september, october, november, december);
winter = december..february;
spring = marth..may;
Var m : month; k : 1..12; Begin
Write('Введите месяц'); Readln(m);
If m>spring Then m := june;
For k := Ord(january) To Ord(m) Do m := succ(m);
Writeln(m); End.
На предыдущих занятиях были рассмотрены
основные типы Паскаля и действия, которые
можно совершать с этими типами, одним из
самых распространенных действий является
присваивание.
Рассмотрим такую ситуацию, пусть заданы
типы Т1 и Т2, а также описаны
переменные р1 и р2 следующим
образом:
Var p1 : T1; p2 : T2;
Возникает вопрос, когда можно записать р1
:= р2? Чтобы ответить на этот вопрос,
рассмотрим совместимость простых типов по
присваиванию. Операция р1 := р2 является
допустимой, если истинно одно из следующих
утверждений:
Т1 и Т2 - тождественные типы.
Типы являются тождественными, если они
описаны одним и тем же идентификатором
или происходят от одного и того же
идентификатора.
Здесь Т1, Т2 и Т3 - идентичные типы, Т4, Т5 -
не идентичны, поскольку (red, gren, blue, black, white)
не являются идентификатором типа, Т4, Т6
являются идентичными.
Т2 является поддиапазоном типа Т1.
Например,
Type T1 = Real; T2 = Integer;
(множество целых чисел входит в
диапазон вещественных чисел).
Т1 и Т2 - являются отрезками
одного и того же типа.
Совместимость по присваиванию станет
более понятна, если вспомнить, что
переменные в памяти занимают определённое
число байт. Так, переменная типа Integer
занимает 2 байта, типа - Real 6 байтов, а в
большее число ячеек всегда можно поместить
меньшее, а наоборот не всегда.
Совместимость типов необходима также в
выражениях и операциях сравнения.
Program Example;
Var a : Byte; b : Integer; c : Longint; Begin
Writeln('Введите 2 числа:(Byte, Integer)');
Readln(a, b);
c:=a + b;
Writeln(c); End.