2012-11-26 2 views
7

정수 배열에서 가장 작은 요소를 가진 인덱스를 반환하려고합니다. 내가 놓친 게 있니? 정수를 넣으면 인덱스를 반환하지 않습니다.배열의 가장 작은 요소의 인덱스를 반환하십시오.

업데이트 : 배열 스택 손상에 대해 int main() 끝에 오류가 발생합니다. 고맙습니다. 내 코드는 다음과 같습니다 :

#include <iostream> 
#include <conio.h> 

using namespace std; 

int indexofSmallestElement(double array[], int size); 

int main() 
{  
int size = 10; 
double array[10]; 

for (int i = 0; i <= size; i++) 
{ 
    cout << "Enter an integer: " << endl; 
    cin >> array[i]; 
} 

indexofSmallestElement(array, size); 
} 

int indexofSmallestElement(double array[], int size) 
{ 
int index = 0; 

if (size != 1) 
{ 

    int n = array[0]; 
    for (int i = 1; i < size; i++) 
    { 
     if (array[i] < n) 
     { 
      n = array[i]; 
      index = i; 
     } 
    } 
} 
return index; 
} 
+4

n = array [0]이 아니어야합니까? 첫 번째 숫자를 가정 된 가장 작은 요소로 저장하려면 거기에서 비교하십시오. – Clark

+0

@Clark이 말한 것에 덧붙여, 당신은 indexofSmallestElement의 반환 값을 버리고 그것을 표시하지 않습니다. 또한 당신의 루프는'<= size'를 사용합니다 *는 틀린 것입니다 - 당신은'

+0

스택 손상이 있습니다 : for (int i = 0; i <= size; i ++)'. 설명을 위해'<' –

답변

0

루프 사용 배열 [i] 및 색인 = i. 크기는 경계입니다.

3

array[0] = n 대신 n = array[0]이어야합니다. 즉, 처음에 배열의 첫 번째 요소를 가장 작게 가정 한 다음 다른 요소와 비교하는 것입니다.

또한 루프의 경계를 초과하고 있습니다. for 루프는 i < size이 아니고 i <= size이 아닐 때까지 실행해야합니다.

코드는 다음과 같아야합니다 .. 사람의 숫자는 당신에게 indexofSmallestElement 자신의 변형을 보여 주었다

int indexofSmallestElement(double array[], int size) 
{ 
    int index = 0 ; 
    double n = array[0] ; 
    for (int i = 1; i < size; ++i) 
    { 
    if (array[i] < n) 
    { 
     n = array[i] ; 
     index = i ; 
    } 
    } 
return index; 
} 
14

.

int indexofSmallestElement(double array[], int size) 
{ 
    int index = 0; 

    for(int i = 1; i < size; i++) 
    { 
     if(array[i] < array[index]) 
      index = i;    
    } 

    return index; 
} 

당신은 내가 당신을 멀리 지금까지 발생한 가장 작은 값을 보유하는 데 사용되는 n 변수와 함께 할 것을 알 수 : 내가 더 나은 것 같아요 왜 에 대한 설명과 함께 광산이 포함됩니다. 내 경험에 의하면, 서로 다른 두 가지 일을 동기화시켜야하기 때문에 미묘한 버그의 원인이 될 수 있기 때문에이 작업을 수행했습니다. 심지어이 간단한 경우에도 개의 버그가있었습니다. 그 중 가장 작은 것은 이 int으로 선언되었지만 double 값을 할당 한 것입니다.

하단 라인 : n 변수를 없애고 색인을 하나만 유지하십시오.

+0

+1이어야합니다. 하지만 1에 대한 검사는 불필요합니다. 첫 번째 인스턴스에서 크기 = 1이면 루프 조건이 실패합니다. – je4d

+0

물론 당신은 정확합니다. 코드의 복사 - 붙여 넣기에서 남은 것 같습니다. 결정된. –

+0

원래 게시물에 새 오류가 있습니다. 나는 너의 길을 시도했지만, 고쳐주지 않았다. 나 뿐인가요? – gosutag

관련 문제