Упорядочить строки массива по возрастанию суммы элементов каждой строки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста. Мне нужно упорядочить строки массивы по возрастанию сумм элементов каждой строки. То что я сделал находится ниже. Немного опишу. Задаю произвольную матрицу. Нахожу сумму в каждой строке и присваиваю это значение одномерному массивы B. Как мне теперь упорядочить строки двумерного массива? Прощу объяснить, а не скопировать откуда-нибудь неизвестно что. Буду очень признателен.
#pragma hdrstop
#pragma argsused
 
#include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);

int n,m,i,j,max=0;
printf("Введите размер массива");
scanf ("%i %i", &n , &m);
 
float **A = new float*[n], k;
 for (i = 0; i < n; i++)
 A[i] = new float [m];
printf ("Введите матрицу A\n");
 
for (int i=0; i < n; i++)
{
for (int j=0; j<m;j++)
{
    gotoxy(5 + j*5,5+i);
    scanf("%f", &A[i][j]);
    }
}
 
    float *B;
    B=new float[n];
 
for (i = 0; i < n; i++) {
   for (j = 0;j <= m; j++)
   k +=A[i][j];
   printf ("Сумма строки = %f\t" , k);
   B[n]=k;
   k=0;
   printf ("Элемент массива B %f\n", B[n]);
}
 
getch();
    return 0;
    }

Решение задачи: «Упорядочить строки массива по возрастанию суммы элементов каждой строки»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
 
float sum(float * mas, int m){
    float sum = 0;
    for (int i = 0; i < m; i++){
        sum += mas[i];
    }
    return sum;
}
 
int main(){
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int n, m, i, j, max = 0;
    printf("Введите размер массива: ");
    scanf("%i %i", &n, &m);
    float **A = new float*[n], k;
    for (i = 0; i < n; i++)
        A[i] = new float[m];
    printf("Введите матрицу A\n");
    for (int i = 0; i < n; i++){
        for (int j = 0; j<m; j++){
            printf("[%i][%i] = ", i, j);
            scanf("%f", &A[i][j]);
        }
    }
    float * a = new float[m];   
    for (int i = 0; i < n; i++) { // i - номер прохода
        for (int j = n - 1; j > i; j--){  // внутренний цикл прохода
            if (sum(A[j - 1], m) > sum(A[j], m)) {
                a = A[j - 1];
                A[j - 1] = A[j];
                A[j] = a;
            }
        }
    }
    for (int i = 0; i < n; i++){
        for (int j = 0; j<m; j++){
            printf("[%i][%i] = %f\n", i, j, A[i][j]);           
        }
    }
    _getch();
    return 0;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы
  2. Определяется функция sum, которая суммирует элементы строки массива
  3. Определяется главная функция main, которая запрашивает размер массива и заполняет его значениями
  4. Создается двумерный массив типа float** и инициализируется динамическим выделением памяти
  5. Внутренними циклами заполняется массив A
  6. Создается одномерный массив типа float* и инициализируется динамическим выделением памяти
  7. Внутренними циклами происходит перестановка строк массива A в порядке возрастания суммы элементов каждой строки
  8. Выводится отсортированный массив A
  9. Программа ожидает нажатия клавиши для завершения работы
  10. Программа завершается возвратом 0 из функции main

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.357 из 5
Похожие ответы