課題1月18〆切

「課題1月18〆切」の編集履歴(バックアップ)一覧に戻る

課題1月18〆切 - (2007/12/10 (月) 21:17:49) の編集履歴(バックアップ)


課題の答え(ほぼ完成版)(発展課題については後ほど追加する)

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;
}