2014-05-17 68 views
0

我有用SORPINSKI三角形的XOR方法編寫的代碼。它所產生的數據是組成三角形的點在x和y上的共同點,如果我需要生成三角形,這將是很好的,但我不會。我需要的是使用沙箱方法計算維數....所以我真正需要我的代碼來生成三角形的質量和它的高度。質量真的意味着組成三角形的點的數量。所以我的問題是,如何在代碼中加入計算每一行中實際存在的點的能力,而不是將它們放在哪裏。計算使用XOR方法編寫的謝爾賓斯基三角形的尺寸

#include <stdio.h> 

#define ANCHURA 7 

#define ALTURA 4 

typedef unsigned char BOOL; 

#define ON (BOOL)1 
#define OFF (BOOL)0 

int main(int argc, char**argv) 
{ 
BOOL spky[ALTURA][ANCHURA]; 
int i, j; 

FILE*fout; 
fout=fopen("xor.txt","w"); 

for(i=0;i<ALTURA;i++) 
{ 
    for(j=0;j<ANCHURA;j++) 
    { 
     spky[i][j]=OFF; 
    } 
} 
spky[0][(ANCHURA-1)/2]=ON; 

for(i=1;i<ALTURA;i++) 
{ 
    for(j=1;j<ANCHURA-1;j++) 
    { 
     spky[i][j]=(spky[i-1][j-1]^spky[i-1][j+1]); 
    } 
} 
long int total=0; 
for(i=0;i<ALTURA;i++) 
{ 
    for (j=0;j<ANCHURA;j++) 
    { 
     if(spky[i][j]) 
     total++; 

    } 
} 
fprintf(fout,"%ld\t%d\n", total, i); 
fclose(fout); 
return (0); 
} 

用C語言編寫的代碼:塊

+0

究竟出在哪裏,你寫出來的座標,最後嵌套循環之前,創建一個新的變量'長整型總= 0;' - 在循環中用'total ++;'代替'fprintf'語句 - 當你退出循環時,執行'printf(「總數爲%ld \ n」,total);'。任務完成。 – Floris

+0

感謝您的回答。我做了你所說的,結果是,現在代碼生成整個質量和三角形的整個高度(我添加了)。問題是我需要代碼來生成一個數字列表,而不僅僅是最終的數字。我需要生成一個數字列表,表示特定行中的點數加上之前行中的點數。例如,對於第1行有一個點,對於第2行有2個點,但是整個部分的質量是3(2 + 1)。 –

+0

這聽起來像是一個非常基本的編程問題。你知道如何在C中實現一個計數器嗎?您在使用它之前將其設置爲零,在適當的時候增加它,然後在應達到該值時將其讀回。 – Floris

回答

0

改變最後環路:

long int total; 
for(i=0;i<ALTURA;i++) 
{ 
    total = 0; 
    for (j=0;j<ANCHURA;j++) 
    { 
     if(spky[i][j]) { 
      fprintf(fout,"%d\t%d\n",j,i); 
      total++; 
     } 
    } 
    fprintf(fout,"total number in this line = %d\n", total); 
} 
fclose(fout); 

現在,它總結了每行的點數。如果你想重心,就可以計算質量矩的每一行:

long int total, all = 0; 
double moment=0; 
for(i=0;i<ALTURA;i++) 
{ 
    total = 0; 
    for (j=0;j<ANCHURA;j++) 
    { 
     if(spky[i][j]) { 
      fprintf(fout,"%d\t%d\n",j,i); 
      total++; 
     } 
    } 
    moment += total * i; 
    all += total; 
    fprintf(fout,"total number in this line = %d\n", total); 
} 
printf("the center of gravity is at %lf\n", moment/all); 
fclose(fout);