var s,i: integer;
begin
s:=0;
for i:=6 to 8 do
s:=s+dni[i]; {летние месяцы - 6, 7, 8}
writeln(s)
end.
Код данного решения обладает не самой лучшей наглядностью, к тому же приходится самому вычислять номера месяцев начала и конца лета (6 и 8).
Удобство и наглядность таких программ можно повысить следующим образом:
Показать решение:
TYPE mes = (january, february, march, april, may, june, july, august, september, october, november, december);
CONST dni:array[january..december] of Byte = (31,28,31,30,31,30,31,31,30,31,30,31);
VAR s:Integer;
i:mes; {переменная счетчика цикла i задана типом mes, а не Integer}
BEGIN
s:=0;
for i:=june to august do s:=s+dni[i];
WriteLn(s)
END.
|
Использование интервального типа в качестве диапазонного ограничителя
Пример:
Поезд отправляется в путь в 22 часа и находится в пути 10 часов. Во сколько он прибывает на место назначения?
Следующий пример продемонстрирует неправильное решение данной задачи:
var otpravlenie,pribitie:byte;
begin
otpravlenie:=22;
pribitie:=otpravlenie+10;
writeln(pribitie)
end.
|
программа вместо ответа «8» напечатает ответ «32».
Введение ограниченного диапазонного типа позволит избежать неправильного результата, однако компилятор все равно выдаст ошибку:
Do'stlaringiz bilan baham: |