Косяки в работе программы. В чем причина? - 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;
}

Объяснение кода листинга программы

  1. Объявлены переменные: char ext; //переменая выхода из программы int mas[MAS][MAS],max1,max2,m,n,b,es,pozj; // mas[10][10] - матрица,
  2. Задается размерность матрицы с помощью ввода с клавиатуры.
  3. Заполняется матрица с помощью сканера.
  4. В цикле проходит сортировка матрицы по каждой строке.
  5. В цикле проходит обмен элементов для получения максимального значения в каждой строке.
  6. Выводится отсортированная матрица.
  7. После каждой итерации цикла выводится сообщение с предложением ввести символ для продолжения или выхода из программы.
  8. После завершения работы программы выводится сообщение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.375 из 5
Похожие ответы