pe-3. 条件分岐と場合分け

-- Views

February 03, 22

スライド概要

(Pascal プログラミング入門)
URL: https://www.kkaneko.jp/cc/pascal/index.html

profile-image

金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko

シェア

埋め込む »CMSなどでJSが使えない場合

各ページのテキスト
1.

pe-3. 条件分岐と場合分け (Pascal プログラミング入門) URL: https://www.kkaneko.jp/cc/pascal/index.html 金子邦彦 1

2.

前回のまとめ Pascalには,四則演算と各種ライブラリ関数(三角 関数,指数・対数関数,平方根など)の機能がある s := ( a + b + c ) / 2; (a +b+c)/ 2 を計算し,s に格納 A := sqrt(s * (s - a) * (s - b) * (s - c)); s(s −a)(s −b)(s −c) を計算し,A に格納 •2

3.

内容 例題1.平方根の計算 例題2.対数の計算 if文,else 文,条件分岐,比較演算 例題3.定形郵便物の料金 例題4.2次方程式 多分岐 例題5.直線と原点の距離 比較演算と論理演算の組み合わせ •3

4.

目標 • 条件分岐(if 文)を使って,より役に立つプログ ラムを作ることができるようになる. • 比較演算(<,<=,>,>=,=,<>)の使い方 を理解する • 前回習った四則演算,ライブラリ関数(三角関数,指 数・対数関数など)も使う •4

5.

条件分岐とは • 「ある条件式」が成り立てばAを、成り立たなけ ればBを実行 条件式 Yes No B A •5

6.

オンライン開発環境 Online GDB • プログラミングを行えるオンラインのサービス https://www.onlinegdb.com • ウェブブラウザを使う • たくさんの言語を扱うことができる Pascal, Python3, Java, C/C++, C#, JavaScript, R, アセンブリ言語,SQL など • オンラインなので、「秘密にしたいプログラム」 を扱うには十分な注意が必要 6

7.

Online GDB で Pascal を動かす手順 ① ウェブブラウザを起動する ② 次の URL を開く https://www.onlinegdb.com 7

8.

③ 「Language」のところで,「Pascal」を選ぶ 8

9.

実行ボタン エディタ画面 プログラムを 書き換えること ができる 9

10.

例題1.平方根の計算 • 浮動小数点数データを読み込んで,平方根の計算 と表示を行うプログラムを作る. • 但し,負の数の場合には,「計算できないこと」を意 味するメッセージを表示する 正または0のとき: sqrt() を使って計算できる 負のとき: 平方根は計算できない • 負であるかどうかによって条件分岐を行うために if 文 を使う •10

11.

program sum; var x: real; begin write('Please Enter x: '); 条件式 readln(x); if x < 0 then begin writeln('x < 0, then x is out of range'); end else begin writeln('sqrt(', x:8:3, ') =', sqrt(x):8:3); end; 条件が成り立つ 場合に実行され る部分 条件が成り立た ない場合に実行 される部分 readln end. •11

12.

平方根の計算 実行結果の例 •12

13.

プログラム実行順 write('Please Enter x: '); readln(x); メッセージ 「Please Enter x:」を表示 浮動小数点数データを読み込み Yes x<0 No 条件分岐 writeln(' x < 0, then x is out of range'); 平方根を計算し,計算 メッセージを表示 writeln('sqrt(', x:8:3, ') =', sqrt(x):8:3); 結果を表示 readln 終わりの readln •13

14.

プログラムとデータ メモリ ① x ③ 1つの変数 readln(x); 浮動小数点数データを 読み込み writeln('sqrt(', x:8:3, ') =', sqrt(x):8:3); 計算と表示 •14

15.

if ... else 文 • 「条件式」が成り立てばAを、成り立たなければ Bを実行 if 条件式 then begin 文; 文; A ... end else begin 文; 文; B ... end; 条件式 Yes No B A •15

16.

