無題
Posted: 2010年9月05日(日) 21:07
立命館の前期の課題を復習してみるとわからなかったのでおしえてください。
重要課題 11..2
3色の縦長長方形がならんでできた国旗は世界に多くある。配列を使って、これらを RitsPenで描こう。CreatePEN()関数の引数はflagとする。
以下のように国番号を決める。
0:ギニア 1:コートジボワール 2:チャド 3:ナイジェリア 4:マリ
5:アイルランド 6:イタリア 7:フランス 8:ベルギー 9:ルーマニア
同じ順序で、それぞれの国旗を図11.1に示す。
図 11.1: 国旗
10行3列のint型2次元配列 flagsを考える。 各行は3つのint型の要素をもつので、それらで国旗の3色を表現する。 これを上記の番号にしたがって10行ならべたものが、 国旗のリストを示す配列である。まずは、flagsを設定する関数を作れ。 色を表す番号は RitsPenのChangeColor()関数での定義と同じとする。
ただし、このChangeColor()関数では白は定義されていないので、 今回は灰色で代用してもよい。
指定された色で縦長の長方形を描画する関数を作る。 ペンを上下に動かせば指定された色で長方形を塗りつぶせる。 国旗の高さを50とすると、
幅1のペンで下向きに50だけ、描線する。
幅1だけ、右に動かす。
幅1のペンで上向きに50だけ、描線する。
幅1だけ、右に動かす。
この動作を12回程度繰り返すと、長方形が描ける。RitsPenでは、 ペンの動作がわかりやすいように、意図的にペンの動きをゆっくりにしている。 これを高速化するには関数 ChangeSpeed()を第2引数を1にして呼べばよい。
もし白色を使うのであれば、ペンを透明にし、上記と同じことをすると RitsPenのキャンバスが白色だから白色を塗った場合と同じ効果が期待で きる。
2次元配列 flags の1つの行が与えられたときに、 その行に指定された3つの色にしたがって、国旗を描画する関数を作る。 指定された色で縦長の長方形を描画する関数を3回呼べばよい。
main関数では、まず、ユーザから国の番号を指定してもらう。 指定された番号に相当する2次元配列 flags の行を引数にして、 国旗を描画する関数をよぶ。
% ./flag
0から9までの整数で国を指定して下さい: 6
イタリア 緑,白,赤
% ./flag
0から9までの整数で国を指定して下さい: 10
間違った国番号です。
%
という問題で、下が自分が作ったソースです。
#include<stdio.h>
#include "RitsPen.h"
# define BUFFER_SIZE (256)
int get_int(void)
{
char buf[BUFFER_SIZE];
fgets(buf, BUFFER_SIZE, stdin);
return atoi(buf);
}
int flags(PEN pen,int color);
int main(void){
PEN pen;
int number;
pen=CreatePEN("flags");
ChangeSpeed(pen,1);
printf("0から9までの整数で国を指定してください");
number = get_int();
switch(number)
{
case 0:
printf(" ギニア 赤、黄、緑");
flags(pen,1);
flags(pen,6);
flags(pen,3);
case 1:
printf("コートジボワール オレンジ、白、緑 ");
flags(pen,4);
flags(pen,7);
flags(pen,3);
case 2:
printf("チャド 青、黄、赤 ");
flags(pen,2);
flags(pen,6);
flags(pen,1);
case 3:
printf("ナイジェリア 緑、白、緑 ");
flags(pen,3);
flags(pen,7);
flags(pen,3);
case 4:
printf("マリ 緑、黄、赤 ");
flags(pen,3);
flags(pen,6);
flags(pen,1);
case 5:
printf("アイルランド 緑、白、オレンジ ");
flags(pen,3);
flags(pen,7);
flags(pen,4);
case 6:
printf("イタリア 緑、白、赤 ");
flags(pen,3);
flags(pen,7);
flags(pen,1);
case 7:
printf("フランス 青、白、赤 ");
flags(pen,2);
flags(pen,7);
flags(pen,1);
case 8:
printf("ベルギー 黒、黄、赤 ");
flags(pen,0);
flags(pen,6);
flags(pen,1);
case 9:
printf("ルーマニア 青、黄、赤 ");
flags(pen,2);
flags(pen,6);
flags(pen,1);
ClosePEN pen;
return 0;
}
int flags(PEN pen,int color){
int i;
ChangeColor(pen,one);
for(i=0;i<12;i++){
UsePEN(pen,50,90);
UsePEN(pen,1,-90);
UsePEN(pen,50,-90);
ChangeWidth(pen,0);
UsePEN(pen,1,-90);
}
return color;
}
19行目がエラーになるのですが何が間違っているのかわかりません
わかる方おしえてください。
重要課題 11..2
3色の縦長長方形がならんでできた国旗は世界に多くある。配列を使って、これらを RitsPenで描こう。CreatePEN()関数の引数はflagとする。
以下のように国番号を決める。
0:ギニア 1:コートジボワール 2:チャド 3:ナイジェリア 4:マリ
5:アイルランド 6:イタリア 7:フランス 8:ベルギー 9:ルーマニア
同じ順序で、それぞれの国旗を図11.1に示す。
図 11.1: 国旗
10行3列のint型2次元配列 flagsを考える。 各行は3つのint型の要素をもつので、それらで国旗の3色を表現する。 これを上記の番号にしたがって10行ならべたものが、 国旗のリストを示す配列である。まずは、flagsを設定する関数を作れ。 色を表す番号は RitsPenのChangeColor()関数での定義と同じとする。
ただし、このChangeColor()関数では白は定義されていないので、 今回は灰色で代用してもよい。
指定された色で縦長の長方形を描画する関数を作る。 ペンを上下に動かせば指定された色で長方形を塗りつぶせる。 国旗の高さを50とすると、
幅1のペンで下向きに50だけ、描線する。
幅1だけ、右に動かす。
幅1のペンで上向きに50だけ、描線する。
幅1だけ、右に動かす。
この動作を12回程度繰り返すと、長方形が描ける。RitsPenでは、 ペンの動作がわかりやすいように、意図的にペンの動きをゆっくりにしている。 これを高速化するには関数 ChangeSpeed()を第2引数を1にして呼べばよい。
もし白色を使うのであれば、ペンを透明にし、上記と同じことをすると RitsPenのキャンバスが白色だから白色を塗った場合と同じ効果が期待で きる。
2次元配列 flags の1つの行が与えられたときに、 その行に指定された3つの色にしたがって、国旗を描画する関数を作る。 指定された色で縦長の長方形を描画する関数を3回呼べばよい。
main関数では、まず、ユーザから国の番号を指定してもらう。 指定された番号に相当する2次元配列 flags の行を引数にして、 国旗を描画する関数をよぶ。
% ./flag
0から9までの整数で国を指定して下さい: 6
イタリア 緑,白,赤
% ./flag
0から9までの整数で国を指定して下さい: 10
間違った国番号です。
%
という問題で、下が自分が作ったソースです。
#include<stdio.h>
#include "RitsPen.h"
# define BUFFER_SIZE (256)
int get_int(void)
{
char buf[BUFFER_SIZE];
fgets(buf, BUFFER_SIZE, stdin);
return atoi(buf);
}
int flags(PEN pen,int color);
int main(void){
PEN pen;
int number;
pen=CreatePEN("flags");
ChangeSpeed(pen,1);
printf("0から9までの整数で国を指定してください");
number = get_int();
switch(number)
{
case 0:
printf(" ギニア 赤、黄、緑");
flags(pen,1);
flags(pen,6);
flags(pen,3);
case 1:
printf("コートジボワール オレンジ、白、緑 ");
flags(pen,4);
flags(pen,7);
flags(pen,3);
case 2:
printf("チャド 青、黄、赤 ");
flags(pen,2);
flags(pen,6);
flags(pen,1);
case 3:
printf("ナイジェリア 緑、白、緑 ");
flags(pen,3);
flags(pen,7);
flags(pen,3);
case 4:
printf("マリ 緑、黄、赤 ");
flags(pen,3);
flags(pen,6);
flags(pen,1);
case 5:
printf("アイルランド 緑、白、オレンジ ");
flags(pen,3);
flags(pen,7);
flags(pen,4);
case 6:
printf("イタリア 緑、白、赤 ");
flags(pen,3);
flags(pen,7);
flags(pen,1);
case 7:
printf("フランス 青、白、赤 ");
flags(pen,2);
flags(pen,7);
flags(pen,1);
case 8:
printf("ベルギー 黒、黄、赤 ");
flags(pen,0);
flags(pen,6);
flags(pen,1);
case 9:
printf("ルーマニア 青、黄、赤 ");
flags(pen,2);
flags(pen,6);
flags(pen,1);
ClosePEN pen;
return 0;
}
int flags(PEN pen,int color){
int i;
ChangeColor(pen,one);
for(i=0;i<12;i++){
UsePEN(pen,50,90);
UsePEN(pen,1,-90);
UsePEN(pen,50,-90);
ChangeWidth(pen,0);
UsePEN(pen,1,-90);
}
return color;
}
19行目がエラーになるのですが何が間違っているのかわかりません
わかる方おしえてください。