Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции программирование.doc
Скачиваний:
25
Добавлен:
01.03.2025
Размер:
1 Мб
Скачать
☆

Массивы

Большинство программ работают не с одним числом, а с несколькими числами. Например, программа бухгалтерского учёта хранит и обрабатывает информацию о зарплате многих работников. Леталка-стрелялка помнит координаты многих врагов, пуль и т.д. Простая переменная для этого не годится. Нужна такая переменная, которая одна хранит несколько чисел. Для этого используется индексированная переменная или массив. (В массиве можно хранить не только числа. Классный журнал – массив строк. Изображения всех противников в игре – массив картинок. )

Чтобы получить одно из нескольких чисел, хранящихся в массиве, после имени переменной указывается индекс – номер этого числа в квадратных скобках. Например, a[5].

Е сли нужно одинаковым образом обработать несколько чисел в массиве, в качестве индекса берётся переменная-счётчик, которая меняется в цикле, пробегая по очереди все числа в массиве. Например, в задаче требуется сложить все числа, кратные 3, из массива a, содержащего 20 целых чисел.

В разделе VAR массив объявляется с помощью слова array, после которого в квадратных скобках указывают пределы, в которых изменяется индекс. Например, описание a:array[1..20] of integer; говорит о том, что в массиве 20 чисел, нумерация начинается с 1, и все числа – целые. Нумеровать не обязательно с единицы. Возможны и другие описания:

Нарушать указанные в описании пределы нельзя. В приведенном примере попытка использовать элемент массива b[6] или b[-1] приведёт к ошибке.

Каким образом занести исходные данные в массив? Приведём несколько способов:

1. Заполнение массива с клавиатуры:

2 . Заполнение массива случайными числами. Например, заполним массив a двадцатью случайными числами в пределах от 10 до 40:

3. Заполнение массива по формулам. Например, занесём координаты двадцати точек окружности в массивы X и Y.

4 . А если программисту заранее известны конкретные числа, которые нужно занести в массив? Простой, но скучный способ – занести присваиванием: Вместо этого можно воспользоваться констант-массивом. Он объявляется не в разделе VAR, а в разделе CONST и заполняется числами в момент объявления: Хотя этот массив и объявлен в разделе констант, но, так как его тип указан явным образом, то это – типизованный констант-массив, который можно изменять, как и обычный массив.

5. Если один массив уже заполнен числами, и его нужно скопировать без изменений в другой массив (описанный точно так же), то это можно выполнить простым присваиванием: b:=a;. Например, это может понадобиться, если массив a будет изменяться, но позже понадобится снова с прежними числами. Для этого сначала сделаем резервную копию, а после того, как поработали с массивом, восстановим его из копии тоже присваиванием a:=b;.

Решение задач с массивами

Заполнить массив двадцатью случайными числами в пределах от 1 до 99, распечатать их в одну строку, а на следующей строке распечатать тот же массив в обратном порядке, выделив цветом числа, кратные трём.

program massiv1;

uses crt;

var

a:array[1..20] of integer;

i:integer;

begin

randomize; clrscr;

for i:=1 to 20 do

begin

a[i]:=1+random(99); write(a[i],’ ’);

end;

writeln;

for i:=20 downto 1 do

begin

if a[i] mod 3=0 then

textcolor(12)

else

textcolor(15);

write(a[i],’ ’);

end;

end.

Следующая программа вводит с клавиатуры десять чисел, располагает их в одну строку и печатает на следующей строке, каких чисел больше, чётных или нечётных, и на сколько.

Перед циклом проверки и распечатки переменные kc и kn (количество чётных и количество нечётных) обнулим. Чётным элемент массива является в том случае, если делится на два без остатка, то есть, остаток (mod) при делении на 2 равен 0. В этом случае мы увеличиваем (inc) счётчик чётных чисел на 1. Если это не так, увеличиваем на 1 счётчик нечётных чисел.

program massiv2;

var

n:array[1..10] of integer;

i,kc,kn:integer;

begin

for i:=1 to 10 do

begin

write(’N[’,i,’]=’); readln(n[i]);

end;

writeln;

kc:=0; kn:=0;

for i:= 1 to 10 do

begin

write(n[i],’ ’);

if n[i] mod 2=0 then inc(kc) else inc(kn);

end;

if kc>kn then

writeln(’Чётных больше на ’,kc-kn)

else

if kn>kc then

writeln(’Нечётных больше на ’,kn-kc)

else

writeln(’Чётных и нечётных поровну’);

end.

Два массива заполнены двадцатью случайными числами в пределах от 1 до 5. Программа заполняет третий массив элементами, совпадающими в первых двух массивах, а на месте остальных ставит нули.

program massiv3;

var

a,b,c:array[1..20] of integer;

i:integer;

begin

randomize;

for i:=1 to 20 do

begin

a[i]:=1+random(5); write(a[i]:3);

end; writeln;

for i:=1 to 20 do

begin

b[i]:=1+random(5); write(b[i]:3);

end; writeln;

for i:=1 to 20 do

begin

if a[i]=b[i] then c[i]:=a[i] else c[i]:=0;

write(c[i]:3);

end;

end.

В этой программе при распечатке массивов мы не использовали, как раньше, пробел для разделения чисел, а указали после двоеточия, сколько знаков предоставить для числа. Это удобно, когда массивы располагаются на нескольких строках: числа будут столбиком друг под другом.