ページ 11

学校の課題で悩んでいます

Posted: 2010年7月07日(水) 21:59
by たすけてぇ><;
改めて自力で試みて、やはり分からなかったので質問致しますです。

自分に出された課題で、三角形やダイヤ型といった実行画面例をfor文を使って解いたのですが、
画像の実行例題7・8は法則がまったくわからなくて困っています><;

関数の定義など、基礎の基礎は一応理解しているのですがこの2問はどうしても解けません。

ヒントだけでも全然構いません。解法の道筋だけでも教えて頂けたら幸いに思います;;

どうかよろしくお願いいたします<(_ _)>

画像

Re:学校の課題で悩んでいます

Posted: 2010年7月07日(水) 22:04
by パコネコ
数字を入力した後どうするんですか?

Re:学校の課題で悩んでいます

Posted: 2010年7月07日(水) 22:25
by Dixq (管理人)
> たすけてぇ><;さん

こんにちは。
最近似たような質問が多いですね。

こちらで同じような質問に答えているので参考にして下さい。
http://www.play21.jp/board/formz.cgi?ac ... &rln=56255

私が書いたプログラムをいじれば大抵の図形には対応出来ると思います。

とりあえずどういう規則性があるか考えてみましょう。
まず7番ですが、4本の線が交差していますよね。
なので4つの一次直線を判定式にいれてやればよさそうですね。

Re:学校の課題で悩んでいます

Posted: 2010年7月07日(水) 23:15
by パコネコ
意味があるかわかりませんが、表を書いてみます。
例題7

0 ① 2 ① 2 ① 0
1 ① 1 ① 1 ① 1
0 0 2 ③ 2 0 0
0 0 0 ⑦ 0 0 0
0 0 2 ③ 2 0 0
1 ① 1 ① 1 ① 1
0 ① 2 ① 2 ① 0
丸がついてるのが、*の数です。
それ以外が、空欄の数です。
これの通りにするとループを7個も使うようです…
数字の入力でどう変わるのかにもいりますが…

Re:学校の課題で悩んでいます

Posted: 2010年7月07日(水) 23:27
by フリオ
 
 入力した数字(数値)と図形との関係はどうなっているのでしょうか。

Re:学校の課題で悩んでいます

Posted: 2010年7月07日(水) 23:30
by Dixq (管理人)
> パコネコさん

入力した数値は大きさでしょう。
横、縦の長さだと思われます。
入力した数が横幅になるのか、X2が幅になるのかは解りませんが、2から入力できる所をみるとX2かもしれませんね。
しかし偶数ではちゃんと表示できそうにないですねこの図形。


後、for文は2個で出来ますよ。
無理すれば1個でも出来ますし。

x,yの格子点を二重ループで通らせ、判定式を満たせば印を付ける方法で何にでも対応出来そうです。

Re:学校の課題で悩んでいます

Posted: 2010年7月07日(水) 23:32
by たすけてぇ><;
> パコネコさん
2~9のどれかをいれると入れた数に対応する図形がでてくるものです。

> 管理人様
1時間ほど考えてみたのですが、途中でパニックを起こしてしまいました><;

関数をどう用いればいいのか、基本的なことで申し訳ないのですがご教授いただけますでしょうか;;

Re:学校の課題で悩んでいます

Posted: 2010年7月07日(水) 23:37
by Dixq (管理人)
> 2~9のどれかをいれると入れた数に対応する図形がでてくるものです。

どう対応するのですか?

> 途中でパニックを起こしてしまいました><;

必要な説明は全部書いてあると思うのですが、どこまで解っていてどこが解らないですか?

Re:学校の課題で悩んでいます

Posted: 2010年7月07日(水) 23:37
by パコネコ
でもそれって、一旦配列に入れて、それの通りに描写させるということでしょうか?
たとえば
if(x==y)map[x][y]=1;
else map[x][y]=0;
みたいな感じで…
==================
>x,yの格子点を二重ループで通らせ、判定式を満たせば印を付ける方法で何にでも対応出来そうです。
これについてです。 画像

