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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2009, 18:45   #1
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию pascal матрицы

Добрый день..... У меня возникла не большая проблемка... Мне нужно было написать программу, котороя в заданной матрице вместо максимального элемента столбца поставить 1, а вместо минимального элемента столбца поставить -1. Вот мой исходный код.
Код:
Program task3;

const
  N=50;
  M=30;
type
  Matrix=array[1..N,1..M] of integer;


procedure DefinitionMatrix(var K:integer; var L:integer);
begin
  repeat
    Write('введите количество строк K (1..',N,')=> ');ReadLn(K);
  until (K>=1) AND (K<=N);

  repeat
    Write('введите количество столбцов L (1..',M,')=> ');ReadLn(L);
  until (L>=1) AND (L<=M);
end;

procedure InputMatrix(K: integer;  L:integer; var matr:matrix);
var
 i,j:integer;
 begin
  for i:=1 to k do
  begin
    writeln ('введите элемены ',i, ' - ой строки');
    for j:=1 to l do
      readln (matr[i,j]);
  end;
end;
procedure OutputMatrix(K: integer;  L:integer; var matr:matrix);
var
i,j:integer;
begin
    writeln('Матрица прочитана успешно');
    for i := 1 to K do
    begin
        for j := 1 to L do
              write(matr[i, j]  , ' ');
              writeln;
     end;
end;

procedure ProcessingMatrixmin(K:integer; L: integer;var matr:matrix);
var
   min : integer;
   minIdx : integer;
   i,j:integer;
begin
    for j := 1 to L do
       begin

            min :=matr[1,j];
            minIdx := -1;
            for i := 1 to K do
            begin
              if(matr[i,j] <= min) Then
                  if(matr[i,j] <= min) Then
                         begin
                              min := matr[i,j];
                              minIdx := i;
                         end;

            end;
            if(minIdx <> -1) Then
                  matr[minIdx,j] := -1;

       end;
end;

procedure ProcessingMatrixmax(K:integer; L: integer;var matr:matrix);
var
   max: integer;
   maxIdx: integer;
   i,j:integer;
begin

     for j := 1 to L do
       begin
            max :=matr[1,j];
            maxIdx := -1;
            for i := 1 to K do
            begin
              if(matr[i,j] >= max) Then
              begin
                 max := matr[i,j];
                 maxIdx := i;
              end;
            end;
            if(maxidx <> -1) Then
            matr[maxIdx,j] := +1;
       end;
end;

procedure OutputMatrix(K,L:integer; var matr:matrix);
var i,j:integer;
begin
  for i:= 1 to K do
      begin
            for j := 1 to L do
                begin
                     write(matr[i,j]:4);
                end;
            writeln;
      end;
end;

var
   K, L : integer;
   matr:matrix;
begin
   DefinitionMatrix(K,L);
   InputMatrix(K,L,matr);
   ProcessingMatrixmin(K,L,matr);
   ProcessingMatrixmax(K,L,matr);
   OutputMatrix(K,L,matr);

  Write('для завершения работы нажмите клавишу enter'); ReadLn;

end.
Проблема в том, что если имеется несколько минимальных или максимальных элементов в столбце, программа заменяет только последнии из них.Помогите мне это исправить.
Заранее спасибо
tanek вне форума Ответить с цитированием
Старый 04.04.2009, 19:02   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

tanek Вы запоминаете индекс элемента и потом заменяете его на 1 или -1. Вместо этого запоминайте значение минимального/максимального элемента, а потом еще раз проходите по столбцу и заменяйте на 1/-1 элементы, равные запомненному.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.04.2009, 20:08   #3
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

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

Код:
Program task3;

const
  N=50;
  M=30;
type
  Matrix=array[1..N,1..M] of integer;


procedure DefinitionMatrix(var K:integer; var L:integer);
begin
  repeat
    Write('введите количество строк K (1..',N,')=> ');ReadLn(K);
  until (K>=1) AND (K<=N);

  repeat
    Write('введите количество столбцов L (1..',M,')=> ');ReadLn(L);
  until (L>=1) AND (L<=M);
end;

procedure InputMatrix(K: integer;  L:integer; var matr:matrix);
var
 i,j:integer;
 begin
  for i:=1 to k do
  begin
    writeln ('введите элемены ',i, ' - ой строки');
    for j:=1 to l do
      readln (matr[i,j]);
  end;

   { добавил вывод исходной матрицы }
writeln;
writeln('Ishodnaya:');
for i:=1 to k do
 begin
 for j:=1 to l do
  write(matr[i,j]:4);
 writeln;
 end;
writeln;
end;

  { двойное объявление процедуры }
{procedure OutputMatrix(K: integer;  L:integer; var matr:matrix);
var
i,j:integer;
begin
    writeln('Матрица прочитана успешно');
    for i := 1 to K do
    begin
        for j := 1 to L do
              write(matr[i, j]  , ' ');
              writeln;
     end;
end;      }

procedure ProcessingMatrixmin(K:integer; L: integer;var matr:matrix);
var
   min : integer;
   i,j:integer;
begin
    for j := 1 to L do
       begin
            min :=matr[1,j];
            for i := 1 to K do
             begin
              if(matr[i,j] <= min) Then
                  if(matr[i,j] <= min) Then
                    min := matr[i,j];

             end;
            { теперь идем по столбцу еще раз и сравниваем элементы с минимумом }
            for i:=1 to K do
             if matr[i,j] = min then matr[i,j] := -1;

       end;
end;

procedure ProcessingMatrixmax(K:integer; L: integer;var matr:matrix);
var
   max: integer;
   i,j:integer;
begin

     for j := 1 to L do
       begin
            max :=matr[1,j];
            for i := 1 to K do
            begin
              if(matr[i,j] >= max) Then
                 max := matr[i,j];
            end;
            for i := 1 to K do
              if matr[i,j] = max then matr[i,j] := 1;
       end;
end;

procedure OutputMatrix(K,L:integer; var matr:matrix);
var i,j:integer;
begin
  for i:= 1 to K do
      begin
            for j := 1 to L do
                begin
                     write(matr[i,j]:4);
                end;
            writeln;
      end;
end;

var
   K, L : integer;
   matr:matrix;
begin
   DefinitionMatrix(K,L);
   InputMatrix(K,L,matr);
   ProcessingMatrixmin(K,L,matr);
   ProcessingMatrixmax(K,L,matr);
   OutputMatrix(K,L,matr);

  Write('для завершения работы нажмите клавишу enter'); ReadLn;

end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.04.2009, 20:42   #5
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

огромное спасибо..... вы мне очень очень помогли
tanek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка матрицы по спирали {pascal} Влдислаав3911 Помощь студентам 3 10.04.2012 22:05
Матрицы Pascal bpystep Помощь студентам 8 02.04.2009 19:12
Помогите с задачей по Pascal - тема Матрицы!!! bilba Помощь студентам 3 05.03.2009 23:03