Читаем Песни о Паскале полностью

В сравнении с объявлением переменной разница мизерная: вместо двоеточия видим знак равенства, а вместо имени переменной – имя типа. Но каковы последствия! Объявите лишь однажды нужный вам тип, и тогда применяйте его, где угодно. Вот объявления типов для указанных выше переменных.


TYPE { примеры объявления типов-массивов }

      { тип для 30 строковых переменных с фамилиями учеников класса }

      TNames = ARRAY [1..30] OF string;


      { тип для 30 байтовых переменных с оценками учеников }

      TRatings = ARRAY [1..30] OF byte;


      { тип для 16 целых переменных с очками, набранными в чемпионате }

      TChampionShip = ARRAY [1..16] OF integer;


Здесь буква «T» в имени типа напоминает о назначении этого идентификатора (помните наше добровольное соглашение об именах?). Теперь учрежденные типы данных можно употребить для объявления переменных и параметров в любом месте программы, вот пример.


TYPE { тип для 30 байтовых переменных с оценками учеников }

      TRatings = ARRAY [1..30] OF byte;


VAR { 30 байтовых переменных с оценками учеников }

      Ratings : TRatings;


procedure ABC (var arg: TRatings); { параметр процедуры }

var A, B, C : TRatings;       { локальные переменные }

begin

      ...

end;


Здесь тип TRatings служит для объявления переменных и параметров в трех местах программы. В будущем мы всегда будем объявлять типы – как для массивов, так и для других сложных наборов данных.

Доступ к элементам (индексация)

Переменной-массивом можно ворочать как единым целым, например, при копировании одного массива в другой. Но чаще приходится работать с отдельными его элементами, как «выдернуть» их из массива?

Очень просто: воспользуйтесь индексацией, – она знакома вам по работе со строками. Как и для доступа к отдельному символу строки, для доступа к элементу массива надо указать его индекс, то есть порядковый номер в массиве. Индекс указывают в квадратных скобках, стоящих после имени массива, он представляет собой выражение порядкового типа. Кстати, сходство со строками не случайно, ведь строка – это особый род массива, составленного из отдельных символов.

Рассмотрим примеры доступа к элементам объявленных выше массивов.

Пример 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 должна быть открыта для записи.

Ошибки индексации

Перейти на страницу:

Похожие книги

Сломанная кукла (СИ)
Сломанная кукла (СИ)

- Не отдавай меня им. Пожалуйста! - умоляю шепотом. Взгляд у него... Волчий! На лице шрам, щетина. Он пугает меня. Но лучше пусть будет он, чем вернуться туда, откуда я с таким трудом убежала! Она - девочка в бегах, нуждающаяся в помощи. Он - бывший спецназовец с посттравматическим. Сможет ли она довериться? Поможет ли он или вернет в руки тех, от кого она бежала? Остросюжетка Героиня в беде, девочка тонкая, но упёртая и со стержнем. Поломанная, но новая конструкция вполне функциональна. Герой - брутальный, суровый, слегка отмороженный. Оба с нелегким прошлым. А еще у нас будет маньяк, гендерная интрига для героя, марш-бросок, мужской коллектив, волкособ с дурным характером, балет, секс и жестокие сцены. Коммы временно закрыты из-за спойлеров:)

Лилиана Лаврова , Янка Рам

Современные любовные романы / Самиздат, сетевая литература / Романы