Здавалка
Главная | Обратная связь

ОБРАБОТКА ДВУМЕРНЫХ МАССИВОВ



Цель работы: выработать практические навыки в составлении алгоритмов, написании и отладке программ на селективную обработку двумерных массивов.

Общие указания

 

В Паскале многомерные массивы могут определяться последовательно: сначала объявляется один массив, затем второй, элементами которого являются объявленные ранее массивы, и т.д. Один массив вкладывается в другой, и степень такого вложения не ограничена.

Например:

 

type str=array[1..10] of real;

tabl=array[1..5] of str;

Приведенное описание двумерного массива можно заменить эквивалентным описанием

 

type tabl=array[1..5,1..10] of real;

При обработке двумерных массивов обычно применяются вложенные циклы. Цикл, охватывающий другие циклы, называется внешним, остальные циклы - внутренними.

Пример выполнения задания 1 лабораторной работы

Пример 21. В матрицы a(4,5) найти произведение положительных элементов.

 
 

Блок-схема

Порядок работы:

Шаг 1. Вводим матрицу a(4,5).

Шаг 2. Задаем начальное значение произведения p=1.

Шаг 3. Организовываем цикл, который перебирает строки матрицы (то есть индекс i), начиная с 1-й и заканчивая 4-й.

Шаг 4. Организуем цикл, который перебирает столбцы матрицы (то есть индекс j), начиная с 1-го и заканчивая 5-м.

Шаг 5. Если aij > 0, тогда присваиваем p = p × aij.

Шаг 6. Если цикл по j не закончился, идем на начало цикла, то есть на шаг 4.

Шаг 7. Если цикл по i не закончился, идем на начало цикла, то есть на шаг 3.

Шаг 8. Печатаем p.

Шаг 9. Останов.

Пример 22. Найти сумму четных элементов третьей строки матрицы a(4,5).

 

Порядок работы:

Шаг 1. Вводим матрицу a(4,5).

Шаг 2. Устанавливаем начальное значение суммы s = 0.

Шаг 3. Задаем номер обрабатываемой строки и = 3.

Шаг 4. Организовываем цикл, который перебирает столбцы матрицы (то есть индекс j), начиная с 1-го и кончая 5-м.

Шаг 5. Если aij четное, тогда присваиваем s = s + aij.

Шаг 6. Если цикл по j не закончился, идем на начало цикла, то есть на шаг 4.

Шаг 7. Печатаем s.

Шаг 8. Останов.

 

Пример 23. Вычислить средние геометрические положительных элементов каждой строки матрицы X(5,8). Определить минимальное значение этих средних и номер соответствующей строки.

Программа имеет вид:

program pr23;

uses crt;

const m=5; n=8;

type stroka = Array[1..n] of real;

matr = array[1..m] of stroka;

stolb = array[1..m] of real;

var x:matr; b:stroka; sr:stolb; p,min:real;

i,j,k,nmin:integer; z:char;

begin clrscr;

for i:=1 to m do begin

WRITELN('ВВЕДИ ',N,' ЧИСЕЛ ',I,'-Й СТРОКИ');

FOR J:=1 TO N DO READ(X[I,J]); END;

WRITELN(' ':10,'ИСХОДНАЯ МАТРИЦА ');

FOR I:=1 TO M DO BEGIN

FOR J:=1 TO N DO WRITE(X[I,J]:7:1);

WRITELN;END;

{ВЫЧИСЛЕНИЕ СРЕДНИХ ГЕОМЕТРИЧЕСКИХ}

for i:=1 to m do

begin

b:=x[i]; p:=1; k:=0;

for j:= 1 to n do

if b[j]>0 then

begin p:=p*b[j];k:=k+1; end;

IF K>0 THEN SR[I]:=EXP(LN(P)/K) ELSE SR[I]:=-1;

END; {FOR}

{ПОИСК МИНИМАЛЬНОГО ЭЛЕМЕНТА}

min:=1E20;

for i:= 1 to m do

if( sr[i]<min) and (sr[i]>0) then

BEGIN MIN:=SR[I];NMIN:=I; END;

WRITELN;WRITELN(' ':5,' РЕЗУЛЬТАТЫ РАСЧЕТА');

FOR I:=1 TO M DO

WRITELN('СР.ГЕОМ .',I,'-Й СТРОКИ=',SR[I]:7:2);

FOR I:= 1 TO 34 DO WRITE(' = ');

WRITELN;

WRITELN('МИНИМАЛЬНОЕ СРЕДНЕЕ = ',MIN:7:2);

WRITELN('НОМЕР СТРОКИ = ',NMIN:2);

z:=readkey

end.

Примеры выполнения задания 2 лабораторной работы

 

Пример 24. Найти сумму четных элементов главной диагонали матрицы a(5,5).

Порядок работы:

Шаг 1. Вводим матрицу a(5,5).

Шаг 2. Устанавливаем начальное значение суммы s=0.

Шаг 3. Организовываем цикл, который перебирает строки матрицы (то есть индекс i), начиная с 1-й и заканчивая 5-й.

Шаг 4. Организовываем цикл, который перебирает столбцы матрицы (то есть индекс j), начиная с 1-го и заканчивая 5-м.

Шаг 5. Если aij четное и i = j, присваиваем s = s + aij.

Шаг 6. Если цикл по j не закончился, идем на начало цикла, то есть на шаг 4.

Шаг 7. Если цикл по i не закончился, идем на начало цикла, то есть на шаг 3.

Шаг 8. Печатаем s.

Шаг 9. Останов.

 

Пример 25. Вычислить произведение от умножения суммы положительных элементов главной диагонали на сумму нечетных элементов побочной диагонали матрицы А(6,6).

 

