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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2015, 20:45   #1
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию Не меняет строки....

{23. Дана матрица размера 5 x 10. Поменять местами строки1|столбцы2, содержащие минимальный и максимальный элементы матрицы. }
program var3_23;

Код:
const
   n = 5;
   m = 5;

var
   Mmin, Nmin, Mmax, Nmax, j, i, key: integer;
   a: array [1..n, 1..m] of integer;
   temp: integer;

begin
   //randomize;
   writeln('1 - Поменять местами строки содержащие минимальный и максимальный элементы матрицы.');
   writeln('2 - Поменять местами столбцы, содержащие минимальный и максимальный элементы матрицы.');
   readln(key);
   writeln('Исходная матрица:');
   for i := 1 to n do
      for j := 1 to m do
         a[i, j] := random(100);
   for i := 1 to n do
   begin
      for j := 1 to m do
         write(a[i, j]:4);
      writeln;
      end;
   case key of
      1:
         begin
            Mmin := 1; Mmax := 1;
            Nmin := 1; Nmax := 1;
            for i := 1 to M do
            begin
               for j := 1 to N do
               begin
                  if a[Mmin, Nmin] < a[i, j] then begin
                     Mmin := i; 
                     Nmin := j; 
                  end;
                  if a[Mmax, Nmax] > a[i, j] then begin
                     Mmax := i; 
                     Nmax := j; 
                  end;
               end;
            end;
            for j := 1 to N do
            begin
               temp := a[Mmin, j];
               a[Mmin, j] := a[Mmax, j];
               a[Mmax, j] := temp;
            end;
            writeln;
            writeln('Ответ');
            for i := 1 to M do 
            begin
               writeln;
               for j := 1 to N do write(a[i, j], ' ');
            end;
         end;
      2:
         begin
            Mmin := 1; Mmax := 1;
            Nmin := 1; Nmax := 1;
            for i := 1 to N do
            begin
               for j := 1 to M do
               begin
                  if a[Nmin, Mmin] > a[j, i] then 
                  begin
                  Mmin := j;
                  Nmin := i; 
                  end;
                  if a[Nmax, Mmax] > a[j, i] then 
                  begin 
                  Mmax := j; 
                  Nmax := i; 
                  end;
               end;
            end;
            for j := 1 to M do
            begin
               temp := a[j, Nmin];
               a[j, Nmin] := a[j, Nmax];
               a[j, Nmax] := temp;
            end;
            writeln;
            writeln('Ответ');
            for i := 1 to M do 
            begin
               writeln;
               for j := 1 to N do write(a[i, j], ' ');
            end;
         end;
   end;
end.
Otar4ik вне форума Ответить с цитированием
Старый 05.09.2015, 21:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а чего у Вас индексы туды-сюды меняются?!

заполняете матрицу:
Цитата:
Код:
for i := 1 to n do
      for j := 1 to m do
         a[i, j] := random(100);
   for i := 1 to n do
   begin
      for j := 1 to m do
         write(a[i, j]:4);
      writeln;
обратите внимание, что первый индекс (индекс строк) у Вас в переменной i и меняется от 1 до N
а второй индекс массива (индекс столбцов) у Вас в переменной j и меняется от 1 до M
всё правильно, всё хорошо.

и тут, внезапно:
Цитата:
Код:
  Nmin := 1; Nmax := 1;
            for i := 1 to M do
            begin
               for j := 1 to N do
               begin
                  if a[Mmin, Nmin] < a[i, j] then begin
уже первый индекс меняется от 1 до M
т.е. строк уже стало M штук.

дальше уже можно не смотреть...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.09.2015, 21:43   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

попробуйте такой код:
Код:
const
   n = 5;
   m = 5;

var
   rowMin, colMin, rowMax, colMax, j, i, key: integer;
   a: array [1..n, 1..m] of integer;
   temp: integer;

begin
   //randomize;
   writeln('1 - Поменять местами строки содержащие минимальный и максимальный элементы матрицы.');
   writeln('2 - Поменять местами столбцы, содержащие минимальный и максимальный элементы матрицы.');
   readln(key);
   for i := 1 to n do
      for j := 1 to m do
         a[i, j] := random(100);
   writeln('Исходная матрица:');
   for i := 1 to n do
   begin
      for j := 1 to m do
         write(a[i, j]:4);
      writeln;
      end;
   case key of
      1:
         begin
            rowmin := 1; rowmax := 1;
            colmin := 1; colmax := 1;
            for i := 1 to n do
            begin
               for j := 1 to m do
               begin
                  if a[rowmin, colmin] < a[i, j] then begin
                     rowmin := i;
                     colmin := j;
                  end;
                  if a[rowmax, colmax] > a[i, j] then begin
                     rowmax := i;
                     colmax := j;
                  end;
               end;
            end;
            
            // меняем строки местами
            if rowMin<>rowMax then
              for j := 1 to M do
              begin
                 temp := a[rowMin, j];
                 a[rowMin, j] := a[rowMax, j];
                 a[rowMax, j] := temp;
            end;
            writeln;
            writeln('Ответ:');
            for i := 1 to n do
              begin
                    for j := 1 to m do
                          write(a[i, j]:4);
                    writeln;
              end;
         end;
      2:
         begin
            rowmin := 1; rowmax := 1;
            colmin := 1; colmax := 1;
            for i := 1 to n do
            begin
               for j := 1 to m do
               begin
                  if a[rowmin, colmin] < a[i, j] then begin
                     rowmin := i;
                     colmin := j;
                  end;
                  if a[rowmax, colmax] > a[i, j] then begin
                     rowmax := i;
                     colmax := j;
                  end;
               end;
            end;
            // меняем столбцы местами
            if colMin<>colMax then
              for i := 1 to N do
              begin
                 temp := a[i, colMin];
                 a[i, colMin] := a[i, colMax];
                 a[i, colMax] := temp;
            end;
            writeln;
            writeln('Ответ:');
            for i := 1 to n do
              begin
                    for j := 1 to m do
                          write(a[i, j]:4);
                    writeln;
              end;

         end;
   end;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.09.2015, 09:39   #4
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Спасибо всё заработало))
Otar4ik вне форума Ответить с цитированием
Старый 06.09.2015, 11:51   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да не за что!

обращаю ваше внимание, что можно цикл поиска индексов строк/столбцов вынести в отдельную процедуру. Тогда код основной программы сильно сократится/упростится...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.09.2015, 16:34   #6
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
да не за что!

обращаю ваше внимание, что можно цикл поиска индексов строк/столбцов вынести в отдельную процедуру. Тогда код основной программы сильно сократится/упростится...
Спасибо вам!
Я знаю про процедуры но сказали писать задания на массивы без применения процедур,т.е. предполагается что мы их пока не изучали.
Можно использовать case(так как его проходили)
Otar4ik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кнопка меняет форму Ymerla HTML и CSS 3 11.06.2015 13:18
Дана матрица А(nxn). Написать программу, которая меняет к-ю и m-ю строки матрицы. (Паскаль) nzltv Помощь студентам 1 04.12.2013 03:40
AJAX меняет кодировку БалаШагаЛ PHP 3 25.08.2012 17:00
ie не меняет кодировку CodeNOT PHP 3 10.02.2012 03:22
C++ матрица меняет значения N!ckeL Помощь студентам 1 09.11.2008 15:58