---
title: pe-3. 条件分岐と場合分け
tags:  #プログラミング #pascal #if #条件分岐  
author: [kunihikokaneko](https://www.docswell.com/user/6674398749)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/8GJW1QZ2E2.jpg?width=480
description: （Pascal プログラミング入門） URL: https://www.kkaneko.jp/cc/pascal/index.html
published: February 03, 22
canonical: https://www.docswell.com/s/6674398749/56J1PK-2022-02-04-001139
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/8GJW1QZ2E2.jpg)

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


# Page. 2

![Page Image](https://bcdn.docswell.com/page/W4EZPW14J3.jpg)

前回のまとめ
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


# Page. 3

![Page Image](https://bcdn.docswell.com/page/KY76MGLGEV.jpg)

内容
例題１．平方根の計算
例題２．対数の計算
if文，else 文，条件分岐，比較演算
例題３．定形郵便物の料金
例題４．２次方程式
多分岐
例題５．直線と原点の距離
比較演算と論理演算の組み合わせ
•3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/5G75ZV1XJ4.jpg)

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


# Page. 5

![Page Image](https://bcdn.docswell.com/page/V9J2R31Q7R.jpg)

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


# Page. 6

![Page Image](https://bcdn.docswell.com/page/5DEYD1ZYEM.jpg)

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


# Page. 7

![Page Image](https://bcdn.docswell.com/page/2VJN623RJ8.jpg)

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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/GYE9L19Z73.jpg)

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


# Page. 9

![Page Image](https://bcdn.docswell.com/page/5GE8X4DYJD.jpg)

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


# Page. 10

![Page Image](https://bcdn.docswell.com/page/MLEL86M97R.jpg)

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


# Page. 11

![Page Image](https://bcdn.docswell.com/page/54JM65YVEW.jpg)

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


# Page. 12

![Page Image](https://bcdn.docswell.com/page/ZPJRP39WE9.jpg)

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


# Page. 13

![Page Image](https://bcdn.docswell.com/page/NPEX34QVJX.jpg)

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


# Page. 14

![Page Image](https://bcdn.docswell.com/page/63EKYZ95JD.jpg)

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


# Page. 15

![Page Image](https://bcdn.docswell.com/page/4L739DW175.jpg)

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


# Page. 16

![Page Image](https://bcdn.docswell.com/page/V87DGPKK7G.jpg)

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


# Page. 17

![Page Image](https://bcdn.docswell.com/page/4VJP3NK3E8.jpg)

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


# Page. 18

![Page Image](https://bcdn.docswell.com/page/L2EV4KVNJQ.jpg)

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


# Page. 19

![Page Image](https://bcdn.docswell.com/page/Z57G1QL5EL.jpg)

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


# Page. 20

![Page Image](https://bcdn.docswell.com/page/V4EQDKYLJP.jpg)

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


# Page. 21

![Page Image](https://bcdn.docswell.com/page/DKJ4ZPW571.jpg)

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


# Page. 22

![Page Image](https://bcdn.docswell.com/page/PLE1R9Y2EG.jpg)

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


# Page. 23

![Page Image](https://bcdn.docswell.com/page/8GEW1QG272.jpg)

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


# Page. 24

![Page Image](https://bcdn.docswell.com/page/W47ZPWL4E3.jpg)

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


# Page. 25

![Page Image](https://bcdn.docswell.com/page/KYJ6MGWG7V.jpg)

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


# Page. 26

![Page Image](https://bcdn.docswell.com/page/5GJ5ZVMXE4.jpg)

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


# Page. 27

![Page Image](https://bcdn.docswell.com/page/4LE39DW4E5.jpg)

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


# Page. 28

![Page Image](https://bcdn.docswell.com/page/V8EDGPK5EG.jpg)

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


# Page. 29

![Page Image](https://bcdn.docswell.com/page/4V7P3NKDJ8.jpg)

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


# Page. 30

![Page Image](https://bcdn.docswell.com/page/L2JV4KVG7Q.jpg)

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


# Page. 31

![Page Image](https://bcdn.docswell.com/page/Z5EG1Q1DJL.jpg)

定形郵便物の料金
A, B, C のうちどれか１つを実行
Yes
x &lt;= 25
No
writeln(&#039;80 Yen&#039;);
Ａ
Yes
x &lt;= 50
No
writeln(&#039;Too heavy&#039;);
writeln(&#039;90 Yen&#039;);
Ｂ
Ｃ
•31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/V4JQDKDX7P.jpg)

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


# Page. 33

![Page Image](https://bcdn.docswell.com/page/DK74ZPZ2E1.jpg)

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


# Page. 34

![Page Image](https://bcdn.docswell.com/page/PLJ1R9RKJG.jpg)

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


# Page. 35

![Page Image](https://bcdn.docswell.com/page/8GJW1Q1PE2.jpg)

program sum;
var a, b, c, D: real;
begin
write(&#039;Please Enter a: &#039;);
readln(a);
write(&#039;Please Enter b: &#039;);
readln(b);
write(&#039;Please Enter c: &#039;);
readln(c);
D := b * b - 4 * a * c;
if D &gt; 0 then begin
writeln(&#039;x =&#039;, (- b + sqrt(D))/ (2*a):8:3, &#039;, &#039;, (- b - sqrt(D))/ (2*a):8:3 );
end
D &gt; 0 のとき
else if D = 0 then begin
D = 0 のとき
writeln(&#039;x =&#039;, - b / (2*a):8:3 );
end
else begin
writeln( &#039;x =&#039;, - b / ( 2*a ):8:3, &#039; + &#039;, sqrt(-D) / (2*a):8:3, &#039;i ,&#039;,
- b / (2*a):8:3, &#039; - &#039;, sqrt(-D) / (2*a):8:3, &#039;i&#039;);
end;
D &lt; 0 のとき
readln
end.
•35


# Page. 36

![Page Image](https://bcdn.docswell.com/page/W4EZPWP6J3.jpg)

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


# Page. 37

![Page Image](https://bcdn.docswell.com/page/KY76MGMLEV.jpg)

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


# Page. 38

![Page Image](https://bcdn.docswell.com/page/5G75ZVZMJ4.jpg)

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


# Page. 39

![Page Image](https://bcdn.docswell.com/page/V9J2R3RR7R.jpg)

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


# Page. 40

![Page Image](https://bcdn.docswell.com/page/5DEYD1D5EM.jpg)

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


# Page. 41

![Page Image](https://bcdn.docswell.com/page/2VJN6264J8.jpg)

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


# Page. 42

![Page Image](https://bcdn.docswell.com/page/GYE9L1L473.jpg)

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


# Page. 43

![Page Image](https://bcdn.docswell.com/page/5GE8X4XVJD.jpg)

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


# Page. 44

![Page Image](https://bcdn.docswell.com/page/MLEL868R7R.jpg)

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


# Page. 45

![Page Image](https://bcdn.docswell.com/page/54JM656PEW.jpg)

演習（１）で行うこと
• a = 0 かつ b ≠ 0 のとき
x=-c/b
この部分のプログラム例（正解は１つでは無い）
else if ( a = 0 ) and ( b &lt;&gt; 0 ) then begin
writeln (&#039;x =&#039;, - c / b:8:3 );
end
•45


