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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2013, 03:53   #1
Dasha S
Новичок
Джуниор
 
Регистрация: 05.07.2013
Сообщений: 1
По умолчанию С+

Задана матрица размером NxM. Упорядочить ее строки по неубыванию суммы элементов в строках.
Dasha S вне форума Ответить с цитированием
Старый 05.07.2013, 06:06   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
  int n, m; // размерности матрицы
  int** a; // матрица
  int i, j; // итераторы матрицы
  int b, c; // итераторы сортировки
  int *k; // вспомогательный массив для расчета суммы элементов в строках
  int temp; // для пузырьковой сортировки

  srand(time(0)); // генератор случайных чисел

  scanf("%d", &n); // считать n из консоли
  scanf("%d", &m); // считать m из консоли

  a = new int*[n]; // выделить память под строки матрицы
  for(i = 0; i < n; i++) // выделить память под столбцы матрицы
    a[i] = new int[m];

  k = new int[n]; // выделить память под вспомогательный массив

  // заполнить матрицу случайными числами
  for(i = 0; i < n; i++)
    for(j = 0; j < m; j++)
        a[i][j] = rand()%9;

  printf("\n");

  // вывести матрицы
  for(i = 0; i < n; i++)
    {
    for(j = 0; j < m; j++)
        printf("%d ", a[i][j]);
    printf("\n");
    }

  // рассчитать вспомогательный массив (суммы элементов в строках)
  for(i = 0; i < n; i++)
  {
    k[i] = 0;
    for(j = 0; j < m; j++)
        k[i] += a[i][j];
  }

  printf("\n");

  //вывести вспомогательный массив
  for(i = 0; i < n; i++)
  {
    printf("%d ", k[i]);
  }

  printf("\n");

  // отсортировать по неубыванию
  for (b = 0; b < n ; b++)
  {
    for(c = b + 1; c < n; c++)
    {
      if (k[b] > k[c])
      {
        for(j = 0; j < m ; j++)
        {
          temp = a[b][j];
          a[b][j] = a[c][j];
          a[c][j] = temp;
        }
        temp = k[b];
        k[b] = k[c];
        k[c] = temp;
      }
    }
  }


  printf("\n");

  // вывести новый массив
  for(i = 0; i < n; i++)
  {
    for(j = 0; j < m; j++)
       printf("%d ", a[i][j]);
    printf("\n");
  }

  // очистить память
  for(i = 0; i < n; i++)
    delete [] a[i] ;

  delete []a ;

  delete []k ;

  // завершение работы программы
  return 0;
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


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