Песни о Паскале | страница 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, здесь вас остановит компилятор, – ошибка слишком явна, чтобы он промолчал. Вам не останется ничего иного, как исправить индекс, иначе программа не откомпилируется.