質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

6回答

242閲覧

C++のプログラムについて

kouta7781

総合スコア8

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/06/26 04:39

編集2017/06/26 11:01

C++のプログラムなのですが
#include<strio.h>
int main()
{
int j;
int n;
int wa=0;
//自分の番号と名前の表示
puts("25 山田 太郎");
do{
printf("1から9までの整数のどれかを入力");
scanf_s("%d",&in);
if(n<1 || n>9) {
puts("範囲外の数値を入力しないでください");
}
} while(n<1 || n>9);
for(j=1 ; j<=99; j++) {
printf("1から99までのうち、%dの倍数と%dが付く数字だけを表示j=%d¥n",j);
}
for(j=1;j<=99; j++) {
wa+=j;
}
puts("");
printf("これらの総和は%dです。¥n",wa);
return 0;
}
このように組みました。ですが、答えと全然違います。
答えがこれです。
24 山田 太郎
1から9までの整数のどれかを入力 -1
範囲外の値を入力しないでください
1から9までの整数のどれかを入力 3
1から99までのうち、3の倍数と3の付く数字だけを表示
3,6,9,12,13,15,18,21,23,24,27,30,31,32,33,34,35,36,37,38,39,42,43,45,48,51,・・・・・・93,96,99
これらの総和は2178です
となるようにしたいのですが教えてください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattn

2017/06/26 04:42

まず自分で書いてみて分からない箇所で質問しましょう。これだと丸投げです。
kouta7781

2017/06/26 04:45

すみません。明日までに提出しなくてはいけないのでそこを何とかお願いします????
kouta7781

2017/06/26 04:49

本当に初心者なのに学校がいきなり宿題として出されたのでほとんど何もわからないのでお願いします。しかも昨日出されて明日提出なんです。お願いします????
ttyp03

2017/06/26 04:52

わからないなら先生に聞きなさい。
kouta7781

2017/06/26 04:54

先生は質問は全く受け付けないとおしゃっていましたので質問できないのです。
mattn

2017/06/26 04:54

明日までまだ時間ありますよ。頑張って。
ttyp03

2017/06/26 04:55

なんて酷い先生。がんばって。
episteme

2017/06/26 05:00

「手も足も出ない問題を如何になんとかするか」を先生は探るつもりかな。「俺はこうした」を記せばいいんじゃない。がんばって。
kouta7781

2017/06/26 05:06

昨日徹夜してもわからなかったので質問しています。本当に助けて下さい
kouta7781

2017/06/26 05:08

それは私ではないですよ
kouta7781

2017/06/26 05:09

同じ学校の誰かだと思います。私は土曜に出されたので違います
episteme

2017/06/26 05:22

なんにせよ"知恵袋"に回答上がってるから、それそのまんま提出すればいいよ。
mattn

2017/06/26 05:25

知恵袋の使うのもアリですが、正しいかどうか検証した方がいいですよ。あと昨日は日曜よ。土曜日ではない。
BeatStar

2017/06/26 05:27 編集

ほとんど丸投げですね。ただやる気がないのか、時間がないのか違いだけ。 自分でやったほうがはやいですよ。 Y*hoo! 知○袋で普通にありますし。 それすら検索できないなら向いていないです。
PineMatsu

2017/06/26 08:25

プログラムのイロハや基礎的なことは習っているはず。課題はその範囲で出されているもののはずだから授業を聞いて理解していればできないとおかしい。もし、習った範囲外の課題なら「そんなの習ってないと」反論すればいい。知恵袋やこのteratailで聞いた内容をそのまま提出してもいいだろうけど、先生が知恵袋をチェックしてないとは必ずしも言えないし、教えていないやり方が書かれていれば、本当にできるやつか何処かからコピペしたなとバレてしまうと思います。ま、回答者には関係のないことですけどね(笑)
WoodenHamlet

2017/06/26 09:20

