Песни о Паскале | страница 162
Пример 1. Трем элементам массива Names присваиваем фамилии хоккеистов.
> Names[1]:= ’Петров’;
> Names[2]:= ’Михайлов’;
> Names[3]:= ’Харламов’;
Пример 2. Сравниваем третий и четвертый элементы массива Ratings. Здесь индексы заданы через целочисленную переменную n.
> …
> Ratings[3]:= 12;
> Ratings[4]:= 8;
> n:=3;
> if Ratings[n] > Ratings [n+1] then … else …;
Как видите, индекс в массиве можно вычислять, а это открывает дорогу к циклам. И мы двинемся ею немедленно!
Ввод и вывод – это те задачи, не решив которые, не стоит помышлять о применении массивов. Ни то, ни другое не сделать одним махом. Здесь, как и для множеств, нужны циклы, обрабатывающие отдельные элементы массива.
Взять, к примеру, массив Names, ввести который можно так:
> for i:=1 to 30 do Readln(F, Names[i]);
Здесь F – это открытый для чтения текстовый файл, каждая строка которого содержит фамилию.
На первый взгляд все просто. Просто, да не гладко, – это будет работать лишь с файлом, в котором не менее 30 строк (по числу циклов). А иначе случится ошибка: противозаконное чтение за пределами файла. Как избежать её? Внимательней присматривайте за концом файла, вот так:
> i:=1;
> { пока не конец файла и не введены все элементы }
> while not Eof(F) and (i<=30) do begin
> Readln(F, Names[i]);
> i:= i+1;
> end;
А вот ещё один хороший вариант.
> for i:=1 to 30 do begin
> if Eof(F) then break; { если конец файла, прервать цикл }
> Readln(F, Names[i]);
> end;
Вывод массива в файл не представляет труда, вот пример.
> for i:=1 to 30 do Writeln(F, Names[i]);
Разумеется, что файловая переменная F должна быть открыта для записи.
Объявление массива, как сказано, содержит границы для индексов: MIN – номер первого элемента, и MAX – номер последнего. А что случится при попытке обратиться к элементу с меньшим, чем MIN номером? Или наоборот – с большим, чем MAX? Иначе говоря, что случится при попытке доступа к несуществующему элементу массива? Такие ошибки преследуют даже опытных программистов, а последствия зависят от способа, которым вы совершите сей проступок.
Предположим, в программу вкрался такой оператор:
> Names[200]:= ’Синичкин’;
Поскольку в массиве Names нет элемента с индексом 200, здесь вас остановит компилятор, – ошибка слишком явна, чтобы он промолчал. Вам не останется ничего иного, как исправить индекс, иначе программа не откомпилируется.