練習問題の解答例

プログラミング言語論
第2回
練習問題解答例
情報工学科 篠埜 功
練習問題1
以下のプログラム断片の制御フローを図示せよ。
if x > 0 then x := x – 1
else if y > 0 then y := y – 1
else y := y + 1
解答例
if x > 0 then x := x – 1
else if y > 0 then
y := y – 1
else y := y + 1
真
x := x-1
偽
x>0
真
y := y-1
y>0
偽
y := y+1
練習問題2
以下のプログラム断片の制御フローを図示せよ。
while x>0 do
begin
if x=3 then
break;
y := y + 1;
x := x - 1
end
解答例
while x>0 do
begin
if x=3 then
break;
y := y + 1;
x := x - 1
end
真
偽
y := y+1
x := x-1
x=3
x>0
真
偽
練習問題3
以下のプログラム断片の制御フローを図示せよ。
while x>0 do
begin
while y>0 do
begin
if x=3 then
break;
z := z + 1;
y := y - 1
end;
x := x – 1
end
解答例
while x>0 do
begin
while y>0 do
begin
if x=3 then
break;
z := z + 1;
y := y - 1
end;
x := x – 1
end
真
偽
x>0
偽
真
y>0
真
x=3
偽
z := z+1
x := x-1
y := y-1
練習問題4
以下のプログラム断片の制御フローを図示せよ。
while x>0 do
begin
while y>0 do
begin
if x3 then
begin
y := y – 1;
continue
end
z := z + 1; y := y - 1
end;
x := x – 1
end
解答例
while x>0 do
begin
while y>0 do
begin
if x3 then
begin
y := y – 1;
continue
end
z := z + 1;
y := y - 1
end;
x := x – 1
end
真
偽
真
y>0
偽
z := z+1
y := y-1
x := x-1
x>0
偽
x3
真
y := y-1
練習問題5
以下のプログラム断片の制御フローを図示せよ。
x := 10;
sum := 0;
L: sum := sum + x;
x := x – 1;
if x > 0 then
goto L
解答例
x := 10;
sum := 0;
L: sum := sum + x;
x := x – 1;
if x > 0 then
goto L
x := 10
sum := 0
sum := sum + x
x := x – 1
x>0
練習問題6
以下のプログラム断片の制御フローを図示せよ。
y := 3;
case x of
1 : y := 1;
2 : y := x * 2;
3 : if z = 0 then
y := y * y
else
y := y * y * y
end
解答例
y := 3;
case x of
1 : y := 1;
2 : y := x * 2;
3 : if z = 0 then
y := y * y
else
y := y * y * y
end
y := 3
1
y := 1
x
3
2
真
y := x*2
y := y*y
z=0
偽
y := y*y*y
練習問題7
以下のプログラム中の2か所のif文および内側の
while文の入口、出口はそれぞれいくつか。
while x>0 do
begin
while y>0 do
begin
if x=3 then
break;
L: z := z + 1;
y := y - 1
end;
x := x – 1;
if x = 2 then goto L
end
解答例
while x>0 do
begin
while y>0 do
begin
if x=3 then
break;
L: z := z + 1;
y := y - 1
end;
x := x – 1;
if x = 2 then goto L
end
内側のwhile文は
入口2つ出口1つ
真
偽
x>0
偽
真
y>0
入口1つ出口2つ
真
x=3
偽
z := z+1
y := y-1
x := x-1
偽
x=2
真
入口1つ出口2つ