if ... else 文 「if ... then begin ... end else begin ... end;」 で 1つの文であり,文の末端には文の区切りとして, セミコロンが必要 if 条件式 then begin 文; 文; ... end else begin 文; 文; ... end; •16

17.

if 文 • if 文のみを書いて,else 文を書かないこともでき る • 「条件式」が成り立つときに限りAを実行 if 条件式 then begin 文; 文; A ... end; 条件式 No Yes A •17

18.

if 文 「if ... then begin ... end;」 で1つの文であり,文 の末端には文の区切りとして,セミコロンが必要 if 条件式 then begin 文; 文; ... end; •18

19.

比較演算 • 比較演算は,条件式を書くときなどに使用 • 演算子 < <= > >= = <> 意味 左辺が右辺より小さい 左辺が右辺以下 左辺が右辺より大きい 左辺が右辺以上 左辺が右辺と等しい 左辺が右辺と等しくない •19

20.

比較演算の例 if age >= 20 then begin writeln('成人です'); 「左辺が右辺以上」の意味 end else begin writeln('未成年です'); end; •20

21.

例題2.対数の計算 • 浮動小数点数データを読み込んで,e を底とする 対数の計算と表示を行うプログラムを作る. • 但し,0または負の数の場合には,「計算できないこ と」を意味するメッセージを表示する 正のとき: ln() を使って計算できる 0または負のとき: 対数は計算できない • 負であるかどうかによって条件分岐を行うために if 文 を使う. •21

22.

• a を底とする指数関数 y = ax • a を底とする y の対数 x = loga y ⇔ y = ax •22

23.

program sum; var x: real; begin write('Please Enter x: '); 条件式 readln(x); if x <= 0 then begin writeln('x <= 0, then x is out of range'); end else begin writeln('ln(', x:8:3, ') =', ln(x):8:3); end; 条件が成り立つ 場合に実行され る部分 条件が成り立た ない場合に実行 される部分 readln end. •23

24.

対数の計算 実行結果の例 •24

25.

プログラム実行順 write('Please Enter x: '); readln(x); メッセージ 「Please Enter x:」を表示 浮動小数点数データを読み込み Yes x <= 0 No writeln('ln(', x:8:3, ') =', ln(x):8:3); 条件分岐 writeln(' x <= 0, then x is out of range'); 対数を計算し,計算結 果を表示 readln 終わりの readln メッセージを表示 •25

26.

プログラムとデータ メモリ ① x ③ 1つの変数 readln(x); 浮動小数点数データを 読み込み writeln('ln(', x:8:3, ') =', ln(x):8:3); 計算と表示 •26

27.

字下げとセミコロンを忘れないこと • セミコロンを忘れると プログラムは動かない • 字下げを忘れると プログラムは動くが, 読みづらい 字下げ if 条件式 begin 文; 文; セミコロン ... end; if 条件式 begin 文; 字下げ 文; セミコロン ... end else begin 字下げ 文; 文; ... セミコロン end; •27

28.

例題3.定形郵便物の料金 • キーボードから数値を読み込んで, 25 以下なら 「84 Yen」 25 より大きくて50以下なら 「94 Yen」 50より大きいなら 「Too heavy」 と表示するプログラムを作る • 多分岐を行うために,if 文を使う •28

29.

program sum; var x: real; begin write('juuryou?: '); readln(x); if x <= 25 then begin writeln('84 Yen'); x <= 25 が成り立つ 場合に実行される部分 end else if x <=50 then begin writeln('94 Yen'); end else begin writeln('Too heavy'); end; readln end. セミコロン x <= 25 が成り立たず, x <= 50 が成り立つ 場合に実行される部分 x <= 25 も成り立たず, x <= 50 も成り立たない 場合に実行される部分 •29

30.

定形郵便物の料金 実行結果の例 •30

31.

