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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2012, 20:01   #1
Vlad0n
Пользователь
 
Регистрация: 15.09.2012
Сообщений: 26
По умолчанию двухмерный массив...

Помогите пожалуйста решить задачу, у меня она вызвала сложности.
Задана вещественная матрица размера N×M. Поменять местами столбцы матрицы содержащие две максимальные суммы элементов. Если таких столбцов несколько, то только последние из них.
Заранее спасибо.
Vlad0n вне форума Ответить с цитированием
Старый 21.11.2012, 20:37   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

показывайте ваши попытки борьбы со сложностью
p.s. наработки...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 21.11.2012, 23:31   #3
studen
Пользователь
 
Регистрация: 21.05.2012
Сообщений: 88
По умолчанию

Делаем переменные x1 и х2.
Они отвечают за номер максимальных столбцов.
Присваиваем х1 = 1, х2 = 2.
В цикле просматриваем столбцы от 3 до N, если сумма больше или равна сумме столбцов с номерами х1 или х2, меняем номер меньшего из них на счетчик, если они равны(не х1 и х2, а суммы этих столбцов!), заменить меньший номер. После цикла меняем местами собственно столбцы. Код писать не буду, справишься сам.
studen вне форума Ответить с цитированием
Старый 22.11.2012, 12:36   #4
Vlad0n
Пользователь
 
Регистрация: 15.09.2012
Сообщений: 26
По умолчанию

Код:
uses crt;
const n1 = 10; m1 = 10;
type mas = array[1..n1, 1..m1] of real;
var a: mas; i, j, n, m: integer;
    sum, max1, max2 : real;
    index_max1, index_max2 : integer;

begin
  randomize;
  writeln('введите кол-во строк');
  readln(n);
  writeln('введите кол-во столбцов');
  readln(m);
  writeln('введите элементы массива');
  for i := 1 to n do begin
    for j := 1 to m do
    begin
      {writeln('введите А[', i, ',', j, ']');
      readln(a[i, j]); }
      a[i, j] := Random(11);
      Write(a[i, j]:5:0,' ');
    end;
    WriteLn;
  end;

  index_max1 := 0;
  index_max2 := 0;
  for j := 1 to m do
  begin
    sum := 0;
    for i := 1 to n do
      sum := sum + a[i, j];

    if index_max1 = 0 then begin
      index_max1 := j;
      max1 := sum
    end
    else begin
      if index_max2 = 0 then begin
        index_max2 := index_max1;
        max2 := max1;
        index_max1 := j;
        max1 := sum
      end
      else { оба максимальных значения уже не пустые,
             сравним их с очередной суммой }
        if sum>=max1 then begin
          index_max2 := index_max1;
          max2 := max1;
          index_max1 := j;
          max1 := sum
        end
        else
          if sum>=max2 then begin
            index_max2 := j;
            max2 := sum
          end;
    end;
    writeln('сумма ', j, 'столбца = ', sum:5:0);
И то тут столбики с макс. суммами неправильно подсчитываются ИНОГДА.
Vlad0n вне форума Ответить с цитированием
Старый 22.11.2012, 13:21   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Vlad0n, узнаю свой код!


Цитата:
то тут столбики с макс. суммами неправильно подсчитываются ИНОГДА.
ну Вам и все карты в руки. Запускайте код, как только получите НЕВЕРНЫЙ результат, тут же его фиксируйте (снимайте, делайте скриншот, переписывайте значения на бумажку!), потом заполняйте матрицу по запомненному образцу, переходите к отладке, находите ошибку и устраняйте. Всё просто!


ДОБАВЛЕНО
нашел ситуацию, когда мой код работал некорректно.
попробуйте такой код:
Код:
  index_max1 := 0;
  index_max2 := 0;
  for j := 1 to m do
  begin
    sum := 0;
    for i := 1 to n do
      sum := sum + a[i, j];

    if index_max1 = 0 then begin
      index_max1 := j;
      max1 := sum
    end
    else begin
      if index_max2 = 0 then begin
        if sum>max1 then begin
          index_max2 := index_max1;
          max2 := max1;
          index_max1 := j;
          max1 := sum
        end
        else begin
          index_max2 := j;
          max2 := sum
        end
      end
      else { оба максимальных значения уже не пустые,
             сравним их с очередной суммой }
        if sum>=max1 then begin
          index_max2 := index_max1;
          max2 := max1;
          index_max1 := j;
          max1 := sum
        end
        else
          if sum>=max2 then begin
            index_max2 := j;
            max2 := sum
          end;
    end;
    writeln('сумма ', j, 'столбца = ', sum:5:0);
  end;
  writeln(' Максимальные суммы двух столбцов равны: ');
  WriteLn('    стобец № ',index_max1,' = ', max1:5:2);
  WriteLn('    стобец № ',index_max2,' = ', max2:5:2);

p.s. а зачем правила форума нарушать?!
На штрафы нарываетесь?! или что?!
Чем Вас ваша прошлая тема:
Массив...
не устроила?! :-[

Последний раз редактировалось Serge_Bliznykov; 22.11.2012 в 13:41.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.11.2012, 15:42   #6
Vlad0n
Пользователь
 
Регистрация: 15.09.2012
Сообщений: 26
По умолчанию

Ну потому что я не знаю, как вывести матрицу с замененными столбиками....
А за этот код спасибо, я очень благодарен.

Последний раз редактировалось Vlad0n; 22.11.2012 в 15:57.
Vlad0n вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двухмерный массив shilven Паскаль, Turbo Pascal, PascalABC.NET 2 13.12.2011 13:12
Двухмерный массив enji4ka Помощь студентам 2 02.05.2011 18:35
Двухмерный массив briko Паскаль, Turbo Pascal, PascalABC.NET 6 01.06.2010 09:45
двухмерный массив Enchantner Паскаль, Turbo Pascal, PascalABC.NET 3 22.04.2008 20:47
Двухмерный массив xtraSHAD0W Паскаль, Turbo Pascal, PascalABC.NET 2 22.04.2008 18:17