Лекция

Тема: «Обработка одномерных массивов в программах на 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 [4], B[12], C[1]

Над элементами массива можно выполнять любые операции:

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;

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.

Приведем пример вывода нашего введенного массива:

For I:=1 To N Do

Writeln (A[I]);

В данном случае элементы массива будут выведены в столбик.

For I:=1 To N Do

Write (A[I],' ');

В этом случае элементы массива будут выведены в строку через пробел

For I:=1 To N Do

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.

 

Вопросы для самоконтроля

   1.      Назнаачение и способы описания одномерных массивов программа;

1.              Обращение к элементу массива;

2.              Способы ввода массивов в программах;

3.              Способы вывода массивов в программах;

4.              Блок-схемы основных алгоритмов по обработке массивов