Open17

昭和48年の第1種情報処理技術者試験の問題を読む (スクラップ)

ooharabucyouooharabucyou

ふとしたことから、昭和48年度 (1973年) に行われた国家試験、第1種情報処理技術者試験の問題を手に入れたので、引用していきつつ、当時のコンピューター技術者教育に思いを馳せて見ようと思う。
記事にしたかったのだが、不正確な情報が混ざる可能性があるのため、一旦はスクラップとしてまとめて、国立国会図書館なので正確な情報を調べた上で、最終的に記事にまとめていきたいと思っている。

なお、過去問題の入手元としては、古本屋で手に入れたオーム社「詳解 第1種情報処理技術者既往問題集 (第2版)」である。これは、昭和49年 (1974年) に出版された本である。
なお、オーム社は、今でも情報処理技術者試験の教科書や問題集を発売する老舗中の老舗である。

問題集部分については、流石に著作権上引用が難しいと思われるので、実際に出題された過去問部分に限り引用し、解答の解説はオリジナルで作っていく。

ooharabucyouooharabucyou

正直ここらへんについては、出題範囲とか、当時の標準スキル感について調べられていないので、適当なことを言っている可能性もあるのでご注意ください。

午前問題の傾向

現在の応用情報技術者試験でいうと、80問四肢択一というシンプルな形式であり、制限時間は150分となっている。
一方、この試験は35問で、2時間と一見少ないように見える。

ただし、四肢択一ではなく、複数の正しいものを選択する形式や、大問の中に穴埋めの小問がある形式などが紛れ込んでいるほか、問12までは必須問題、13〜22は5問選択、23〜29については5問選択。30〜35問は2問選択という形式になっており、得意なものや業務に関連するものを答えるというものになっている。

このため、今のように過去問でやったからと反射神経的に解答できる問題は少なく、よく読んで解く必要のある問題が多い傾向にある。
肝心の問題の内容はというと、PART図を読み取るといった、今と全く変わらない安心感のものもあれば

  • 磁気テープ前提の補助記憶装置
  • パンチカードによるデータ入力
  • 主記憶装置がより少ない状況下での処理 (当時のメモリ容量はメインフレームで8KBという世界)
    • まだページングは主流じゃない?
    • オーバーレイ方式に関する問題
  • 統計
  • 線形代数
  • 微分積分
  • 論理
  • 会計・簿記
  • 英語
  • 技術史

あたりが今とは異なる問題傾向と言える。もちろん今でも出てくるような分野があるが、今よりもディープな内容で、例えば会計分野でいうと、日商簿記3級くらいの知識が必要な問題がある。当時の歴史を考えつつ読み解いていく。

ooharabucyouooharabucyou

解答必須

問5 次の記述中の [ ] に入れるべき適当な軸を解答群の中から選べ。

有効長が720メートル (2400フィート), 記録密度32列/ミリメートル (800BPI), 9トラックの磁気テープがある。このテープをブロック間隔 (IBG) が15ミリメートル(3/5インチ)の磁気テープ装置にかけて作業している。1レコードが320字の固定長レコードをブロック化せずにそのまま記録していけば, このテープ1巻に約 [ a ] レコード記録できる。30レコードを1ブロックとしてまとめて書き出していけば, ブロック化しない場合に比べて, 同じテープに約 [ b ] 倍のレコードを記録できる。

解答群

ア 70000
イ 28000
ウ 17000
エ 7000
オ 2800
カ 1700
キ 30
ク 4.2
ケ 2.4


磁気テープの問題。今でも磁気テープはバリバリ使われており、むしろバックアップ戦略の観点からかなり重要な位置づけとなっている。ただし、近年の情報処理技術者試験においては、磁気テープ自体の問題は少なくなっており、磁気テープを利用したバックアップ戦略の話題は出てきても、磁気テープの長さと密度に関しての問題は、ここ数十年見かけなくなっている。自分が商業高校生の頃 (15年くらい前) はまだ現役なタイプの問題だった記憶があるが、実習などでも磁気テープを使うことはなかった。