定形郵便物の料金 A, B, C のうちどれか1つを実行 Yes x <= 25 No writeln('80 Yen'); A Yes x <= 50 No writeln('Too heavy'); writeln('90 Yen'); B C •31

32.

program sum; var x: real; begin write('juuryou?: '); readln(x); if x <= 25 then begin writeln('80 Yen'); end else if x <=50 then begin writeln('90 Yen'); end else begin writeln('Too heavy'); end; readln end. このうちどれか1つ が実行される •32

33.

例題4.2次方程式 • 2次方程式 ax2 + by + c = 0 の解を求めるプログ ラムを作る • 重解,虚数解も正しく求めるために,判別式 b2 -4ac の値で条件分岐する • この例題4では,「a=0」の場合は考えない •33

34.

D = b2 - 4ac とする 1) 判別式 D > 0 のとき −b+ D −b− D x= , 2a 2a 2) D = 0 のとき 異なる2実数解 b x = − , 2a 重解 −b+i − D −b−i − D x= , 2a 2a 異なる2虚数解 •34 3) D < 0 のとき

35.
[beta]
program sum;
var a, b, c, D: real;
begin
write('Please Enter a: ');
readln(a);
write('Please Enter b: ');
readln(b);
write('Please Enter c: ');
readln(c);
D := b * b - 4 * a * c;
if D > 0 then begin
writeln('x =', (- b + sqrt(D))/ (2*a):8:3, ', ', (- b - sqrt(D))/ (2*a):8:3 );
end
D > 0 のとき
else if D = 0 then begin
D = 0 のとき
writeln('x =', - b / (2*a):8:3 );
end
else begin
writeln( 'x =', - b / ( 2*a ):8:3, ' + ', sqrt(-D) / (2*a):8:3, 'i ,',
- b / (2*a):8:3, ' - ', sqrt(-D) / (2*a):8:3, 'i');
end;
D < 0 のとき
readln
end.

•35

36.

2次方程式 実行結果の例 •36

37.

例題5.直線と原点の距離 • 平面: ax + by + c = 0 と原点との距離を求めるプ ログラムを作成する • 但し,a = 0 かつ b = 0 のときには計算を行わない d= c a +b 2 2 •37

38.

直線と原点の距離 y o x 直線 ax + by + c = 0 •38

39.

program sum; var a, b, c, d: real; begin write('Please Enter a: '); readln(a); write('Please Enter b: '); readln(b); write('Please Enter c: '); readln(c); if ( a = 0 ) and ( b = 0 ) then begin writeln('a=0 and b=0!' ); end 条件が成り立つ場合に 実行される部分 else begin d := abs( c ) / sqrt( a * a + b * b ); writeln('d =', d:8:3 ); end; 条件が成り立たない 場合に実行される部分 readln end. •39

40.

直線と原点の距離 実行結果の例 •40

41.

条件式 ( a = 0) and ( b = 0 ) a=0 である b=0 である かつ •41

42.

論理演算 • A and B A かつ B • A or B A または B • not A Aでない 真,偽に関する論理的な演算を行う. •42

43.

演習1.論理式に関する演習 (1)2次方程式 ax2 + by + c = 0 の解を求めるプ ログラムを作りなさい 例題4のプログラムを書き換えて,a=0 の場合にも,正 しく解を求めるようにしなさい (2)平面 ax + by + cz + d = 0 と原点の距離を求 めるプログラムを作りなさい •43

44.

演習(1)で行うこと • a = 0 かつ b = 0 かつ c = 0 のとき すべての x が解である • a = 0 かつ b = 0 かつ c ≠0 のとき 解なし • a = 0 かつ b ≠ 0 のとき x=-c/b •44

45.
[beta]
演習(1)で行うこと
• a = 0 かつ b ≠ 0 のとき
x=-c/b
この部分のプログラム例(正解は1つでは無い)

else if ( a = 0 ) and ( b <> 0 ) then begin
writeln ('x =', - c / b:8:3 );
end

•45