普通の言葉で書くと書きにくいので、手順を書くための特別の書き方を導入する。 ただし、以下では、実際のプログラムほど厳密には書かない。
メモリを抽象化して、変数というものを考える。
ジャンプ命令を抽象化して、条件付き処理を考える。
if 条件 then 条件が成立した場合に行う操作 else 条件が成立しない場合に行う操作 endif |
問題: 今年の八十八夜は何月何日か。ただし今年の立春は2月4日であり、今年は平年である。(とする!)
<残り日数> ← 4+88-1
if <残り日数> >28 (2月の日数)
then <残り日数> ← <残り日数>-2月の日数
if <残り日数> >31 (3月の日数)
then <残り日数> ← <残り日数>-3月の日数
if <残り日数> >30 (4月の日数)
then <残り日数> ← <残り日数>-4月の日数
if <残り日数> >31 (5月の日数)
then 6月以降の処理
else "5月" <残り日数> "日" と表示
endif
else "4月" <残り日数> "日" と表示
endif
else "3月" <残り日数> "日" と表示
endif
else "2月" <残り日数> "日" と表示
endif
|
プログラムのデモ(実演する。自分で動かさなくてよい。)
アドレスでのメモリの指定を抽象化した配列というものを考える。
(前のアドレスに戻るような)ジャンプ命令を抽象化して、反復処理というものを考える。
while 条件 do 繰り返し実行する処理 done |
配列と反復を使うと八十八夜問題は次のように書ける。
<残り日数> ← 4+88-1 m ← 2 while <残り日数> >daymonthm do <残り日数> ← <残り日数> - daymonthm m ← m+1 done |
プログラムのデモ(実演する。自分で動かさなくてよい。)
プログラムを実行するわけではないので比較的自由に書いてよいが、以下に目安を示す。
練習0: 以下のそれぞれを考えてみよ。
i ← 0 while i <= 3 do i ← i+1 (1) done |
i ← 0 j ← 0 while i <= 3 do j ← j+ 2*i + 1 i ← i+1 (1) done |
if n > m then r ← n else ここに何を入れたらよいか? endif ...nとmの大きい方の値がrに入っている。 |
t2 ← f - 2*h ... fから足2本分を除くと亀の足2本が残る t ← ここに何を入れたらよいか? c ← h - t ... 鶴の数 |
ns ← 1 i ← 1 done (1) i ← i+1 (2) while i <= n do (3) ns ← ns*i (4) |
i ← 1
while i <= 9 do
j ← 1
while j <= 9 do
i*jを出力する。
ここに何を入れたらよいか?
done
改行する。
ここに何を入れたらよいか?
done
|
if yを4で割った余りが0
then
if ここに何を入れたらよいか?
then
if yを400で割った余りが0
then
閏年と表示
else
平年と表示
endif
else
閏年と表示
endif
else
平年と表示
endif
|
p ← 1 i ← 1 while i <= クラスの学生数 do if ここに何を入れたらよいか? then p ← p+1 endif i ← i+1 done 自分はp番目 |
以下のプログラムを考えてみよ。(記述できればよく、実行しなくて良い。)
プログラムを書けるようになるには訓練が必要である。 訓練すればまず間違いなくかなりのものは書けるようになる。 →「情報科学」の招待
以下、範囲外の話題。
報道によると「2005年11月17日に国土交通省が、千葉県にある建築設計事務所の元一級建築士が構造計算書を偽造していたことを発表し、その後の調査で多くのホテルや分譲済みマンションの耐震強度が大幅に不足していたことが明らかとなるという事件があった。」ということである。 この件では「建物の建築確認・検査を実施した行政および民間の指定確認検査機関が見抜けず」とされて、指定確認検査機関が非難を受けたが、(偽造された)紙の構造計算書を検査するのと、(偽造された)電子的な構造計算データを検査するのとどちらが楽か考察してみよ。
2000年問題(西暦を下2桁でしか記録してない(19xxのxxだけ保持しているということ)プログラムは、2000年を1900年と思って誤動作する問題)の時、 高度情報通信社会推進本部決定(平成11年10月29日(金))では、 「中小企業の方へはこれまでも2000年問題に関する危機管理計画の策定をお奨めしてきておりますが、必要なデータのプリントアウト等によるバックアップの確保や社内の緊急体制の整備など危機管理の対応について再度ご確認ください。」 とされていた。(下線は私が挿入した。) 仮に2000年にプログラムが誤動作して全てのデータを消去してしまった場合に、この決定に従って2000年になる前のデータの(紙の)プリントアウトを持っていた場合と同じデータを電子媒体(ただし、記録した後でPCからは外しておく)で持っていた場合の違いを考察せよ。 仮に誤動作せず、バックアップを消去する必要が生じた場合の処理の容易さについても考察せよ。
情報システムを構築する場合は、いきなりプログラムを書くのではなく、まず、どのような動作をするものなのかを決める仕様(スペック,specification)というものを定め、それからその仕様に従ってプログラムを書いていく。 平成17年度の会計検査院法第30条の3の規定に基づく報告書の 「各府省等におけるコンピュータシステムに関する会計検査の結果について」によると、 電子政府構築計画に基づく「業務・システム最適化計画」の仕様書(ここでは機能情報関連図)のなかで、情報の流れの記載に不整合を生じている箇所が47最適化計画のなかの831箇所にあったそうである。 このような不整合があったままプログラムの作成を始めるとどのような問題が生じるのか考察せよ。 また、このように多数の不整合が生じた理由を想像してみよ。