Aeyan Ashraf Ответов: 3

Введите и распечатайте матрицу m x n и найдите наибольшее число в заданной пользователем строке и столбце


Задача заключается в следующем - написать программу на языке Си для ввода матрицы m x n и распечатать ее . Также возьмите номер строки и номер столбца в качестве входных данных пользователя и найдите максимальное число в соответствующей строке и столбце .

Я могу успешно принимать входные данные и печатать матрицу . проблема возникает при получении входных данных строк и столбцов от пользователя и нахождении максимального числа в этой строке и столбце .

Я искал везде, но мог найти только максимальное число во всей матрице или максимальное число в каждой строке и столбце . Надеюсь, кто-нибудь сможет развеять мои сомнения . Это мой первый вопрос по CodeProject. Я попытался прочитать все правила. Извините, если я что-то пропустил .

Что я уже пробовал:

#include <stdio.h>

int main()
{
    int matrix[100][100],max1[100],max2[100];
    int i,j,m,n,o,p;

    printf("Enter number of Rows :");
    scanf("%d",&m);
    printf("Enter number of Columns :");
    scanf("%d",&n);

    printf("\nEnter matrix elements :\n");
    for(i=0;i< m;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&matrix[i][j]);
        }
    }

    printf("\nMatrix is :\n");
    for(i=0;i< m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%d\t",matrix[i][j]);
        }
        printf("\n");
    }
    printf("Enter Row number :");
    scanf("%d",&i);
    for(i=i;i<i+1;i++);
    {
        max1[i]=matrix[i][j];
        for(j=0;j<n;j++);
        {
            if(matrix[i][j]>max1[i]);
            {
                max1[i]=matrix[i][j];
            }
        }
    }
    printf("Enter Column number :");
    scanf("%d",&j);
    for(i=0;i<m;i++);
    {
        max2[j]=matrix[i][j];
        for(j=j;j<j+1;j++);
        {
            if(matrix[i][j]>max2[j]);
            {
                max2[j]=matrix[i][j];
            }
        }
    }
    printf("%d",max1);
    printf("%d",max2);

    return 0;
}

3 Ответов

Рейтинг:
6

Patrice T

несколько ошибок:
- Языковые ошибки

printf("Enter Row number :");
scanf("%d",&i);
for(i=i;i<i+1;i++); // the semicolon here prevent looping by saying loop is empty
{
    max1[i]=matrix[i][j];
    for(j=0;j<n;j++); // the semicolon here prevent looping by saying loop is empty
    {
        if(matrix[i][j]>max1[i]); // the semicolon here prevent if from working
        {
            max1[i]=matrix[i][j];
        }
    }
}

- Логическая ошибка
printf("Enter Row number :");
scanf("%d",&i);
for(i=i;i<i+1;i++) // No need
{ // No need
    max1[i]=matrix[i][j];
    for(j=0;j<n;j++)
    {
        if(matrix[i][j]>max1[i])
        {
            max1[i]=matrix[i][j];
        }
    }
} // No need


Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


0x01AA

+5 (кстати, я не ожидаю ответа)

Patrice T

Спасибо

Aeyan Ashraf

Большое спасибо, что уделили мне время . Я совершенно забыл синтаксис для цикла for, я не знаю, как это сделать. После долгой борьбы . Я мог бы заставить код работать и все такое . Просто ответ не приходит правильно . Я изменил значения max1 и max2 из массива на int и использовал следующий код . Я не знаю, почему ответ не приходит правильно. Я попробую использовать отладчик . Вы мне очень помогли, так что я принимаю это как ответ.

printf("введите номер строки :");
scanf("%d",&i);


max1=матрица[0][0];
для(j=0;j<n;j++)
{
="" если(матрица[i][j]="">max1)
{
max1=матрица[i][j];
}
}

Рейтинг:
2

k5054

Чтобы найти максимум строки, вы можете сделать что-то вроде этого:

#include <limits.h>  // to get INT_MIN

    /* ... get user input, etc ... */ 

int rowmax = INT_MIN;  // Smallest possible value for an int
for(col = 0; col < n_cols; ++col)
{
    if(array[row][col] > rowmax)
        rowmax = array[row][col];
}
printf("max value for row %d is %d\n", row, rowmax);


аналогично для колонки.


Aeyan Ashraf

Большое спасибо, что уделили мне время . Но можно использовать только файл stdio.h .

Рейтинг:
1

OriginalGriff

Цитата:
Я искал везде, но мог найти только максимальное число во всей матрице или максимальное число в каждой строке и столбце

Разработка-это не поиск в интернете и сдача, когда вы не можете найти именно то, что вам нужно: если бы это было так, ничего нового даже не могло бы быть произведено, и это было бы очень глупо.

Вместо этого речь идет о мышлении: внимательно прочитайте задание, Подумайте о том, что требуется, разбейте его на более мелкие кусочки и посмотрите, сможете ли вы их выполнить. Если вы можете сделать меньший шаг, сделайте. Если вы не можете разбить его на более мелкие кусочки и попытаться сделать их. Повторяйте по мере необходимости.

Это ваше домашнее задание, а не наше, и в конечном счете никому не поможет, если мы сделаем его за вас - особенно вам! Если вы не можете выполнить эту - довольно тривиальную - задачу для себя, то следующая задача (которая будет более сложной, потому что ваш наставник предполагает, что вы поняли это) будет еще дальше от вас. А когда ты наконец доберешься до экзаменов, то вообще не сможешь получить помощь ... ну, вы знаете, что тогда происходит.

Поэтому остановитесь, выбросьте найденный код и подумайте о задаче: на самом деле это совсем не сложно, и если вы думаете о том, как бы вы сделали это вручную, это должно рассказать вам, как это сделать на компьютере.
Дайте ему попробовать: посмотрите, как далеко вы можете получить.


Aeyan Ashraf

Код , который я написал, я написал сам . Он не копируется .