Пример 4. Дана натуральная матрица размером n´n, все элементы которой различны
Дана натуральная матрица размером n´n, все элементы которой различны. Найти скалярное произведение строки, в которой находится наибольший элемент матрицы, на столбец с наименьшим элементом. Здесь можно выделить следующие подзадачи: 1) заполнение массива; 2) просмотр исходного массива; 3) поиск номера строки m, где находится наибольший элемент; 4) поиск номера столбца k, где находится наименьший элемент; 5) нахождение скалярного произведения строки m на столбец k. Аналогично примеру 1 первая задача состоит из двух задач: выбора способа заполнения (с помощью меню) и заполнение массива выбранным способом. Основная программа: Program Pr_6_3; Uses Crt, U_6_3; Var A: mas2; m,k,i: integer;
Begin ClrScr; Zapolnenie2(A); ClrScr; Writeln('Исходный массив'); View2(A); m:= Max_i(A); k:= Min_j(A); Writeln; Writeln('Максимальный элемент в строке №=',m); Writeln('Минимальный элемент в столбце №=',k); Writeln('Скалярное произведение =',Sk(m,k)); ReadKey; End.
Модуль, в котором описаны константа N, тип mas2 (двумерный массив NxN), процедуры и функции, используемые в программе:
Unit U_6_3; Interface Const N = 5; {количество элементов массива} Type mas2 = array [1..N,1..N] of byte; Procedure View2 (x: mas2); Procedure zapolnenie2(var x:mas2); Function Max_i(x: mas2): integer; Function Min_j(x: mas2): integer; function Sk(nom_str, nom_stb: integer)
Implementation
Procedure View2 (x: mas2); {процедура вывода на экран двумерного массива} var i,j: integer; begin For i:= 1 to N do begin For j:= 1 to N do Write(x[i,j]:5); writeln; end; end; Procedure Create_Random2 (var x: mas2); {создание массива случайных чисел из диапазона [0,n]} var i,j: integer; begin Randomize; For i:= 1 to N do For j:= 1 to N do x[i,j]:= Random(n); end;
Procedure Create2 (var x: mas2); {процедура ввода массива с клавиатуры} var i,j: integer; begin ClrScr; For i:= 1 to N do For j:= 1 to N do begin Write('Введите A[',i,';',j, ']= '); Readln(x[i,j]); end; end;
Procedure zapolnenie2(var x:mas2); {процедура, предоставляющая меню для выбора способа заполнения массива и вызывающая одну из вышеописанных процедур заполнения массива} var ch:integer; begin Writeln('1-Ввод массива '); Writeln('2-Инициализация массива случайными числами '); Writeln; Write('Введите № пункта меню - '); ReadLn(Ch); Case ch of 1: Create2(x); 2: Create_Random2(x); end; end;
function Max_i(x: mas2): integer; {функция нахождения номера строки, в которой содержится максимальный элемент} var i,j,p,l: integer; begin p:= 1; l:= 1; For i:= 1 to N do For j:= 1 to N do if x[p,l] < x[i,j] then begin p:= i; l:= j; end; Max_i:= p; end;
function Min_j(x: mas2): integer; {функция нахождения номера столбца, в котором содержится минимальный элемент}
var i,j,p,l: integer; begin p:= 1; l:= 1; For i:= 1 to N do For j:= 1 to N do if x[p,l] > x[i,j] then begin p:= i; l:= j; end; Min_j:= l; end;
function Sk(nom_str, nom_stb: integer) {функция, возвращающая скалярное произведение строки с номером nom_str на столбец с номером nom_stb} var s,i:integer; begin S:=0; For i:= 1 to N do S:= S + A[nom_str,i] * A[i,nom_stb]; sk:=s; end; end.
Задание 3.4 (11 баллов) Написать программу для решения задачи. Указания. 1. Выполнить процедурную декомпозицию задачи методом пошаговой детализации. 2. Если в задаче требуется обрабатывать строки или столбцы массива, то написать соответствующие процедуры и в эти подпрограммы передавать номер строки или столбца как параметр. 3. Используемые процедуры, в том числе процедуры ввода и вывода двумерного массива, описать в модуле.
Лабораторная работа № 4 (строковые величины, текстовые файлы) (2 часа) Цели: формирование навыка обработки данных строкового типа; формирование навыка использования текстовых файлов.
|