Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2008, 18:45   #1
W_P
Пользователь
 
Регистрация: 27.12.2007
Сообщений: 36
По умолчанию Исправьте ошибку в Паскаль!!

Дана матрица. Необходимо найти элемент, который в строке будет максимальным(минимальным), а в столбце минимальным(максимальным) и вывести его. Таких элементов может быть и несколько а может и не быть совсем.
Код написал, а он чет не работает, а точнее не ищет такие элементы!?
НаЙдИтЕ ОШИБКУ КТо МОЖЕТ! Заранее спасибо!
W_P вне форума Ответить с цитированием
Старый 16.03.2008, 18:45   #2
W_P
Пользователь
 
Регистрация: 27.12.2007
Сообщений: 36
По умолчанию

Код:
Program s1;
uses crt;
type
mas=array[1..25,1..25] of integer;
mass=array[1..25] of integer;
var
a:mas;
n,k,m:integer;
procedure vvod(var a:mas; var n,m:integer);
var
i,j:integer;
begin
     writeln('Vvedite kolichestvo strok/stolbcov ==>>');
     readln(n,m);
                 for i:=1 to n do
                 for j:=1 to m do
                 begin
                      writeln('Vvedite [',i,j,'] element matrici ==>>');
                      readln(a[i,j]);
                 end;
end;
procedure vivod(a:mas;n,m:integer);
var
i,j:integer;
begin
     writeln;
     writeln('Ishodnaya matrica ==>>');
     writeln;
             for i:=1 to n do
             for j:=1 to m do
             writeln('a[',i,j,']=',a[i,j]);
end;
procedure tochka(a:mas;n,m:integer);
var
max,min,maxx,minn:integer;
i,j:integer;
begin

     for i:=1 to n do
     begin
          for j:=1 to m do
          begin
               max:=a[i,j];
               min:=a[i,j];
               maxx:=a[i,j];
               minn:=a[i,j];
                for j:=1 to m do
                begin
                     if a[i,j]>max then max:=a[i,j];
                     if a[i,j]<min then min:=a[i,j];
                end;
                if a[i,j]=max then
                begin
                     for i:=1 to n do
                     begin
                         if a[i,j]<minn then minn:=a[i,j];
                     end;
                     if a[i,j]=minn then
                     begin

                          writeln(a[i,j]);
                     end;
                end;
                if a[i,j]=min then
                begin
                     for i:=1 to n do
                     begin
                          if a[i,j]>maxx then maxx:=a[i,j];
                     end;
                     if a[i,j]=maxx then
                     begin

                          writeln(a[i,j]);
                     end;
                end;
                end;
                end;
end;
begin
vvod(a,n,m);
vivod(a,n,m);
tochka(a,n,m);
readkey;
end.
W_P вне форума Ответить с цитированием
Старый 16.03.2008, 20:16   #3
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Ну, для начала переменные i,j в tochka нельзя использовать еще и во внутренних циклах.
alexBlack вне форума Ответить с цитированием
Старый 16.03.2008, 20:26   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Для продолжения припоиске макс и мин для начала эти значения присваиваются a[1,1], а не a[i,j]. И вообще ты сам не знаешь точно, что ищещь, поэтому никогда не найдешь.
Что это за элемент такой:
Цитата:
элемент, который в строке будет максимальным(минимальным), а в столбце минимальным(максимальным)
. В каком столбце, в какой строке?
puporev вне форума Ответить с цитированием
Старый 16.03.2008, 20:39   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Почему-то два раза выскочило.
puporev вне форума Ответить с цитированием
Старый 16.03.2008, 22:25   #6
W_P
Пользователь
 
Регистрация: 27.12.2007
Сообщений: 36
По умолчанию

Я ищу так называемые "Седловые точки" - это как раз те элементы которые в строке скажем максимальны, а в столбце минимальны или наоборот.
W_P вне форума Ответить с цитированием
Старый 16.03.2008, 22:28   #7
W_P
Пользователь
 
Регистрация: 27.12.2007
Сообщений: 36
По умолчанию

ну скажем пример матрицы==>
1 2 3
4 5 6
7 8 9
в этой матрице в 1 строке элемент 3 будет максимальным, а в столбце он будет минимальным. Вот такие элементы во всей матрице нужно и искать. Но в моем коде он почему то не ищет вообще, хотя сам проверку делал.....что нужно изменить?

Последний раз редактировалось W_P; 16.03.2008 в 22:43.
W_P вне форума Ответить с цитированием
Старый 16.03.2008, 22:30   #8
W_P
Пользователь
 
Регистрация: 27.12.2007
Сообщений: 36
По умолчанию

А насчет в какой строке и столбце - это неизвестно. Все зависит от вводимой матрицы....Таких элементов может и не быть вообще.
W_P вне форума Ответить с цитированием
Старый 17.03.2008, 11:35   #9
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Код:

const n = 3;
      m = 4;
      a : array[1..n, 1..m] of integer =
         ( (1,2,3, 9),
           (5,6,7,10),
           (2,7,6,11) );

// возвращает true, если e является максимумом в колонке c
function isMaxInRow(e, c:integer):boolean;
var k:integer;
begin
   isMaxInRow := true;
   for k:=1 to n do begin
      if a[k, c] > e then begin
         isMaxInRow := false;
         break;
      end;
   end;
end;

// возвращает true, если e является минимумом в колонке c
function isMinInRow(e, c:integer):boolean;
var k:integer;
begin
   isMinInRow := true;
   for k:=1 to n do begin
      if a[k, c] < e then begin
         isMinInRow := false;
         break;
      end;
   end;
end;

var i, j, k, jmax, jmin, max, min : integer;
begin
   // Проходим по строкам
   for i:=1 to n do begin
      // Для строки ищем мин/мах элемент
      max := a[i,1]; jmax := 1;
      min := a[i,1]; jmin := 1;

      for j:=1 to m do begin
         if a[i,j] > max then begin
            max := a[i,j]; jmax := j;
         end;
         if a[i,j] < min then begin
            min := a[i,j]; jmin := j;
         end;
      end;

      { Здесь вопрос. Является ли точка [7] тем, что задано в условии
         ( (1,2,3, 9)  ,
           (5,6,7,[7]),
           (9,7,6, 8) );
        Если является, то нужно еще раз пройти по всем элементам строки
        Если не является, проход можно не делать
      }

      for k:=1 to m do begin
         if a[i, k] = a[i, jmin] then
            // является минимальным в строке
            // проверяем не является ли он максимальным в столбце k
            if isMaxInRow(a[i, k], k) then begin
               // Вот оно
               writeln(a[i, k]);
               //ListBox1.Items.add(IntToStr(a[i, k]));
            end;

         if a[i, k] = a[i, jmax] then
            // и наоборот, jmax является максимальным в строке
            // проверяем не является ли он минимальным в столбце k
            if isMinInRow(a[i, k], k) then begin
               // И эта точка тоже
               writeln(a[i, k]);
               //ListBox1.Items.add(IntToStr(a[i, k]));
            end;
      end;
   end;
alexBlack вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправьте ошибку в Паскаль!! W_P Помощь студентам 1 16.03.2008 18:29
Свой "Пуск",исправьте плиз ошибки Marsik Помощь студентам 8 07.12.2007 15:28
Паскаль. Не могу найти ошибку. Нужна помощь! Nexx Помощь студентам 10 06.12.2007 19:12
Найдите ошибку! geniy JavaScript, Ajax 4 04.12.2007 16:22