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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

1486閲覧

1から始まる累計を求めたい

beginner001

総合スコア29

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

3クリップ

投稿2020/03/28 23:01

javscript

1<html> 2<body> 3<script> 4 5let x =1; 6for(let i=0;i<=3;i++) 7{ 8 console.log("ループの中"+i+"回目"); 9 x=x+i; 10 11 document.write(x+"<br>"); 12} 13 14</script> 15</body> 16</html>

上記の記述を実行すると下記のようになります。
1
2
4
7
これを1 3 6 10のように累計を表示できる記述に変えるにはどうすれば良いでしょうか。
よろしくお願いします。

DrqYuto👍を押しています

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

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

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

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

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

guest

回答3

0

こんにちは
ご質問にあるコードに最小限の修正をして、出力を 1 3 6 10 にするには、xを更新する以下の行

修正前:

javascript

1x=x+i;

で、 i が 0 より大きい場合にのみ、 さらにx1 を加えればよいです。
以下は、これを実現するコードの一例です。(他にも書き方はあるでしょう)

修正後:

javascript

1x=x+i+(i>0);

または、上記に代入演算子 += を使えば、以下です。

javascript

1x += i+(i>0);

追記

x を更新するのを、document.write の後に行うことにすれば、以下でも1 3 6 10 が表示されます。

let x = 1; for(let i=0; i<=3; i++) { console.log("ループの中"+i+"回目"); document.write(x+"<br>"); x += i+2; }

追記2

このご質問では、x を 1, 3, 6, 10, ・・・ と増加させていくループを書くことが課題ですが、このようなときに思い浮かべるとよいのは、高校の数学で習う、数列の漸化式です。

変数 x の更新されていく値を、数列 { X(i) } で表すとします。高校の数学では、初項の添え字は 1 始まりでしたが、プログラミングでは 0 始まりなので、 i は非負の整数です。即ち、 X(0) が初項で、このご質問の場合、その値は1です。

考えどころは、X(i) の漸化式を作ることです。つまり X(i+1)X(i) から作る式を考えます。ここは紙に書くなりして試行錯誤するステップです。

今回の場合、

X(i+1) = X(i) + i + 2 ( i ≧ 0, 初項 X(0) = 1 )

が漸化式になります。漸化式が得られたら、それをプログラムとして書けばよいです。上記の回答で、後のほうのコードに書いた

javascript

1x += i+2;

が、上記の漸化式をコードにしたものに相当します。

投稿2020/03/29 00:35

編集2020/03/29 05:12
jun68ykt

総合スコア9058

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

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

退会済みユーザー

退会済みユーザー

2020/03/29 02:15

この場合、初期値を整理するのがより適切だと思いますよ。
beginner001

2020/03/29 05:46

ありがとございます。
guest

0

意図した出力にするには、数箇所直す必要があります。

そもそもですが、1, 2, 4, 7 は累計です。
それは理解していますか?

累計が意図した数列になっていないのは、与える数字が意図したものになっていないからです。

ループの中で、x, i がどのように変化しているか確認すると良いです。
デバッガで、ブレークポイントを作成し、その時点での変数を確認することがおすすめですが、console への出力でもよいかと。

投稿2020/03/28 23:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/03/29 02:27

変数の名称が適当すぎるので、多分理解できないのだと思います。 例えば、x を sum や result と置き換えて見てください。 違和感に気がつけると思います。
beginner001

2020/03/29 05:47

sumでやってみます。ありがとうございます。
guest

0

ベストアンサー

html

1<body> 2<script> 3 4let x = 0; 5for(let i = 1; i <= 4; i++) { 6 console.log("ループの中" + i + "回目"); 7 x += i; 8 document.write(x+"<br>"); 9} 10 11</script> 12</body> 13</html>

投稿2020/03/29 05:08

katoy

総合スコア22324

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

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

beginner001

2020/03/29 05:45

初期値を整理したほうが良いというのがわかりました、 ありがとうございます。
katoy

2020/03/29 06:04

i <= 4 の部分を i <= n として、 n をループ回数と設定しmてみてください。 n = 0 (0回のループ) なら ループはな割りません。 n = 1 なら 1 n = 2 なら1, 3 となることも確認してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問