課題の答え(ほぼ完成版)(発展課題については後ほど追加する) C言語 ソースコード ---------------------------------------------回答例1----------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <ctype.h> int x; int y; int dx; int dy; int n=0; void put_mark(int x, int y){ move(x-2,y-2); cont(x+2,y+2); move(x+2,y-2); cont(x-2,y+2); move(x,y); } void forward(){/*進ませる。dx,dyにてどの方向にどれくらい動かすか決めている*/ x=x+dx; y=y+dy; cont(x,y); put_mark(x,y); } void left_turn(){/*dx=-dy dy=dxとなるので、左方に向ことになる*/ int tmp; tmp=dx; dx=-dy; dy=tmp; } void right_turn(){/*上とほぼ同位で、右方になる*/ int tmp; tmp=dx; dx=dy; dy=-tmp; } void analysis(ch){ int i; if(n==0)n=1;/*数字を打たなかったときに対しての処理 下のn=0 をn=1しても良いかも*/ switch(ch){ case 'F': for(i=0;i<n;i++) forward(); break; case 'R': for(i=0;i<n;i++) right_turn(); break; case 'L': for(i=0;i<n;i++) left_turn(); } n=0;/*初期化*/ } void turtle(){ char ch,ch2[100]; int i=0,j; while((ch=getchar())!=EOF){ if(isalpha(ch)){ n=atoi(ch2);/*数字をint型に直す*/ printf("%d",n); analysis(ch); for(j=0;j<=i;j++)/*初期化*/ ch2[j]=0; i=0; } if(isdigit(ch)){ch2[i]=ch; i++;}/* 数字をひとつずつ格納*/ } } int main(){ openpl(); space(-300,-300,300,300); x=0; y=0; dx=0; dy=10; put_mark(x,y); turtle(); closepl(); return 0; } ------------------------------------------------------------------------------------------------------------------ 回答例2 #include <stdio.h> #include <stdlib.h> #include <ctype.h> int x; int y; int dx; int dy; int n=0; void put_mark(int x, int y){ move(x-2,y-2); cont(x+2,y+2); move(x+2,y-2); cont(x-2,y+2); move(x,y); } /* */ void forward(){ x=x+dx; y=y+dy; cont(x,y); put_mark(x,y); } void left_turn(){ int tmp; tmp=dx; dx=-dy; dy=tmp; } void right_turn(){ int tmp; tmp=dx; dx=dy; dy=-tmp; } void analysis(ch){ int i; if(n==0)n=1; switch(ch){ case 'F': for(i=0;i<n;i++) forward(); break; case 'R': for(i=0;i<n;i++) right_turn(); break; case 'L': for(i=0;i<n;i++) left_turn(); } n=0; } void henkan(ch){ switch(ch){ case '1': n=n*10+1; break; case '2': n=n*10+2; break; case '3': n=n*10+3; break; case '4': n=n*10+4; break; case '5': n=n*10+5; break; case '6': n=n*10+6; break; case '7': n=n*10+7; break; case '8': n=n*10+8; break; case '9': n=n*10+9; break; case '0': n=n*10; break; } } void turtle(){ char ch; while((ch=getchar())!=EOF){ if(isalpha(ch))analysis(ch); if(isdigit(ch))henkan(ch); } } /* */ int main(){ openpl(); space(-300,-300,300,300); x=0; y=0; dx=0; dy=10; put_mark(x,y); turtle(); closepl(); return 0; }