PROGRAMMING and OTHERS

スクラッチプログラミング入門、JAVA PROGRAMMING 入門 , 英語学習、ブログ開発など。

スクラッチ プログラミング 目次

スクラッチ・プログラミングの基礎:基礎を大切にして易しく解説します。サンプルプログラミを豊富に取り入れ、プログラムがなせ動くかを説明します。命令ブロック:繰り返し、関数、リスト、変数、論理式など。

  1. スクラッチ・プログラミング--数列 1
  2. スクラッチ・プログラミング--数列2
  3. スクラッチ・プログラミング---キーボードよりデータ入力
  4. スクラッチ・プログラミング---数列4:関数による計算
  5. スクラッチ・プログラミング---数列5:引数を使う関数
  6. スクラッチ・数列6:リストの操作、フィボナッチ数列
  7. スクラッチ プログラミング---リストと関数の利用
  8. スクラッチ プログラミング---正多角形と円の描画
  9. スクラッチ プログラミング---スタックの操作(電卓への応用可能)
  10. スクラッチ プログラミング---スタックを使った電卓
  11. スクラッチ プログラミング---数値積分ー円の面積

 

Java: if else if else: 三つ以上の場合分け

 

Prog5_3_cif else if else構造の説明のための例である.このプログラムの最後にコメントで実行結果(表示)が示されています。

f:id:Kurokawa_Tomio:20190613154424p:plain

図Prog5_3_src



if else if else構造は以下の形をしています。

 

if(条件1) 1;

else if (条件2)2;

else 3;

 

この意味は条件1が成立すれば文1が実行され、制御は文3の次に移ります。条件1が成立しなければ 条件2がチェックされ、成立すれば文2が実行され、制御は文3の次に移ります。条件2が成立しなければ、文3が実行され、制御は次に移ります。つまり、条件1と条件2により、三つの場合に分けられるということです。

 

Prog5_3_srcについて:

6行目は条件1が成立するので、b=1;が実行され、制御は9行目に移ります。

 

11,12行目では(条件1成立しない,条件2成立)b=0が実行されます。制御は14行目に移ります。

 

16,17行目は(条件1成立しない,条件2成立しない)b=-1が実行されます。

 

21から24行目は四つの場合分けをする以下の構成である。

 

if(条件1) 1;

else if (条件2)2;

else if (条件3) 3;

else 4;

 

Prog5_3_srcの場合以下のようになる。

条件1成立ーー>b=10

条件1成立しない,かつ条件2成立ーー>b=0;

条件1成立しない、かつ条件2成立しない、かつ条件3成立ーー>b=-10;

条件1成立しない、かつ条件2成立しない、かつ条件3成立しないーー>b=-20;

実行結果は28から31行に示されています。

 

ちなみに、行頭の//はその行はコメントであることを意味します。

 

 

数値積分により円の面積を計算

 

台形の面積の計算法を使って円の面積を近似する

sekibun1-1は半径1の単位円の第一象限のⅹ座標に二つの点A(Xi,0) B(Xi+1,0)からそれぞれ上に直線を引き,円と交わったところをC(Xi+1,f(Xi+1)),D(Xi,f(Xi))としている。ADBCは平行であるから、四角形ABCDは台形を構成している。

f:id:Kurokawa_Tomio:20190604172805p:plain

図sekibun1-1

 

 

 

この台形の高さはa=Xi+1-Xiである。aを一定にしたこのような台形をn個描くとすると幅(台形の高さ)1/nとなるこの。ただし、最初の台形のA点は原点(0,0),二つ目の台形のA点は(1/n, 0),三つ目の台形のA点は(2/n, 0),…,最後の台形のA点は((n-1)/n, 0),D点は(n/n, 0)これらnの台形の面積の合計はnが十分に大きければ、円の面積のほぼ1/4となると考えることができる。以下のような手順で台形の面積を計算することができる。全ての台形の面積の合計Snは以下の式で表すことができる。

Snの計算手順をプログラム化したものが、図 円の面積sekibun-pro1-1から sekibun-pro1-3である。

sekibun-pro1-1は式(1)から、図sekibun-pro1-2は式(2)と(3)から、図sekibun-pro-1-3は式(4)から来ている。

sekibun-result1-1n=10000の時 数値積分による単位円の面積は3.141591(変数の精度の問題で正確ではない可能性がある)である。単位円の面積はπであるから、ほぼ正しいと結論できる。

ちなみに、n=1のとき、台形は一つだけでのあり(三角形)面積はその面積は0.5である。4倍すると2.0になる。n=2 のとき 面積は2.732で、n=10のとき近似面積は3.10である。

 

f:id:Kurokawa_Tomio:20190604175827p:plain

図sekibun-shiki-1

 

f:id:Kurokawa_Tomio:20190604172805p:plain

 

f:id:Kurokawa_Tomio:20190604173650p:plain

図sekibun-pro1-1

 

 

f:id:Kurokawa_Tomio:20190604173758p:plain

図sekibun-pro1-2

f:id:Kurokawa_Tomio:20190604173852p:plain

図sekibun-pro-1-3

 

f:id:Kurokawa_Tomio:20190604174006p:plain

