2013-05-14 2 views
0

나는 프로그래밍에 대해 배우려고하는 학생이며 이전에 복잡한 코딩을 한 번도 해보지 않았습니다. 최근에 저의 강사가 북서쪽 코너 방법에 대한 저에게 과제를주었습니다. 나는 인터넷에서 발견 된 코드를 따라 갔지만, 아직도 초보자 인만큼 알아낼 수없는이 코드에는 몇 가지 문제가있는 것으로 보인다. 나는 약간의 수치를했지만 여전히 문제가 무엇인지 파악할 수 없었고 코딩에 많은 문제가 있다는 것을 확신합니다. 코딩에 대해 기꺼이 알아 보는 사람들에게 정말 감사드립니다. 미리 감사드립니다. :)북서쪽 방법을 코딩하는 방법

#include "stdafx.h" 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    return 0; 
} 

using namespace std; 

#include <iostream> 
#include <fstream> 

const int row_max =4; 
const int col_max =4; 
int i,j; 

//create supply_array and require_array 
float supply_array[row_max]; 
float require_array[col_max]; 

//creating the cost matrix and unit matrix 
float cost_matrix[row_max][col_max]; 
float unit_matrix[row_max][col_max]; 

//initialize cost_matrix 

int main() 
{ 
    for(i=0 ; i<=row_max ; i++) 
    { 
     for(j=0 ; j<=col_max ; j++) 
     { 
      cin >> cost_matrix[i][j]; 
     } 
    } 

    //initialize unit_matrix 
    for(i=0 ; i<=row_max ; i++) 
    { 
     for(j=0 ; j<=col_max; j++) 
     { 
      unit_matrix[i][j]=0; 
     } 
    } 

    float cost_minimal= 0.0; 
    float *supply_ptr; 
    float *require_ptr; 
    supply_ptr = &supply_array[4]; 
    require_ptr = &require_array[4]; 

    //initialize supply_array 
    for(i=0 ; i<=row_max ; i++) 
    { 
     cin >> supply_array[i]; 
    } 

    //initialize require_array 
    for(i=0 ; i<=col_max; i++) 
    { 
     cin>>require_array[i]; 
    } 

    float *matrix_ptr; 
    matrix_ptr = &cost_matrix[0][0]; 
    int r=0,c=0,x=0,y=0; 
    while((x<= row_max) &&(y=col_max)) 
    { 
     if(*require_ptr>*supply_ptr) 
     { 
      unit_matrix[x][y]=supply_array[x]; 
      require_array[y]=require_array[y]-unit_matrix[x][y]; 
      supply_array[x]=supply_array[x]-unit_matrix[x][y]; 
      cost_minimal=cost_minimal+unit_matrix[x][y]; 
      x=x+1; 
      supply_ptr=supply_ptr+1; 
      matrix_ptr=matrix_ptr+col_max; 

      continue; 
     } 

     if(*require_ptr<*supply_ptr) 
     { 
      unit_matrix[x][y]=require_array[y]; 
      require_array[y]=require_array[y]-unit_matrix[x][y]; 
      supply_array[x]=supply_array[x]-unit_matrix[x][y]*cost_matrix[x][y]; 
      y=y+1; 
      x=x+1; 
      require_ptr=require_ptr+1; 
      supply_ptr=supply_ptr+1; 
      matrix_ptr=matrix_ptr+col_max; 

      continue; 
     } 
    } 

    //displaying the unit matrix 
    for(i=0;i<=row_max;i++) 
    { 
     for(j=0;j<=col_max;j++) 
     { 
      cout<<unit_matrix[i][j]; 
     } 
    } 

    //displaying the minimal cost 
    cout<< "the minimal cost obtained is : "<<cost_minimal; 
    return 0; 
} 
+2

아마도 더 잘 작동 할 것입니다. 책을 읽고,하고있는 일을 배우고, 처음부터 직접 코딩하십시오. 그렇다면 인터넷에서 무언가를 찾아 내고 그 의미를 파악하는 대신에 무엇을 의미하는지 알게 될 것이기 때문에 실제로 디버깅하는 방법을 알 수있는 좋은 코드를 작성할 것입니다. – Colleen

+1

그래서,이 코드는 무엇을하기로되어 있는데, 무엇이 문제입니까? –

+1

"들여 쓰기"에 대해 배우십시오 - 코드를 훨씬 쉽게 읽을 수 있습니다! –

답변

1
코드에

하나 명백한 문제는 어레이 인덱스가 인덱스는 0에서 시작 row_max 때문에 어레이의 크기를 뺀

for(i=0 ; i<=row_max ; i++) 
{   //^^should be < 
    for(j=0 ; j<=col_max ; j++) 
    {  //^^should be < 
     cin >> cost_matrix[i][j]; 
    } 
} 

에 끝나고 col_max이 경우에는 4이다 인 [0,3] 간격에 cost_matrix[4][4]에 액세스 할 수 없습니다.

한편, main 또는 _tmain (생성중인 C++ 프로젝트의 종류에 따라 다름)을 사용하고 동일한 소스 파일에 두 가지를 모두 사용하지 않아야합니다.

+0

현재 나는이 과제를 읽는 데 집중하지 않습니다. 왜냐하면 저는 여전히 학생으로서 다른 과제를 많이했기 때문이죠.하지만 충고로 받아 들여야하고 언제나 독서와 학습을 할 것입니다. 나는 시간이 있습니다. 모든 충고에 감사합니다. :) –

+0

@ Azimaabd.rahim 환영합니다. – taocp

+0

감사합니다. taocp.i는 코딩에서이 문제를 해결하려고합니다. :) –

0

메모리 덮어 쓰기 :

for(i=0 ; i<=row_max ; i++) 
{ 
    for(j=0 ; j<=col_max; j++) 
    { 
     unit_matrix[i][j]=0; 
    } 
} 

와우, 배열은 프로그램 전반에 걸쳐 덮어 씁니다. 배열을 더 크게 만들거나 로직을 변경하여 어디서든 '4'라는 항목을 계속 지키지 않아야합니다. 세상 어디에서 얻었습니까? 그것은 끔찍한입니다! 또한 할당을위한 가비지 메모리와 다른 많은 나쁜 것들에 대한 포인터를 사용합니다. 이 코드는 쓰레기이므로 다른 곳을 살펴보십시오.

+0

이 코드가 나쁜가요?(j = 0; j <= col_max-1; j ++)에 대해 에 대해 { 에 대해 { unit_matrix [i] [i = 0; j] = 0; } } –

+0

btw, thanks .. :) –

+0

코드 전체가 사용하는 행렬의 크기에 대한 잘못된 가정을하고 있습니다. 이와 같은 근본적인 오류가 발생하면 나머지는 아마도 쓰레기라고 걱정합니다. –

관련 문제