もしかしたら、「算数が出来ない」か、「心構えが出来ていない」のどちらかだと思います。
(一番高いのが後者の可能性)
まず、プログラミングっていうのは「こう書けばこう動く」……じゃないです。
「プログラムは人間が現実世界でやっていることを逐一指示されながら処理しているだけの代物である」です。
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といった)環境等によって変わりますが、