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