Косяки в работе программы. В чем причина? - C (СИ)
Формулировка задачи:
Здравствуйте! Возникла следующая трудность: программа неправильно выдает результат при первом вводе и корректно при последующих вводах или же работе Debug, причем вводятся одинаковые входные данные.
Текст задачи следующий:
Дана целая матрица размера n×m , n , m⩽10 .
В каждой строке матрицы требуется переставить элементы так, чтобы вначале шал группа
элементов, больших первого элемента строки, затем — сам этот элемент, потом группа
элементов меньших или равных ему (порядок следования элементов в каждой группе не
изменять). Полученную матрицу упорядочить по строкам (переставить строки) так, чтобы
максимальные элементы строк представляли собой невозрастающую последовательность.
Кода решения:
В чем причина?
#include <stdio.h> #include <conio.h> #define MAS 10 int main() { char ext; //переменая выхода из программы int mas[MAS][MAS],max1,max2,m,n,b,es,pozj;// mas[10][10] - матрица, do{ //max[10] - массив максимальных элем. строк, m,n - размерность матрицы, //b - вспомогательная переменная,es - первый элемент, pozj - знач. j printf("Input razmernost matricy N x M (0<N,M<11) : "); do { scanf("%d%d",&n,&m); if (n<1|m<1|m>10|n>10) printf("! 0<N,M<11 : "); } while (n<1|m<1|m>10|n>10); for(int i=0; i<n; i++) for(int j=0; j<m; j++) scanf("%d",&mas[i][j]); for(int i=0; i<n; i++){ es=mas[i][0]; pozj=0; for(int j=1; j<m; j++) if(mas[i][j]>=es){ mas[i][pozj]=mas[i][j]; for(int k=j-1; k>=pozj;k--) mas[i][k+1]=mas[i][k]; pozj++; } mas[i][pozj]=es; } for(int k=0; k<n-1; k++) for(int i=0; i<n-k; i++){ for(int j1=0; j1<m-1; j1++){ if (mas[i][j1]>mas[i][j1+1]) max1=mas[i][j1]; if (mas[i+1][j1]>mas[i+1][j1+1]) max2=mas[i+1][j1]; } if(max1>=max2) for(int j=0; j<m;j++){ b=mas[i][j]; mas[i][j]=mas[i+1][j]; mas[i+1][j]=b; } } printf("\n\nPoluchennaya matrica:\n\n"); for(int i=0; i<n; i++){ for(int j=0; j<m; j++) if (j) printf(" %d",mas[i][j]); else printf("%d",mas[i][j]); printf("\n"); } printf("\nNajmite [Enter] for continue or [Esc] for exit"); ext=getch(); printf("\n______________________________________________\n\n"); } while (ext!=27); return 0; }
Решение задачи: «Косяки в работе программы. В чем причина?»
textual
Листинг программы
#include <stdio.h> #include <conio.h> #define MAS 10 int main() { char ext; //переменая выхода из программы int mas[MAS][MAS],max1,max2,m,n,b,es,pozj;// mas[10][10] - матрица, do{ //max[10] - массив максимальных элем. строк, m,n - размерность матрицы, //b - вспомогательная переменная,es - первый элемент, pozj - знач. j printf("Input razmernost matricy N x M (0<N,M<11) : "); do { scanf("%d%d",&n,&m); if (n<1|m<1|m>10|n>10) printf("! 0<N,M<11 : "); } while (n<1|m<1|m>10|n>10); for(int i=0; i<n; i++) for(int j=0; j<m; j++) scanf("%d",&mas[i][j]); for(int i=0; i<n; i++){ es=mas[i][0]; pozj=0; for(int j=1; j<m; j++) if(mas[i][j]>=es){ mas[i][pozj]=mas[i][j]; for(int k=j-1; k>=pozj;k--) mas[i][k+1]=mas[i][k]; pozj++; } mas[i][pozj]=es; } for(int k=1; k<n-1; k++) for(int i=0; i<n-k; i++){ for(int j1=0; j1<m-1; j1++){ if (mas[i][j1]>mas[i][j1+1]) max1=mas[i][j1]; if (mas[i+1][j1]>mas[i+1][j1+1]) max2=mas[i+1][j1]; } if(max1>=max2) for(int j=0; j<m;j++){ b=mas[i][j]; mas[i][j]=mas[i+1][j]; mas[i+1][j]=b; } } printf("\n\nPoluchennaya matrica:\n\n"); for(int i=0; i<n; i++){ for(int j=0; j<m; j++) if (j) printf(" %d",mas[i][j]); else printf("%d",mas[i][j]); printf("\n"); } printf("\nNajmite [Enter] for continue or [Esc] for exit"); ext=getch(); printf("\n<br>\n\n"); } while (ext!=27); return 0; }
Объяснение кода листинга программы
- Объявлены переменные: char ext; //переменая выхода из программы int mas[MAS][MAS],max1,max2,m,n,b,es,pozj; // mas[10][10] - матрица,
- Задается размерность матрицы с помощью ввода с клавиатуры.
- Заполняется матрица с помощью сканера.
- В цикле проходит сортировка матрицы по каждой строке.
- В цикле проходит обмен элементов для получения максимального значения в каждой строке.
- Выводится отсортированная матрица.
- После каждой итерации цикла выводится сообщение с предложением ввести символ для продолжения или выхода из программы.
- После завершения работы программы выводится сообщение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д