BPI = Bit per Inch のこと。1インチあたりどれくらい保存できるか。
IBG = Inter Block Gap のこと。データブロックごとの隙間に必要な長さ。もしブロック化しないならレコードごとにこの隙間が必要になる。

インチとかフィードとか書いてあるけど、ポンドヤード法滅びるべし。ということで見ないことにする。
1mmの間に32列、9行のセルがあるシートがあることを想像して、そのうち1行は「パリティビット」として誤り訂正用に利用する。このため、1mmの間には、32bytes (32x8=256bit) 書き出せることになる。

[ a ] について、ブロック化をしない状態の場合、1レコードごとにIBGを用意する必要があり、1レコードに320 / 32 = 10mm に加えて、IBG 15mm が消費されることになる。
このため、720000mm のテープの場合、レコードの前にもIBGが必要なため、 (720000mm - 15mm) / 25mm = となり、28899.4レコード。つまり、解答群の中で適当なものは となる。

[ b ] について、ブロック化をする場合は、30レコードはギチギチにデータを詰めていき、その後にIBGを入れることになるので、1ブロックは30レコードで300mm消費する。この前後に、IBGを入れることとなるので、(720000mm - 15mm) / 315mm = 2285.6ブロック格納できる。

切り捨てするとして、実際に格納できるレコード数は 2285 * 30 = 68550 となるので、[ a ] で出した数に比べると、2.37倍。つまり、解答群の中で適当なものは となる。

--

磁気テープの歴史

https://museum.ipsj.or.jp/computer/device/magnetic_tape/index.html

現在の磁気テープは、数10TBも書くことができると考えるとものすごい技術の進歩である。

https://www.fujifilm.com/jp/ja/business/data-management/datastorage/ltotape/specifications

現在発売されているもので最も大容量なものは、8,960トラック。転送レートは400MB/秒。
そもそも、カートリッジの中に、EEPROMが内蔵されていたりと、高速化のための技術も進んでいる。

ooharabucyouooharabucyou

選択問題

問13 次の記述中の \fbox{ } に入れるべき適当な字句を解答群の中から選べ。
次の連立方程式,

