その1 プログラム関数電卓を使ったプログラミング

現在では殆ど利用されていませんが、工業高校や高等専門学校などでは学校教材として高機能な電卓…いわゆる「プログラム関数電卓」がよく使用されていました。
また、当時建設業や研究機関などでも、現場でよく利用されていた様です。
ところで電卓といえば…携帯電話スマホ、そして、パソコンの「OS」…「基本ソフト」である「Windows」では一つの「アプリ」(※または「アプリケーションプログラム」)として用意されていますね。
今回はその電卓…特にプログラム関数電卓を例に取り上げ、それらを用いた「コンピュータプログラミング」の実例をご紹介したいと思います。

※本コンテンツは作者が昔、運営していたホームページ・「計算機の研究所」に掲載していたものを再編集したものです。

この記事は、2024年4月上旬に修正されました。

さて、現在市販されている関数電卓には、いろいろな種類のものがあり、しかも以前よりかは随分と高機能になった。
これらを大別すると、ごく基本的な計算機能を備えた関数電卓、これから紹介するプログラムによる計算機能を備えたプログラム関数電卓、そして、実際にグラフ表示などの精細な表示機能を備えたグラフィック表示型の関数電卓に大別される。


sharp el s

一般的な計算機能を備えた「関数電卓」(※画像・左)は、基本的な機能とはいえ、情報処理はもちろん、電気・電子・土木・建築・測量などの計算をもこなす。
たとえば、理数系の学生であれば、ある程度の公式を内蔵している点については重宝するだろう。
さて、「プログラム関数電卓」には、前述の関数電卓に加えて、さらに機能が追加されたものだが、その特徴は、なんといっても独自のプログラム操作による計算処理を行えるという点である。
一方で「ポケットコンピュータ」というハードウェアがあるが、これらに比べると、その命令(※「コマンド」ともいう)数は限られるものの、ある程度までなら基本的なプログラムを組むことも可能だ。
…ただ、ポケットコンピュータに比べると、融通の効かない部分も多々あるので、まったく同じというわけではないことを理解しておいて欲しい。
そして、これらの電卓に精細なグラフィック表示機能を備えているのが、「グラフィック関数電卓」というものだが、このクラスの電卓になると、パソコンとUSBを介して接続が可能な機種もあり、その活用の幅は広くなっている。
その新しい機能として、近頃では表計算の機能を搭載しているものもあり、過去販売されたものに比べやはり機能の点においてはかなり強化されている様だ。
その一例を挙げると、日本語による表示も可能となっている。(※但し、表示部分においてなので、実際には日本語は取り扱えない)
ちなみにネット上では、これらの各種電卓について詳しく解説しているホームページもあるので、興味のある方は、ぜひ一度ご覧になっていただくとよい。
さて、国内で電卓を販売している代表的なメーカーといえば、カシオシャープといったメーカーが挙げられるが…これから紹介するプログラム関数電卓は、カシオから販売されているものである。


ところでカシオは、1981年頃に独特のプログラム機能を備えた関数電卓の販売を開始した。
その機種は「fx-602P」というプログラム関数電卓だったが、その当時、多くのユーザーを獲得し、長期に亘って人気の機種だったといわれている。
実は作者もパソコンを始めた当時、あるパソコン情報誌にその機種用のプログラムが掲載されていたのを覚えている。
やがて1990年頃に同機は「fx-603P」としてモデルチェンジした。
ところでこのfx-602Pや603Pには、独自のプログラム言語が搭載されていた。
当時作者が残しておいた資料(※昔の専門誌の一部)を見る限りでは、記号を記述するようなものだったが、ほんの一部の命令に、当時ではポピュラーなプログラミング言語であったBASIC言語に似た命令があった。
また、殆どの命令が「アセンブリ言語」のような「一語単位の命令」で構成されており、また、これから紹介するプログラム関数電卓にも、その命令が一部、継承されているものもある。


casio fx-5800p

そんな伝統的な歴史を持つカシオのプログラム関数電卓だが、今回は同メーカーから販売されている「fx-5800P」というプログラム関数電卓を例に挙げ、そのコンピュータのプログラミングというものを解説していこう。
さて、この電卓は同系列の関数電卓の中でも一番、高機能であると思われる。
その理由の一つとしては、当時から電卓の表示が「自然表示」というものが採用されており、これは分数や「」などの表示を、そのままの表記で入力・計算できる機能だ。

