2016-03-24 14 views
-3

私はBabbageの差分マシンをC言語で動かそうとしています。私は概念の基本的な考え方をすべて書いています。たとえば、10の正方形を見つけようとすると、これはBabbageの機械がどのように働くかである。 私のプログラムでは、整数のリストを持っており、私たちはすでにこれらの整数の2乗を前提としています。この情報を与えると、乗算を行わずに正の整数の2乗を計算することができなければなりません。else文はC言語で動作します

しかし、コードはif-elseステートメントのelse部分を実行しません。しかし、 "else"文ですべてを削除してprintf関数を書いただけでは、条件がうまくいきませんでした。

else文で何か間違っている必要があります。配列に項目を追加するのは間違っていますか? CのIf-Elseステートメントにループを書くことは許されていませんか?私はPythonで同じアルゴリズムを書いて、うまくいきます!

ps:私はもう "else"パートの代わりにdo-whileを書きました。

助けてください、おかげで事前

#include<stdio.h> 

int main(){ 
int integers[] = {0,1,2}; 
int sq_of_integers[] = {0,1,4}; 
int first_differences[] = {1,3}; 
int second_difference[] = {2}; 
int input; 
int i; 
int x; 
int end2 = 2; 
int end1 = 1; 

for (i = 0 ; i<=2 ; i++){ 
    printf("Enter a number to be squared: "); 
    scanf(" %d", &input); 

    if (input <= integers[end2]){ 
     printf("It is already known, sir.\n"); 
    }else{ 
     for(x = 0 ; x<= input - integers[-1] ; x++){ 

      // Calculation of the square root: 
      integers[end2+1] = integers[end2]+1; 
      sq_of_integers[end2+1] = second_difference[0] + first_differences[end1] + sq_of_integers[end2]; 
      first_differences[end1+1] = sq_of_integers[end2] +sq_of_integers[-2]; 
      printf(sq_of_integers[end2]); 
      end2 = end2 + 1; 
      end1 = end1 + 1; 
     } 
    } 
} 
return 0; 
} 
+7

''整数[-1] '' ????? – BitTickler

+0

インデックスはゼロから始まるので、 '-1'は無効です – Andrew

+1

私はここにPythonの人間がいると思います.. –

答えて

0

input - integers[-1]に値を未定義ました。おそらくそれは負であったので、ループを一度処理することなくforを終了します。

編集:コードの完全なレビュー。あなたが何かを理解していないか尋ねてください。

フォーマット引数なしでprintf()を使用しようとしましたが、おそらく警告なしでコンパイルします。私がコンパイルするコマンドを使用してみてください。

first_differences値の計算にインデックスエラーがありました。

small.c:

/* 
Compile with MinGW for Windows: 
gcc -Wall -Wextra -Werror -std=gnu99 -o small.exe small.c 

Compile with linux gcc: 
gcc -Wall -Wextra -Werror -std=gnu99 -o small small.c 
*/ 

#define N_UPPER_LIMIT 1023 

#include <stdio.h> 

int main() 
{ 
    long integers[N_UPPER_LIMIT + 1] = {0, 1, 2}; 
    long sq_of_integers[N_UPPER_LIMIT + 1] = {0, 1, 4}; 
    long first_differences[N_UPPER_LIMIT] = {1, 3}; 
    long second_difference[] = {2}; 
    int end1 = 1; 
    int end2 = 2; 

    for (int i = 0; i < 2; i++) 
    { 
     int input; 

     printf("Enter a number to be squared: "); 
     fflush(stdout); 
     scanf(" %d", &input); 

     if (input < 0) 
     { 
      printf("It is negative, sir.\n"); 
     } 
     else if (input <= integers[end2]) 
     { 
      printf("It is already known, sir.\n"); 
      printf("square(%ld) = %ld\n", integers[input], sq_of_integers[input]); 
     } 
     else if (input > N_UPPER_LIMIT) 
     { 
      printf("Please do not go further than %d, sir.\n", N_UPPER_LIMIT); 
     } 
     else 
     { 
      while (input > integers[end2]) 
      { 
       // Calculation of the square root: 
       integers[end2 + 1] = integers[end2] + 1; 
       sq_of_integers[end2 + 1] = second_difference[0] 
        + first_differences[end1] + sq_of_integers[end2]; 
       first_differences[end1 + 1] = sq_of_integers[end2 + 1] 
        - sq_of_integers[end2]; 
       end2++; 
       end1++; 
       printf("square(%ld) = %ld\n", integers[end2], sq_of_integers[end2]); 
      } 
     } 
    } 

    return 0; 
} 

それは静的な制限を取り除くために良い運動である可能性があります。そうする場合は、変数のメモリをmalloc()で割り当て、プログラムの引数として制限を設定するか、またはmalloc()の呼び出しで割り当てられたサイズをrealloc()に変更する必要があります。

+0

これは単なる不可能だと思います。私はこれを試したので、forループ内のすべてを削除し、通常の文字列で1つのprintf関数を置きます。そして、ストリング3を3回繰り返しました。したがって、forループの文には何か問題があるはずです。 私の質問の下のコメントで述べたように、問題はリストに項目を追加しているようです。何か案は? –

+0

あなたは 'for'ループでまだ整数[-1]を使っていましたか?あなたのコードを変更すると整数の値が変わるかもしれないので[-1]。 – jdarthenay

+0

さて、整数の代わりに整数2をタイプしました[-1]。私はまたすべての "-1"インデックスを対応するインデックスに置き換えました。しかし、依然として決定の「その他の部分」の結果はありません。 –

関連する問題