2014-04-14 6 views
0

이 프로그램은 배열 소스의 모든 하위 세트를 "계산 중"입니다. 결과 값을 polje이라는 다른 2D 파일에 저장해야합니다. printf("%d %d %d ", source[i][0], source[i][1], source[i][2]);을 사용하면 코드가 제대로 작동하지만 결과 필드에 모든 내용을 복사하려고 할 때 오류가 발생합니다. 배열의 색인 생성에 문제가 있다고 생각합니다. polje.배열 서브 세트 저장

0 3 5 
3 4 2 
3 4 2 
0 0 0 
0 3 5 
0 0 0 
0 0 0 
0 0 0 

을하지만 대신은 다음과 같습니다 :

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char** argv) { 

     int f; 
     int i,j; 
     int source[2][3] = {{0,3,5},{3,4,2}}; 
     int currentSubset = 3; 
     int polje[8][3]; 

     for(i=0;i<8;i++){ 
       for(j=0;j<3;j++){ 
         polje[i][j]=0; 
       }} 
     int tmp; 
     while(currentSubset) 
     { 
       tmp = currentSubset; 
       for(i = 0; i<3; i++) 
       { 
         if (tmp & 1) 
         { 
           printf("%d %d %d ", source[i][0], source[i][1], source[i][2]); //writes out everything I want 
           polje[currentSubset][0]=source[i][0]; 
           polje[currentSubset][1]=source[i][1]; 
           polje[currentSubset][2]=source[i][2]; 
         } 
         tmp >>= 1; 
       } 
       printf("\n"); 
       currentSubset--; 
     } 

     for(i=0;i<8;i++){ 
       for(j=0;j<3;j++){ 
         printf("%d ", polje[i][j]); 
       }printf("\n");} 
     return (EXIT_SUCCESS); 
} 

출력 필드는해야

0 3 5 
3 4 2 
3 4 2 
0 0 0 
*0 0 0* 
0 0 0 
0 0 0 
0 0 0 
+0

'INT의 TMP 걸리므

또한 polje 배열 정확한 인덱스 polje[currentSubset * 2 + i][0]이고; while (currentSubset) { tmp = currentSubset;'나에게 나쁜 스타일처럼 보입니다. 냉소는 더 간단해질 것입니다. – wildplasser

답변

1

tmp은 비트가 2 비트 인 비트 마스크이므로 내부 루프는 for (i = 0; i < 2; i++)이어야합니다. poljesubset 두 공간과 i는 0 또는 1

1

난 당신이 단지 논리 오류가 있다고 생각. 루프의 골격은 다음과 같습니다.

currentSubset = 3; 
while (currentSubset) 
{ 
// ... 
    polje[currentSubset][...] = ...; 
// ... 
    currentSubset--; 
} 

따라서 처음 세 개를 제외한 모든 행에 쓰지 마십시오.

+0

오, 그래, 지금은 분명, 배열을 저장하는 방법에 대한 아이디어? – arcticme

+0

손으로 원하는 알고리즘 (예 : 종이 또는 머리)을 수행 할 수 있는지 확인하십시오. 그런 다음 프로그램에서 수행 할 베이비 단계 목록으로 나눕니다. 그런 다음 프로그램이 각 단계를 구현하는지 확인하십시오. –