Почему на Паскале АВС не срабатывает свой интервальный тип, хотя в учебниках он указан, как действующий?
Можно конкретный пример? Не забывайте программный код окаймлять строками, состоящими из трех обратных апострофов (символ, расположенный на клавише ~ и Ё). И второе: это ветка форума по PascalАВС.NЕТ, как Вы можете видеть. Устаревший проект Pascal ABC закрыт в 2008 году (12 лет назад) и более не поддерживается. И третье, учебник по Pascal ABC был только один. Он издавался, если правильно помню, в 2012 году в Белоруссии, поэтому писать во множественном числе (“в учебниках”) некорректно.
var a: 2..5;
begin
a := 5;
end.
Такой код работает
Если бы он не работал, было бы невозможно описать статический массив. Подозреваю, что это был некорректно сформулированный вопрос школьника. У школьников (да и у студентов тоже, чего греха таить) зачастую “не работает” на самом деле означает “не работает так, как на мой взгляд должен работать”.
Конкретный пример program p1; type p=2…5; var a: p; i:boolean; begin readln(a); i:=a<3; writeln(o) end. По идее, если вводить число, не входящее в интервал типа, то программа должна выдавать ошибку, чего она, в свою очередь, не делает
Понятно, Ксения. Да, такая проверка не делается. Слишком высоки затраты на этапе исполнения. Не делается она и в других паскалях
Прямое подтверждение слов @Admin из Free Pascal
:
program Project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
type
T = 2..5;
var
a: T;
begin
ReadLn(a);
ReadLn;
end.
Нет, Ксения, это Ваша идея.
Компилятор должен не только переводить программу в исполняемый код, он еще обязан делать это по возможности эффективно. Когда Н.Вирт создавал язык, названный им Паскаль, он ввел ограниченный тип, который так и описал:
Тип можно определить, накладывая на другой тип ограничения. Ограничение определяется диапазоном допустимых значений… (цитируется по книге К.Йенсен, Н.Вирт, “Паскаль. Руководство для пользователя и описание языка”, 1982 г.)
По мнению Н.Вирта, ограниченные типы делают программу более наглядной и позволяют (внимание!) “проводить во время выполнения контроль присваиваний”. Но все дело в том, что любой контроль во время выполнения программы, если он не опирается на аппаратуру процессора (т.е. не использует систему аппаратных прерываний), а является программным контролем, драматически замедляет работу откомпилированной программы. Поэтому разработчики компиляторов поначалу делали такой контроль необязательным и включаемым только по специальному запросу, а впоследствии и вовсе от него отказались.
Еще один довод в пользу ограниченных типов - экономия машинной памяти. Это имело смысл несколько десятков лет назад, когда память ЭВМ измерялась единицами мегабайт. Сейчас о какой-то экономии подобного рода говорить смешно.
Как итог, забудьте об “интервальных типах”, как о пережитке прошлого. Не сочтите за рекламу, а просто откройте эту книгу и учитесь писать программы так, как их сейчас принято писать.
Если кому-то интересно, то в Free Pascal
они до сих пор используются, как срезы например. Очень удобно получить срез массива, а потом его передать через тип открытого в подпрограмму.
Ну это как Lazarus - “Delphi для неимущих”, так и подобные “срезы”. Вот в PascalАВС.NЕТ что можно сделать с их помощью такого, что нельзя (хуже, некрасивее, …) сделать иным путем?
4 сообщения перенесены в новую тему: Рассуждения о предназначении PascalABC.NET (внимание - религиозные войны!)
спасибо вам большое за ответ
Пожалуйста, обращайтесь)