>>ほとんど何もわからないのでお願いします。ってことはちょっとはわかってるんでしょ?そのちょっとわかった部分を書かないと何がわからないのか回答者にもわからない。
WoodenHamlet

2017/06/26 09:25

書道の時間で朱色の筆持って教えたろっかなって思ってる人に半紙突きつけて「ぼくじがへただから書いてよ」って言っても冷たい対応しかされないよね。とりあえず下手な字を見せろ
kouta7781

2017/06/26 11:02

自分が間違えていました。すみません自分でやってみましたができませんでした。教えてください。
yuki23

2017/06/26 11:19

その先生は、このサイトくらい十中八九ウォッチしてるだろうなあ……。コピペして問答無用で単位無しにされてもいいのかな。
tamy

2017/06/26 17:16

このサイトって質問するときにMarkdownのテンプレート出ませんでしたっけ? 読む側に対して思いやりを一切感じないフォーマットなもので,つい気になってしまいました.
guest

回答6

0

コードだけが欲しいようですので、適当に作った下のコードをあげます。ライセンスはパブリックドメインとしますので、どうぞご自由に。

C++

1#include <boost/range/irange.hpp> 2#include <cstdint> 3#include <functional> 4#include <iostream> 5 6template <class T> inline static bool check_num(T n, T i) 7{ 8 if (i == 0) return false; 9 if (i % 10 == n) return true; 10 return check_num(n, i / 10); 11} 12 13template <class T, class IteT> 14T sum_kazu(T n, IteT it, std::function<void(T)> f) 15{ 16 T sum = 0; 17 for (T i : it) { 18 if (i % n == 0 || check_num(n, i)) { 19 f(i); 20 sum += i; 21 } 22 } 23 return sum; 24} 25 26int main() 27{ 28 const intmax_t start = 1; 29 const intmax_t end = 999; 30 char c = '\0'; 31 std::cout << u8"1から9の数字を入力してください: " << std::flush; 32 std::cin >> c; 33 if (c < '0' || c > '9') { 34 std::cerr << u8"1から9の数字ではありません。" << std::endl; 35 return 1; 36 } 37 intmax_t n = c - '0'; 38 std::cout << n << u8" の倍数、または " << n << u8" がついている数値(" 39 << start << u8"から" << end << u8"まで): " << std::endl; 40 auto sum = sum_kazu<intmax_t>(n, boost::irange(start, end + 1), 41 [](auto i) { std::cout << i << " "; }); 42 std::cout << std::endl; 43 std::cout << u8"合計は " << sum << u8" です。" << std::endl; 44 return 0; 45} 46

たぶんあっていると思いますが、正しいかどうかまでは検証していません。1から99ではなく1から999にしていますので、実行した場合の様子を参考に好きなように書き換えてください。コードに関する解説はしませんし、質問も受け付けません。

投稿2017/06/26 09:07

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

majiponi

2017/06/27 07:51

あ、孔明発見♪(もちろんお気付きでしょうけど) 質問者殿がちゃんと気付けるか見物ですね(ひどい) 1文字消去のエスケープシーケンスは、えーと(そろそろ怒られそうなので自重する)
momon-ga

2017/06/27 11:15

何気に”check_num”が目からウロコでした。いいこと知りました。
guest

0

疑似コードで表現。

int 総和 = 0; for ( int i = 1; i < 100; ++i ) { if ( iが入力値で割り切れる || iの一の位が入力値と一致する || iの十の位が入力値と一致する ) { i を出力する i を総和に加える } } 総和を出力する

※ 急いでるなら自分でやる方が早いよ♪

投稿2017/06/26 04:47

編集2017/06/27 00:52
episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

あなたのコードについて

まず以下の部分は,99回printfで文字列を出力するという意味なので,本来やりたいこととは違う.

for(j = 1 ; j <= 99; j++) { printf("1から99までのうち、%dの倍数と%dが付く数字だけを表示j=%d¥n",j); }

同様に,以下の部分は1から99までの整数を単純に足しているだけなので,これも設問とは全く異なる動作.

