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

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

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

 
 Ответить  Открыть новую тему 
> Универсальная программа, Помогите
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 числа - размерность матрицы, а потом - в какой строке искать, и в каком столбце...)

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


Гость






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


Новичок
*

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

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


А как это можно сделать с Case Of?
Препод наш сказал что мне нужно сделать это с Case Of.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Подскажите как это сделать с Case Of
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Замени тот 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;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


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


Гость






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

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

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

 





- Текстовая версия 29.04.2024 13:50
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name