• 締切済み

このようなソースプログラムを作りたいのですが・・・

1から1000万までの数字を入力したときに その入力した数字のなかに5があった場合には「go」と表示されるようなものです。 #include <iostream> using namespace std; から始まるプログラミングで作りたいです。 どのようなソースプログラムを作ったらいいんでしょうか? MACのパソコンを使っています。

みんなの回答

  • digitalian
  • ベストアンサー率29% (323/1104)
回答No.10

こんなに豪華な回答陣にこれだけヒントを頂いて、自分のソースについて本当に考えているのか疑問です。それはともかく、回答例を示します。 #include <iostream> using namespace std; int main() {   int i;   cout << "数字を入力してね(1000万まで)--->";   cin >> i;   while( i >= 1 ) {     if( i % 10 == 5 ) {       cout << "go";       break;     }     i /= 10;   }   return 0; } 本当に15行程度でできてしまいましたね。このソースについての疑問点があれば、また質問してください。

  • ponzuinfo
  • ベストアンサー率53% (16/30)
回答No.9

1.数字を文字列(文字ではない)扱いする。 2.  #include <iostream>  using namespace std;  から始まるプログラムにする(他の標準ライブラリとか使わない) 3.if else whileの3つしか使えない となると 以下の考え方はどうでしょう 文字列の長さを決める=1000万なので8桁ですね  charで9文字分(\nが入るため1文字分多め)の長さの配列を宣言する while内でcharのi番目の文字と5(数字ではなく文字(文字列ではない))を比較する  あれば、goと表示 これで大体15行程度ですね(自分流コーディングで、{だけでも1行とする) あと、できれば課題などは自分で考えてみる方が良いと思います。 そちらのほうが力が付くと思いますので・・・

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.8

