Упорядочить столбцы матрицы, чтобы их последние элементы образовывали убывающую последовательность - 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()