Программа имеет вид

program pr25;

uses crt;

const n=6;

type raz=1..n;

matr=array[raz,raz] of integer;

var a:matr; p,s1,s2,i,j:integer; z:char;

BEGIN CLRSCR;

FOR I:=1 TO N DO BEGIN

WRITELN('ВВЕДИ ',N,' ЧИСЕЛ ',I,'-Й СТРОКИ');

FOR J:=1 TO N DO READ(A[I,J]); END;

CLRSCR;

WRITELN(' ':10, 'ИСХОДНАЯ МАТРИЦА ');

for i:=1 to n do begin

for j:=1 to n do

write(a[i,j]:5); WRITELN;END;

{ВЫЧИСЛЕНИЕ СУММЫ ДИАГОНАЛЕЙ}

s1:=0; s2:=0;

for i:=1 to n do

begin j:= n+1-i;

if a[i,i] > 0 then s1:=s1+a[i,i];

if a[i,j] MOD 2 <> 0 then s2:=s2+a[i,j];

END;

{ВЫЧИСЛЕНИЕ ПРОИЗВЕДЕНИЯ}

P:=S1*S2;

WRITELN;WRITELN(' ':10,'РЕЗУЛЬТАТЫ РАСЧЕТА ');

WRITELN('СУММА ПОЛ. ЭЛ. ГЛ. ДИАГОНАЛИ=',S1:4);

WRITELN('СУММА ОТР. ЭЛ. ПОБ. ДИАГОНАЛИ=',S2:4);

WRITELN(' ИХ ПРОИЗВЕДЕНИЕ = ',P:4);

z:=readkey

end.

 

Пример 26. Найти максимальный элемент побочной диагонали матрицы X(5,5) и вывести на печать весь столбец, в котором он находится.

Программа имеет вид:

program pr26;

uses crt;

const n=5;

type raz=1..n;

matr=array[raz,raz] of real;

var x:matr; max:real; i,j,jmax:raz; z:char;

BEGIN CLRSCR;

FOR I:=1 TO N DO BEGIN

WRITELN('ВВЕДИ',N,'ЧИСЕЛ ',I,'-Й СТРОКИ');

FOR J:= 1 TO N DO READ(X[I,J]);

END;

CLRSCR;

WRITELN(' ':5, 'ИСХОДНАЯ МАТРИЦА ');

for i:=1 to n do begin

for j:=1 to n do

write(x[i,j]:5:1);

WRITELN; END;

{ПОИСК МАКСИМАЛЬНОГО ЭЛЕМЕНТА}

max:=-1e20;

for i:=1 to n do

begin j:=n+1-i;

if x[i,j]>max then

begin max:=x[i,j];jmax:=j; end;

END;

{ВЫВОД НАЙДЕННОГО СТОЛБЦА}

WRITELN; WRITELN(' МАКС. ЭЛЕМЕНТ=',MAX:5:1);

WRITELN('СТОЛБЕЦ С МАКС. ЭЛ. ',jmax:2);

for i:=1 to n do

writeln(' ':10,x[i,jmax]:5:1);

z:=readkey

end.

Пример 27. В матрице a(4,5) найти количество четных элементов в строке, в которой второй элемент положительный (если таких строк несколько, результат распечатать в отдельности для каждой).

 

Порядок работы:

Шаг 1. Вводим матрицу a(4,5).

Шаг 2. Организовываем цикл, который перебирает строки матрицы (то есть индекс i), начиная с 1-й и заканчивая 4-й.

Шаг 3. Если ai2 > 0, то идем на шаг 4, иначе берем другую строку, то есть идем на шаг 9.

Шаг 4. Устанавливаем начальное значение количества k=0.

Шаг 5. Организовываем цикл, который перебирает столбцы матрицы (то есть индекс j), начиная с 1-го и заканчивая 5-м.

Шаг 6. Если aij четное, тогда присваиваем k = k + 1.

Шаг 7. Если цикл по j не закончился, идем на начало цикла, то есть на шаг 5.

Шаг 8. Печатаем k.

Шаг 9. Если цикл по i не закончился, идем на начало цикла, то есть на шаг 2.

Шаг 10. Останов.

 

Пример 28. В матрицы a(4,5) найти количество четных элементов в строке, у которой сумма элементов положительная (если таких строк несколько, результат распечатать в отдельности для каждой).

 

Порядок работы:

Шаг 1. Вводим матрицу a(4,5).

Шаг 2. Организовываем цикл, который перебирает строки матрицы (то есть индекс i), начиная с 1-й и заканчивая 4-й.

Шаг 3. Устанавливаем начальное значение суммы s = 0.

Шаг 4. Организовываем цикл, который перебирает столбцы матрицы (то есть индекс j), начиная с 1-го и заканчивая 5-м.

Шаг 5. Присваиваем s = s + aij.

Шаг 6. Если цикл по j не закончился, идем на начало цикла, то есть на шаг 4.

Шаг 7. Если s > 0, то идем на шаг 8, иначе - берем другую строку, то есть идем на шаг 13.

Шаг 8. Устанавливаем начальное значение количества k=0.

Шаг 9. Организовываем цикл, который перебирает столбцы матрицы (то есть индекс j), начиная с 1-го и кончая 5-м.

Шаг 10. Если aij четное, тогда присваиваем k = k + 1.

Шаг 11. Если цикл по j не закончился, идем на начало цикла, то есть на шаг 9.

Шаг 12. Печатаем k.

Шаг 13. Если цикл по i не закончился, идем на начало цикла, то есть на шаг 2.

Шаг 14. Останов.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.