for(j = 1; j <= 99; j++) { wa += j; }

考え方

そもそも,『1から99までのうち』で条件,すなわち「入力した数値の倍数か入力した数値の付く数値」のみについて処理,すなわち「表示して和を計算」しろと言っているのだから,基本的に核となる部分は以下の形になる.(もちろん最も初歩的な書き方だけれども)

for(j = 1; j <= 99; ++j) { if( /* 条件:入力した数値の倍数か入力した数値の付く数値である */ ) { /* 処理:数値を表示して和を計算 */ } }

この形になることが理解できれば,あとは @episteme さんの回答を見ればわかるはず.

投稿2017/06/26 17:09

tamy

総合スコア442

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C++

1#include <iostream> 2#include <limits> 3 4int main() 5{ 6 std::cout << "Yamada Taro (Age: 50)" << std::endl; 7 int d; 8 for(;;){ 9 std::cout << "Enter 1-9: " << std::flush; 10 std::cin >> d; 11 if(std::cin && d > 0 && d < 10) break; 12 std::cin.clear(); 13 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 14 std::cout << "Invalid input." << std::endl; 15 } 16 std::cout << "Numbers which have " << d 17 << " or can be divided by it are: "; 18 19 int sum = 0; 20 for( int i = 1; i <= 99; i++){ 21 if( i % d == 0 || i / 10 == d || i % 10 == d ){ 22 cout << d << ","; 23 sum += i; 24 } 25 } 26 std::cout << "\b" << std::endl 27 << "The sum is " << sum << "." << std::endl; 28} 29 30

How about this? Translate into Japanese, since I am poor at writing it. Please let me know if you have any questions (You can use Japanese, I only cannot WRITE it.).

投稿2017/06/27 10:58

majiponi

総合スコア1720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

今度は設問が消えてる…

このように組みました。ですが、答えと全然違います。 答えがこれです。 24 山田 太郎 1から9までの整数のどれかを入力 -1 範囲外の値を入力しないでください 1から9までの整数のどれかを入力 3 1から99までのうち、3の倍数と3の付く数字だけを表示 3,6,9,12,13,15,18,21,23,24,27,30,31,32,33,34,35,36,37,38,39,42,43,45,48,51,・・・・・・93,96,99 これらの総和は2178です

から設問を読み取れって?

とりあえず教科書の for 文と if 文の部分を勉強しましょう。
コンパイラはソースを見て「あ、~~なプログラムを作ろうとしてるな、ならいい感じに汲み取って実行ファイルつくったろ」みたいなお節介はしません。

C

1for(j=1 ; j<=99; j++) { 2 printf("1から99までのうち、%dの倍数と%dが付く数字だけを表示j=%d¥n",j); 3}

「1から99までのうち、%dの倍数と%dが付く数字だけを表示」と書いても、その通りに実行ファイルを作ることはないわけです(そうでなければ世のプログラマはコンパイルのお節介を恐れてハゲあがりながら仕事をせねばなりません)。
じゃあどうやって「%dの倍数と%dが付く数字だけ」を指定するのかというと、if 文です。どう組み合わせればいいかとかはほかの回答者さまが教えてくださってますので、頑張ってください。

投稿2017/06/27 01:36

WoodenHamlet

総合スコア306

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

FizzBuzzの書けない学生ってマジでいるんだろうなぁ・・・

ひとつづくクリアしていきましょう。

  • 1~99までのループの方法
  • 合計を計算する方法
  • 入力された値を受け取る方法

-- 1~9でないなら、再入力をさせる(できれば)

  • 倍数かどうかの判定方法
  • 入力した値が含まれているかの判定方法

入力した値が含まれているかだけ、ちょっと面倒かなぁ・・・

投稿2017/06/26 05:26

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

WoodenHamlet

2017/06/26 09:50

この設問もFizzBuzzの系統だし、少なくとも質問者は書けない方の学生さんじゃないかな
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問