Необходимо создать новую матрицу из данных входного потока, не меняя при этом старую. Как это можно сделать? При этом необходимо, чтобы менялись все элементы строки, если их несколько. Само задание: Из входного потока вводится непрямоугольная матрица вещественных чисел [aij], i = 1, …, m, j = 1, …, ni. Значения m и ni заранее не известны и вводятся из входного потока. Сформировать новую матрицу, поменяв в каждой строке местами максимальный и минимальный элементы (все, если их несколько). Исходную и полученную матрицы вывести в выходной поток с необходимыми комментариями. Мой код: #include<stdio.h> #include<malloc.h> typedef struct line{ int n; int *arr; } line; typedef struct matrix{ int lines; line *matr; } matrix; int getint(int *h); int input(matrix *a); int output(matrix *a); void modify(matrix *a); int main() { struct matrix matr; input(&matr); output(&matr); modify(&matr); output(&matr); return 0; } int getint(int *h) { int x; do { x = scanf("%d", h); if (x < 0) return 0; if (x == 0) { printf("Ошибка ввода (требуется ввести натуральное число)\n"); scanf("%*[^\n]"); } } while (x == 0); return 1; } int input(matrix *a) { int m,n; int i,j,k; printf("Введите количество строк матрицы: "); getint(&m); a->lines = m; a->matr = (line *)calloc(m, sizeof(line)); for (j = 0; j < a->lines; ++j){ printf("\nВведите длину строки[%d]: ",j); getint(&n); a->matr[j].n = n; a->matr[j].arr = (int *)malloc(sizeof(int)* n); for (i = 0; i < a->matr[j].n; ++i) { printf("Введите значение[%d][%d]: ",j,i); getint(&k); a->matr[j].arr[i] = k; } } } int output(matrix *a) { int m,n; int i,j; printf("\n"); for (j = 0; j < a->lines; ++j){ for (i = 0; i < a->matr[j].n; ++i) { printf("%d ",a->matr[j].arr[i]); } printf("\n"); } } void modify(matrix *a) { int i,j, max,min,tmp; for (j = 0; j < a->lines; ++j) { min = 0; max = 0; for (i = 0; i < a->matr[j].n; ++i) { if(a->matr[j].arr[i] > a->matr[j].arr[max]) max = i; if(a->matr[j].arr[i] < a->matr[j].arr[min]) min = i; } tmp = a->matr[j].arr[min]; a->matr[j].arr[min] = a->matr[j].arr[max]; a->matr[j].arr[max] = tmp; } } Код #include<stdio.h> #include<malloc.h> typedef struct line{ int n; int *arr; } line; typedef struct matrix{ int lines; line *matr; } matrix; int getint(int *h); int input(matrix *a); int output(matrix *a); void modify(matrix *a); int main() { struct matrix matr; input(&matr); output(&matr); modify(&matr); output(&matr); return 0; } int getint(int *h) { int x; do { x = scanf("%d", h); if (x < 0) return 0; if (x == 0) { printf("Ошибка ввода (требуется ввести натуральное число)\n"); scanf("%*[^\n]"); } } while (x == 0); return 1; } int input(matrix *a) { int m,n; int i,j,k; printf("Введите количество строк матрицы: "); getint(&m); a->lines = m; a->matr = (line *)calloc(m, sizeof(line)); for (j = 0; j < a->lines; ++j){ printf("\nВведите длину строки[%d]: ",j); getint(&n); a->matr[j].n = n; a->matr[j].arr = (int *)malloc(sizeof(int)* n); for (i = 0; i < a->matr[j].n; ++i) { printf("Введите значение[%d][%d]: ",j,i); getint(&k); a->matr[j].arr[i] = k; } } } int output(matrix *a) { int m,n; int i,j; printf("\n"); for (j = 0; j < a->lines; ++j){ for (i = 0; i < a->matr[j].n; ++i) { printf("%d ",a->matr[j].arr[i]); } printf("\n"); } } void modify(matrix *a) { int i,j, max,min,tmp; for (j = 0; j < a->lines; ++j) { min = 0; max = 0; for (i = 0; i < a->matr[j].n; ++i) { if(a->matr[j].arr[i] > a->matr[j].arr[max]) max = i; if(a->matr[j].arr[i] < a->matr[j].arr[min]) min = i; } tmp = a->matr[j].arr[min]; a->matr[j].arr[min] = a->matr[j].arr[max]; a->matr[j].arr[max] = tmp; } }