Каталог Индекс раздела
Назад Оглавление Вперед

Лабораторная работа N4
ОБРАБОТКА МАССИВОВ

1. ЦЕЛЬ РАБОТЫ: приобретение практических навыков в составлении программ с массивами.

2. ОСНОВНЫЕ СВЕДЕНИЯ

Массивы - структурированный тип данных с элементами одного типа. Количество элементов определяет размер массива. Например, массив составляют заработные платы сотрудников подразделения предприятия, здесь число элементов равно числу сотрудников; массив образуют набор чисел, их количество равно числу элементов массива. Номер элемента массива называется его индексом. Массив может иметь не один, а большее число индексов. Число индексов называется размерностью массива, например, массив с двумя индексами называется двумерным массивом. Таким двумерным массивом является, в частности, матрица системы n линейных алгебраических уравнений с n неизвестными. В то же время столбец свободных членов этой системы является одномерным массивом.

Массив должен быть описан либо в разделе переменных VAR, либо в разделе типов TYPE следующим образом:

TYPE <имя_типа> = ARRAY [t1,t2....,tn] OF <тип_элементов_массива>;
      VAR <имя_массива>  :  <имя_типа> ;
или
VAR <имя_массива>: ARRAY [t1,t2,...,tn] OF <тип_элементов_массива>;
где tl,...,tn - тип индекса (перечислимый или интервальный).

Например:

1) VAR a: ARRAY [1..5] OF real;

Описан массив а действительных чисел, который состоит из 5 элементов.

2) TYPE t = ARRAY[1..3,1..4] OF integer;
VAR b : t;

Описана матрица b из 3 строк и 4 столбцов, элементы которой являются целыми числами.

3) TYPE
       tl = ARRAY [1..4] OF integer;
       t = ARRAY [1..5] OF t1;
VAR d : t;
       к : t1;

В начале описан тип одной строки t1, затем тип всей матрицы t через тип строки t1. В разделе переменных указано ,что d -двумерный массив размером (5,4), a k - одномерный массив k(4).

2.1. Пример обработки одномерного массива

Дан одномерный массив MAS(12) из вещественных чисел. Найти наибольший элемент массива и его индекс.

program  pr4_1 ;
 const  n = 12;  (*константа n определяет размер массива в описании*)
 type
   m = array [1..n] of real ;      (*  m - тип массива mas  *)
 var mas : m ;
     i, num : integer; max : real;
begin
   for i:=l to n do	 (*ввод элементов массива mas по 1 в строке*)
      begin
         writeln('введите элемент массива', i) ;  
         read(mas[i]);
      end;
   num := 1; max := mas[1];
   for i: =2 to n  do
      if  mas[i] > max then begin
         max := mas[i]; num := i ;
      end;
   writeln;  (* вывод массива в строку*)
   for i:=l to n do write (mas[i]:5:1);   
   writeln;  
   writeln ('максимальный элемент = ', max:4:1,'   его индекс=' ,num );
end.

Переменная max сравнивается с элементами массива, и если элемент массива больше max, то переменной max присваивается значение элемента массива, а переменной num - индекс этого элемента. По окончании цикла переменная max будет иметь значение, равное максимальному элементу массива, а переменная num - значение индекса этого элемента.

2.2. Пример обработки многомерного массива

Как правило, при обработке многомерных массивов используются вложенные циклы, т.е. цикл по столбцам располагается внутри цикла по строкам.

Дана матрица A(3,4), и вектор B(4), состоящие из целых чисел. Умножить матрицу А на вектор В.

program  pr4-2 ;
 const m=3;   n=4;
 var 
    a : array [l .. m, 1 .. n] of integer; (* описание матрицы *)
    b : array [1 .. n] of integer;         (* описание вектора *)
    c : array [1 .. m] of integer;         ( * описание  С  *)
    i, j: integer;
begin
   for i:=l to m do                        (* ввод матрицы  *)
      begin
         writeln ('введите элементы ', i , '-той строки');
         for j:=1 to n do read(a[i, j] ); 
         writeln; 
      end;
   writeln ('введите элементы вектора');
   for j:=1 to n do                        (* ввод  вектора *)
      read (b[ j]);   
   writeln;
   for i:=l to m do
      begin
         c[i]:=0;   	
         for j:=l to n do c[i] := c[i]+a[i,j]* b[j];
      end;
   for i:=l to m do                        (*форматный вывод матрицы  *)
      begin
         for j:=1 to n do write(a[i,j]:4);  
         writeln; 
      end;
   for j:=l to n do write(b[j]:4);         (* вывод  массива B *)
   writeln ;
   for i:=l to m do write(c[i]:4);         (* вывод  массива С  *)
   readln;
end.

В программе элементы матрицы вводятся по строкам по одному с подтверждением клавишей Enter. А выводятся в общепринятом виде: каждая строка матрицы с новой строки экрана (цикл i по строкам внешний, а цикл j - внутренний).

3. ВЫПОЛНЕНИЕ РАБОТЫ

  1. Набрать и откомпилировать приведенные выше программы, исправить выявленные ошибки. Ввести элементы массива, убедиться в правильности выполнения программ.
  2. Составить и выполнить программы с применением массивов согласно вариантам заданий .

Варианты задания 1.

Ввести массив А из 10 элементов

  1. Найти наибольший элемент и переставить его с первым элементом. Преобразованный массив вывести.
  2. Найти наименьший элемент и переставить его с последним элементом. Преобразованный массив вывести.
  3. Найти произведение положительных элементов и вывести его на экран.
  4. Найти произведение отрицательных элементов и вывести его на экран.
  5. Найти сумму положительных элементов и вывести ее на экран.
  6. Найти сумму отрицательных элементов и вывести ее на экран.
  7. Найти сумму элементов, больших 3 и меньших 8 и вывести ее на экран.
  8. Найти сумму элементов, меньших по модулю 5 и вывести ее на экран.

Варианты задания 2

  1. Даны матрица A размером m*n и вектор В размером m. Записать на главную диагональ элементы вектора, а в вектор - элементы главной диагонали.
  2. Выбрать максимальный элемент матрицы С (размер m*n), элементы четных строк разделить на максимальный элемент, а к элементам нечетных прибавить максимальный элемент .
  3. Найти минимальный элемент матрицы С (размер m*n), и поменять его местами с первым элементом.
  4. Дана матрица Е размером m*n. Вычислить суммы элементов каждого столбца. Определить наибольшее значение этих сумм и номер соответствующего столбца.
  5. В матрице К размером m*n найти в каждом столбце произведение отрицательных элементов и количество нулевых элементов в матрице .
  6. Даны две матрицы А и В одинаковой размерности m*n. Получить матрицу C = max (ai,j, bi,j ), и матрицу D = min (ai,j, bi,j).
  7. Дана матрица Р размером m*n. Найти сумму минимальных элементов каждого столбца матрицы.
  8. Даны две матрицы: А размером m*k и В размером k*n. Получить матрицу С=A*В.

4. КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Что такое массив? индекс элемента массива?
  2. В каких пределах изменяются индексы элементов массива?
  3. Как ввести и вывести элементы вектора в строку и в столбец ?
  4. Способы описания массивов.
  5. Вывод матрицы по строкам и по столбцам.

Каталог Индекс раздела
Назад Оглавление Вперед