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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

3回答

1002閲覧

C# アルゴリズム基礎

bananaEGG

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2021/04/09 11:56

編集2021/04/09 12:05

C#アルゴリズムについてです。
A×Bの結果をCに求める。足し算でおこなうことが条件です。
出力結果が10が6回出力されるのですが、これを30にするにはどのように
書き換えたらよろしいのでしょうか?
ネットで検索して真似しても同じ結果にしかなりません。
ご教授よろしくお願いいたします。

class Program { static void Main(string[] args) { int a = 5; int b = 6; int x = a; for (int i= 0; i < b; i++) { int c= a + x; Console.WriteLine(c); } } }

}

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

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

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

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

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

Zuishin

2021/04/09 11:58 編集

足し算と掛け算。
bananaEGG

2021/04/09 11:59

今、確認しましたが10でした
thkana

2021/04/09 11:59

C++は関係ないと思います。
bananaEGG

2021/04/09 12:04

間違えておしてしまいました。 不快な気持ちになられたなら申し訳ございません。
BluOxy

2021/04/19 09:12 編集

1行ずつコードの説明はできますか。 説明を情報整理のために質問に追記しても構いません(個人的には整理していただきたいです)し、とにかくご自身でコードに対する理解度を確かめてみましょう。
退会済みユーザー

退会済みユーザー

2021/04/09 12:59

アルゴリズムなんて言う高等な話ではなくて算数の話で、A x B というのが何なのかはご存じでしょうから、A + A + A + ... というのを B 回繰り返すにはどういうコードを書くかという話ですけど。
BeatStar

2021/04/10 00:09

コードは"<コード>"または"<code>"というボタンを押して出てくるやつに書いてください。 非常に読みづらいです。
BeatStar

2021/04/10 00:12

後、なぜか「終了ブロック(?)」が一つ多いです。 コンパイル、通らないと思いますが……
guest

回答3

0

ベストアンサー

もしかしたら、「算数が出来ない」か、「心構えが出来ていない」のどちらかだと思います。
(一番高いのが後者の可能性)

まず、プログラミングっていうのは「こう書けばこう動く」……じゃないです。

プログラムは人間が現実世界でやっていることを逐一指示されながら処理しているだけの代物である」です。

C#

1class Program{ 2 static void Main(string[] args){ 3 int a = 5; 4 int b = 6; 5 int x = a; 6 for (int i= 0; i < b; i++){ 7 int c= a + x; 8 9 Console.WriteLine(c); 10 } 11 } 12}

ですよね?

ご自分のコード(他人のコードを読む場合も同様)を、「一行レベルで、何をしているかをコメントとして書く」をやってみてください。

C#

1// クラス定義 2class Program{ 3 // mainメソッド 4 static void Main(string[] args){ 5 // 変数 a, b, x をそれぞれ宣言し、初期化する 6 int a = 5; 7 int b = 6; 8 int x = a; 9 10 // iを0からbまで繰り返す(= b回繰り返す) 11 for (int i= 0; i < b; i++){ 12 // c は a + x である 13 int c= a + x; 14 // そうだ、cを出力、してみよっか? 15 Console.WriteLine(c); 16 } 17 } 18}

となりますね。(言い回しとかは他のでもいいけど)

それを、テキストファイルか現実世界のノートでもなんでもいいから、
コメントだけを抽出して書いてみる。

つまり疑似コードとして書きます。

// 疑似コード1 0. 変数宣言と初期化 1. b回繰り返す 1.1. a + b した値を c に代入 1.2. c を出力する

ですね。

これを現実世界でやってみてください。

頭の中で暗算してもいいです。とにかくやってみてください。

特に「実際の値を入れてみて、処理を追ってみること」です。

そうすると、

定義: a の初期値 = 5 b の初期値 = 6 x の初期値 = a (= 5) i = 0 のとき: a + x = c 5 + 5 = 10 => 結果、10が出力される( c を出力しているため ) i = 1 のとき: a + x = c 5 + 5 = 10 => 結果、10が出力される( c を出力しているため ) i = 2 のとき: a + x = c 5 + 5 = 10 => 結果、10が出力される( c を出力しているため ) i = 3 のとき: a + x = c 5 + 5 = 10 => 結果、10が出力される( c を出力しているため ) ...

