Найти середину отрезка [0,6] . Использовать ограниченный тип данных

Не получается что бы можно было вести цифру от 0 до 6. Что бы он считал только в этом отрезке.

Program pr3;
var a: 0..6;
var b: real;
Begin
writeln ('Введите длину отрезка');
readln (a);
b:=a/2;
write (b);
end.

В итоге могу хоть 50 ввести и он посчитает.


Ответы (1 шт):

Автор решения: MBo

К сожалению, компилятор отловит только попытку назначения константы переменной subrange типа, а введённое значение можно сделать каким угодно (то же будет и, скажем, с типом byte), т.к. под капотом работает процедура ReadLong без валидации субдиапазона.

Поэтому только проверять значение и повторять ввод. При этом учитывайте, что значение обрежется до ShortInt, и, например, 257 пройдет фильтр как значение 1.

repeat
  writeln ('Введите длину  отрезка');
  readln (a);
until a in [0..6];
→ Ссылка