\left\{ \, \begin{aligned} x + 2y &= l \\ 3x + 4y &= m \\ 5x + 6y &= n \end{aligned} \right.

が解を持つための必要十分条件は, l, m, n, の間に \fbox{ a } の関係があればよい。
一般に連立一次方程式 Ax = b が解を持つための必要十分条件は, 行列Aの階数 r(A)と行列 [Ab] の階数 r([Ab]) との間に次の式が成り立つことである。
すなわち

r(A) \fbox{ b } r([Ab])

上記の例の方程式の場合, l, m, n, の間に a の関係が成り立てば,

\begin{aligned} r(A) &= \fbox{ c } \\ r([Ab]) &= \fbox{ d } \end{aligned}

である。

a に関する解答群

l < m < n
l = m = n
l + 1 = m= n - 1
2m = l + n
2m \neq l + n

b に関する解答群

>
\geqq
=
\leqq
<

c, dに関する解答群

ア 0
イ 1
ウ 2
エ 3


これぞ今は出ない問題。数学をやっていない諸氏には、ありがたいことに選択問題なのだが13〜22問までの10問については、5問選択する必要がある。昭和48年度では、

13問 = 数学 (この問題)
14問 = 数学
15問 = 技術英語
16問 = 技術英語
17問 = プログラミング言語について
18問 = 技術史
19問 = 簿記
20問 = 管理会計
21問 = 確率・統計学
22問 = PART図 (プロジェクト管理)

となっており、数学と英語が苦手でも、なんとかなるような作りにはなっている。このため、数学が苦手な方は、簿記なり管理会計で点数を補填していく必要がある。
とりあえず、ここでは問13を解いてみる。

ときやすい b から解いていく。そもそもの前提として、連立一次方程式が唯一の解があるには、r(A) = r([Ab]) である必要がある。(この辺は、線形代数を知っているかどうかが問われている気がする。)
このため、これは となる。

https://oguemon.com/study/linear-algebra/solution/

また、求めたい解はx, y なので、r(A) = 2 であり、c, d は 自動的に になる。

l, m, n の関係性については、r([Ab]) = 2 であることを考えると、[Ab] が正則行列ではないことがわかる。つまり、|[Ab]| = 0 である必要があり、これを解くことによって a の解がわかる。

\begin{vmatrix} 1 & 2 & l \\ 3 & 4 & m \\ 5 & 6 & n \end{vmatrix} = 0

サラスの方法使ってサラーっと。

\begin{aligned} 4n + 10m + 18l - 20l - 6m - 6n &= 0 \\ - 2n + 4m - 2l &= 0 \\ -n + 2m -l &= 0 \\ 2m &= l + n \end{aligned}

ということで、a の答えは となる。

ooharabucyouooharabucyou

問14 次の記述中の \fbox{ } に入れるべき適当な字句を回答群の中から選べ。
関数表(常用対数表)を, 差分をとることによりチェックする。

x \log x
2.0 0.301
2.2 0.342
2.4 0.380
2.6 0.415
2.8 0.448
3.0 0.477
3.2 0.505
3.4 0.531
3.6 0.556
3.8 0.580

誤りは, x=\fbox{a}に対する\log xであって,その小数点以下3けた目の正しい数値は\fbox{b}でなければならない。

aに関する解答群

ア 2.0
イ 2.2
ウ 2.4
エ 2.6
オ 2.8
カ 3.0
キ 3.2
ク 3.4
ケ 3.6
コ 3.8

bに関する解答群

ア 0
イ 1
ウ 2
エ 3
オ 4
カ 5
キ 6
ク 7
ケ 8
コ 9


なんというか、解答群が機能してないじゃないですか! (ほぼ記入式) という感じのする問題。関数電卓を使えばらくらくだが、無いとしたら面倒な感じになる。
底を10にして表の log x にあるものを指数にして近似値を求めつつ、xからもっとも外れているものを求めていく感じだろうか。。

答えは、a が , b が となっている。

ooharabucyouooharabucyou

問15 下記の説明文に該当する語句を解答群から選べ。

a: A small set of instructions in a main program for temporary transfer of control to a closed subroutine.
b: To print out, for program checkout, contents of machine registers and/or specified memory locations during program execution.
c: Special mechanism included in central processing units which enable computers to run programs originally written for different type of machines.
d: A system having multiple central processing units so that multiple number of programs may be in execution concurrently within the system.
e: A programming technique employed when total memory requirement for a program is greater than physically available size.

解答群

ア multiprogramming system
イ storage allocation
ウ overlay
エ multiprocessor systems
オ procedure
カ emulator
キ calling sequence
ク snapshot


すごく英語。。今となっては、このタイプの問題は皆無。当時は、アメリカから輸入されたようなマシーンを動かすことが多かったので、ドキュメント読む能力を問われたのかなと。英文自体はそこまで難しいものではない。
a は、 calling sequence 。おそらくCOBOLとかでいうと、CALL文のことで、ほかのプログラムに処理を委ねるような状況。
bは、 snapshot。デバックとかに使うためのやつ。
cは、 emulator。これはまんまですね。ほかのマシン用に書かれたプログラムを動かしちゃうというやつ。
dは、 multiprocessor systems。
eは、 overlay。メモリ以上のプログラムを動かすときのテクニックの1つで、今はOSによって提供されるページングによって自動的に行われるが、当時は必要なものを分をロードしたり、アンロードする必要が多かった。

ooharabucyouooharabucyou

問16 下記の英文の意味に最も近いものを解答群の中から2つあげよ。

All of the major computer manufacturers set out to build large multiprogramming systems for their new equipment, and they all ran into serious difficulties and delays. The problems were essentially the same for all of them. There were too much system code that had to be resident in central memory and too much computer time used in system overhead functions. Attempt to reduce system overhead usually had the effect of increasing the amount of resident system code, thereby reducing the amount available for user jobs. The obvious remedy was to require larger and larger central memories, but core memory was expensive, and the size of core required in order to run the operating system efficiently might price the computer out of its market.

解答群

ア オペレーティングシステムが消費する計算機時間をより少なくするためには, ユーザのジョブの数に制限を加えることが必要となった。
イ 多重プログラミングができるようなオペレーティングシステムは効率も高く, したがって計算機のし上における競争力はより高かった。
ウ オペレーティングシステムのオーバーヘッドをへらそうとすると,ユーザにとって使用可能な主記憶領域の領域がせまくなることが多かった。
エ 主要メーカーが開発に着手した多重プログラミングは, みな本質的に同じ種類の問題を対象とするものであった。
オ オーバーヘッドの少ないオペレーティングシステムはより多くの主記憶装置を専有するので, 計算機の価格もあがり市場競争力よりも低くなった。


受験みたいな英語。受験やったことないけど。
答えは ,

ooharabucyouooharabucyou

問17 プログラム言語の仕様には標準言語仕様と特定の処理系のための言語仕様との2種類がある。まず学会や産業界などの公的な組織によってその言語の標準仕様が制定公表されたのち, 作成者によりここの処理系に対する言語仕様が決められたものを解答群の中から2つ選べ。

ア FORTRAN
イ BASIC
ウ COBOL
エ SNOBOL
オ ALGOL60
カ LISP


知らねー。というか、全く知らない言語が出てきている。それぞれのWikipediaでもみてみる

https://ja.wikipedia.org/wiki/FORTRAN

https://ja.wikipedia.org/wiki/BASIC

https://ja.wikipedia.org/wiki/COBOL

https://ja.wikipedia.org/wiki/SNOBOL

https://ja.wikipedia.org/wiki/ALGOL

https://ja.wikipedia.org/wiki/LISP

答えは、COBOL, ALGOL60 ということで ,
COBOL の大本の仕様は、アメリカ国防総省なんですねー。他の言語も標準化自体は今は進んでいるものの、この試験が1973年時点でのことを記していることに留意したい。

ooharabucyouooharabucyou

問18 下記の人名に最も関係の深いものを解答群の中から選べ。

a: N. Chomosky
b: C. Babbage
c: M. Wilkes
d: A. Turing
e: C. Shannon
f: J. von Neumann
g: J. McCarthy

解答群

ア 決定表 (デシジョンテーブル)
イ リスト処理概念の定式化
ウ プログラム内蔵式
エ ディファレンシャルエンジン
オ 並列処理の数学的モデル
カ パラメトロン
キ マイクロプログラミング
ク 情報理論
ケ 言語の数学的理論
コ オートマトン理論


これも現在は全く出ないタイプの問題。技術史的な内容。

a: ノーム・チョムスキー

言語の数学的理論

https://ja.wikipedia.org/wiki/ノーム・チョムスキー

あれ? チョムスキーって言語学者じゃね? という感になったが、成り行きでコンピューターサイエンスに貢献した人物だそうだ。

https://techracho.bpsinc.jp/hachi8833/2017_12_27/49522

https://zenn.dev/yucatio/articles/0b554e59db0158

b: チャールズ・バベッジ

ディファレンシャルエンジン

https://ja.wikipedia.org/wiki/チャールズ・バベッジ#:~:text=チャールズ・バベッジ(Charles Babbage、,な計算機を考案した。&text=「コンピュータの父」と言,な設計に到達した。

割とたくさんいる「コンピューターの父」の1人。1822年に機械式の関数電卓を作った。その名前が、階差機関 (difference engine) となっている。ここでの選択肢がなぜ、ディファレンシャルエンジンとなっているのかはよくわからない。ディファレンシャルギアと混在していたんだろうか。

c: モーリス・ウィルクス

https://ja.wikipedia.org/wiki/モーリス・ウィルクス

マイクロプログラミング

d: アラン・チューリング

https://ja.wikipedia.org/wiki/アラン・チューリング

オートマトン理論

みんな大好きアラン・チューリング。アラン・チューリングといえば、オートマトン理論。

http://imitationgame.gaga.ne.jp/

ところでアラン・チューリングを題材にした映画がよかった。思わず、イギリスのブレッチリー・パークに行くくらい良かった。Netflix にあるから見るべし。

e. クロード・シャノン

情報理論

https://ja.wikipedia.org/wiki/クロード・シャノン

f. ジョン・フォン・ノイマン

プログラム内蔵式

ノイマン型コンピューターのフォン・ノイマン。今のコンピューターの基礎。

https://ja.wikipedia.org/wiki/ジョン・フォン・ノイマン

g. ジョン・マッカーシー

リスト処理概念の定式化

LISPのお父さん。そもそもLISPはリスト処理言語

https://ja.wikipedia.org/wiki/ジョン・マッカーシー


ぶっちゃけ、4人くらいしか正解できなかった。。

ooharabucyouooharabucyou

問19 次の取引の仕訳を考え, 正しいものを解答群の中から選べ。

a 山田商店に対する売掛金20万円が回収不能となった。ただし, 貸倒引当金残高はなかった。
b はじめての決算で, 期末売掛金残高1,000万円に対して, 3%の引当金を設けた。
c 前期から繰り越された中村商店に対する売掛金10万円が貸倒れとなった。ただし, 貸倒引当金残高は20万円ある。
d 期末の売掛金残高500万円に対し, 20万円の貸し倒れ引当金を設けた。ただし, 貸倒引当金残高は10万円ある。

解答群

借方 貸方
売掛金 貸倒引当金

借方 貸方
貸倒償却 売掛金

借方 貸方
貸倒引当金 売掛金

借方 貸方
貸倒償却 貸倒引当金

借方 貸方
貸倒引当金 貸倒償却

借方 貸方
貸倒引当金 貸倒引当金戻入
貸倒償却 貸倒引当金

※実際はTフォームによる表現のため、一部改変している


簿記3級くらい持っているならかんたんに解ける問題。ただし、「貸倒引当金繰入」「貸倒損失」を使うパターンが多いので、「貸倒償却」についてはあまり見かけなくなった気がする。

a
b
c
d

現状の応用情報には出ないと思われる問題。どちらかというと、業務ドメインの知識だったんだろうか? 数学・英語できなくてもこっちで攻めていく感じでも良さそうだ。

ooharabucyouooharabucyou

問20 次の記述中の [ ] に入れるべき適当な字句を回答群の中から選べ。

企業の全体的な利益目標の設定ならびにその達成の可能性を検討する手段として, 損益分岐点分岐表がある。下図に示すような関係として, 各操業度における売上高と費用の大きさを1つの図の上に示したもので, 通常, 売上高と費用は操業度と線形の関係にあるものとして仮定して作られる。売上高と総費用が一致する点Bを, 損益分岐点と呼んでいる。

いま, 操業度を売上数量(生産数量と等しいと仮定する)で表し, それをSとする。製品1単位当たりの変動費をv, 単位当たりの売価をp, 計画期間中の固定費をFとすると, 損益分岐点Bでの操業度S_1は、[ a ] である。さらに, 目標利益をGとすると目標利益を達成するために必要な操業度S_2は、 [ b ] である。
目標利益を税引後の利益とすると, 法人税率tを一定として仮定すれば, 必要な操業度S_3は [ c ] である。なお, [ d ] は、製品1単位当たりの限界利益とか貢献利益と呼ばれるものである。

a, b, c に関する解答群

ア F / ( p - v )
イ F (1 / v - 1 / p)
ウ (F +G) / (p - v)
エ (F + G) / (1 / v - 1 / p)
オ (F + G) / {( 1 / v - 1 / p)(1 - t)}
カ {F(1 - t) + G} / {(p - v)(1 - t)}
キ {F + G(1 - t)} / {(p - v)(1 - t)}
ク {F + G(1 - t)} / {(1 / v - 1 / p)(1 - t)}

d に関する解答群

ア 1 - v / p
イ p / v - 1
ウ 1 / v - 1 / p
エ p - v


今でも変動費・固定費から、損益分岐点の売上高などを出す問題は出るが、より大学のテストで出るような形式の問題になっている。

よく落ち着いて読めば解ける。

a

損益分岐点の操業量は固定費 / (売価 - 変動費)で決まる
(売価 - 変動費)で限界利益になるが、固定費分を回収するためにいくつ商品を売ればいいかというのがわかるため、この式になる。

b

同様にGまで売るにはということで、アの式を少しいじれば良い。
(固定費 + 目標利益) / (売価 - 変動費)

c

ぱっと見難しそうだが、理屈で数式を組み立てることができる。
目標利益は税引き後の金額なので、税引き後の目標利益G = 税引前利益G2 - 税引前利益G2 * 利率t を想定する。G2は単純に、売上高 - 変動費 - 固定費で求められるので、
(pS_3 - vS_3 - F) - (pS_3 - vS_3 - F)t = G のような式ができる。

これを、S_3 を求めるような式に変換していくと、カの式になる。

d

a の解答ですでに使っている。

ooharabucyouooharabucyou

問23から、問29については、7問のうち5問解答する必要がある。

問23 = オンラインシステム
問24 = 電算計算室の運用
問25 = デシジョンテーブルとフローチャート
問26 = プログラムの品質
問27 = 穿孔(せんこう)カードの誤りの発見
問28 = 超越方程式の根を求める場合に結果が出ない場合の対処
問29 = 新人プログラマがアセンブラによるサブルーチンを作成する場合の注意事項

見慣れない言葉も出てきており、どれも興味深い! 23, 25は現在の応用情報でも通用する内容だったため、あまり見慣れない24, 26, 27, 28, 29 あたりをここで取り扱いたい。

ooharabucyouooharabucyou

問24 電子計算室の運用に関する次の記述中の [ ] に入れるべき適当な字句を解答群の中から選べ。
多重プログラミングによる処理のオペレーションを能率よく行うための体制としては [ a ] が望ましい。このために必要なプログラム上の工夫としては, エラーの表示や [ b ] の組み込みなど、オペレータに対する指示を適切にする他, プログラムのテストやデバッグはプログラム室などにおいて行うことが原則となるので, [ c ] の使用をはかることや各装置の使用時間を集計して [ d ] 改善の基礎資料とするため [ e ] の活用が必要である。

解答群

ア メッセージ
イ リランポイント (リスタートポイント)
ウ クローズ制
エ オープン制
オ アカウンティングルーチン (会計情報収集ルーチン)
カ デバッギングエイド
キ 処理方法


まず、「電子計算室」とか「プログラム室」とか、得体のしれない言葉が出てくる。この辺のワードは全く想像がつかない世界観なので、当時のコンピュータの世界観をコンピュータ博物館 で確認していくと、1つの機械をみんで共有するというのが標準的な世界だということはなんとなく察することができる。

その状態でなんとかやる方法の事を言っていると思われるが、「オープン制」「クローズ制」についてはどういう定義の言葉かがネット上で調べても出てこなかった。当時の状況知っている方の情報を求む。
「デバッギングエイド」は、どう実行されたとかを出すものだとは思う。今でいうと、dump だったりするんだろうか。
みんなで使っているので、誰(どの部署・会社)かどのくらいの量を使ったかを集計するのが「アカウンティングルーチン」のことかなとは思う。

a:
b:
c:
d:
e:

この辺は、なんとなく答えている感が拭えなかったので当時のコンピューター資料を漁る必要があるだろう。

ooharabucyouooharabucyou

問24 の補足

なんと、電子計算機の日本史を研究されている前山さん (https://twitter.com/mk95_hoc) からDMをいただき、「電子計算室」のクローズ制や、ほかの用語についての説明をしていただきました。計算機史についてのTwitterがたまたま目に入り、つい昨日フォローして、いままでこの方を知らなかったなんて。。という気分になってしまったのでした。ありがとうございます!!

クローズ制: プログラムを書いてきたユーザにコンピュータを触らせない。という意味。これは、当時コンピュータの実行資源自体が大変貴重だったため、無駄にしたくないという意味合いが強かったとのこと。コンピュータ室の前に計算依頼書が置いてあって依頼するという形式があったようです。
デバッギングエイド: coredump のようなものということで問題なさそう
アカウンティングルーチン: 課金制 (時間単位当たりで使用料を取る) のための、利用情報を記録するプログラムのこと

とのことでした。

アカウンティングルーチンは (数の面では全く異なるし、ネットワークにつながっているという面で比較にならないかもしれないけど) 今のAWSにオンデマンドで計算にかかった分だけお金取られる仕組みっぽくて、面白いですね!
アカウンティングルーチンに関しては、午後問題の問6でも出てきます。こちらはアカウンティングルーチンによって収集された情報をどのように使うのかを説明するというのが問題になっています。


ちょうどこのような資料も読んでました。
「コンピュータ情報 システムの開発における システム・ライフ・サイクルのマネジメント」
https://www.jipdec.or.jp/archives/publications/J0001635.pdf
p.234 あたりに記載あり

ooharabucyouooharabucyou

問26 次の記述中の [ ] に入れるべき適当な字句を回答群の中から選べ。

個々のプログラムの品質を決めるポイントは, 誤りのないことが第一であるが, そのほかに [ a ] と [ b ] そして実用性であるといわれている。ところが実際に評価をしようとすると, [ c ] の機能や [ d ] の構成など, プログラマにとって他から与えられる環境条件の影響が多いため, これらの条件を一定にして初めて, 相対的な評価が可能であるといえる。
しかし, 多重プログラミングが行われているところでは, それだけではなく, 同時に実行される他の [ e ] の影響も無視できない。

解答群

ア 経済性
イ 実行時間
ウ プログラム
エ データ処理部門
オ ユーティリティプログラム
カ ハードウェア
キ 入出力装置
ク オペレーティングシステム
ケ 主記憶装置の専有量
コ プログラマ


なんというか、議論を生みそうな問題だなとは思った。ただし、あくまで、「個々のプログラムの」という前置きと、1973年の視点での話だということを忘れてはならない。

a
b
c
d
e

当時の計算機の資源が貴重だったことを思わせる解答になっている。品質なんていうのは、難しく曖昧な言葉じゃないか! というのはあるが、ソフトウェアの人類学者、ジェラルド・ワインバーグ氏は「品質」について、「品質とは誰かにとっての価値である」という言い方をしている。 (『プログラミングの心理学』p63 より引用) この当時の大多数(誰か)としては、これが正解でよいのだろう。

現在では、ISO/IEC 9126 等の規格も用意されており、技術者試験の問題の形式もこれをベースとしたものに変容しているように思える。

https://ja.wikipedia.org/wiki/ISO/IEC_9126

https://www.ap-siken.com/kakomon/23_aki/q46.html

ooharabucyouooharabucyou

問27 賃金マスターファイルの個人別レコードの内容を変更するのに変更データを入力する。そのデータのカード様式は次図のようになっている。

このデータを処理するプログラムは, 誤ったデータを発見するのに, 下記のような検査を行っている。この検査内容で a 〜 e の誤りを発見できるか否か, 下記の解答群から正しいものを選べ。

検査内容

(1) 変更項目指示コードは 02 〜 19 の数値を使っていて, プログラムの中のテーブルと照会する。
(2) 変更月日については, 数字4桁を穿孔してある。この値が,前月と今月の締切日 (毎月25日) の間にあるかという検査を行う。
(3) 従業員番号については, マスタファイルと照合する。
(4) 変更内容については, 変更項目指示コードに対応するデータの性質 (けた数および英字か数値の区別) を検査する。

a 変更項目指示コード欄の1の位と10の位の数値を逆に穿孔した。
b 変更月日欄に 0123 と穿孔するべきだったのを 1230 と穿孔した。
c 従業員番号欄に他人の従業員番号を穿孔した。
d 変更内容として 10000 と穿孔するべきだったのを 00000 と穿孔した。
e 変更内容として 28000 と穿孔するべきだったのを 2B000 と穿孔した。

解答群

ア 発見できる
イ 発見できない
ウ どちらともいえない


現在では聞き慣れない言葉として「穿孔 (せんこう) 」という言葉が出てくる。
これは、当時のコンピューターの環境として、プログラムやデータを「パンチカード」によって入力していたために出ている言葉になる。

https://ja.wikipedia.org/wiki/パンチカード

1969年10月に刊行されたオーム社『新電気』の 巻頭イラスト「計算センターのしくみ」によると当時は以下のような流れだったようだ。

1.「プログラム室」でプログラマーが、プランナ (問題をまとめる人) の要求に従い、プログラミングを行う。この部屋の机にはサザエさんの波平の机のように、コンピュータやモニターなど無いので、どのようなプログラムを書くかを「コーディングシート」という紙に記載していく。
2.「コーディングシート」やデータを持って「キーパンチ室」に持っていく。ここで、「キーパンチャー」がカードに「穿孔」(カードに穴をあける作業) していく。
3. 「オペレーター」へカードを持っていきいよいよ「計算機室」にある計算機のカード読み取り機にカードを読み取らせる。
4. 「オペレータ」が計算機に対して指示を与える。
5. 計算結果が「ラインプリンタ装置」から出力されるので、それを「プログラム室」に持っていく。

コーディングシートはこんなかんじのやつ。実は自分が高校生のころは現役で、手書きでプログラムを書く回があった。

http://museum.ipsj.or.jp/computer/device/paper/coding.html

時代的な背景はあるが、「キーパンチャー」は、かつての電話交換手のように、女性がなることが多い職業だったようだ。

https://bungaku-report.com/blog/2020/10/post-827.html

ということで、HELLO WORLD を出力するレベルでもなんだかすごい人間がいろいろ動いてたことがわかる。

ここでは、2 の作業でのミスを、プログラム側で検知できるかどうか? というのを問う問題だ。ただ、これは現在でも入力したデータをどうバリデーションするか? という形に置き換えられるので、問題としては難しいものではない。

a.
b.
c.
d.
e.

a についてはコード設計が素晴らしく、逆にしたとしたら、存在し得ないコードになる。このため、検知可能。
e については、アルファベットと数値が混合することもあるから、変更項目指示コード次第なんじゃね? とは感じたものの、変更項目指示コードごとに英字か数値が混合しないという前提なんだろうか。びみょーに納得はいかなかった。

ooharabucyouooharabucyou

問38 ある超越方程式の根を求めるプログラムを作成して, 電子計算機にかけたところ, 相当の時間を経過しても答が出力されないので, いったん打ち切った。次に列挙するいくつかのとるべき対策の中から, 適切なものを4つ選べ。

ア 収束条件が厳しすぎてループを繰り返しているかもしれないのいで, 収束条件をゆるくしてみる。
イ 原因を考えるより先に, とにかくもう一度やり直してみる
ウ 根が存在しないかもしれないので, 解析的な検討を行ってみる
エ 設定した一定の回数以上に何らかの理由でループを繰り返しているかもしれないので, その部分を十分チェックする。
オ ハードウェアの故障かもしれないので, 保守員に連絡する。
カ 四則演算の回数が多すぎるようなので, 式の簡略化を検討してみる
キ プログラムを調べてもよくわからない場合には, プログラムの適当な場所に, メッセージを出す部分を入れてみる。



, , ,

今どきでいうと、プログラミングコンテストでTLEになっちゃったんだが。。なケース。
「とにかくもう一度やり直してみる」とか考えちゃいそうですが、やはりこれも当時は実行すること自体が貴重だったために「イ」は選択肢から外れたりする。「オ」の保守員とはハードウェア(電気的な)知識をもった計算機の保守員で、何か機械的な故障があったらすぐに飛んで直すひとの事を指していたようだ。まずは自分を疑ってね。というのを感じる答えであった。

「キ」の解答については、ちょっとおもしろくて、当時からプリントデバッグは有効だったんですねw