Лекция
Тема: «Обработка одномерных массивов в программах на Turbo Pascal»
План
1. Понятие массива и его описание
2. Основные операции с массивами
3. Типовые алгоритмы обработки массивов
1. Понятие массива и его описание в языке Паскаль.
Если в программе необходимо описать несколько переменных, которые обозначают некоторую однородную совокупность, то не нужно описывать отдельно переменные. Можно воспользоваться таким понятием как массив данных.
Массив - это набор переменных, которые описывают набор однородных значений.
Для описания массива можно воспользоваться двумя способами:
· · вначале описать пользовательский тип массива, а затем в разделе описания переменных описать переменные типа массив. Для описания пользовательского типа массив используют запись:
Type Mas=Array [1..кон. число элементов] Of стандартный тип;
Type Mas=Array [1..10] Of
Integer;
Mas1=Array [1..15] Of Real;
Mas2=Array [1..20] Of
Char;
Var A: Mas;
B: Mas1;
C: Mas2;
В данном случае описан массив А, состоящий из 10 целых чисел, массив В, состоящий из 15 дробных чисел, массив С, состоящий из 20 символов.
Var A:Array [1..10] Of Integer;
B:Array [1..15] Of Real;
C:Array [1..20] Of Char;
2. Основные операции с массивами
Обработка массивов выполняется поэлементно. Для обращения к конкретному элементу массива используют запись:
Например:
Над элементами массива можно выполнять любые операции:
A[1]:=4;
B[5]:=B[5]+5;
С[12]:=C[12]*8;
Если требуется обработать не конкретный элемент массива, а все его элементы, то они обрабатываются поэлементно. При этом, так как заранее известно количество элементов, то можно обрабатывать элементы массива с помощью цикла FOR...DO, в котором счетчик цикла i будет обозначать номер элемента массива.
Рассмотрим использование цикла для обработки массива на примере операций ввода и вывода массива.
Ввод массива
Для ввода массива используется операторы READ, READLN. Эти операторы повторяются для каждого элемента массива.
Type Mas = Array [1..20] Of
Real;
Var A: Mas;
I,N: Integer;
Begin
Write ('Введите количество элементов в массиве: ');
Readln
(N);
For
i:=1 To N Do
Begin
Write ('Введите значение ',i,'-го элемента массива: ');
Readln
(A[i])
End.
Однако вводить массив с клавиатуры можно только при работе программы, когда она используется в реальных целях и надо ввести реальные данные. В процессе же написания программы, когда данные вводятся произвольно, можно избежать процедуры ввода массива с клавиатуры. Для этого используют способ автоматического заполнения массива случайными числами.
Для получения случайного числа используют функцию Random. Эта функция возвращает случайное значение на отрезке от 0 до 1. Для генерации случайного числа на произвольном отрезке от А до В можно использовать запись вида:
(B-A)*Random+A
Для запуска процедуры генерации случайных чисел используют команду RANDOMIZE. Если команду не использовать, массив будет заполняться числами автоматически, но одними и теми же;
Например:
Type Mas = Array [1..20] Of
Real;
Var A: Mas;
X,Y,I,N: Integer;
Begin
Write(‘Введите начало и конец отрезка: ’);
Readln (X, Y);
Randomize;
Write ('Введите количество элементов в массиве: ');
Readln
(N);
For
i:=1 To N Do
A[i]:=
(Y-X)*Random+X;
End.
Вывод массива
Для вывода массива также используется цикл, в котором каждый элемент выводится отдельно с помощью операторов WRITE или WRITELN.
Приведем пример вывода нашего введенного массива:
Writeln (A[I]);
В данном случае элементы массива будут выведены в столбик.
Write (A[I],' ');
Writeln (‘A[’,I,’]= ',A[I]);
В этом случае массив выводится в столбец, но каждый элемент имеет комментарий.
3. Типовые алгоритмы обработки массивов
Помимо ввода и вывода над массивами можно выполнять ряд действий, которые описываются стандартными алгоритмами.
К таким стандартным операциям относят:
· · нахождение суммы и произведения:
s: = 0;
p: = 1;
For i: = 1 To n Do
Begin
s: = s + a[i];
p: = p * a[i];
End;
· · нахождение максимального и его номера:
max:=a[1];
max:=1;
For
i:=2 To n Do
if max < a[i] Then
Begin
max:= a[i];
nom:=i;
End;
· · нахождение количества элементов, отвечающих условию:
k:
= 0;
For
i: = 1 To n Do
If условие Then
k: = k + 1;
Пример: Дана информация о росте группы студентов. Составить программу, находящую средний рост, кол-во студентов, рост которых выше среднего, минимальный рост в группе.
{Подключаем модуль по работе с экраном}
Uses Crt;
{Описываем пользовательский тип массив из 30 элементов}
Type Mas = Array [1..30] Of Integer;
{Описание переменных}
Var rost: Mas;
n, i, s, min, k: Integer;
sr: Real;
Begin
{Очистка экранов}
ClrScr;
{Вводим количество элементов в массиве для ввода}
Write (‘Сколько человек в группе?’);
ReadLn (n);
{В цикле вводим рост каждого из студентов}
WriteLn (‘Введите рост: ’);
For
i: = 1 To n Do
Begin
Write
(i, ‘-го студента: ’);
ReadLn
(rost[i]);
End;
{Вначале сумма равна 0}
s: = 0;
{В цикле суммируем рост каждого студента}
For i: = 1 To n Do
s:
= s + rost[i];
{Находим средний рост группы}
sr: = s/n;
{Выводим найденное среднее значение на экран}
WriteLn (‘Средний рост = ’, sr:6:2);
{Вначале количество равно 0}
k: = 0;
{В цикле находим количество элементов, которые больше среднего значения}
For i: = 1 To n Do
If
rost[i] > sr Then
k: = k + 1;
{Печатаем найденное значение}
WriteLn (‘Количество = ’, k:2);
{Вначале минимальное равно первому элементу}
min: = rost[1];
{В цикле определяем минимальное значение массива}
For i: = 1 To n Do
If
min > rost[i] Then
min: = rost[i];
{Выводим на экран минимальное значение}
WriteLn (‘’Минимальный рост = , min);
{Делаем паузу для просмотра}
Readln;
End.
Вопросы для самоконтроля