図sekibun-result-1-1




 

今週のお題「雪」

スタックを利用した電卓

 

スタックを使用して数式を計算する場合、数式を左から順番に見ていて、直ちに計算できる数値があれば、それをスタックにPUSHします。多くの場合二つの数値をPUSHします。

そのあと、その2数の間の計算を行う。スタックのTOPにあった二つの数値をPOP(スタックがら取り除く)して、さらに計算結果をPUSHします。これを繰り返して、最後の計算を行うと結果がスタックのTOPに残ります。

 

スタックによる電卓

プログラミングでよく使用されるデータ構造にスタックがある。スタックは先入れ後出し法を操作として使う。スタックを利用する電卓は大変シンプルで操作しやすい。計算の順番を規定する括弧が不要であり、途中の計算結果を記憶するメモリーも不要である。

図calc1はスクラッチで作成したスタックを利用する電卓である。必ずしも見映えはよくない。この図はプログラムを起動した時のステージの表示画面である。

I,N,R,a,b,c,S,Dは定義した変数で、stackは定義したリストである。このプログラムはスクラッチ上部の緑の旗により起動される。始めに初期設定のためボタンCをクリックする。全ての変数は0に設定される。ただし、Dは10である。スタックは空に設定される。1,2,3,4,5,6,7,8,9,0,・、P、+、-、X,/,R,C,Mはボタンですべてスプライトである。したがって、クリックすると、それに関連したプログラムが起動される。数字と・は数値を入力するためのボタンである。その他のスプライトもそれをクリックすると特有のプログラムが関係していて、それが起動される。それぞれは以下のような動作が関連付けられている。

f:id:Kurokawa_Tomio:20190225133855p:plain

図calc1

ボタンとスプライトと関連するプログラムの説明

 

緑の旗:

クラッチに用意された緑の旗をクリックすると背景に用意されたプログラムが起動される(図stage-prog1)。このプログラムは数値入力を受け付けるためのプログラムで起動されたままで、数値入力を処理する。複数桁の整数、少数のある実数を受け付ける。変数rに結果が入る。

f:id:Kurokawa_Tomio:20190225134036p:plain

図stage-prog1

C:

スタックを空にし、変数がすべて0にされ、ただしDは10がセットされる。このスプライトのプログラムは図clear-prog1である。

f:id:Kurokawa_Tomio:20190225134219p:plain

図clear-prog1

1,2,3,4,5,6,7,8,9,0と・:

1,2,3,4,5,6,7,8,9,0: 

整数または実数が変数rに入る。数字を連続してクリックすると二桁、三桁、それ以上の桁の数字を入力できる。・は少数点を意味していて、少数点以下の桁も入力できる。スクリプトは図number-input2-1、図number-input2-2に代表されるコードになっていて、それぞれのスプライトに対応している。その結果Iは1が入り, Nはそのボタンについている数が入る。従ってIが1であると数値が押されたことがわかる。

f:id:Kurokawa_Tomio:20190225134418p:plain

図number-input1

f:id:Kurokawa_Tomio:20190225134518p:plain

図number-input2

・:

・が押されると少数点以下の処理をするため、図multi-digit-real1が起動され、Iが0、Sが1にセットされる。Sは始め0になっている。図multi-digit-real1、図number-input1-1、図number-input2-1などが働いて、rに整数または実数の入力値が設定される。

f:id:Kurokawa_Tomio:20190225141053p:plain

図multi-digit-real1

P:(PUSH)

変数rの内容がスタックにPUSHされる。r,D,S,Iがそれぞれ0,10,0,-1にセットされる。PUSHされたのでrはクリアされ、Dは元の数10に、Sも少数の扱いは終わったので元の数0になり、Iは数値入力はとりあえず終わったので、-1にしておく。このスプライトのプログラムは図push-prog1である。

f:id:Kurokawa_Tomio:20190225134755p:plain

+:(加算)

スタックのトップがPOPされ変数bに入れられる(スタックのトップはなくなる)、さらにスタックの新しいトップがPOPされaに入れられ、c=a+bが計算され、cがスタックにPUSHされる。このスプライトのプログラムは図add-prog1である。

f:id:Kurokawa_Tomio:20190225135436p:plain

図add-prog1

 

ー:

+と同じであるが、計算はc=a-bである。このスプライトのプログラムは図sub-prog1である。

f:id:Kurokawa_Tomio:20190225135659p:plain

図sub-prog1

X:

+と同じであるが、計算はc=a*bである。このスプライトのプログラムは図mult-prog1である。

f:id:Kurokawa_Tomio:20190225135908p:plain

図mult-prog1

 

/:

Xと同じであるが、計算は c=a/bである。このスプライトのプログラムは図div-prog1である。

f:id:Kurokawa_Tomio:20190225140029p:plain

図div-prog1

 

 

R:

スタックのトップのがPOPされ、rに入れられる、そこで平方根が計算され、rに残る。これが、スタックにPUSHされる。元のrの場所にrの平方根が入る。このスプライトのプログラムは図root-prog1である。

f:id:Kurokawa_Tomio:20190225140117p:plain

図root-prog1

