2017-10-25 1 views
2

재귀 반전 (배열) C++ 프로그램을 완료했지만 부분적으로 올바르게 출력됩니다. 내 "const int SIZE = 10"이라고 생각하는 추가 "10"이 출력됩니다. 어디에서 내 프로그램에서 오류를 만들었으며 오류가 발생한 위치에 대한 조언을 원합니다. 고맙습니다. 어떤 도움이라도 대단히 감사하겠습니다.출력에서 ​​특정 재귀 반전 프로그램 문제

Original Array: 9 2 6 11 0 18 4 13 2 7 
Reversed Array: 7 2 13 4 18 0327053270532705 10 

다음은 내 코드입니다 :

#include <iostream> 
#include <cstdlib> 
#include <iomanip> 
#include <ctime> 

const int SIZE = 10; 
unsigned int seed = int (time(0)); 

using namespace std; 

double random(unsigned int &seed); 
void initialize(int a[]); 
void print_array(int a[]); 
void recursive_reverse_array(int a[], int[], int[]); 

double random(unsigned int &seed) 
{ 
    const int MODULUS = 15749; 
    const int MULTIPLIER = 69069; 
    const int INCREMENT = 1; 
    seed = ((MULTIPLIER *seed) + INCREMENT) % MODULUS; 
    return double (seed)/double(MODULUS); 
} 

void initialize(int a[]) 
{ 
    for (int i = 0; i < SIZE; ++i) 
    a[i] = (20 * (random(seed))); 
} 

void print_array (int a[]) 
{ 
    for (int i = 0; i < SIZE; ++i) 
    cout << setw(4) << a[i]; 
    cout << endl; 
} 

void recursive_reverse_array(int a[],int num1, int num2) 
{ 
    int k; 
    if(num1 < num2) 
    { 
    a[num1] = a[num2]; 
    a[num2] = k; 
    recursive_reverse_array(a, num1 + 1, num2 - 1); 
    } 
} 

int main() 
{ 
    int arr[SIZE]; 
    cout << "Original Array:"; 
    initialize(arr); 
    print_array(arr); 
    recursive_reverse_array(arr, 0, SIZE - 1); 
    cout << "Reversed Array:"; 
    print_array(arr); 
    return 0; 
} 
+0

컴파일러에서 가능한 버그에 대해 경고하지 않으면 더 나은 컴파일러로 전환하십시오. 컴파일러가 버그를 경고했다면 컴파일러의 경고 메시지를 무시하지 않는 것이 좋습니다. 컴파일러가 경고 메시지를내는 이유는 좋은 이유가 없기 때문입니다. 컴파일러의 경고 메시지를 검토하고 이해하려고하십시오. –

+1

리버스 함수에서'k'를 어디에 할당합니까? – Cuber

+0

'swap '은 실수를 피할 수 있습니다. – Jarod42

답변

1

코드에서 바보 같은 실수를하고 있습니다. 아래 코드를 참조하여 코드를 바꾸십시오.

#include <iostream> 
#include <cstdlib> 
#include <iomanip> 
#include <ctime> 

const int SIZE = 10; 
unsigned int seed = int (time(0)); 

using namespace std; 

double random(unsigned int &seed); 
void initialize(int a[]); 
void print_array(int a[]); 
void recursive_reverse_array(int a[], int[], int[]); 

double random(unsigned int &seed) 
{ 
    const int MODULUS = 15749; 
    const int MULTIPLIER = 69069; 
    const int INCREMENT = 1; 
    seed = ((MULTIPLIER *seed) + INCREMENT) % MODULUS; 
    return double (seed)/double(MODULUS); 
} 

void initialize(int a[]) 
{ 
    for (int i = 0; i < SIZE; ++i) 
    a[i] = (20 * (random(seed))); 
} 

void print_array (int a[]) 
{ 
    for (int i = 0; i < SIZE; ++i) 
    cout << setw(4) << a[i]; 
    cout << endl; 
} 

void recursive_reverse_array(int a[],int num1, int num2) 
{ 
    int k; 
    if(num1 < num2) 
    { 
    k=a[num1]; 
    a[num1] = a[num2]; 
    a[num2] = k; 

    recursive_reverse_array(a, num1 + 1, num2 - 1); 
    } 
} 

int main() 
{ 
    int arr[SIZE]; 
    cout << "Original Array:"; 
    initialize(arr); 
    print_array(arr); 
    recursive_reverse_array(arr, 0, SIZE - 1); 
    cout << "Reversed Array:"; 
    print_array(arr); 
    return 0; 
} 

코드에 k = a[num1];을 사용해야합니다. 그것이 효과가 있기를 바랍니다.

1

recursive_reverse_array 기능에 int k = a[num1];을 설정하고 그 일을해야 이것은 내가 수신하고 출력입니다. 현재, 당신은 그것이 초기화되지 않은 것입니다, 나는 당신에게 부분적으로 올바른 결과를 줄 것이라고 믿습니다.