Как найти наибольшее и наименьшее число и его положение в двумерном массиве в C - PullRequest
0 голосов
/ 26 января 2019

Я новичок здесь. Я начинаю изучать программирование и C ++. Я должен сделать программу, которая запрашивает цифры для пользователя, чтобы заполнить массив, а затем функцию, чтобы найти самое высокое и самое низкое значение и его положение в массиве. Это то, что у меня сейчас, это работает, чтобы найти самое высокое число и его положение, но это не работает, чтобы найти самое низкое, самое низкое найденное значение не является правильным, а также его положение:

int main() {
    int array[SIZEF][SIZEC];
    int zero = 0;
    int highest[0][0];  //to find the highest, array from 0 value.
    int lowest[0][0];   //to find the lowest, takes the highest value and then compare, if its lower than the current value of the array, it takes its value 

    highest[0][0] = zero;

    fill_array(array, SIZEF, SIZEC);

    highlow(array, SIZEF, SIZEC, highest, lowest);

    getchar();

    return 0;
}

void fill_array(int array[][SIZEC], int sizef, int sizec) {
    //code to fill the array, no problem here.    
}

void highlow(int array[][SIZEC], int sizef, int sizec, int highest[][0], int lowest[][0]) {
    int positionX = 0;
    int positionY = 0;

    for (int i = 0; i < sizef; i++) {
        for (int j = 0; j < sizec; j++) {
            if (array[i][j] > highest[0][0]) {
                //if the current value of the array is higher than highest value, highest value takes its value.
                highest[0][0] = array[i][j];
                positionX = i;
                positionY = j;
                lowest[0][0] == highest[0][0]; //now lowest value its the highest value

                if (array[i][j] < lowest[i][j]) { //so, if current array value its lower than lowest value
                                                  //lowest value takes its value.                
                    lowest[0][0] = array[i][j];
                }
            }
        }
    }
}

Большое спасибо. (извините за мой английский, я тоже учусь).

Ответы [ 2 ]

0 голосов
/ 27 января 2019
int highest[0][0];  //to find the highest, array from 0 value.
int lowest[0][0];   //to find the lowest, takes the highest value and then compare, if its lower than the current value of the array, it takes its value 

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

int highest = 0;
int lowest = 0;

Эти два значения должны быть установлены на первое значение многомерного массива в начале main. После этого вы можете перебрать массив и сравнить текущий элемент массива с предыдущим самым высоким и самым низким значением. Итак, в начале основного:

highest = array[0][0];
lowest = array[0][0];

Кроме того, вам потребуются отдельные параметры для позиции самых высоких и самых низких значений:

int positionX_highest = 0;
int positionY_highest = 0;
int positionX_lowest = 0;
int positionY_lowest = 0;

Ваши петли должны быть в порядке. Однако сравнение внутри циклов должно быть разделено. Запрос if для самого низкого значения никогда не выполняется в вашем коде. Проверьте условия отдельно:

for (int i = 0; i < sizef; i++) {
    for (int j = 0; j < sizec; j++) {
      if (array[i][j] > highest) 
      {
            //If the current array element is higher than the highest so far, save it
            highest = array[i][j];
            positionX_highest = i;
            positionY_highest = j;
      }
      if (array[i][j] < lowest)
      {
            //If the current array element is lower than the lowest so far, save it
            lowest = array[i][j];
            positionX_lowest = i;
            positionY_lowest = j;
      }
    }
}

Это должно сработать.

0 голосов
/ 26 января 2019
int highest[0][0];  //to find the highest, array from 0 value.

int lowest[0][0];   //to find the lowest, takes the highest value and then compare, if its lower than the current value of the array, it takes its value 

эти два массива позволяют содержать 0 элементов, размеры равны 0 (обратите внимание, что ISO C запрещает массив нулевого размера)

так в

highest[0][0]=zero;

вы пишете из массива, и, как и везде, после того, как у вас есть доступ к этим 2 массивам

почему вы не оценили их как массив ? Я говорю, что из-за lowest[i][j] в другом месте вашей программы даже это кажется странным


если я забуду проблему с размерностью этих двух векторов, в

lowest[0][0]==highest[0][0];

это утверждение ничего не делает, может быть, вы хотели

lowest[0][0]=highest[0][0];

? даже это кажется странным


если я забуду проблему с размерностью этих двух векторов, в

if(array[i][j] < lowest[i][j])

вы никогда не пишете в нижнем, кроме [0][0], поэтому lowest[i][j] не определено, кроме случаев, когда i и j равны 0


Вы вызываете fill_array и highlow в main , пока они не объявлены / не определены, поскольку они определены после main , компилятор будет использовать объявление по умолчанию из ваших вызовов , это опасно, переместите их до main или объявите их до main


о размерах:

int a[10] позволяет хранить 10 int, индексы 0 .. 9

int highest[2][3] позволяет хранить 2 * 3 = 6 int, первый индекс равен 0..1, а второй 0..2

и т.д.

ваш массив позволяет хранить 0 * 0 = 0 элементов, вам нужен только доступ к highest[0][0], вам нужно определить их как int highest[1][1]; и то же самое для другого массива, но в таком случае, что представляет собой интерес? вам просто нужен int var, а не массив

Я рекомендую вам прочитать книгу / учебник по языку C

Я также призываю вас запрашивать высокий уровень предупреждения / ошибки при компиляции, например, если вы используете gcc do gcc -pedantic -Wall ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...