IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Универсальная программа, Помогите
Selena
сообщение 5.11.2005 16:28
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 39
Пол: Женский
Реальное имя: Ольга

Репутация: -  0  +


Помогите, пожалуйста, не как не могу сообразить как это сделать.
Задача такая:
Дана матрица А[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.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 5.11.2005 16:59
Сообщение #2


Гость






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 числа - размерность матрицы, а потом - в какой строке искать, и в каком столбце...)

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

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 11:02
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"