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

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

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

> Задача про матрицу
сообщение
Сообщение #1


Новичок
*

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

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


Вот как звучит задача:

Ввести числовую прямоугольную матрицу размером M×N (M и N заданы). Определить элементы, которые, являясь максимальными в столбцах, больше всех своих соседей слева в строке и меньше всех своих соседей справа в строке, указав значения найденных элементов и их индексы, или же сообщить, что таких элементов нет. Крайние столбцы не рассматривать.

Начала делать, но что то не работает толком...помогите пожалуйста


Program Matrix;
const stroka='';
stolb=''; {Ввод констант}
var a:array [1..100,1..100] of integer;
im,jm,i,j,max,n,m,max1:integer;

procedure maxinstolb;{Процедура нахождения максимального элемента в каждом столбце}
begin
for j:=2 to (m-1) do begin
max:=a[1,j];
im:=1; jm:=j;
for i:=1 to n do
if a[i,j]>max then begin
max:=a[i,j];
im:=i;
jm:=j;
end;
end;
end;

procedure maxelement; ;{Процедура проверки условия: максимальный элемент больше всех соседей слева и меньше всех соседей справа }
begin
i:=im;
for j:=1 to (jm-1) do begin
if a[i,j]<max then max1:=max;
end;
for j:=(jm+1) to m do begin
if a[i,j]>max1 then writeln(max,' [',im,';',jm,']')
else writeln('Ne suschestvuet');
end;
end;

begin
writeln(stroka,'Vvedite kol-vo strok matrici');
readln(n);
writeln(stolb,'Vvedite kol-vo stolbcov matrici');
readln(m);
writeln;
writeln('Vvedite ',m*n,' elementa massiva:');
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);

writeln('Ishodnaya matrica');
for i:=1 to n do begin
for j:=1 to m do
write(a[i,j],' ');
writeln;
end;

writeln('Max element boshe vseh sosedey sleva, no menshe vseh sosedey sprava');
maxinstolb;
maxelement;
end.


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


Пионер
**

Группа: Пользователи
Сообщений: 98
Пол: Мужской
Реальное имя: Andriy

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


Если брать задание "в лоб", то выходит как-то так:
procedure Sort(n,m:integer; A:Matrix); {К-ство строк, столбцов и матрица - параметры процедуры}
var i,k,j,Max:integer;
SecondTerm,Exist:boolean; {Первая переменная отвечает за второе условие, вторая - на наличие элемента, который ищется}
begin
Exist:=false; {Припускаем, что нужного элемента нету}

for i:=2 to m-1 do {Проходим столбцы}
begin
{Первое условие}
Max:=A[i,1]; {Тут ищется максимальный элемент в столбце. Припускаем, что он первый; если находится элемент, который больше него, максимуму присваивается значение этого элемента и т.д.}
for k:=2 to n do
if A[i,k]>Max then
Max:=A[i,k];
{Второе условие}
for k:=1 to n do {Проходим по столбце. Это нужно делать, ведь элементов с макс. значением может быть более одного}
if A[i,k]=Max then {Если элемент максимальный...}
begin
SecondTerm:=true; {... припустим, он удовлетворяет 2-е условие}
for j:=1 to i-1 do {проверяем слева в строке}
if A[j,k]>=A[i,k] then SecondTerm:=false;
for j:=i+1 to m do {и справа}
if A[j,k]<=A[i,k] then SecondTerm:=false;
if SecondTerm then {Если это так, значит выводим его значения и индексы, а делая присваивание Exist:=true подмечаем, что элемент,который ищется, существует }
begin
writeln('st=',i,' r=',k,' ',Max);
Exist:=true;
end;
end;
end;

if not Exist then writeLn('No elements of this kind'); {Если же его не существует, так и пишем}
end;


Тип Matrix вводится так:
type Matrix=array [1..50,1..50] of integer;

или так,если m,n обьявлены как константы:
type Matrix=array [1..n,1..m] of integer;

Тут все зависит от вас: хотите ли вы задавать m,n при выполнении программы или нет.
Фраза "(M и N заданы)",по-моему, говорит о верности второго варианта wink.gif
В основной части создавайте матрицу (генерируя или вводя) и вызывайте процедуру wink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 





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