Упорядочить столбцы матрицы, чтобы их последние элементы образовывали убывающую последовательность - C (СИ)
Формулировка задачи:
Задали задачу на Си.
Дана матрица размера M x N. Упорядочить ее столбцы так, чтобы их последние элементы образовывали убывающую последовательность.
написал код:
если запустить, то выбьет три плюса, тоесть проверка на то что столбцы возрастающие, но как сделать чтобы они местами менялись? помогите пожайлуста
#include <stdio.h> main() { int mas[3][3]={1,2,3,4,5,6,7,8,9},i,j,z,temp; for(j=0,i=2,z=1;j<3;j++,z++) { if(mas[i][j]<mas[i][z]) { printf("+"); } } for(i=0;i<3;i++) for(j=0;j<3;j++) { printf("%d",mas[i][j]); } }
Решение задачи: «Упорядочить столбцы матрицы, чтобы их последние элементы образовывали убывающую последовательность»
textual
Листинг программы
#include <stdio.h> #include <math.h> #include <malloc.h> #include <stdlib.h> int main() { float **mass,**mass1,temp;//mass - исходный, mass1 - новый с учетом дублирования int i,j,n,m,k=0,y=0,n1,m1,c=0; //n - строки, m - столбцы 1 масссива, n1 m1 второго, temp - temp) printf("BBEDUTE PA3MEPHOCTb MACCUBA\n"); printf("BBEDUTE N\n"); scanf("%d",&n); printf("BBEDUTE M\n"); scanf("%d",&m); n1=n+1;//учет дублирования m1=m; //--------------------------выделение памяти mass=(float**)malloc(n*sizeof(float*)); for(i=0;i<n;i++) { mass[i]=(float*)malloc(m*sizeof(float)); } mass1=(float**)malloc(n1*sizeof(float*)); for(i=0;i<n1;i++) { mass1[i]=(float*)malloc(m1*sizeof(float)); } //--------------------------/выделение памяти //------------------------------zapolnenie и вывод--------------------------- for (i=0;i<n;i++) { for (j=0; j<m; j++) { mass[i][j]=rand()%100; mass1[i][j]=mass[i][j]; } printf("\n"); } for(i=0;i<n;i++) { for(j=0;j<m;j++) { printf(" [%d][%d]=%5.2f",i,j,mass[i][j]); } printf("\n"); } //------------------------------/zapolnenie и вывод--------------------------- printf(" -----------------------------------------------\n"); for(i=0;i<n-1;i++) for(j=0; j<n-1; j++) if(mass1[j][0]>mass1[j+1][0]) for(k=0; k<m1; k++) { temp=mass1[j][k]; mass1[j][k]=mass1[j+1][k]; mass1[j+1][k]=temp; } for(i=0; i<m1; i++) mass1[n1-1][i]=mass1[n1-2][i]; printf(" -----------------------------------------------\n"); //-----------------------конечный вывод 2 массива for(i=0;i<n1;i++) { for(j=0;j<m1;j++) { printf(" [%d][%d]=%3.2f",i,j,mass1[i][j]); } printf("\n"); } //-----------------------/конечный вывод 2 массива return 0; }
Объяснение кода листинга программы
Код выполняет следующие действия:
- Ввод от пользователя
- n - количество строк в матрице
- m - количество столбцов в матрице
- Выделение памяти
- mass и mass1 - двумерные массивы, в которых будут храниться исходные и упорядоченные данные соответственно
- mass и mass1 выделяются с помощью функции malloc
- Заполнение матрицы случайными значениями
- значения для mass и mass1 генерируются с помощью функции rand()%100
- Вывод исходной матрицы
- значения матрицы mass выводятся на экран с помощью цикла for
- Упорядочивание матрицы
- используется цикл for для перебора строк матрицы
- для каждой строки используется еще один цикл for для перебора столбцов
- если значение в текущем столбце больше значения в следующем столбце, происходит перестановка этих значений
- после завершения перебора всех строк, последнее значение в последней строке перемещается в первую позицию последней строки
- Вывод упорядоченной матрицы
- значения матрицы mass1 выводятся на экран с помощью цикла for
- Освобождение памяти
- массивы mass и mass1 освобождаются с помощью функции free()
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д