• ベストアンサー

うまくプログラミングできません・・・

* ** *** **** ***** というような図形を表示したいのですが、自分でプログラムしたものを表示すると、 ++++* ** *** **** ***** +++* ** *** **** ***** ++* ** *** **** ***** +* ** *** **** ***** * ** *** **** ***** (空白は分かりやすいように+にしています) Basicプログラミングの勉強を始めたばかりで・・・アドバイスをお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.8

 ここの解答を下さる方は、レベルの高い方が多いので、困ったときなどには、過去ログなどいつも参考にさせていただいていますm(__)m 感謝  yumeponyo さんは、BASICプログラムの勉強を始めた方ばかりとのことなので、諸先輩方のエレガントな解答(解説)にいたる前段階を yumeponyo さんのコードを使って埋めてみたいと思います。  長くなるので全角800時を越えるかも知れません(^^;  yumeponyo さんが実現したいのは、5行に5文字を空白とアスタリスクを使って三角を書きたいのですね。  まず、字下げ(インデント)をしてみましょう(空白が潰されるので_で置き換えます)FORループのブロックが3つ下がるのが判ると思います。これがネストが3段階の状態です。 100 FOR K = 1 TO 5 110 ____FOR J = K TO 4 120 ________PRINT"+"; 130 ____NEXT J 140 ____PRINT; 150 ____FOR I = 1 TO 5 160 ________FOR H = 1 TO I 170 ____________PRINT "*"; 180 ________NEXT H 190 ________PRINT 200 ____NEXT I 210 ____PRINT 220 NEXT K  5つの行をカウントするFOR Kがもっとも外側になっていますね。あと空白を書くFOR Jとアスタリスクを書くFOR H があれば書けますよね。ここを皆さんに指摘されています。以上で書き直してみます。 100 FOR K = 1 TO 5 110 ____FOR J = K TO 4 120 ________PRINT "+"; 130 ____NEXT J 140 rem 150 rem 160 ____FOR H = 1 TO k 170 ________PRINT "*"; 180 ____NEXT H 190 ____PRINT 200 rem 210 rem 220 NEXT K  いらないFOR Iを削除して小文字 rem(コメント)にしました。また Iが無くなったので160行の I を K に替えています。ところで空白だけは5行目に0文字書くので110行のカウンタの最大値を 4 にしていますね。ところが K をループカウンタ J に代入しているので K が 5 になったとき、実行時にエラーが出ますね。 FOR J は、K が 5 になったときのみ無効にならないと0文字書く(=書かない)ことが実現できません。 K が 5 のときの例外処理を105行に書きましょう。 100 FOR K = 1 TO 5 105 ____if K = 5 then goto 160 110 ____FOR J = K TO 4 120 ________PRINT "+"; 130 ____NEXT J 140 rem 150 rem 160 ____FOR H = 1 TO k 170 ________PRINT "*"; 180 ____NEXT H 190 ____PRINT 200 rem 210 rem 220 NEXT K  ところで内側のFOR JとFOR Hの2つのループがありますが、これをひとつのループで出来ないでしょうか? 1行に書く文字の空白とアスタリスクをなんらかのルールで切り替えれば内側の2つのループがまとめることが出来ます。このものの見方の実例をプログラム例で提示してくださっています。  この文字数で投稿できるかな。

yumeponyo
質問者

お礼

私のコードをもとにして、解説していただけて、とても分かりやすかったです。 本当にありがとうございました。

その他の回答 (8)

  • afhyus
  • ベストアンサー率35% (134/380)
回答No.9

質問者さんに回答を導き出して欲しかったのですが #8さんにある程度書かれてしまったので… まず、考え方(法則)を整理する事からした方がいいですよ。 それの上でプログラムに置き換える。 法則を考えるという意味では 1.今回は5行で表示する。 2.各行には行の数の*が存在する。 3.*表示は右詰めにする。 4.右詰めにするために*の左側はスペースで埋める。 というのが出てきます。 ここで、2と4が判れば、プログラムは出来たも同然です。 上記の法則をプログラムに直すと… 最初のFOR文は5行のループにする。 FOR I = 1 TO 5 次は、スペースで埋めるループを作成する FOR J = 1 TO (5 - I) ← 全部で最大は5文字になるわけだから、それから行数分の*の表示分を除けば左側のスペースは5-行数という事になる。 次は、行数と同じだけの*を表示すればいいわけだから FOR J = 1 TO I ということになる。 つまり FOR I = 1 TO 5 FOR J = 1 TO (5 - I) PRINT "+"; NEXT J FOR J = 1 TO I PRINT "*"; NEXT J PRINT NEXT I ということになりますね。 結局は、プログラムはいかに簡単な法則を見つけられるかにかかっています。 ちなみに FOR I = 1 TO 5 PRINT LEFT$("+++++", (5 - I));LEFT$("*****", I) NEXT I これが、一番簡単かな。 LEFT$または、LEFTという関数は指定した文字列から、左側から指定した文字数だけ抜き出すというものです。 +表示は最大で4文字しかないので、4つでもよかったのですが判りやすくするため5文字にしています。 もし、PRINT文が1行だと正しい結果が得られなかったら… というか、むしろプログラムを読みやすくするという意味で… PRINT LEFT$("+++++", (5 - I)); PRINT LEFT$("*****", I) の2行にしてみてください。

yumeponyo
質問者

お礼

丁寧な説明、本当にありがとうございました。 色々なやり方があるんですね・・ とても勉強になりました。 ありがとうございました。

  • afhyus
  • ベストアンサー率35% (134/380)
回答No.7

ちなみに… 一番短く書いたとして3行(または4行)で、ループは1個のみです。 ただし、元々の問題がループの数をいくつ以上と指定されているのであれば、正しい回答にはならないかもしれませんが…

回答No.6

確かに9stepでいけますね。 勉強になりました。 ヒント:内側のループはKループの値をうまく使いましょう。

  • afhyus
  • ベストアンサー率35% (134/380)
回答No.5

正しいプログラムを書く事は簡単だけど、それでは意味がなさそうなので… まず、ループ文の数をよく考えてください。 一番最初のKのループはつまり、5行分のループなわけです。 その内側に入るのは+(実際はスペース)を表示するループと *を表示するループだけのはずです。 つまり、ループは全部で3個で用が足ります。 (あくまでも、質問者さんの理解しやすく、作ったものを踏襲するとすれば) しかも、ネストの数は2段までです。 それ以上になる事はおかしいです。 ちなみに、9行で書けます。

yumeponyo
質問者

お礼

afhyusさんの説明を読みながら、「あ、ホントだ・・・」と。 ありがとうございます。

回答No.4

VB.NETでWindowアプリケーションでならこんなかんじ・・・ 1.フォームに適当にボタン、テキストボックスを配置。 2.テキストボックスのMultilineプロパティをTrueに。 3.テキストボックスのサイズを適当に広げる。 4.ボタンをWクリックしてソースを表示する。 5.Private Sub Button1_Click~とかいうメソッドが自動生成されるので以下のコードを記入。 For i As Integer = 0 To 4 For j As Integer = 0 To 4 If i - j < 0 Then TextBox1.Text = TextBox1.Text & "*" Else TextBox1.Text = TextBox1.Text & "+" End If Next TextBox1.Text = TextBox1.Text & vbCrLf Next 素のBasic?は存じませんので動くようにご自分で改造していただくか、ほかの回答者を待ってください。

yumeponyo
質問者

お礼

ありがとうございます。 自分が何の言語を使っているのかも、いまいちピンとこない状態で・・・ 説明していただいてありがとうございました。

回答No.3

失礼、ぼーっとしてて見てる場所間違えてた模様。 行番号みたいなのが出てるのでなんじゃこれはって思っちゃいましたよ・・・

回答No.2

これ、言語何ですか? なんとなくはわかるけど、使える構文がよくわからないので回答しようがない・・・ (CASLに似てるような・・・最近のはしらない) ちなみにここはJava用です。

回答No.1

ソースプログラム見ないとわからないと思いますよ

yumeponyo
質問者

補足

すみません・・・質問のところの図が違っていました。 ++++* +++** ++*** +**** ***** (+は空白です) を表示したいのですが・・・実行すると上記のようになってしまいます。 100 FOR K = 1 TO 5 110 FOR J = K TO 4 120 PRINT"+"; 130 NEXT J 140 PRINT; 150 FOR I = 1 TO 5 160 FOR H = 1 TO I 170 PRINT "*"; 180 NEXT H 190 PRINT 200 NEXT I 210 PRINT 220 NEXT K という風にプログラムしたのですが、どのようにすればよいのでしょうか?

関連するQ&A

  • 昔よりプログラミング難易度は低くなった??

    昔よりもプログラミングは取っつきやすくなったのでしょうか? 敷居がさがったというか、馬鹿でもそれなりのものを簡単に作れるように なったのでしょうか? アドバイス頂けると幸いです。 自分は、プログラミングを勉強したことがあるのですが、 勉強したのですが、何かカタチにして作ったという感じまでいったことが 一度もないです。 書籍などのサンプルプログラムをいじって何かやるぐらいで 普段なにかやっていてこういうプログラムがあったらいいなぁーとか 思っても解決できずにいます。 どうしたらいいでしょうか? アドバイス頂けると幸いです。(`・ω・´)

  • パソコンでプログラミングはできますか?

    お教え下さい。 プログラミングを全く勉強したことがありません。 まず、どういう方法でプログラミングするかがわかりません。 Windowsについているメモとかワードパッドとかでもプログラムが組めるよという人もいますが本当でしょうか。 たしかコンパイラーというものが必要という話を聞いたこともあります。 話を具体的にするために例をあげさせていただきますが、まずは自分の定年退職まであと何日かを表示するプログラムを練習問題として考えています。ほんの一例ですが。 プログラミング言語というより、それをPC上で動かすまでの手段を求めています。 よろしくおねがいします。

  • プログラミングとは

    こんにちは。最近プログラミングの勉強を始めた者です。 ごく簡単な入門書を読み終えたところで、私自身プログラミングの本質がまだよくわかっていないようです。 そこでお尋ねしたいのですが、 ・「プログラミングが出来る」とはどういうことなのでしょうか? ・「プログラミングを極めている人」というのはいらっしゃるのでしょうか? ・「実用的なプログラミング技術」とはどのようなものでしょうか?もしくは、どの程度のプログラミング技術が「使える技術」なのでしょうか? ・さまざまなプログラムが存在するようですが、就職などに際して「すべてを幅広く学ぶ」あるいは「もとめられるプログラムだけの理解を深める」とではどちらが賢明でしょうか? 漠然とした抽象的な質問で非常にお答えづらいかとは思いますがよろしくお願いします。

  • プログラミングについて

    質問なんですが、よく小学生でもプログラミングとかするじゃないですか、小学生で数学も出来ないのに何でプログラミングが出来るのか不思議です。また、そういう方はプログラミングの本とか読んで勉強するのでしょうか?もしつまずいたりしたら誰に質問するのでしょうか? プログラムの得意な方はどうやって勉強しましたか? 独学で学んだ方お願いします!!

    • 締切済み
    • CGI
  • プログラミング

    今度大学のAO入試で論理的思考を伴うような課題がだされます 去年は6角形などをプログラミングで書く課題が出されました そこで図形などがプログラミングで書けるソフトとかないでしょうか? また、こんなのが出そうとか分かるかたいないでしょうか? アドバイスお願いします 理系で情報系の学部です

  • windowsプログラミングについて学ぶ本

    windowsプログラミングについて学ぶ本 今私はC言語を通じて、windowsプログラムの勉強をしています で、なんですがそのために参考書を探しています。 サイトでも勉強はしていますが、PCがないときに本でも勉強したいと思ってます 参考書の内容は入門~幅広い応用(図形の描画やソケット通信のような)までのっているようなものだとうれしいです 値段は問いません、本なのであまり高いものはないと思いますが また複数でもいいです 皆さんのご回答お待ちしています

  • プログラミングの上達には

    資格を取るためプログラミングを勉強していますが、どんなプログラムを打てばいいかわかりません。上達するには自分でプログラムを作ることと聞きますが、どんなプログラムを作ればいいのでしょうか? 作るにも短いものなら頭で想像できますが、長いプログラムとなると、イメージが思いつきません。長いプログラムを書ける人が不思議に思うのですが、何かプログラムを作るのに、コツみたいのがあるんでしょうか?もしあれば、教えてください。

  • プログラミングを学ぶ

    今中学3年です。 将来はプログラマ(どんなことをやるかわ決めてない)になりたいとおもっています。 プログラムの勉強を早いうちからしようと思い、最初の進路希望相談では、情報科学科のある高校が第一志望であると伝えました。 ですが、ネットでいろいろ情報を集めいていると会社に就職してからまた一から教えなおされことやプログラミングはセンス?みたいなことなどを知りました。 第一志望にしている高校はぼくには、受かるかどうか、今の時点では、受かるかどうかは、期待は持てるが微妙だそうです。 その高校に受かるか微妙な学力です、それに加えてその学校からは、家から1時間ほど掛かります。 入学して勉強もしながら、プログラミングの勉強まで、できる余裕ができるのだろうかと思いました。 今、自分が考えているのは、第一志望の高校を受験するか 家から近い私立高校に受かれば部活には入らず、勉強とプログラムの勉強をしようかと考えています。 大学はプログラミングに関する学科のある大学に行こうとおもっています。これは第一志望にいっても私立高校にいってもいこうとかんがえています。 第一志望の情報科学科の高校でプログラミングの勉強もするか 私立高校にかよい独学でプログラミングを勉強する。 どちらがいいのでしょうか? 塾には行ってません 夏休み前に見た仮評定は理科と国語が4でそれ以外は3でした 理科と国語の4は消しゴムで消せる程度の4だそうです。

  • プログラミング初心者です。

    プログラミング初心者です。 よろしくおねがいいたします。 現在、C#の勉強をしています。 コントロールをプログラム上から生成したものを、 動的に配置(Controls.Add)しているのですが、 他のコントロール(プログラム上で生成せずに、GUIで作成したもの)が あると、それに隠れて表示されません。最前列で表示するには どうしたらよいのでしょうか? よろしくおねがいいたします!

  • プログラミングについて

    僕は今15歳でプログラミングに最近興味を持ち自分でプログラムを作りたいと思ってます。言語は何がいいのかさっぱり分からなく、インターネットで調べると、初心者には[javascript]が向いているらしくそれを勉強したいのですがどのサイトをみてもさっぱり意味がわかりません。 プログラムを書いているのをみると英語やいろいろな文字で書かれていて、自分は何を使ってどのように書いていいのかわかりません。僕が今作りたいプログラムは携帯やパソコンのアプリケーション、ソフトウェア、簡単ゲームなどです。わかりやすく最初から説明してくれているサイト、本などを教えてください。 分かりづらくてすいませんが、本当にすごく困っているのでよろしくお願いします。

専門家に質問してみよう