Упорядочить строки массива по возрастанию суммы элементов каждой строки - 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; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется функция sum, которая суммирует элементы строки массива
- Определяется главная функция main, которая запрашивает размер массива и заполняет его значениями
- Создается двумерный массив типа float** и инициализируется динамическим выделением памяти
- Внутренними циклами заполняется массив A
- Создается одномерный массив типа float* и инициализируется динамическим выделением памяти
- Внутренними циклами происходит перестановка строк массива A в порядке возрастания суммы элементов каждой строки
- Выводится отсортированный массив A
- Программа ожидает нажатия клавиши для завершения работы
- Программа завершается возвратом 0 из функции main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д