2017-02-07 6 views
0

この質問の終わりに、C言語で中間点円描画アルゴリズムがあります。コードで次の2つのステートメントを見た。はx =です。 (d <)がC言語で使用できない場合

x =

if(d <);

私は、コンパイラが自動的に0(ゼロ)に初期化していると思っていたので、私は宿題に同じコードを書いていました。しかし教師はそれが間違っていると言って、実際にのターボC++コンパイラで無効になっています。なぜそれが間違っているかを知りたいのですが、なぜそんなにこのように書かれているのですか?ここで

コードです:

#include<graphics.h> 
#include<conio.h> 
#include<stdio.h> 

void main() { 
    int gd=DETECT,gm; 
    int i,r,x,y,xc,yc; 
    float d; 

    clrscr(); 

    initgraph(&gd,&gm,"c:\\tc\\"); 

    printf("Enter Radius\n"); 
    scanf("%d",&r); 

    printf("Enter Center of circle\n"); 
    scanf("%d",&xc); 
    scanf("%d",&yc); 

    d=1.25-r; 
    x=; 
    y=r; 
    do { 
     if(d<) { 
      x=x+1; 
      d=d+2*x+1; 
     } else { 
       x=x+1; 
       y=y-1; 
       d=d+2*x-2*y+10; 
     } 
      putpixel(xc+x,yc+y,5); 
     putpixel(xc-y,yc-x,5); 
     putpixel(xc+y,yc-x,5); 
     putpixel(xc-y,yc+x,5); 
     putpixel(xc+y,yc+x,5); 
     putpixel(xc-x,yc-y,5); 
     putpixel(xc+x,yc-y,5); 
     putpixel(xc-x,yc+y,5); 
    } while(x<y); 
    getch(); 
} 

また、それは、上記のコードのリンクです:

Mid Point Circle Drawing Algorithm Code in c Language

私を助けてください。ありがとう。

+3

どこかのようなコードを見た場合、間違っています。 Cの仕組みではありません。そして、あなたは「どこでもこのように書かれている」という意味ですか?私は、動作しないコードの例を除いて、そのような表現を見たことはありません。 –

+0

あなたは、実際に使用しようとしている言語*(C **または** C++)を使用することを目的とした良い本と、過去十年ほどの間に作られたツールチェーン(b)が必要です。 – WhozCraig

+0

コンパイラは、関数スコープ内の変数を初期化しません。静的変数として宣言すると、それらは初期化されます。未定義の動作を避けるために、変数を常に初期化することをお勧めします。 –

答えて

2

Ques。変数xのストレージクラスとは何ですか?

ans。今
- :ローカル変数はブロック文で使用VAR X(あなたがメインの内部で使用されるように())ワン・モアQUESC.

に "AUTO" ストレージクラスに属している、すなわちあなたが心配するのは、デフォルト値は何ですか?**で初期化された自動変数** ?? **

Ans。 "ごみ値"で初期化されています。xの宣言で

: -

int i,r,x,y,xc,yc; 

注: -Xがガベージ値で初期化されます。

しかし、あなたが書く、

x=; 

注: - niether宣言もinitilaization文 があるが、それは、それが与えるようがcompilorで理解していないwhich'll 不完全な文ですエラー:
無効な式今

は、あなたの次の疑問に来る: -

if(d<); 

あなたが計算した場合にだけ、一般的数学に思うので、それも無効expresionです: - 2が______よりも大きい場合は?

空白スペースに値を想像できますか? はい、あなたはコンパイラ(またはコンピュータ)はできません:

+0

あなたの問題への解決策を受け入れるためには仲間の価値があります:) –

5

いいえ、これらの式は構文的には有効ではありません。

書籍にはタイプミスがあり、オンラインで怪物に見える複製品にもタイプミスがあります。その画像は携帯電話の写真のように見えますが、本当に疑わしいものです。

何かがオンラインで言われているからといって、それは真実である必要はありません。

この匿名の見知らぬ人はオンラインです。 :)

+1

脚注だけで –

1

あなたが提供したリンクのコードは、明らかに切り捨てられています。

正しいコード

はここにある:

#include <stdio.h> 
#include <conio.h> 
#include <graphics.h> 
#include <math.h> 

void main() 
{ 
    int gd = DETECT, gm; 
    int r, x, y, p, xc = 320, yc = 240; 

    initgraph(&gd, &gm, "C:\\TC\\BGI"); 
    cleardevice();  

    printf("Enter the radius "); 
    scanf("%d", &r);  

    x = 0; 
    y = r; 
    putpixel(xc + x, yc - y, 1); 

    p = 3 - (2 * r); 

    for (x = 0; x <= y; x++) 
    { 
    if (p<0) 
    { 
     y = y; 
     p = (p + (4 * x) + 6); 
    } 
    else 
    { 
     y = y - 1;  
     p = p + ((4 * (x - y) + 10)); 
    } 

    putpixel(xc + x, yc - y, 1); 
    putpixel(xc - x, yc - y, 2); 
    putpixel(xc + x, yc + y, 3); 
    putpixel(xc - x, yc + y, 4); 
    putpixel(xc + y, yc - x, 5); 
    putpixel(xc - y, yc - x, 6); 
    putpixel(xc + y, yc + x, 7); 
    putpixel(xc - y, yc + x, 8);  
    } 

    getch(); 
    closegraph(); 
} 

注:それはここに立っているとして、このコードはadaptionsがなされる必要がある他のプラットフォームではアンティークのTurbo Cにのみ動作します。

関連する問題