cal

もちろん、一般的な表示とその切り替えは可能である。(※画像・左)
作者としては、小学校で習う分数の計算まで、こういった電卓で可能になったことは凄いことと思う反面、あまり便利すぎても…という、ちょっと複雑な思いがある。
なぜなら…分数の宿題など、この電卓を使えば簡単に終わってしまうからである。
(※現在ではスマホで問題の写真をカメラで撮ることにより、それに対応して解答を導き出すことができるとか…いやはや、すごい時代になったものである)


さて、この電卓が高機能であるという理由は、これだけではない。
搭載されている機能の中でも、そのプログラム機能の部分が強化されており、空き領域として28KB(※「キロバイト」)が使用可能となっている。
この容量は、別頁で解説しているポケットコンピュータの空き容量とほぼ同じくらいの容量であり、プログラム開発においては、ある意味十分な容量であるといえる。

さて、このプログラム機能においては、過去に販売された同系列の機種である、fx-4850P/4800P/4500PAなどに比べると、プログラムそのものの記述の方法は、かなり異なる。
それもそのはず、この電卓では、新たに「BasicLike」コマンドと呼ばれる機能を搭載しており、BASIC言語をもとにした命令が採用されているからだ。
その命令の中には、他社メーカーのポケットコンピュータにみられるBASIC言語の「構造化」命令も含まれており、さらにその一部に前述したfx-602P/603Pの命令が含まれている。
そんなプログラムそのもののエディット…いわゆる編集機能は、命令を一語単位で一括入力していくものとなっており、従来のポケットコンピュータ、またはパソコンの様にわざわざキーボードから命令を入力する必要はない。 これは、慣れれば使いやすい機能だと思われるが、実はWindowsの開発ツール(※「Visual Studio」)にもよくみられる「ガイド入力」の様なものとなっている。
ちなみに1文字の論理演算子…たとえば、「」や「」といったものでさえ、1つのコマンドで入力できるようになっている。
また、たいしたことではないのだが、前述した自然表示の機能がここでも活かされているのか、関係演算子の「△と△が等しくない」を意味する記述は、BASIC言語などでの記述の方法は、「 < >」や「 ! = 」などという表記を用いるが、「」というみためそのままの演算子が利用でき、入力したプログラムをみやすくするための配慮も成されている。
もちろん掛け算や割り算の「×」や「÷」の演算記号もそのまま使えるので、みた目分かりやすいプログラムの記述が可能だ。
なお、これはあくまでも表示上の問題ではあるが、現代のパソコンのプログラミングツールでは、実現できない機能でもある。

さて…いいことづくめのプログラム関数電卓だが、勿論、欠点というものもある。
それは、変数の取り扱いにはかなり制限があり、使用できる変数はあらかじめ決まっており配列は1次元配列までしか扱えない点だ。
また、文字列型の変数を扱うことはできないし、カナを扱うこともできない
ところで「IF」などの条件分岐命令の記述について「:」(※「コロン」)を用いることがあるが、その「:」の使い方には注意が必要である。
ただ、これらの取扱いに関しては、慣れてしまえば特に問題はない。
むしろ、この電卓の持つ特有の機能やプログラミングのテクニックによっては、ある意味それを補える部分もあるからだ。(※この点については、後に掲載している実際のプログラムをご覧いただくとよい)
また、同機種のプログラム機能とその詳細については、カシオのプログラム関数電卓のホームページから取扱説明書がPDF形式でダウンロードできるので、こちらをご覧になるととよい。(※実機を購入しなくても入手は可能)

・サンプルプログラムの掲載

そんなわけで、この電卓のプログラミングについてそれを体験していただくために、オリジナルのサンプルプログラムを用意した。
但し、当時ページに掲載したものをそのままこの記事にコピペしてものなので、ひょっとすると間違いがあるかもしれないが、その点については予めご了承いただきたい。

●注意事項

