При использовании массивов
наиболее распространенной ошибкой является выход значения индексного выражения
за допустимые границы, указанные при объявлении массива.
Если в качестве индекса
используется константа, и ее значение выходит за допустимые границы, то такая
ошибка обнаруживается на этапе компиляции программы. Например, если в программе
объявлен массив
day
: array[0..6] of string[ll],
то во время компиляции
программы инструкция
day
[7] := 'Воскресенье';
будет помечена как
ошибочная.
Если для доступа к
элементу массива в качестве индекса используется переменная или выражение, то
возможно возникновение ошибки (исключения) времени выполнения программы. Например,
если в программе объявлен массив
tab1:
array [1..N] of integer;
то инструкция
for
i:=0 to N do tab1[i] := 5;
формально является
верной, и ее компиляция будет успешно выполнена.
Однако во время выполнения
программы, при попытке присвоить значение несуществующему нулевому элементу
массива tab, на экран будет выведено сообщение об ошибке. Вид окна и текст сообщения
зависит от того, откуда запущена программа.
При запуске рассматриваемой
программы из Delphi возникает исключение, и сообщение имеет вид, приведенный
на рис. 5.22.
Рис. 5.22. Сообщение
об ошибке при обращении к несуществующему элементу массива (программа запущена
из Delphi)
Если программа запущена
из Windows, то при попытке присвоить значение несуществующему элементу массива
на экран будет выведено сообщение Range check error (ошибка контроля диапазона).
В заголовке окна будет указано имя приложения, в процессе выполнения которого
произошла ошибка (рис. 5.23).
Рис. 5.23.
Сообщение об ошибке при обращении к несуществующему элементу массива (программа
запущена из Windows)
Поведение программы
при выходе индексного выражения за границы диапазона допустимых значений определяется
настройкой компилятора.
Для того чтобы программа
контролировала значения индексных выражений (в этом случае Delphi добавляет
в выполняемую программу инструкции, обеспечивающие этот контроль), необходимо
на вкладке Compiler диалогового окна Project Options, которое
открывается выбором из меню Project команды Options, установить
флажок Range checking (Контроль диапазона), находящийся в группе Runtime
errors (Ошибки времени выполнения) (рис. 5.24).
Знаете ли Вы, почему "черные дыры" - фикция? Согласно релятивистской мифологии, "чёрная дыра - это область в пространстве-времени, гравитационное притяжение которой настолько велико, что покинуть её не могут даже объекты, движущиеся со скоростью света (в том числе и кванты самого света). Граница этой области называется горизонтом событий, а её характерный размер - гравитационным радиусом. В простейшем случае сферически симметричной чёрной дыры он равен радиусу Шварцшильда". На самом деле миф о черных дырах есть порождение мифа о фотоне - пушечном ядре. Этот миф родился еще в античные времена. Математическое развитие он получил в трудах Исаака Ньютона в виде корпускулярной теории света. Корпускуле света приписывалась масса. Из этого следовало, что при высоких ускорениях свободного падения возможен поворот траектории луча света вспять, по параболе, как это происходит с пушечным ядром в гравитационном поле Земли. Отсюда родились сказки о "радиусе Шварцшильда", "черных дырах Хокинга" и прочих безудержных фантазиях пропагандистов релятивизма. Впрочем, эти сказки несколько древнее. В 1795 году математик Пьер Симон Лаплас писал: "Если бы диаметр светящейся звезды с той же плотностью, что и Земля, в 250 раз превосходил бы диаметр Солнца, то вследствие притяжения звезды ни один из испущенных ею лучей не смог бы дойти до нас; следовательно, не исключено, что самые большие из светящихся тел по этой причине являются невидимыми." [цитата по Брагинский В.Б., Полнарёв А. Г. Удивительная гравитация. - М., Наука, 1985] Однако, как выяснилось в 20-м веке, фотон не обладает массой и не может взаимодействовать с гравитационным полем как весомое вещество. Фотон - это квантованная электромагнитная волна, то есть даже не объект, а процесс. А процессы не могут иметь веса, так как они не являются вещественными объектами. Это всего-лишь движение некоторой среды. (сравните с аналогами: движение воды, движение воздуха, колебания почвы). Подробнее читайте в FAQ по эфирной физике.