Member 14052307 Ответов: 2

Массив, отображающий случайные числа


Здравствуйте, друзья, мне нужна помощь в этом как можно скорее..

Это функция mergeasc, которая объединяет два массива в порядке возрастания, чтобы дать третий массив в порядке убывания.. И этот код не выполняется.
void mergeasc(int A[5],int B[5],int C[10],int M,int N)
{
   int i,j,k;
   while(i<M&&j<N)
   {
       if(A[i]<B[j])
       {
           C[k]=A[i];
           i++;
           k++;
       }
       else
       {
           C[k]=B[j];
           j++;k++;
       }
   }
   if(i==M)
   {
       while(i<M)
       {
           C[k]=A[i];
           k++;
           i++;
       }
   }
   std::cout<<"Sorted Array";
   for(i=0;i<M+N;i++)
   {
       std::cout<<C[i]<<" ";

   }
}

int main()
{
    int B={7, 8, 9};
    int A={1, 2, 3};
    mergeasc(A,B,3,3);
    return 0;
}


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

попробовал поменять скобки..

2 Ответов

Рейтинг:
0

Rick York

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

void mergeasc( int A[5], int B[5], int C[10], int M, int N )
и там, где он вызывается в main (), он не передает ничего похожего на эти аргументы. Вам действительно не нужно включать размеры в переменные, потому что вы передаете их явно. Это означает, что вы можете написать его так:
void mergeasc( int A[], int B[], int C[], int M, int N )
Затем в вашей основной функции вы нигде не объявляли массив C. Это должно быть сделано примерно так :
int main()
{
    int B[3]={ 7, 8, 9 };
    int A[3]={ 1, 2, 3 };
    int C[6]={ 0 };
    mergeasc( A, B, C, 3, 3 );
}
Еще одна вещь - в mergeasc вы объявили циклические итерационные переменные, но никогда не инициализировали их. Вы всегда должны делать это независимо от того, делает это компилятор или нет.
void mergeasc( int A[], int B[], int C[], int M, int N )
{
   int i=0, j=0, k=0;
   // rest of logic here
}


Рейтинг:
0

OriginalGriff

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

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а затем удвоить его и напечатать ответ, то если бы ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!