本プログラムは、カシオ計算機株式会社より販売されているプログラム関数電卓「fx-5800P」専用のプログラムです。
また、同系列の以前の機種(「fx-4×00Px」系)または下位機種の「fx-71F」および「fx-72F」では動作しません。
プログラムに関する動作確認・デバッグについては、できるだけ万全を期していますが、ここで掲載されたプログラムの使用、または使用不能から生じる一切の損害(使用している機器への障害・そしてそれに限らず全ての損失を含む)に関しては、いかなる場合においても、本ホームページ及びその作者は一切責任を負いません。
たとえ本ホームページ及び作者が、それらの損害の可能性について知らされていた場合でも同様です。
なお、ここで掲載されているプログラムは、本ホームページの「ご注意」の方でもご案内しておりますが、個人で無断で自分のホームページへ掲載、または他のホームページへの転載は固くお断りします。また、他の用途における二次転載も同様です。
あくまでも個人利用に留めていただき、これらの事項を十分ご確認の上、ご利用をお願い致します。

・「数字たたき」のプログラム

cal

こちらのプログラムは昔当時のパソコンのプログラムとして、よく掲載されていた「モグラたたき」ならぬ「数字たたき」である。
このゲームのルールはいたって簡単で、ゲームを開始すると、画面のあちこちに1から9までの数字が表示されるので、出た数字に対応する1から9までの数字のキーを押すとよい。
ヒット(当たり)すると、数字の表示が「×」に変わり、これが「当たった」という判定になる。
これは余談だが、既定の速さで200点を出せればたいしたものだと思われる。(あくまで個人談だが)

ところでこのプログラムは、どちらかといえば反射神経型…いわゆる「アクション」系のゲームとなるが、fx-5800Pで、このジャンルのゲームを実現するには、幾つかの問題点もある。
その一つは、キーの入力の判定が「甘い」ということだ。
本来アクション性の強いゲームというものは、どうしてもキーなどの入力判定が重要な部分となってくるものだが、その部分については「できる限り」のプログラムとなってしまった。
まぁもともとこの電卓はその用途というものが決まっており、それ専用のものではないので仕方のないことなのだが、それでも電卓にしてこの様なキーの入力をプログラムで実現できるということはたいしたものだといえる。
ちなみに数字の表示時間を変えたい場合は、「RanInt#(40,100)→T」のカッコ内の数字の値を変えてみるとよい。
設定の方法は、「一番早い表示時間の上限値,一番遅い表示時間の上限値」となる。

「数字たたき」のプログラムリスト

  ※プログラム中の出力命令(取扱説明書P95「出力命令」)の演算子は「▲」と表示
   プログラムの入力方法については取扱説明書を参照。
   「0」(※数字の「ゼロ」)と、「O」(※アルファベットの「オー」)、また、
   「.」(※ピリオド)、「,」(※カンマ)の区別
にご注意いただきたい。

  0 → Q
  0 → S
  9 → DimZ
  0 → Z[9]
  35 → Z[1]
  36 → Z[2]
  37 → Z[3]
  24 → Z[4]
  22 → Z[5]
  23 → Z[6]
  31 → Z[7]
  32 → Z[8]
  33 → Z[9]

  Cls
  Locate 11,2,"SCORE"
  Locate 13,3,S

  Lbl 1
   RanInt#(1,9) → X
   RanInt#(1,4) → Y
   RanInt#(1,9) → V
   Locate X,Y,V
   RanInt#(40,100) → T
   For 1 → W To T:Next
   Locate X,Y," "
   Q + 1 → Q
   GetKey → U
   If U=Z[V]:Then Locate X,Y,"×"
    For 1 → W To 50:Next:
    Locate X,Y," ":S+V → S:
    Locate 13,3,S:IfEnd
    If Q=50:Then Goto 2:IfEnd
   Goto 1

   Lbl 2
    Cls
    For 1 → I To 500:Next
    Locate 2,2,"YOUR SCORE "
    Locate 13,2,S

実機について

今回例に挙げたカシオのプログラム関数電卓・fx-5800Pだが、実機は現在でも最寄りの家電量販店、または文具店などでも購入可能である。(※原則、現行のカタログに記載されているものは購入可能)
また、販売価格はオープン価格となっているため、その価格は販売店によって変動するので注意が必要だ。
なお、前述のとおりプログラム機能について幾らか制限はあるが、同機種の下位機種として「fx-71F」(※「fx-72F」)などもあるが、こちらも前述の通り、ここに掲載されたプログラムは動作しないので、重ねてご注意いただきたい。


2024年4月追記・修正

ここ数年前に、然るべき機関より本ページ内の記事が改ざんされているかもしれないとの知らせを受け、今回チェックを始めた。
その後、特に問題はないようなので、ここであらためて掲載しておく。
なお、「その2」の記事も確認中なので、こちらも確認次第修正・公開の予定である。