2014-02-10 7 views
0

저는 과제를 수행하고 있습니다. 교수는 제공된 코드가 아닌 다른 코드를 삽입하기를 원하지 않습니다.이 의사 코드를 잘못 해석 했습니까?

내가하는 일에 대한 간략한 설명. 나는 정수의 동적 배열을 만들고 있는데, 순서대로 (가장 낮은 것부터 가장 큰 것까지) 순서대로 삽입해야한다. 여기

그가 제공하는 의사 코드이다 :

for (i = valueNum - 1; array[i] is the wrong spot for newValue; --i) 
    array[i] = array[i-1] 
배열 [I]를 NEWVALUE 대한 잘못된 스포트

:

그는 또한이 정보를 포함

(i > 0) AND (value at array[i-1] is greater than newValue) 

자신을 설득해야합니다. 상기 의사 코드는 저장 될 새로운 값이 # 1 값인 경우, 저장 될 새로운 값이 가장 높은 기존 값보다 큰 경우 또는 동일한 경우에 적용 가능하다 (즉, 또한 커버한다). 저장 될 새로운 값이 가장 낮은 기존 값보다 작거나 같은 경우.

그럼, 꽤 간단합니다.

void IntArray::insert(int nInt) 
{ 
    /* check if resize is needed */ 
    if(mySize == capacity) 
    { 
     int newCapacity = capacity * 1.5; 
     if(newCapacity == capacity) 
      newCapacity = capacity + 1; 
     capacity = newCapacity; 
    } 

    /* here is where my mistake was */ 
    int i; 
    mySize++; 

    for(i = mySize -1; i > 0 && data[i-1] > nInt; --i) 
    { 
     data[i] = data[i - 1]; 
    } 
    data[i] = nInt; 
} 

제대로 의사 코드를 다음과 같이 보이지만, mySize는 0 또는 1 누군가가 올바른 방향으로 날 지점 수 경우 이제까지 일 것이다 그것은 아닌 것 같아 : 나는 그것을 시도했다? 다양한 의견에

+0

0 또는 1에서 mySize로 실행 해 보았습니까? 무슨 일이야? –

+0

스토리지를 변경하지 않고 '용량'만 변경하면 도움이되지 않습니다. 할당 할 필요가 없습니까? 또한 실제로 새 값을 저장하지 않습니다. –

+0

@DamienBlack 조건문을 만족하지 않기 때문에 단순히 루프에 들어 가지 않습니다. – Bobbin4Apples

답변

1

, 나는 말했다 :

그냥 저장 매우 도움이 될 것되지 않은 변경하지 않고 용량을 변경, 그것은 무엇입니까? 할당 할 필요가 없습니까? 또한 실제로 새 값을 저장하지 않습니다.

과 (약간 수정) : (: 19 : 19 2014년 2월 10일를 초과 10Z)

업데이트는 내가 사용하는 무엇을 기대할 것 같습니다. mySize이 처음 0 일 때 명확하게 작동합니다. 1로 증가시킨 다음 i = 0을 설정하고 카운트 다운 (no-op)하여 data[0] = nInt; 설정으로 끝납니다. 행이 하나있을 때 새로운 행은 기존 행보다 크거나 기존 행보다 작거나 같을 수 있습니다. 더 큰 경우 i은 감소하지 않으므로 새 항목은 원하는 위치 인 에 있습니다. 크기가 작 으면 i이 감소되고 이전 값이 루프 본문 위로 이동하고 새 값은 원하는 위치 인 data[0]에 삽입됩니다. 린스하고 반복하십시오 ...

관련 문제