Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.раб.3.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
208 Кб
Скачать
☆

Задание 3.3

Написать программу в процедурном стиле.

Указания. Интерфейс программы оформить в виде некоторого меню, пункты которого соответствуют заданиям варианта. Выполнить процедурную декомпозицию задачи методом пошаговой детализации. Реализацию выделенных подзадач оформить в виде модуля. Подготовить тесты иллюстрирующие правильность работы программы.

Пример 4

Дана натуральная матрица размером 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]