- ベストアンサー
プログラム問題・・・
今僕は、『if else』『while』『for』『switch』『配列(t[])』を知っているのですが、それで何かプログラムを作りたいのですが・・・思いつきません。 それを使ってできるプログラムが載っているサイトを教えてください。 それか、これらを使ってできる問題を言ってくれるだけでもけっこうです(それらだけでですよ!) 回答おねがいします。
- みんなの回答 (17)
- 専門家の回答
質問者が選んだベストアンサー
あぁ、問題2のプログラム確かに違いますね。 長さの違う文字列への入れ替えが目的です。ですから、1文字の一致だけで置き換えしてはいけません。文字列全部が一致する場合のみです。文字列の長さが変わる場合は、文字列全体をずらします。 このプログラムの目的ですが、エディタなどにある文字列の置換の機能を自分で作るってところにあります。 実際には1行分の入れ替えしかできていないので、エディタにするにはまだまだ機能を追加しないとダメですが。 今のところ問題2の問題点は以下の通りです。 ・outstrへの代入が常に何かしらは行われないといけない。 "フフフフ"は、メモリの初期値が残っています。 ・そもそもstr3が出てきていない。 ・outstr[0+k]=str1[i]-32;これが何をするのか意味不明。 ・以下のプログラムだと結果はstr2の長さにしかならない。 i=0; while(str2[i]!='\0') { i++; } outstr[i]='\0' 以上。
その他の回答 (16)
- jacta
- ベストアンサー率26% (845/3158)
> それらだけでですよ! main関数は作れるとしても、配列以外の変数も、演算子も、標準関数も一切使えないのですよね。int型とリテラルは使えるのでしょうか? むしろ、 「if文、while文、for文、switch文、および配列だけで、コンパイル、実行&終了可能なプログラムを書け。プログラムが何らかの役に立つかどうかは問わない」 という問題でも結構難度が高いと思います。
お礼
リテラルって何ですか? いや何か問題とかないだろうかと思ったんですが・・・。それだけじゃ難しいんですね。 じゃあ、もっと覚えてからリベンジします。 回答ありがとうございました。
- zwi
- ベストアンサー率56% (730/1282)
あっ、分かりづらかったですか。 じゃあ、ちょっと変えて、 static char moji[13] = { '0','2','1','0','3','1','0','4','0','9','4','0','2','3' }; int count[10]; の配列を用意してもらって。 moji配列中に'0'~'9'の文字の各々登場する回数をカウントしてcount配列に格納してください。'0'が5回とかカウントします。 ルール。 ・charは習ってますよね? ・if文とswitch文は使用禁止です。 ・for文かwhile文は使用可能。 以上です。
No.1です。 プログラムには、ランダム関数という乱数(バラバラ数)を 導き出す関数があります。 それを使わないと、数字がばらばらに出ないので、ロト6を 占うには面白さが欠けます。 (RPGゲームの「何ポイントのダメージ!」とかはランダム 関数です。) よって、ランダム関数を利用するわけですが。 関数を書くと判りますが、コンピュータのランダム関数は、 毎回バラバラなりに同じ数字が返ってきます。 例えば、1回目に、「1,26,43,15,24,11」と返ってきたとき、 そのソフトを終了し再度実行するとまったく同じ「1,26,43,15,24,11」 という文字列が返ってきてしまいます。 そこで、現在の時刻、例えば「2007/07/12 0:25:43」のような 常に変わりゆく数字を利用し、上記のランダム関数に味付けとして 加えてやると、同じ数字が二度と出ません。 例えば、簡単な例では秒数を44で割った余りを足すだけでも 「1,26,43,15,24,11」それぞれに+幾つを足すのでバラけて見えます。 そういう意味で、日時を利用すると面白い数字が返ってくると いうわけです。 なお、例に書いてあるように、数字の順番はバラバラで取れる はずです。 ただ、ロト6を買うには1からの順番が書きやすいですよね? ということは結果を並び変えたいですよね? という意味で、1から43は配列を利用。 ゆとりがあれば、ソート関数で並び変えられるようにするわけです。 そのほか。 複雑なものになると、 ・トランプのポーカー役、麻雀役 ・自販機の釣銭計算 ・曜日計算、週計算、時間計算 …ふと思いつくだけでも仰る構文を利用するアルゴリズムは 超大量にあります。 普段何気ないものでも結構難しいものですよ。 お試しください。
お礼
このプログラムは乱数を覚えないと組めませんよね・・・。というわけで、乱数を理解して、このプログラムを組んでみます。 回答ありがとうございました。
- redfox63
- ベストアンサー率71% (1325/1856)
> ”0103405067020”で登場する数字の数とはいったいどういうことなのでしょう? コレは 0がいくつ 1がいくつ といった具合にこの文字列中の数字の種類を数えてくださいといった趣旨だと思います
お礼
あぁ、そうか! そういう風に問題を理解できるようになりたい(頑 回答ありがとうございました。
- zwi
- ベストアンサー率56% (730/1282)
えーと、じゃあ問題を。 『if else』の問題。 変数aが1なら変数bを3に、変数aが2なら変数bを1にしてください。 『while』の問題。 入力された数値が、1~5以外だったら警告して、もう一度入力させるプログラムを作ってください。 『for』の問題。 1,3,5,7,9,11,・・・・変数nまでの数列をforを使って足してください。 『switch』の問題。 変数aが1,4,8,9なら変数bを2に、変数aが2,3,7なら変数bを1にしてください。それ以外は変数bを0にしてください。種類を分類します。 『配列(t[])』の問題。 文字列"0103405067020"でそれぞれ登場する数字の数を数えなさい。
補足
すいません。 配列の問題なんですが・・・ ”0103405067020”で登場する数字の数とはいったいどういうことなのでしょう?
分岐とループと配列を使いたいということであれば。 ロト6のあたりを占うソフトでも作れば如何でしょうか(笑) 1~43の数字を配列に入れ。 6個決まるまでループ。 時間の概念+ランダムでチョイスし、重複した数字をチョイスした 場合は再取得をします。 ソフトができれば、その番号のクジを買ってみて。 当たったら儲けもんですよね。(笑)
補足
すいません。 時間の概念ってどういう意味ですか? ランダムは習っていないのですが・・・。
- 1
- 2
お礼
もう見ることもないと思うけど。 すいませんでした。勝手に消えてしまって。 インターネットの調子が悪くて、いつの間にかこの存在も忘れて・・・・いや、問題がいつまでも解けないでもうどうでもいいやと嘆いて放置してしまったのもあります。 よく付き合ってくれたzwiさんありがとうございました。あなたのおかげで得るものがありすぎました。 もし、何かの拍子にこれを見たときは足跡でもつけてください。 何回か期待して見に来ますので。 では、回答ありがとうございました。<(_ _)>