C言語・ピラミッドアートについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
リク

C言語・ピラミッドアートについて

#1

投稿記事 by リク » 15年前

C言語が教科書を読んでもよく理解できず、困っているのですが、
さらに、ピラミッドアートの課題が出題されてしまい、とても困っています。

入力された値を1辺とする図形を*で描画するプログラムを作成しなくてはいけません。
*の出力はループ、printf("*");を必要数ループさせるのが、条件らしく、
実現できた数や処理効率が重要視されるようです・・・。

正方形・三角形・逆三角形・三角旗・ダイヤ型・六角形・星型
など種類がいくつか紹介されました。

友人も作り方を教えてくれたのですが、先生や友達の教えてくれたものをただ打っているという感じで、
どうしてこうなったのか教科書を読んでも理解できません・・・

main
1辺入力
図形
swith(図形)
{
case_
sankaku
case_
sikaku

↑は先生に教えていただいたものなんですが、なぜ、swithをつかわなければならないのでしょうか?
最近、関数(ピラミッドアートで使うと何か便利なんでしょうか?)を習い始め、
関数を使ってもいいと言われたのですが、その関数もよく理解できず困っています。

そして、プログラムを少し友人に教えてもらいながら作っていたものの、while文で作っていたのですが、
先生はfor文のほうが便利だとおっしゃっていて、それが何故なのかも本当に分からないままです。

友人に質問しても呆れられてしまい、自分自身。教科書を読み直したり、先生の話ををきちんと聞いているのに、理解できない自分にウンザリしてしまいます。

けれど、なんとかもうすぐ関数のテストも近いですし、ピラミッドアートもきちんと理解しておきたいので、
今回。恥を覚悟で質問させていただきました。

お勧めサイトや本。ピラミッドアートに関しては、あまりいい本や参考サイトはないと思うのですが、
そちらなどでも助かります。

どなたか、詳しく、C言語、ピラミッドアートについて教えていただけると助かります。

Poco

Re:C言語・ピラミッドアートについて

#2

投稿記事 by Poco » 15年前

この掲示板で、一昔前(2,3週間前?)に流行りました。
過去ログを見てみてはどうですか?


私からは、取り敢えず1点だけ。
switchと使わなければならない理由はないです。
同様に、while文で書けるものをfor文で書かなければならない理由もないです。
理由を考えるな、と言っているワケではなく、プログラミングに慣れてきたら
いずれ理解できることなので、とにかく動くものを作ってください。

#リクさん自身が作成されたプログラムを載せて、わからない場所を明示すると
#アドバイスもらい易いですよ。

Dixq (管理人)

Re:C言語・ピラミッドアートについて

#3

投稿記事 by Dixq (管理人) » 15年前

全く同じ質問が最近よくありますが、皆さん同じ学校なんでしょうかね?

http://www.play21.jp/board/formz.cgi?ac ... &rln=56255

http://www.play21.jp/board/formz.cgi?ac ... &rln=55766

http://www.play21.jp/board/formz.cgi?ac ... &rln=56292

皆さんいつも途中でいなくなるので、段々回答が消極的になってしまっていますが・・。
一番上の回答が一番詳しく回答しています。(特にNo:55924)


● >なぜ、swithをつかわなければならないのでしょうか?

switch文を使えば

switch( 図形 ){

case 三角形:
三角形描画();
break;

case 四角形:
四角形描画();
break;

case ダイヤ:
ダイヤ描画();
break;

    ・・・・
}

みたいにかけて綺麗だからじゃないですか?


●>先生はfor文のほうが便利だとおっしゃっていて、それが何故なのかも本当に分からないままです。

良く解らなければ一度両方で作ってみてはどうですか?
whileもforも全く同じ事が出来ます。
ただ、whileはループ回数が解らない時、forはループ回数が予め解っている時に使われる事が多いですね。
兎に角プログラムを書いてみる事が大事です。


●>その関数もよく理解できず困っています。

どの辺が解りませんか?
本やサイトなどで勉強してみました?
上でも言ったようにプログラムは本を読んだだけでは解りません。
数学と一緒で、教科書を読んで覚えるのではなく、演習で覚えるのです。
ということで、一通り学んだら関数を沢山自分で作ってみましょう。
その上で解らない事があれば聞いて下さい。
C言語の解説サイトは山のようにありますよ。
沢山紹介しても困るかもしれませんから、二つだけ紹介します。
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
http://www9.plala.or.jp/sgwr-t/
ここに書いてある関数について勉強してみて下さい。

後、家で使っているコンパイラは何でしょうか?

Dixq (管理人)

Re:C言語・ピラミッドアートについて

#4

投稿記事 by Dixq (管理人) » 15年前

う、過去ログを見たらほとんど答えが載ってしまっていますね・・。
是非コピペではなく、自分なりにプログラムを作ってみて下さい。

まずは、入力した大きさの正方形を描画する所から始めると良いと思います。

解らない事があれば、どこがどう解らず、現在どんなプログラムを書いているか途中でいいので投稿してみて下さい。
アドバイスが受けられやすいと思います。

lbfuvab

Re:C言語・ピラミッドアートについて

#5

投稿記事 by lbfuvab » 15年前

揚げ足を取るようで申し訳ないですが、
>main
>1辺入力
>図形
>swith(図形)
>{
> case_
> sankaku
> case_
> sikaku

これだと三角形と四角形しかないように思うのですが、どうなのでしょう?

>↑は先生に教えていただいたものなんですが、なぜ、swithをつかわなければならないのでしょうか?
switch文ではなくif-else文でも出来ますが、単に効率の問題でしょう。
要は
switch(hoge){
    case LABEL1:
        /* 処理1 */
        break;
    case LABEL2:
        /* 処理2 */
        break;
}
の方が
if(hoge == LABEL1){
    /* 処理1 */
}
else if(hoge == LABEL2){
    /* 処理2 */
}
より分かりやすいと云うだけの話です。


for文とwhile文については

for(初期処理 ; 繰り返し判定 ; ループ後処理){
  /* ループ内容 */
}

の方が

初期処理
while(繰り返し判定){
  /* ループ内容 */
  ループ後処理
}

より判り易く、かつ見やすいからです(書いてみれば分かります


最後に
>どなたか、詳しく、C言語、ピラミッドアートについて教えていただけると助かります

まずは課題の仕様、使ってる環境、あなたがどこまでプログラムを書けているかを教えてください。

リク

Re:C言語・ピラミッドアートについて

#6

投稿記事 by リク » 15年前

皆さん、詳しい説明ありがとうございました。
while文やfor文など理由を考えすぎていたのかもしれません。
皆さんの説明で、とにかく今、作っているプログラムをもっと多く作らなければならないということがわかりました。さらにプログラムを作って頑張ってみます。ありがとうございました。

バグ

Re:C言語・ピラミッドアートについて

#7

投稿記事 by バグ » 15年前

うーむ、煽る訳ではないのですが、誰も何の解説もしていない(過去ログのリンクを貼っただけ)のに、本当に分かりました?(^_^;)

閉鎖

“C言語何でも質問掲示板” へ戻る