M:スタックのトップがマイナスになる。すなわち-1が掛けられる。これはマイナスの数を扱うためである。このスプライトのプログラムは図minus-prog1である。

f:id:Kurokawa_Tomio:20190301195415p:plain

図minus-prog1

操作例

1.

(2.2-1.2)*(34.5+4)

 

操作 

2.2p1.2p-34.5p4px   計算結果:38.5

 

2.

(-45-20)/(11-3)

操作

45pm20p-11p3p-/     計算結果:-8.125



スタックの操作(電卓への応用が可能)

スタックはプログラミングでは非常に重要なデータ構造である。大学の情報学科では必ず教える内容です。プログラムの解析などで使い、数式の計算に使うと非常に便利です。ここでは数式の計算例を示すことにより、スタックの扱い方を説明いたします。

 

スタックは先入れ後出し法をとるデータ構造です。例えばレストランでキレイに洗った皿を一つひとつ積み上げて行って、必要になったら上から一枚一枚とっていくような皿の積み上げ管理をする道具といえばよろしいでしょうか。コンピュータのメモリでいえば配列のような形をしていて、始めは空で、データは上に入れ、上からとるようなデータの出し入れをする配列(リスト)であると言える。ただし、スクラッチではこの配列をリストで実現する。リストはデータを入れていくと下向きに成長する。例えばスタックに3を入れて(PUSHして)5を入れる(PUSHする)と図stack0-1のようになる。このスタックの名前はstackである。

f:id:Kurokawa_Tomio:20190220211455p:plain

図stack0-1

スタックを使用して数式を計算する場合、数式を左から順番に見ていて、直ちに計算できる数値があれば、それをスタックにPUSHします。多くの場合二つの数値をPUSHします。

そのあと、その2数の間の計算を行い、スタックのTOPにあった二つの数値をPOP(スタックがら取り除く)して、さらに計算結果をPUSHします。これを繰り返して、最後の計算を行うと結果がスタックのTOPに残ります。

 

 

例1 2+3は以下のように行われる。

操作とプログラムの処理

図 stack1は始めスタックが空であることを示す。

  • 2をクリック---2が変数rに入る
  • P(PUSH)をクリック---変数rの内容がスタックのトップに入る(図stack2)
  • 3をクリック---3が変数rに入る
  • P(PUSH)をクリック---変数rの内容がスタックのトップに入る(図stack3)
  • +をクリック---プログラムが以下のように働いて結果がスタックのトップに残る

・スタックのトップをポップして、変数Bに入れる。

・スタックのトップをポップした、変数Aに入れる。

・C=A-Bを計算(=5)

・Cをスタックにプッシュ(図stack4)

f:id:Kurokawa_Tomio:20190220211713p:plain

図 stack1

f:id:Kurokawa_Tomio:20190220211806p:plain

図stack 2

f:id:Kurokawa_Tomio:20190220212004p:plain

図 stack3

f:id:Kurokawa_Tomio:20190220212228p:plain

図 stack4

 

例2 (7+3)/(5-2)は以下のように行われる。

操作とプログラムの処理

図 stack5は始めスタックが空であることを示す。

1)7をクリック---7が変数rに入る

2)P(PUSH)をクリック---変数rの内容がスタックのトップに入る(図stack6)

3)3をクリック---3が変数rに入る

4)P(PUSH)をクリック---変数rの内容がスタックのトップに入る(図stack7)

5)+をクリック---プログラムが以下のように働いて結果がスタックのトップに残る

・スタックのトップをポップして、変数Bに入れる。

・スタックのトップをポップした、変数Aに入れる。

・C=A-Bを計算(=10)

・Cをスタックにプッシュ(図stack8)

6)5をクリック---5が変数rに入る

7)P(PUSH)をクリック---変数rの内容がスタックのトップに入る(図stack9)

8)2をクリック---2が変数rに入る

9)P(PUSH)をクリック---変数rの内容がスタックのトップに入る(図stack10)

10)ーをクリック---プログラムが以下のように働いて結果がスタックのトップに残る

・スタックのトップをポップして、変数Bに入れる。

・スタックのトップをポップした、変数Aに入れる。

・C=A-Bを計算(=3)

・Cをスタックにプッシュ(図stack11)

11)/をクリック---プログラムが以下のように働いて結果がスタックのトップに残る

・スタックのトップをポップして、変数Bに入れる。

・スタックのトップをポップした、変数Aに入れる。

・C=A*Bを計算(=3.333333)

・Cをスタックにプッシュ(図stack12)

f:id:Kurokawa_Tomio:20190221180158p:plain

図stack5
f:id:Kurokawa_Tomio:20190221180237p:plain
図stack6
f:id:Kurokawa_Tomio:20190221175552p:plain
図stack7
f:id:Kurokawa_Tomio:20190221175649p:plain
図stack 8
f:id:Kurokawa_Tomio:20190221175804p:plain
図stack9
f:id:Kurokawa_Tomio:20190221175839p:plain
図stack 10
f:id:Kurokawa_Tomio:20190221175935p:plain
図 stack11
f:id:Kurokawa_Tomio:20190221180006p:plain
図stack12