1. Массив (array)- это конечный набор элементов одного (базового) типа, которые сохраняются в последовательно размещённых ячейках оперативной памяти и имеют общее имя.
В математике понятию массив соответствуют понятия вектора и матрицы. Различают одно- и многомерные массивы. Двумерный массив данных - это таблица, которая состоит из нескольких строк.
Общий вид конструкции описания типа массива такой:
array[<размер>] of <имя базового типа>;
Размер (количество элементов) массива чаще всего задают в виде диапазона или именем некоторого перечислимого типа данных.
Описать массив можно в разделе описания типов type,в разделе констант constили в разделе объявления переменных var.Имена типов массивов и переменных-массивов указывает пользователь.
Пример. Опишем тип массива mymasyv, объявим постоянный массив (массив-константу) zatraty типа mymasyv и переменные -массивы a, al типа mymasyv и массив Ь, состоящий из 7 элементов целого типа, массив с - из 100 элементов-символов.
Над массивами определена единственная команда присваивания. Например, команда а := al все значения массива al присвоит соответствующим элементам массива а. Все остальные операции определены только над элементами массива. Доступ к элементам массива осуществляется так:
<имя массива>[<номер элемента>]
Номер (его часто называют индексом) записывают в квадратных скобках, например, а[1] - первый элемент массива a, b[tue] -второй элемент массива Ь.
Пример. Элементам описанных выше массивов можно присвоить значения так:
Пример. Создать массив из первых ста положительных целых чисел и вычислить сумму всех его элементов можно так:
s := 0;
fori := 1to100 do
Begin
a[i] := i;
s := s + a[i]
end;
writeln(s);
Задачи поиска в массиве конкретных данных решают методом сканирования всех элементов массива при помощи команд цикла for, whileили repeatи команды ветвления, в которой указывают условие поиска.
Задача 1. Пусть уk — это число вызовов, которые поступают на АТС за k-тую секунду. Предположим, что уk - случайное число со значением от 0 до 6, которое генерируется формулой yk= trunc(abs(7sin(k))). Создать массив у с десятью элементами (k = 1, ..., 10). Вычислить количество вызовов за первые 10 секунд работы АТС и максимальное количество вызовов, которые поступили за одну секунду. Вывести результаты вычислений.
write('Количество вызовов за ', i, '—тую секунду: ');
writeln(y[i]:5); {Выводим это количество}
s := s + y[i]; {Вычисляем количество вызовов}
{Вычисляем max значение}
if y[i] > max then max := y[i];
end;
writeln('Количество вызовов за 10 секунд = ', s:3);
write('Максимальное количество вызовов за одну ');
writeln('секунду = ', mах:3);
readln
end.
Замечание. Случайное целое число со значением от 0 до 6 можно получить также с помощью функции random(7). В начале выполняемого блока следует записать вызов процедуры randomize (она обеспечивает разные последовательности случайных чисел во время повторного выполнения программы).
Задание 1. Модифицируйте программу ATS, используя функцию random, и определите, за какую секунду поступило максимальное количество вызовов.
Задание 2. Решите задачу № 9 своего варианта.
Задача 2. Создать массив у, элементы которого вычисляют по формуле уk=ln(k)-3, где k = 1, 2, ..., 10. Построить массив g, состоящий из отрицательных элементов массива у. Вывести результаты вычислений на экран. Если искомых величин нет, то вывести соответствующее сообщение.
В следующей программе переменная n определяет количество отрицательных элементов в новом массиве.
program DvaMassiva;
uses Crt;
varу, g :array[1..10] of real;
k, n : integer;
Begin
clrscr;
n := 0; {Сначала количество элементов в g = 0}
fork := 1 to10 do
Begin
y[k] := ln(k) - 3;
if y[k] <0 then{Проверяем условие }
Begin
{Увеличиваем количество элементов вектора g}
n := n + 1;
g[n] := y[k]; {Определяем п-ый элемент}
end;
writeln('y(', k, ')= ' , y[k]:7:2);
end;
ifn = 0then
writeln('B массиве у отрицательных элементов нет')
else for k := 1 to n do {Выводим массив g}
writelnCgf , k ,']=', g[k]:7:2);
readln
End.
Задание З. Решите задачу № 10 своего варианта.
2. Двумерные массивы.Двумерные массивы предназначены для работы с табличными данными. В двумерном массиве элементы определяются именем массива и двумя индексами: первый индекс указывает на номер строки, а второй - на номер столбца, на пересечении которых находится элемент. Например, р[1, 2] — второй элемент первой строки массива р.
Рассмотрим примеры объявления массива-константы bal, который состоит из 2 строк и 4 столбцов, массива sutki, содержащего 24´60 элементов целого типа, двухмерного массива р размера 9 на 9 (т.е. с 9´9=81 элементом).
Значения элементам массива sutki можно задать командой присваивания двумя способами:
sutki[16][30] := 5 или sutki[16,30] := 5.
Задача 3. Составить программу для построения таблицы умножения двух чисел (таблицы Пифагора) и занесения её в двумерный массив р. Вывести массив на экран в виде таблицы.
programPifagor;
usesCrt;
constn = 9;
varp :array[l..n, l..n] ofinteger;
i, j : integer;
Begin
clrscr;
fori := 1tondo
Begin
forj := 1tondo
Begin
p[i, j] :=i* j;
write(p[i, j] : 6)
end;
writeln {Обратите внимание на команды вывода}
end;{массива в виде таблицы,}
readln
End.
Задача 4. Для изготовления пяти сортов конфет на кондитерской фабрике используют пять видов сырья. Пусть нормы затрат aijкаждого вида сырья i на производство 1 кг конфет сорта j заданы формулой aij = 2|sin(i)| + j , i,j=1,…, 5. Вывести на экран таблицу затрат сырья (то есть массив а). Определить, для какого сорта конфет (imin) необходимо минимальное количество сырья (min) третьего вида.
programFabrika;
usesCrt;
typezatraty = array[1..5,1..5] ofreal;
var i, j, imin : integer;
min : real;
a : zatraty;
Begin
clrscr;
writeln(' Вид сырья');
writeln(' 1 2 3 4 5');
for i := 1 to 5 do{Создаём таблицу затрат}
Begin
write(i, ' сорт');
forj := 1to5do
Begin
a[i, j] := 2 * abs(sm(i)) + j;
{Выводим элементы i-ой строки}
write(a[i, j]:7:2);
end;
writeln {Переходим на новую строку}
end;
{Предполагаем, что минимальное количество}
imin := 1; {сырья третьего вида необходимо для}
min := а[1, 3]; {производства конфет первого сорта}
for i := 2 to 5 do
ifa[i, 3] < minthen
begin{Определяем искомый сорт конфет}
min := a[i, 3];
imin := i
end;
writeln('Меньше всего сырья третьего вида ');
write('Heo6xonHMO для производства конфет ');
writeln( imin, ' сорта');
readln
End.
Замечание. Пусть задана матрица aij, i, j = 1, 2, ..., n. Тогда выражения i = j, i < j и i > j определяют соответственно элементы главной диагонали, элементы над главной диагональю и элементы под главной диагональю этой матрицы.
Задание 4. Решить задачу № 11 своего варианта.
Задача 5. Задан массив Ь, элементы которого вычисляются по формуле bij= i + j2, где i, j = 1, 2, ..., 5. Создать и вывести массив у, состоящий из элементов массива Ь, значение которых больше 20. Определить количество элементов массива у. Массив Ь вывести в виде матрицы 5x5. Если искомых данных нет, вывести соответствующее сообщение.