2013-10-27 5 views
0

이 의사 코드를 C++로 번역하는 데 어려움을 겪고 있습니다. 목표는 A []에 난수를 생성하고 삽입 정렬을 사용하여 정렬 한 다음 실행 시간을 밀리 초 단위로 가져 오는 것입니다. 삽입 정렬은 m = 5 번 실행됩니다. 각 n 값은 100, 200, 300, ..., 1000이어야합니다. 예를 들어, n = 100이면 5 개의 다른 난수 세트로 5 번 실행 한 다음 n = 200 등의 경우 동일한 작업을 수행합니다.의사 코드를 C++로 변환

이미 삽입 정렬을 작성 했으므로 작동합니다. 나는 그것을 포함시키지 않았다. 이 가상 코드를 내가 작업 할 수있는 것으로 번역하는 데 정말로 문제가 있습니다. 내 시도와 의사 코드를 포함시켜 비교할 수 있습니다.

의사 코드 :

main() 
//generate elements using rand() 
for i=1 to 5 
    for j=1 to 1000 
     A[i,j] = rand() 

//insertion sort 
for (i=1; i<=5; i=i+1) 
    for (n=100; n<=1000; n=n+100) 
     B[1..n] = A[i,n] 
     t1 = time() 
     insertionSort(B,n) 
     t2 = time() 
     t_insort[i,n] = t2-t1 

//compute the avg time 
for (n=100; n<=1000; n=n+100) 
    avgt_insort[n] = (t_insort[1,n]+t_insort[2,n]+t_insort[3,n]+...+t_insort[5,n]+)/5 
//plot graph with avgt_insort 

이 내 시도 :

내가 t_insort와 avgt_insort와 혼란 스러워요, 내가 그들을 C로 작성하지 않은 ++. 나는 이것을 새로운 배열로 만들 수 있습니까? 또한 나는 나의 시간을 올바르게하고 있는지 확신 할 수 없다. 나는이 코드를 사용하여 새로운 코드를 작성한 적이 없다.

#include <iostream> 
#include <stdlib.h> 
#include <time.h> 

int main() 
{ 
int A[100]; 
for(int i=1; i<=5; i++) 
{ 
    for(int j=1; j<=1000; j++) 
    { 
     A[i,j] = rand(); 
    } 
} 

for(int i=0;i<=5; i++) 
{ 
    for(int n=100; n<=1000; n=n+100) 
    { 
     static int *B = new int[n]; 
     B[n] = A[i,n]; 
     cout << "\nLength\t: " << n << '\n'; 
     long int t1 = clock(); 
     insertionSort(B, n); 
     long int t2 = clock(); 

        //t_insort 

     cout << "Insertion Sort\t: " << (t2 - t1) << " ms.\n"; 
    } 
} 
for(int n=100; n<=1000; n=n+100) 
{ 
    //avt_insort[n] 
} 
return 0; 
} 

답변

1

의사 코드는 구문상의 변화가있는 C++ 코드에 비교적 가깝습니다. 이 C++ 코드는 간단한 "번역"입니다. 더 나은 해결책은 C++ 표준 라이브러리의 컨테이너를 사용하는 것입니다.

int main() 
{ 
    int A[6][1001], B[1001]; //C++ starts indexing from 0 
    double t_insort[6][1000]; //should be of return type of time(), so maybe not double 
    int i,j,n; 
for(i=1;i<=5;i++)  //in C++ it is more common to start from 0 for(i=0;i<5;i++) 
    for(j=1;j<=1000;j++) 
     A[i][j] = rand(); //one has to include appropriate header file with rand() 
         //or to define his/her own function 
for (i=1; i<=5; i++) 
    for (n=100; n<=1000; n=n+100) 
    { 
    B[n]=A[i][n]; 
    t1 = time(); //one has firstly to declare t1 to be return type of time() function 
    insertionSort(B,n); //also this function has to be defined before 
    t2=time(); 
    t_insort[i][n]=t2-t1; //this may be necessary to change depending on exact return type of time() 
    } 
} 

for (n=100; n<=1000; n=n+100) 
    for(i=1;i<=5;i++) 
    avgt_insort[n] += t_insort[i][n] 

avgt_insort[n]/=5; 
//plot graph with avgt_insort 
+0

그래서 함수로 time()을 정의해야합니까? 시계()가 작동하지 않는 이유는 무엇입니까? –

+0

자신 만의 함수를 정의 할 필요가 없으며 시계 또는 다른 것도 사용할 수 있지만 먼저 함수 선언과 함께 적절한 헤더 파일을 포함해야합니다. –

+0

방금 ​​(거의) 작업 프로그램으로 만들었습니다. 오류가 발생했습니다. 변수 'B'주위의 스택이 손상되었음을 알려줍니다. –

1

A[i,j]는 (! 콤마 연산자) A[j]과 동일하고, 작동하지 않을 것입니다.

당신은 더 나은 A에 대한 두 가지 차원 배열을 선언하거나 할 가능성이있는 std::array 적절한 : 루프의 잘 보이지 않는 내부

int A[100][1000]; 

std::array<std::array<int,1000>, 100> A; // <- prefer this for c++ 

이 또한 바로 B를 할당 :

static int *B = new int[n]; 

B[n] = A[i,n]; 

은 의도 한대로 작동하지 않습니다 (위 참조)!