Re:学校の課題で悩んでいます

Posted: 2010年7月07日(水) 23:39
by Dixq (管理人)
> パコネコさん

プログラムは上で書いたリンク先(http://www.play21.jp/board/formz.cgi?ac ... 6255#55924)に書いてありますよ。

Re:学校の課題で悩んでいます

Posted: 2010年7月07日(水) 23:54
by パコネコ
前に読みましたけど…要はシューティングの当たり判定のようなものだと思ってます。
特定の条件であたり判定の形が変わると言うだけですよね。

Re:学校の課題で悩んでいます

Posted: 2010年7月08日(木) 00:43
by パコネコ
8番作ってみました。
(ゲームのつもりで)
穴を掘る感じで…多分課題には使えないけど(無駄が多そう)
#include<stdio.h>
void main(void)
{
int x,y;
int map[11][11];
int MAX=9;
int muki=1;//0上、1右、2下、3左

printf("5~9までの奇数を入力してください");
scanf("%d",&MAX);
//すべてを*に
for(x=0;x<MAX+2;x++){
for(y=0;y<MAX+2;y++){
map[x][y]=1;
}
}
//いちばん外を空欄に
for(x=0;x<MAX+2;x++){
map[x][0]=0;
map[x][MAX+1]=0;
map[0][x]=0;
map[MAX+1][x]=0;
}
muki=1;
x=1;
y=2;
for(;;){
map[x][y]=0;
if(muki==0){
if(map[x][y-2]==0)muki++;
else y--;
}
else if(muki==1){
if(map[x+2][y]==0)muki++;
else x++;
}
else if(muki==2){
if(map[x][y+2]==0)muki++;
else y++;
}
else if(muki==3){
if(map[x-2][y]==0)muki++;
else x--;
}
if(3<muki)muki=0;
if(map[x][y-2]==0 && map[x+2][y]==0){
if(map[x][y+2]==0 && map[x-2][y]==0){
map[x][y]=0;
break;
}
}
}

//描写
for(x=0;x<MAX+2;x++){
for(y=0;y<MAX+2;y++){
if(map[y][x]==0)printf(" ");
else printf("*");
}
printf("\n");
}



}
大きさってこんな感じですか?
入力7
横7 縦7 の正方形から穴をあけました。
参考までに…
==========================
奇数しかできません。
しかも5から… 画像

Re:学校の課題で悩んでいます

Posted: 2010年7月08日(木) 01:01
by ISLe
> たすけてぇ><;さん

添付画像はどんな数のときの実行例なのですか?
文章が途中で切れてるから分からないのですよ。

Re:学校の課題で悩んでいます

Posted: 2010年7月08日(木) 08:53
by へろりくしょん
8番の奴です。

一応偶数も表示出来るはずです。 これでいいのか解りませんが。
#include <stdio.h>

#define MAX        100

int main(void)
{
    char buf[MAX][MAX] = {1};
    int mass, dire = 0;
    int x = 0, y = 0, c = 0;

    scanf("%d", &mass);

    while(c++ < mass){
        switch(dire){
            case 0: while(x == mass - 2 || x < mass - 2 && !buf[x + 2][y]) buf[x += 1][y] = 1; dire++; break;
            case 1: while(y == mass - 2 || y < mass - 2 && !buf[x][y + 2]) buf[x][y += 1] = 1; dire++; break;
            case 2: while(x == 1 || x > 0 && !buf[x - 2][y]) buf[x -= 1][y] = 1; dire++; break;
            case 3: while(y == 1 || y > 0 && !buf[x][y - 2]) buf[x][y -= 1] = 1; dire = 0; break;
        }
    }

    for(y = 0;y<mass;y++){
        for(x = 0;x<mass;x++){
            printf("%s", buf[x][y] ? "*" : " ");
        }
        printf("\n");
    }

    return 0;
}