Массив – это совокупность элементов, имеющих одинаковое имя и отличающихся номером (индексом) их расположения в последовательности.
Типы данных, которые мы до сих пор рассматривали, называют скалярными. Их использование не всегда эффективно. Так, если в задаче данные являются родственными, например оценки группы студентов, то скалярные типы применять неудобно. Для определения количества студентов (KolStud), имеющих балл (BallStud) выше среднего (Sr), пришлось бы записать 25 операторов вида
KolStud := 0;
If BallStud1 > Sr Then
KolStud := KolStud + 1;
If BallStud2 > Sr Then
KolStud := KolStud + 1;
и т. д.
Поскольку обрабатываются данные одного типа, удобнее в этом случае использовать массивы.
Примеры массивов:
1) последовательность чисел (оценок)
х1, x2, x3, ..., xn – 1 индекс
2) матрица чисел
Примером представления данных в виде матрицы может служить запись коэффициентов системы линейных уравнений.
Для описания массива используется служебное слово Array(Массив). Кроме того, необходимо задать:
1) имя массива;
2) диапазон изменения каждого индекса..
Количество индексов называется размерностью массива. По количеству индексов различают:
Как и скалярные переменные, массивы описываются в разделе описания переменных (т.е. после служебного слова Var), например:
Var
Имя_Массива : Array[Диапазоны_индексов] Of Тип_Элементов_Массива;
где Диапазоны_индексов – список границ изменения каждого индекса.
Пример.
Const
N=100;
M=5;
Var
X:Array[1..N] Of Real; {массив вещественных чисел}
A:Array[1..M,1..M] Of Integer; {мaтрица целых чисел}
Следует различать описание массива и значение его элемента при обработке (внутри программы, после первого Begin). Элемент массива в программе записывают в виде
Имя_Массива [индекс] или
Имя_Массива [список индексов]
Пример.
X[2] => x2
A[i,j] => Aij
Ваll [k,i+2] => Ballk,i+2
Индекс – это число, переменная или выражение перечисляемого целого или символьного типа.
Рассмотрим пример программы обработки массива.
Задача. Ввести в ЭВМ оценки студентов одной группы по одному предмету. Подсчитать средний балл и количество оценок выше средней.
Алгоритм
1. Ввести оценки.
2.1. Положить сумму баллов = 0.
2.2. Для номера оценки (i) от 1 до Количества_студентов_в_группе выполнить
Подсчитать сумму баллов.
3. Вычислить средний балл.
4. Положить количество оценок выше средней, равной 0.
5. Для номера (i) от 1 до Количества_студентов_в_группе выполнить
Подсчитать количество оценок выше средней.
6. Закончить.
Уточняем алгоритм.
1.1. Ввести количество оценок n.
1.2. Для номера оценки (i) от 1 до n выполнить.
1.2.1. Ввести баллi
2.1. Положить сумму баллов = 0.
2.2. Для номера оценки (i) от 1 до n выполнить
2.2.1. Сумма_баллов = сумма_баллов + баллi
3. Вычислить средний балл = сумма_баллов / n.
4. Положить количество оценок выше средней = 0.
5. Для номера от 1 до n выполнить
5.1. Если баллi > среднего, то
количество = количество +1.
Программа для этого алгоритма будет иметь вид
Program Ball;
Const
M=25;
Var
B:Array[1..M] OF Integer;
S:Real; {сумма и средний балл}
N,I,K:Integer; {K - счетчик}
Begin
Writeln('Введите количество оценок'); { п.1.1 }
Read (N);
Writeln('Введите оценки'); { п.1.2 }
For I:= 1 To N Do
Read(B[I]);
S:=0; { п.п. 2.1 - 2.2 }
For I:= 1 To N Do
S := S+B[I];
S := S/N; { п.3 - средний балл }
Writeln('Средний балл - ',S);
K: = 0; { п.4 }
For I:= 1 To N Do { п.5 }
If B[I]>S Then
K:=K+1;
Writeln('Количество оценок выше средней = ',K);
End.
Итак, программа обработки массива – это цикл, в котором параметром является индекс (номер элемента). Если индексов несколько, то для обработки массивов используются циклы, вложенные друг в друга. Количество таких циклов зависит от числа индексов.
Примеры программ обработки массивов
Пример 1. Ввести в ЭВМ массив, содержащий не более 100 чисел вещественных чисел. Вывести числа, стоящие на четных местах в массиве.
Рrogram Wtr;
Const
Nmax=100;
Var
X : Array[1..Nmax] Of Real;
i, n : Integer;
Begin
Writeln('Введите количество чисел');
Readln(n);
Writeln('Введите массив');
For i:= 1 To n Do
Read (X[i]);
For I:= 1 To n div 2 Do
Write (X[2*i]);
End.
Пример 2. Ввести в ЭВМ массив (последовательность) из n чисел (n<=100). Подсчитать количество положительных и отрицательных чисел, их суммы и средние значения.
Алгоритм (общий подход).
1. Ввести числа.
2. Положить количества положительных, отрицательных чисел и суммы = 0
3. Для номера числа от 1 до n выполнить
вычислить соответствующие суммы и количества
4. Вывести суммы, количества и средние.
5. Закончить.
Уточним этот алгоритм.
1.1. Ввести количество чисел n
1.2. Для номера числа (i) от 1 до n выполнить
ввести числоi
2. Положить количества положительных, отрицательных чисел и их сумм =0
3. Для номера числа от 1 до n выполнить
3.1. Если числоi >0, то
а) Количество_Пол_Чисел = Количество_Пол_Чисел +1 и
б) Сумма_Пол_Чисел = Сумма_Пол_Чисел + числоi
иначе
если числоi >0, то
а) Количество_Отр_Чисел = Количество_Отр_Чисел+1 и
Writeln('Среднее отрицательных чисел = ',Sro:8:2);
End
Else
Writeln('В массиве нет отрицательных чисел.');
If Kp<>0 Then
Begin
Srp:= Sp/Kp;
Writeln('Количество положительных чисел = ', Kp);
Writeln('Сумма положительных чисел = ', Sp:8:2);
Writeln('Среднее положительных чисел = ', Srp:8:2);
End
Else
Writeln('В массиве нет положительных чисел.');
End.
11. Особенности алгоритмов и программ с накапливанием
Вычисление суммы и произведения нескольких чисел, а также подсчет количества в большинстве языков программирования выполняется постепенно, путем накапливания.
1) Сумма вычисляется по формуле
сумма := cумма + очередное слагаемое;
Перед вычислениями начальному значению суммы нужно присвоить ноль.
2) Произведение вычисляется по формуле
произведение := произведение * очередной сомножитель
Перед вычислениями начальному значению произведения нужно присвоить 1.
3) Подсчет количества выполняется по формуле, подобной формуле для вычисления суммы: