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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2009, 18:44   #1
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
Восклицание Особый эл-т в матрице, подправить!

Здравствуйте, уважаемые "братья по клавиатуре"!
Есть задача, которая не хочет корректно работать, а с поиском причины сего факта проблемы. Кто может - подправьте мой код или посоветуйте:
"Дан целочисленный массив n*m. Написать программу поиска особых эл-тов в массиве. Особым считается элемент, меньший среди ВСЕХ идущих за ним элементов в КАЖДОМ СТОЛБЦЕ. Найденные элементы записать в новый одномерный массив, указать, какому столбцу данный эл-т принадлежит (это вообще не сделал)"
Код:
uses crt;
var
 arr:array [1..100] of integer;
 a: array [1..100,1..100] of integer;
 i,j,k,h,f,i1,n,m,l:integer;

 Procedure OutMatr;
  var
   i,j:integer;
  begin
   for i:=1 to n do
    begin
     for j:=1 to m do
      write(a[i,j]:4);
      writeln;
    end;
  end;
 
 begin
  read(n,m);
  for i:=1 to n do
   for j:=1 to m do
    read(a[i,j]);
    
  OutMatr;
  
  i1:=1;
  f:=0;
   for j:=1 to m do
    begin
     for i:=1 to n-1 do
      begin
       h:=a[i,j];
       for k:=i+1 to n-1 do
        begin
         if a[k,j]>h then
          f:=f+1;
        end;
      if f=n-k then
       begin
        arr[i1]:=h;
        i1:=i1+1;
        l:=i1;
       end;
      end;
    end;

 for i1:=1 to l do
  write(arr[i1],' ');
    
  end.
Кто разберется - буду очень рад!
RomT24 вне форума Ответить с цитированием
Старый 20.05.2009, 22:23   #2
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
По умолчанию

Неужели никто не разобрался?
RomT24 вне форума Ответить с цитированием
Старый 21.05.2009, 20:33   #3
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
По умолчанию

Поправка, просто вывести массив особых элементов, без принадлежности к столбцу
RomT24 вне форума Ответить с цитированием
Старый 21.05.2009, 20:58   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Если честно, в вашем коде не разбирался ) Вот, что написал.
Основная процедура - fillMass
Код:
uses crt;
type matrix = array[1..100,1..100] of integer;
massiv = array[1..100] of integer;
var
M,N : integer;
L : integer;
i,j : integer;
A : matrix;
arr : massiv;

procedure fillMatr(var A : matrix; M,N : integer);
var i,j : integer;
begin
for i:=1 to M do
 for j:=1 to N do
  A[i,j] := random(50);
end;

procedure printMatr(A : matrix; M,N : integer);
var i,j : integer;
begin
for i:=1 to M do
 begin
 for j:=1 to N do
  write(A[i,j]:4);
 writeln;
 end;
writeln;
end;

procedure fillMass(A : matrix; M,N : integer; var arr : massiv; var L : integer);
var i,j,k,p : integer;
fl : boolean;
begin
L := 0;
for i:=1 to M do
 begin
 for j:=1 to N do
  begin
  fl := true;
  for k:=1 to N do
   for p:=i+1 to M do
    if A[p,k]<A[i,j] then fl := false;
  if fl then
   begin
   inc(L);
   arr[L] := A[i,j];
   end;
  end;
 end;
end;

procedure printMass(arr : massiv; L : integer);
var i : integer;
begin
writeln('Massiv: ');
for i:=1 to L do
 write(arr[i]:4);
writeln;
end;

begin
clrscr;
randomize;
M := 4;
N := 5;
fillMatr(A,M,N);
printMatr(A,M,N);
fillMass(A,M,N,arr,L);
printMass(arr,L);
readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.05.2009, 15:34   #5
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
По умолчанию

Sazary, спасибо вам огромное!!
RomT24 вне форума Ответить с цитированием
Старый 22.05.2009, 15:41   #6
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
По умолчанию

Единственно что сейчас проверил. он все правильно выводит, но почему то добавляет в результирующий массив все последние элементы каждого столбца. Но они вроде как не являются особыми, так как за ними уже не идут никакие другие элементы..
RomT24 вне форума Ответить с цитированием
Старый 22.05.2009, 15:45   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от RomT24
Но они вроде как не являются особыми, так как за ними уже не идут никакие другие элементы..
Разве? Вроде как, вполне логично.. Но если не нужно, то просто идите по i до M-1, вместо M.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.05.2009, 15:52   #8
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
По умолчанию

Проверил и этот вариант - в этом случае выводятся далеко не все элементы, а так, выборочно.. Вот думаю, где тогда это ограничение ставить..
RomT24 вне форума Ответить с цитированием
Старый 22.05.2009, 15:54   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Вот думаю, где тогда это ограничение ставить..
Только в функции fillMass.
Цитата:
Проверил и этот вариант - в этом случае выводятся далеко не все элементы, а так, выборочно
У меня выводит то, что нужно.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.05.2009, 16:00   #10
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
По умолчанию

ох, ну смотрите. В матрице
8 44 39
18 18 1
11 48 2 выводится только 1, хотя особыми элементами здесь являются 8, 18 , 1. Я абсолютно уверен что код скопировал правильно и "-1" поставил где надо
RomT24 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Только подправить.... Татяна Помощь студентам 2 20.05.2009 14:00
надо бы подправить программу)) Fylhtq Паскаль, Turbo Pascal, PascalABC.NET 3 19.05.2009 19:55
подправить код ELF astserg01 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 09.04.2009 06:49
Подправить задачу на Паскал sinid Помощь студентам 13 04.03.2009 21:40
Помогите подправить формулу! Maxx Microsoft Office Excel 5 16.12.2008 13:43