No.6 さんの「ある数の上位桁から5があるか」の方法を、「下位桁から5があるか」にしてみました。 例)987654321 の場合  はじめに、1 をみます( % 10 )。NG  次に、10 で割った 98765432 の 2 をみます。NG  次に、10 で割った 9876543 の 3 をみます。NG  次に、10 で割った 987654 の 4 をみます。NG  次に、10 で割った 98765 の 5 をみます。go  break  こうすることで、  質問者様のソース(重大な思い違い★がありますが・・) >if (i % 10000000 ==5 || i % 1000000 ==5 || i % 100000 ==5 || i %10000 == 5 || i % 1000 ==5 || i % 100 == 5 || i % 10 ==5 || i % 1 ==5){  のように、たくさん書き並べる必要はありません。うしろから2番目 i % 10 == 5 だけで済みます。 ★:i が 987654321 の場合「 i % 10000000 」は、7654321 ですよ。 ちなみに、++ でのプログラムは初めてで、using・・・ とか cout とかの用法?に誤りがありましたらご勘弁を・・。 ただし、動作確認はしています。 脱線 「実行(表示?)」にえらい時間が・・、目的の 1/10 の 1000000 までに77秒も要してしまった。 #include <iostream> using namespace std; int main() {  int i = 1, iWork;  while( i <= 10000000 ){   iWork = i;   cout << i;   while( iWork ){    if( 5 == ( iWork % 10 ) ){ // 1の位の数が5か     cout << "go"; // 「改行」不要     break;    }    iWork /= 10; // 10で割る(=下位桁から)   }   cout << "\n"; // まとめて改行   i++;  }  return( 0 ); } 注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。

  • ponzuinfo
  • ベストアンサー率53% (16/30)
回答No.7

数字を入力とのことなのでstrstrを使わずに計算で各桁の数値を求める方法を提案してみたのですが >>教室に通っていて ということでしたら、どの程度のことを勉強したのかが分からないと 答えはたくさんあるので、求めている回答はなかなかでないんじゃないでしょうか あと、提案させていただいた方法をうまく使うには 桁数の回数繰り返す、math.hをインクルードしてpow関数を使う が必要かと思います。

keiman890
質問者

お礼

回答ありがとうございます。 教室で習った内容は5の倍数のときにgoという文字が出てくるようにするとこまでしか習っていません。 だから while if else くらいしか習ってないんです。 この状況ではどうしたらソースプログラムが作れるでしょうか?

回答No.6

OH ノー すんまそ! うそを言ってしまったので例を挙げよう。 #include <iostream> using namespace std; int main(){ int i = 1,dat,wk; bool flag; while (i < 10000){ flag = false; cout << i; dat = i; wk = (dat / 10000); if ( wk == 5) flag = true; dat = dat - (wk * 10000); wk = (dat / 1000); if ( wk == 5) flag = true; dat = dat - (wk * 1000); wk = (dat / 100); if ( wk == 5) flag = true; dat = dat - (wk * 100); wk = (dat / 10); if ( wk == 5) flag = true; dat = dat - (wk * 10); wk = (dat / 1); if ( wk == 5) flag = true; if (flag){ cout << "go\n" ; } else { cout << "\n" ; } i++; } }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

えぇと, たぶん勇み足だと思うけど 853 % 1 は 0 じゃないと困る>#3. #include <iostream> int main() { char ch; while (std::cin >> ch) { if (ch == '5') { std::cout << "go\n"; } } return 0; } でいいのでは? 特に悩む必要があるとは思えないのだが.

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.4

私が作るならNo,2と同じ方法にします。 No.1さんのお礼に書いてある方法では正しく動きません。 また、動作環境によってはエラーになる時があります。 何故かは書きませんが、良く考えれば判る事です。

keiman890
質問者

お礼

回答ありがとうございます。 教室に通っていて今まで習った方法でやりたいのでNo,2さんのやりかたではなくもっと単純な方法でやりたいんです。 どうすればいいんでしょうか?

回答No.3

お疲れ様です。 「C/C++」のカテゴリがあるのに、なぜそちらで聞かないのだろう? >>でも僕自身全然知らない文字出てきて理解できません。すいません。 なんで調べようとしないのだろう? なぜ、#2さんにお礼の言葉がないのだろう? それでも、自分のプログラムを見てもらいたい場合に「申し訳ありませんが」の言葉がないのだろう? ひとつだけヒントを出すと[853]という数字があったとする。 (1)853 % 100 = 53 (2)853 % 10 = 3 (3)853 % 1 = 853 どこにも5が出てこない。

keiman890
質問者

お礼

回答ありがとうございます。 たしかに礼儀に問題ありましたね。すいません。 そして本題ですが、結局考えてもわからないんです。 どう考えればいいのかもいまいちわかりません。

回答No.2

こんにちは。 #include <cstdio> #include <cstring> char str[9]; sprintf(str,"%d",i); if(strstr(str,"5") != NULL){ cout << "go:" << i << endl; } こんなのはどうでしょう? iが入力ね。

keiman890
質問者

お礼

ありがとうございます。 でも僕自身全然知らない文字出てきて理解できません。すいません。 No,1さんの回答のお礼に試しに自分が作ったのがあるんですが、そちらをチェックしてもらえませんか?

  • ponzuinfo
  • ベストアンサー率53% (16/30)
回答No.1

単純な考え方だと 例:87,654,321が入力されたら 87654321/10000000%10 = 8.7654321 87654321/1000000%10 = 7.654321 87654321/100000%10 = 6.54321 以下略 これ(8.7654321など)をintに入れれば小数点以下は切り捨てされて各桁の数が求められます あとはifで5だったら~~とすればいいんじゃないでしょうか ※10のn乗を繰り返しを使って表現する場合はmath.hをインクルードするとできます

keiman890
質問者

お礼

ありがとうございます。 回答の内容を読んで自分なりにやってみました。 申し訳ないんですけどこれでいいのか確認していただけますか? #include <iostream> using namespace std; main(){ int i = 1; while (i < 10000000){ cout << i; if (i % 10000000 ==5 || i % 1000000 ==5 || i % 100000 ==5 || i %10000 == 5 || i % 1000 ==5 || i % 100 == 5 || i % 10 ==5 || i % 1 ==5){ cout << "go/n" ; } else { cout << "/n" ; } i++; } }

関連するQ&A

  • なんで繰り返すの?すいません急です汗

    macでソースプログラムを作っています。 #include <iostream> using namespace std; main(){ int i = 1 ; while (i < 1000) { cout << i ; if (i % 2 == 0){ cout << "go\n" ; } else { cout << "\n"; } i++; } } これだとなぜか1000までの数字が 1 2go 3 4go 5 6go と繰り返しででてきてしまいます。 本当は好きな数字を入力する状況になるようにして例えば「2」を入力したら 2go とだけ表示したいんです。 どこがまちがってるのでしょうか?

  • プログラミング言語Cとプログラミング言語C++

    プログラミング言語Cとプログラミング言語C++の違いって何ですか? あと、プログラミング言語C++についていくつか質問があります。 #include <iostream> using namespace std; void main(){ cout << "Hello world!" << endl; } このプログラムについて質問なんですが、iostreamってプログラミング言語Cで言うstdio.hのことですか? using namespace stdって何ですか? あと、 cout <<"Hello world!"って何ですか?

  • C++での <iostream.h>と<iostream>とusingnamespaceの関係等を教えてください。

    どうでもいい質問なのですが… C++で色々とソースを打っていると気づいたのです。 #include <iostream.h>とするとusing namespace std;の一文を書かなくてもコンパイルエラーになりません。 また、逆に#include <iostream>とするとusing namespace std;の一文が必要になります。 だから、h(ヘッダファイル)の.hは必要なのかな?と思い、#include <cstdlib.h>とするとコンパイルエラーになります。 なにか理屈がわかりません。コンパイラはVC++6.0です。よろしくご回答の方お願いいたします。

  • TextWranglerについて

    私はプログラミングを学ぼうとしていて C++をMacでTexrWranglerをつかって勉強しようとしたのですが 設定がよくわからず、 #include <iostream> using namespace std; int main() { cout << "hello" << endl; } というようにうち「RUN」をクリックするとエラー(error code 13304) がでてうまく実行ができません。 どのように設定をすればよいのでしょうか。

  • C++でうるう年判定のプログラムを作りたいのですが

    C++でうるう年判定のプログラムが作りたいのですが・・・ #include <iostream> using namespace std; int main() { return 0; } 問題のこの下の部分の内容が書けません 変数をa % 4という計算と%100と%400をしなければいけないことはわかっています。この式の入れ方がわかりませんif文だとは思っているのですが 表示は「<<a<<"はうるう年です";」と「<<a<<"はうるう年ではありません";」という判定を表示したいです。

  • C++で二分法のプログラム

    C++で二分法のプログラムを作るんですが x1-x2が十分小さくなれば(10^-5)終了する 例 cos(x/2)の解を出す これどうやればいいんですか?whileを使うらしいですが。 文法というのは、 if系、while、switch、continue、for、break文くらいしかやってないんですが #include <iostream> #include <cmath> using namespace std; int main() { までは行きますが… 出力はcout 入力はcinでお願いできないでしょうか

  • C++のnamespace stdについて

    C++のnamespace stdについて教えて下さい。 coutを使用する場合"iostream"をインクルードし、using namespaceでstd名前空間を使用します。 printfを使用する場合"cstdio"をインクルードし、using namespaceでstd名前空間を使用します。 どちらのインクルードファイルにもnamespace stdという風に同じ名前の名前空間を 使用しているのでしょうか? もしもそうだとしたらcstdio,iostreamの両方をインクルードしている場合 名前空間が競合してしまうのではないでしょうか? namespaceはjavaでいうパッケージにあたる物だと思っていたので、 これでは意味がないのではないかと思いました。 それとも意図的に同じ名前空間を定義している意味があるのでしょうか? C++を使い始めたばかりで戸惑っています。どなたかお答え頂ければありがたいです。

  • c++での入出力がうまくいきません;

    初心者ですが独習c++でプログラミングについて勉強している者です。 なんとか環境設定もできたと思いきや、うまくコンパイルすることができなくて困っています。具体的には、 #include <iostream> using namespace std; int main() { int i, j; double d; i = 10; j = 20; d = 99.101; cout << "値を表示: "; cout << i << ' ' << j << ' ' << d; return 0; } という値を表示するプログラムではコンパイルもうまくいったのですが、次の #include <iostream> using namespace std; int main() { int i; cout << "値を入力: "; cout >> i; cout << "入力した値: " << i << "\n"; return 0; } という入力のプログラムをコンパイルしようとすると、コマンドプロンプトに演算子が使われたクラス ostream では int型の定義が存在しないとなりコンパイルエラーとなってしまいます。 理由が考えてもわからないので、質問してみました。 どのようにすれば、このエラーを解消できるのか知りたいので、どうかご意見をよろしくお願いします。

  • C++

    C++で書いた下記のプログラムが、文字の入力が1023個までなら実行されますが、1024個を超えると実行されません。なぜだか分かる方、教えてください。 #include <iostream> #include <string> using namespace std; int main(void) { string Str; cin >> Str; cout << "here"; }

  • プログラムの動作

    10文字をスキップするプログラムなのですが、どのようにスキップしているのかわからないので教えてください。 下にソースコードを書きます。 #include <iostream> using namespace std; //10文字をスキップする istream &skipchar(istream &stream) { int i; char c; for(i=0; i<10; i++)stream >> c; return stream; } int main() { char str[80]; cout << "いくつかの文字を入力する:"; cin >> skipchar >> str; cout << str << endl; return 0; } よろしくおねがいします。

専門家に質問してみよう