Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Универсальная программа

Автор: Selena 5.11.2005 20:28

Помогите, пожалуйста, не как не могу сообразить как это сделать.
Задача такая:
Дана матрица А[1..4,1..4]. Найти min элемент в 3 строке и max в 4 столбце.

Я сделала так что можно найти min элемент не только в 3 сроке, а в любой другой строке. Тоже касается и max элемента только по столбцам. А мне нужна, чтобы программа была универсальной. То есть еще сделать так, чтобы в этой же программе можно было найти min элемент в любом столбце, а max в любой строке. Как это сделать?
Вот то что сделала.


Program zadacha;
Uses WinCrt;
Type
mas2=array[1..10,1..10] of integer;
Var
A:mas2;
min3,max4:integer;

Procedure FormMatr(na,ma:Byte;Pa,Qa:integer;Var Aa:mas2);
var i,j:Byte;
Begin
For i:=1 to na do
For j:=1 to ma do
Aa[i,j]:=Random(Qa-Pa)+Pa;
End;

Procedure VyvodMatr(na,ma:Byte;Var Aa:mas2);
Var i,j:Byte;
Begin
For i:=1 to na do
begin
For j:=1 to ma do
Write(Aa[i,j]:3,' '); writeLn('');
end;
End;

Function MinMax(Aa:mas2;na,priz,nomer:Byte):Integer;
Var i,j:Byte; min3k,max4k:integer;
Begin
min3k:=Aa[nomer,1];
For j:=1 to na do
If Aa[nomer,j]<min3k then min3k:=Aa[nomer,j];

max4k:=Aa[1,nomer];
For i:=1 to na do
If Aa[i,nomer]>max4k then max4k:=Aa[i,nomer];

Case priz of
0: minmax:=min3k;
1: minmax:=max4k;
end;
End;

Begin
Randomize;
FormMatr(4,4,10,30,A);
WriteLn('Матрица А'); WriteLn;
VyvodMatr(4,4,A); Writeln;
min3:=minmax(A,4,0,3);
max4:=minmax(A,4,1,4);
WriteLn('max4=',max4:3,' min3=',min3:3);
End.


Автор: volvo 5.11.2005 20:59

To: Selena
если я правильно тебя понял, то тебе нужно что-то вроде этого?

function min_max(Aa: mas2; is_min: boolean;
size_stolb, size_str,
find_stolb, find_str: integer): integer;
var
mm_i, mm_j: integer;
i, j: integer;
begin
mm_i := 1; mm_j := 1;
for i := 1 to size_stolb do
for j := 1 to size_str do
if is_min then begin
if (Aa[mm_i, mm_j] > Aa[i, j]) and
((find_stolb = 0) or (i = find_stolb)) and
((find_str = 0) or (j = find_str)) then begin
mm_i := i; mm_j := j
end
end
else begin
if (Aa[mm_i, mm_j] < Aa[i, j]) and
((find_stolb = 0) or (i = find_stolb)) and
((find_str = 0) or (j = find_str)) then begin
mm_i := i; mm_j := j
end
end;
min_max := Aa[mm_i, mm_j];
end;

одной и той же функцией находишь и мин. и макс. значение любого столбца/строки матрицы... Тогда твой вызов:
 min3:=minmax(A,4,0,3);
max4:=minmax(A,4,1,4);
WriteLn('max4=',max4:3,' min3=',min3:3);

можно заменить на:
 min3 := min_max(A, true, 4, 4, 3, 0);
max4 := min_max(A, false, 4, 4, 0, 4);
WriteLn('max4=',max4:3,' min3=',min3:3);

(true значит, что ищем минимум, false - максимум, затем идут 2 числа - размерность матрицы, а потом - в какой строке искать, и в каком столбце...)

Если не то - уточняй, что нужно, и желательно с примером, как должна вызываться твоя функция...

Автор: volvo 5.11.2005 21:01

To: klem4, опять торопишься?

Цитата
То есть еще сделать так, чтобы в этой же программе можно было найти min элемент в любом столбце, а max в любой строке.
Как это сделать твоими функциями, можно узнать?

Автор: Selena 5.11.2005 21:10

А как это можно сделать с Case Of?
Препод наш сказал что мне нужно сделать это с Case Of.

Автор: Selena 5.11.2005 21:27

Подскажите как это сделать с Case Of

Автор: volvo 5.11.2005 21:43

Замени тот If что стоял у меня на это:

case is_min of
true:
begin
if (Aa[mm_i, mm_j] > Aa[i, j]) and
((find_stolb = 0) or (i = find_stolb)) and
((find_str = 0) or (j = find_str)) then begin
mm_i := i; mm_j := j
end
end
false:
begin
if (Aa[mm_i, mm_j] < Aa[i, j]) and
((find_stolb = 0) or (i = find_stolb)) and
((find_str = 0) or (j = find_str)) then begin
mm_i := i; mm_j := j
end
end;
end;

Автор: Selena 5.11.2005 21:59

Я не провельно сформулировала вопрос.
Мне нужно, чтобы при помощи priz можно выбрать любой столбец или строку, как для максимального, так и для минимального элемента.
Т.е можно было бы задать поиск максимального и минимального элементов в той строке или столбце, в которой мне нужно. Препад посмотрел мою задачу и сакал сто надо ввести для этого еще один priz1. Я только не могу понять. Мне что ли предется еще один делать цикл по столбцам, чтобы найти в нужном мне столбце max, и по строком чтобы в нудной мне строке найти min элемент?
Надеюсь Вы меня поймете.

Автор: volvo 5.11.2005 23:20

To: Selena
объясни мне тогда, чем твой priz и priz1 будут отличаться от моего find_stolb и find_str? Только названием? Ну, так поменяй название. Я не пойму, тебе надо "шашечки или ехать"?

Переформулируем вопрос: Чем та функция, которую я привел, НЕ устраивает? Она не ищет min в какой-то строке? Или max? То же самое со столбцами? Case ... Of теперь тоже присутствует. Что еще надо?