「いや、足し算と引き算の関係性、わかってる?」って言われるのも仕方ないですよね。

だって、「意味不明なことをしている」のだから。

(おそらく計算ができないっていうよりも、「発想法」とかがわからないだけじゃないかなと思うが)

たとえば、現実世界で、

5×4 をするとして、

別の人(たとえばA氏) が

5×4 をしよう。 えーっと…… 5 + 5 = 10, だから 10 5 + 5 = 10, だから 10 5 + 5 = 10, だから 10 5 + 5 = 10, だから 10 わかった! 答えは10だ!!

と回答したらどう思いますか?

それと一緒です。

もう一度書きます。
プログラムは人間が現実世界でやっていることを逐一指示されながら処理しているだけの代物である」です。

まずは、プログラミングをするのを一旦やめましょう。

そして深呼吸して、「現実世界でならどういう風にやっているか」を閑雅てみてください。

そうすると、

5×4 をしようか。 5×4 は 足し算でやると 5 + 5 + 5 + 5 のように 5 を 4回足しているものだから…… えーっと…… 5 + 5 = 10 最初のやつは 10だな。 次は…… 10 + 5 だな。 10 + 5 = 15。 15 + 5 = 20。 わかった! 20だ!!!

のようにしますよね。

5 + 5 + 5 であれば、一気に計算する人もいるのかもしれませんが、
私みたいな凡人以下だと、

5 + 5 を先にする。

そしてこの結果を 現実世界でだとノートかホワイトボードかなんかに記録しておく。

この記録を X としておく。(質問にある 変数 x とは別物)

{ 5 + 5 } + 5 + 5 の最初の部分が計算完了しました。

なので 10 + 5 + 5 の状態です。

そして 記録X に 5 を追加する。

10 + 5 = 15

それで X を更新する。( 5 から 15 へ )

{ 5 + 5 + 5 } + 5 が完了。

また X + 5 をする。

X = 15 なので 15 + 5 をする。

15 + 5 = 20

となる。

これをやればいいだけです。

7×8 とかでも同じです。

そして、これをよーく見ると、「共通項」が見えてきます。

規則性ですね。

記録X = 記録X × 数字

となっています。

でも計算中は 最初の { 5 } のときだけは別でした。

でもよーく考えると、

記録X = 0 として、

記録X = 記録X + 数字

というようにやれば、できそうですね。

つまり、規則性として、「X = X + 数字」が出てくる。

後はこれを実装すればいいだけです。

頑張ってください。


[追記1]

追記として書いておきます。

忘れていましたが、こういう、「結果が合わない場合」や「急にクラッシュする」等のような
実行時エラーであれば、「デバッグ」を行います。

デバッガを使う」とか、「いわゆるprintfデバッグ」でやります。
もしくは上記で書いたように、「一行レベルで何をしているかをコメント等にして読み取る」とかです。

デバッガは言語や(コンパイラやIDEといった)環境等によって変わりますが、

投稿2021/04/10 01:16

編集2021/04/17 08:37
BeatStar

総合スコア4962

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

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

bananaEGG

2021/04/10 12:01

いままでネットで検索してコピペでやってきて、初めて自分で考えて組むことができました。 とても分かりやすいご説明ありがとうございました。 「プログラムは人間が現実世界でやっていることを逐一指示されながら処理しているだけの代物である」 この言葉を胸に刻んで、コンピュータと向き合っていきたいと思います。 本当に本当にありがとうございした。
BeatStar

2021/04/10 12:15

やっぱりコピペだったんですね…… そりゃ上達しませんよ。だって思考停止しているんだから。 なので、とりあえず自分なりに考えてみることです。そうすればある程度のものは何となくの方向性が見えてきます。 頑張ってください。
guest

0

for文の中をよーく見てみてください
int cに何が格納されるか
そもそもでint xが必要なのか
そこが分かれば解決できると思いますよ!!

投稿2021/04/09 15:06

SaikaShioya

総合スコア17

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

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

0

何かの宿題?

int c

の意味と、ループの意味を考えれば、答えは導き出せると思います。

int c
は、c という箱を宣言するということです。
ループの中で、毎回”新しく”cという箱に、a と x を足した結果が入ります。

答えを保存しておく場所と、ループ内で行われる計算式で使っている x の調整が必要です。

投稿2021/04/09 12:09

nfox

総合スコア231

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問