В главной функции задан массив второй степени (матрица a[8][8]). Нужно создать массив первой степени (x[8]). x[8] - элементы шестого столбца транспонированной матрицы a, элементы каждой строки которой расположены по возрастанию. На экране должны быть: - исходная матрица
- транспонированная матрица
- трансп. матрица с отсоритрованными элементами по строкам
- одномерный массив
При этом нельзя создавать дополнительную матрицу. Основные операции необходимо сделать в виде функций (вывод на экран, транспонирование, сортировка, создание одномерного массива).
Я решил задачу без помощи функций:
| Код | #include <stdio.h>
int main() { float a[6][6]={ {54,67,4,97,45,2}, {0,34,23,654,86,2}, {34,86,11,0,54,234}, {445,86,11,8,167,4}, {25,345,63,2,85,1}, {56,765,224,9,24,84}, };
float x[6]; //result int i,j,k; float c,h;
printf("\n\tИсходная матрица:\n\n"); for(i=0;i<6;i++) { for(j=0;j<6;j++) { printf("%5.0f", a[i][j]); } printf("\n"); }
//Транспонируем матрицу a[6][6] for(i=0;i<6;i++) { for(j=0;j<6;j++) { if(i<j) { c=a[i][j]; a[i][j]=a[j][i]; a[j][i]=c; } } }
printf("\n\tТранспонированная матрица:\n\n"); for(i=0;i<6;i++) { for(j=0;j<6;j++) { printf("%5.0f", a[i][j]); } printf("\n"); }
//Отсортируем элементы каждой строки матрицы for(i=0;i<6;i++) { for(j=0;j<5;j++) { if(a[i][j]>a[i][j+1]) { h=a[i][j]; a[i][j]=a[i][j+1]; a[i][j]=h; } for(k=0;k<6;k++) { if(a[k][j]>a[k][j+1]) { h=a[k][j]; a[k][j]=a[k][j+1]; a[k][j+1]=h; } } } } printf("\n\tТранспонированная матрица, элементы каждой строки которой расположены по возрастанию:\n\n"); for(i=0;i<6;i++) { for(j=0;j<6;j++) { printf("%5.0f", a[i][j]); } printf("\n"); }
//создадим массив, состоящий из элементов шестого столбца матрицы for(i=0;i<6;i++) { x[i]=a[i][5]; } printf("\n\tКомпоненты вектора x "); printf("(где x[i] - элементы шестого столбца транспонированной матрицы, элементы каждой строки которой)\n"); printf("расположены по возрастанию.\n\n"); for(i=0;i<6;i++) printf("%5.0f", x[i]); printf("\n\n"); }
|
А так можно вывести на экран массив с помощью функции:
| Код | #include <stdio.h>
float print(float *a) //печать двумерного массива { int i, j; printf("\nИсходный массив:\n\n"); for(i=0;i<6;i++) { for(j=0;j<6;j++) { printf("%4.0f ", *a); a++; } printf("\n"); } printf("\n"); return (0); }
int main() { float a[6][6]={ {0,0,0,0,49,18}, {0,0,85,0,0,39}, {0,85,0,17,0,0}, {0,0,17,0,0,12}, {49,0,0,0,0,9}, {18,39,0,12,9,0}, }; print(*a); //Выведем на экран исходный массив }
|
Как сделать остальное, при том что, наверное, функции должны возвращать значение для преобразования матрицы, я не знаю.
Просьба значительно не изменять приведенный синтаксис.
|