2021/04/25

13. 自然数の2乗の和を計算するプログラムを Scratch, Python, Ruby, C で書いてみた

自然数の2乗の和 


を、上の式の右辺のように n 回の 2 乗と足し算で計算するプログラムを
Scratch, Python, Ruby, C で書いてみよう。

1. Scratch (スクラッチ)で書いたプログラム sumi^2.sb3を
にアップした。
 


テキストに書き直すと、

 旗 がクリックされたとき
 (n=) と聞いて待つ
 [n] を (答え) にする
 [s] を (0) にする
 [i] を (1) にする
 (n) 回繰り返す
 |[s] を ((s) + ((i) * (i))) にする
 |(2) 秒待つ
 |[i] を (1) ずつ変える

このプログラム中の (2) 秒待つ は動作の様子を観察するためのもので、
これを削除すると途中の計算の様子は見ることができず、
結果が一瞬にして表示される。

2. Python (パイソン)でのプログラム sumi^2.py

 n=int(input('n= '))
 s=0
 for i in range(1, n+1):
  s=s+i*i
 print('s=',s)

1 行目の input('n= ') は n= を表示し、入力を待つ。
入力された数文字列を int 関数で整数に変換。
その結果を変数 n に格納する。

2 行目は和を蓄える変数 s を 0 に初期化。

3 行目の range(1, n+1) は 1 から n までの範囲を示し、
i を 1 から n まで変化させながら 4 行目の実行を繰り返す。

4 行目は i かける i、すなわち i の 2 乗を s に加え、
その結果を変数 s に蓄える。

5 行目は s= に続けて s の値を表示する。

以下は n= に 10 を入力したときの実行結果。

 $ python3 sumi^2.py

 n= 10

 s= 385


3. Ruby (ルビー)で書いたプログラム sumi^2.rb


 print "n= "

 n=gets.to_i

 s=0

 for i in 1..n do

   s=s+i*i

 end

 printf("s=%d\n", s)


1 行目の print "n= " は n= を表示する

2 行目の gets.to_i は gets で数文字列を受け取り、.to_i で整数に変換。
その結果を変数 n に格納する。

3 行目は和を蓄える変数 s を 0 に初期化。

4 行目の 1..n は 1 から n までの範囲を示し、
i を 1 から n まで変化させながら
do から 6 行目の end に挟まれた部分のプログラムの実行を繰り返す。

5 行目は i かける i、すなわち i の 2 乗を s に加え、
その結果を変数 s に蓄える。

6 行目の end は for で繰り返すプログラムの部分の末尾を示す。

7 行目は s= に続けて s の値を表示する。

以下は n= に 10 を入力したときの実行結果。

 $ ruby sumi^2.rb

 n= 10

 s=385


4. C で書いたプログラム sumi^2.c

 #include <stdio.h>

 int main(void)

 {

   int n, i, s;

   printf("n= ");

   scanf("%d", &n); 

   s=0;

   for (i=1; i<=n; i++){

     s=s+i*i;

   }

   printf("s=%d\n", s);

   return 0;

 }


#include <stdio.h> は標準入出力ライブラリのヘッダファイルを使うとの宣言で、

画面に出力する printf やキーボードから入力する scanf を用いるときに必要。


C のプログラムは main 関数が入り口の関数で、

スクラッチの旗に続くプログラムのようなもの。

関数とは、引数の値を受け取り、実行結果の値を返すものである。

int main(void) は引数が無し (void) で返す値が整数型 int であることをまず記述し、

その後ろの { から } までの部分に関数の本体の記述が続く。


int n, i, s; は整数型の変数 n, i, s を用いることを宣言。


printf("n= "); で、画面上に文字列 n= (= の後ろには空白文字)を表示する。


scanf("%d", &n); で、キーボード(詳しくは標準入力装置)から 

整数を変数 n に読み込む。


for (i=1; i<=n; i++) { は、変数 i を 1 から n 以下の間、i を 1 づつ増加させながら、

{ と } に挟まれた部分のプログラムを繰り返し実行する。


s=s+i*i; で、変数 s の値に i の2乗を加えたものを s に格納する。 


繰り返しが終わったら printf("s=%d\n", s); で 

s= の文字列に続き、変数 s の値を整数として表示し、改行する。 

\n は改行を表す。


return 0; で main 関数の値 0 を返して終了する。

0 はプログラムが正常終了したことを表す。


Cのプログラムを実行するには、コンパイルが必要である。

gcc などのコンパイラでコンパイル(プログラムを実行ファイルに翻訳)する。


 $ gcc sumi^2.c



プログラムに問題がなければ a.out という実行ファイルが生成される。

これを以下のように実行する。


 $ ./a.out

 n= 10

 s=385


5. まとめ

どの言語のプログラムでも書き方や操作が多少異なるが、実行する計算は同じ。
C はこの例では一番複雑だが、基本の言語。
最近は、ruby や python などの、コンパイルをしないインタープリータが
広く用いられるようになってきた。

2021/04/24

12. 自然数の2乗の和、3乗の和の公式の証明




の証明は後日示すと書いたが、だいぶ遅くなってしまった。

今回は、これらの証明を示す。

0. 復習 自然数の和の公式の証明


1. 自然数の 2 乗の和の公式の証明
 まず次の式が成り立つことを確認。


 この式を、i が 1 のときから n のときまで縦に並べてみる。


これらの式を足し合わせる。
左辺は 2 の 3 乗が打ち消し合い、順に、n の 3 乗まで打ち消しあう。
右辺は第1項が 1 から n までの2乗の和の3倍、第2項は 1 から n までの和の3倍、
第3項は 1 の和になる。したがって、次の式が得られる。


少し面倒だが、これを変形すると公式が得られる。


2. 自然数の 3 乗の和の公式の証明
 まず次の式が成り立つことを確認。


 この式を、i が 1 のときから n のときまで縦に並べてみる。


これらの式を足し合わせると、次の式が得られる。


これを変形すると公式が得られる。


2021/04/04

11. 小学生低学年のための算数ドリルを Scratch で!

第6回と第7回で算数ドリルを出題するプログラムをスクラッチで書いた。
第9回でリンゴを数えるプログラムを書いた。
そこで、今回はリンゴを表示して足し算をするプログラムを作ってみた。

プログラムをスクラッチのホームページに AppleAddition として



小学生の低学年の算数のドリルとして使えるかもしれない。

これは 9 までの数の足し算であるが、25 までの足し算ができるプログラムも
AppleAddition2 として
にアップした。


スクラッチのスタジオ Math Quiz Generator 
には、分数の加減乗除のプログラムを置いてあるので、
小学生高学年の算数ドリルとしても使えるかもしれない。

今回はここまで。

20. 円錐の半分?

17-19 で三角形、四角形の面積を半分にする問題を解いた。 今回は円錐を半分にする実験をしてみよう。 まず、円錐を作るための図形をスクラッチで描いてみた。 プログラムはここ。 https://scratch.mit.edu/projects/561804896 これを実行すると...