プログラム電卓

**プログラム電卓**（プログラムでんたく、英語:programmable calculator）は、電卓の一種で、複雑な計算を自動でさせるためにユーザが自分でプログラムを書いたり、実行できるもの。英語表記寄りのカタカナ表記を使い「プログラマブル電卓」と書くこともある。

## 概説
プログラム電卓は、通常の電卓の機能に加えて、特定の計算や操作を自動化するためのプログラミング機能を持つ計算機である。ユーザーは事前に計算手順をプログラムしておき、そのプログラムに従って複雑な計算や反復的な計算を効率的に実行できる。

プログラム電卓の多くは、プログラムコードや計算結果を表示する機能を持っている。

;プログラミング方式
機種ごとに異なり、主にキーストローク方式、言語方式がある。#プログラミング方式

;プログラムのセーブ方式
機種ごとに、磁気カード方式、カセットテープ、メモリモジュール方式、フロッピーディスク、フラッシュメモリ、外部PCを利用する方式などがある。#プログラムのセーブ方式

;プログラムのジャンルと流通状況
プログラム電卓用のソフトウェアはジャンルに限定は無く、数学、科学、工学、土木、建築、測量、金融、会計、税務、ゲームなど多種多様である。#用途の例

メーカー側が作成したサンプルプログラム集が書籍化されオプション販売されている機種もあり、それが"抱き合わせ販売"や"本体購入者へのプレゼント"として本体の販売促進に使われる場合もある。また教育用や科学技術計算用の有償ソフトウェアも販売されている。1990年代後半以降にインターネットが普及してからは、一般ユーザーが作ったフリーウェアやオープンソースソフトウェア（OSS）も公開され、ダウンロードできる形でも存在している。一部の機種では、そういったプログラムをPCにダウンロードし、専用のリンクケーブルや赤外線リンクやメモリカード経由で電卓にアップロードすることもできる。

;他
なお、グラフ電卓は表示画面が大きいため、スクロールしなくてもソースコードを複数行表示でき、1行表示のプログラム電卓よりもプログラミングが容易である。

## 歴史
1967年にカシオが"電卓"の**AL-1000**を発売。もともと"電卓"は「電子式卓上計算機」の略で、1960年代の"電卓"というと数十センチ角ほどの大きさとかなりの重量があるマシンで、このAL-1000もそういう大きさと重量だったが、このAL-1000は簡素なプログラム機能も内蔵しており、カシオはこれが世界初のプログラム電卓だとしている。

1968年にヒューレットパッカード (HP)が発売した'''HP 9100''' A/Bは、基本的な条件ステートメント(IF文)、ステートメントの行番号、ジャンプステートメント（goto文）、変数として使用することの出来るレジスタ、および原始的なサブルーチン機能を持っていた。そのプログラム言語はさまざまな面でアセンブリ言語と類似していた。

1974年にヒューレット・パッカード は**[[HP-65]]**を発売。HP-65は"ポケットサイズ"より少し大きい寸法で、磁気カードリーダ/ライターを内蔵しており、プログラムのセーブ/ロードが可能。「磁気カードにプログラムを格納できる世界初の携帯可能なプログラム電卓」である。100キーストローク分の命令列を格納できる。レジスタが9個あり、逆ポーランド記法 (RPN) を採用しており、作業用スタックは4段である。14.7cm×8.1cm×3.4cm。312 g。795ドル。
 

1977年5月にテキサスインスツルメンツ（TI）は****を発売。やはり "ポケットサイズ" よりやや大きいくらいで、プログラミングモードはキーストローク記録方式だったが、最大ステップ数は960。最大10種のプログラムを記憶し、アルファベットキーからワンタッチでプログラムにアクセスできた。メモリモジュール（ROM）にあらかじめ記憶されているプログラムも使うことも可能。ユーザーが記述したプログラムからモジュール内のプログラムをサブルーチンとして利用することも可能。条件分岐、ループ、メモリ・レジスタへの間接アクセスをサポートし、アルファベット・数字をプリンターで出力可能だったが、複雑なプログラムを記述するには、別に紙で表のようなものを書くなどして、まるで機械語を綿密に書くような作業が必要だった。299.95ドル。（なお、同時に発売されたTI-58はTI-59の廉価版で、磁気カードが使えなかった。）

このように、もともと各電卓独自のコマンド言語によりプログラミングできるものだったが、やがてハッカーが電卓の主要インタフェースを迂回する方法を発見してアセンブリ言語でプログラムを書くようになり、TI社がネイティブモードのプログラミングをサポートしはじめた。まず、そのようなコードを利用可能にするフックを公開し、後に通常のユーザインタフェースで直接そのようなプログラムを扱えるよう機能を整えていった。

カシオは1978年後半に**[[FX-502P]]**の製造を開始、（発売時期は資料により異なり、はっきりしないが）1978年終盤から1979年前半ころ。ポケットサイズ、軽量（長さ 143 mm x 幅 74 mm x 厚さ 9.6 mm、103 g）。プログラムモードはキーストローク記憶方式で、プログラムステップ数は最大256。数値メモリを22もち、条件ジャンプ、無条件ジャンプ、サブルーチン分岐機能を有し、「P0」~「P9」のキーにプログラムを別々に格納し、それぞれプログラムやサブルーチンとして使え、LBL0からLBL9として、ジャンプ先や分岐先指定のラベルとして使用できる。発売当時の標準価格は24,800円。本機用のサンプルプログラムを集めた分厚い本も販売（あるいは抱き合わせ提供）された。オプションのインタフェース「FA-1」を使えばテープレコーダ（やラジカセ）をデータレコーダとして使いプログラムやデータをカンサスシティスタンダード方式でコンパクトカセットに保存できる。少しユニークな機能だが、インタフェース「FA-1」を使えば単音で音楽演奏することもできた。（なお、同時期に発売されたFX-501PはFX-502Pの廉価版で、記憶できるステップ数が半分の128だった。）

カシオは1981年に後継機種の**[[FX-602P]]**を発売。キーストローク記憶式であること、インタフェースを使いカセットテープにプログラムを保存できることなど、基本機能はFX-502Pと変わらなかったが、ステップ数は倍の512になり、また目に見える変化として表示部が1行11桁のドットマトリクス液晶 + 3桁の7セグメント指数表示となった。そのほか処理速度も、FX-502Pと比べて加算の繰り返しで1.1倍ほど、積分計算で1.8倍ほどになった。FX-601Pは廉価版で、プログラムステップ数は最大128。

カシオは1990年に後継機**[[FX-603P]]**を発売。速度がFX-502Pと比べて、加算で3倍、積分で7.6倍とかなり高速になった。


Casio AL-1000 ProgrammableCalculator.jpg|CASIO AL-1000
HP9100A-IMG_0393.jpg|HP 9100A
HP-65 Programmable Calculator (edited to remove background, optimized colours).jpg|HP-65
TI-59 programmable calculator.jpg|TI-59
CasioFX501P.jpg|CASIO FX-501P
CASIO FX-602P Programmable Calculator.png|CASIO FX-602P


## プログラミング方式
* **キーストローク方式**（keystroke programming）─ ユーザがキーを押した順序をそのまま記憶し、それをまるで再生するように、繰り返す方式。この方式を採用した機種は、TI-55、TI-56、TI-57、TI-59、HP-65、HP-25/HP-25C、HP-19C/HP-29C、HP-41、CASIO FX-502P/ FX-501P、FX-603P、fx-3650P、/ fx-3900Pv / fx-3950P、SHARP EL-5813 などである。1970年代のプログラム電卓では単純なキーストローク方式（単に押したキーを順に再生するだけのもの）が主流で、1980年代には拡張キーストローク方式（分岐・サブルーチンが可能）が主流になった。
:なお、条件分岐と間接アドレッシングが可能であれば、このような方式でもチューリング完全なプログラミングが可能である。キーストローク方式でチューリング完全なプログラム電卓としては、カシオのFX-602Pシリーズ、HP-41、 などがある。キーストローク方式のプログラム電卓は2012年現在も販売されており、HP 35s、カシオのなどがある。
* **言語方式**
** BASICライク方式 ─ BASIC風の独自のスクリプト言語でプログラミングし実行する方式。シャープ、カシオ、TIなどがBASIC風の独自のスクリプト言語（キーストローク方式の長所も取り入れたプログラム電卓向けに最適化された言語）を採用した。一般的なBASICとの共通点は少ない。
** RPL方式　─  RPLはヒューレット・パッカードがプログラム電卓向けに採用した、逆ポーランド記法順などを特徴とする言語である。1987年リリースのHP-28Cから導入した。
** アセンブリ言語方式　─ ハッカーがインタプリタのインタフェースを迂回する方法を発見し、アセンブリ言語で直接プログラミングできるようになった。最初にこの技法が使われるようになったのは TI-85 で、モード切替にプログラミング上の欠陥があったためである。TI-83でも同様の技法が使われるようになると、TIとHPは愛好家がそのようなニーズを持っていることを把握するようになり、アセンブリ言語用ライブラリを開発したり、開発者向けの詳細文書を公開したりするようになった。携帯型ゲーム機のゲームと似たようなゲームがプログラム電卓（特にグラフ電卓）ですぐさま開発されるようになった。TIはTI-83やTI-89で正式にアセンブリ言語をパッケージとしてサポートするようになった。HPは2012年現在の最上位機種 HP 50g でアセンブリ言語を内蔵している。カシオはでアセンブリ言語を搭載し、PB-1000Cでは搭載CPUのアセンブリ言語ではなく情報処理技術者試験のCASLを搭載していた。
** BASICコンパイラ（インタプリタ）方式 ─ 例えば、TI-83やTI-84には BBC Micro のBASICが既に移植されている。
** Python方式　─ Pythonでプログラミングし実行する方式。近年の一部の機種（TI-84 Plus CE-T Python, CASIO fx-CG50）で採用された。

; その他
: gcc開発スイートはHPおよびTIの一部機種にも対応しており、PC上でC、C++、Fortran 77、アセンブリ言語などを使ってプログラム電卓向けのソフトウェアを開発し、電卓にアップロードして使うことができる。
: （いつから？）（どこで？）（だれが？）電卓上またはPC上でコンバータ、インタプリタ、コードジェネレータ、マクロアセンブラ、コンパイラなどを開発するプロジェクトがいくつかある。言語としては、FORTRAN、BASIC、AWK、C言語、COBOL、REXX、Perl、Python、Tcl、Pascal、Delphi、各種シェル（DOS、OS/2のバッチやWindowsのシェル、Unix系のシェルなどがある。）

## プログラムのセーブ方式
プログラム電卓の重要な機能の1つとして、プログラムをセーブする機能がある。この機能がないと、電池を入れ替えたときなどにプログラムが消えてしまう。プログラム電卓内に電池を取り外しても内容が消えないメモリを搭載する方式と別の周辺機器を接続する方式がある。複数のセーブ方式を備える機種もある。

;磁気コアメモリ
:
CASIO AL-1000に採用された方式。

;パンチカード

:

; 磁気カードリーダ/ライタ
: 初期のプログラム電卓はオプションの永続的セーブ手段として磁気カードリーダを採用していた。入力したプログラムを細長い磁気カードにセーブする。磁気カードとそのリーダは小型で持ち運びが容易である。しかし、一般に非常に高価だった。磁気カードを採用していた最後の機種としてHP-41Cとがある。


HP65 display after result of test programm from card reader.jpg|HP-65、および差し込まれた磁気カード
HP magnetic card.jpg|HP-65の磁気カード
TI-59 programmable calculator with magnetic card.jpg|TI-59、および差し込まれた磁気カード
TI-59_-_Magnetic_Strips-7760.jpg|TI-59の磁気カードを多数保管するためにユーザが使ったファイル
CASIO PRO fx-1 SCIENTIFIC CALCULATOR.jpg|本体上部に磁気カードリーダーのついたCASIO PRO fx-1


; バッテリーバックアップ式メモリ

: 主電源を切ってもメモリの内容が消えないようバッテリーバックアップを行う方式で、HPが最初に採用し *continuous memory* と名付けた。これは電池交換の際でもプログラムが失われないようになっている。なお、メモリ容量が増えてくると、完全なバッテリーバックアップは困難になってきた。そのため、電池交換にかける時間を2分以内などと制限する方式、電池を2つ搭載して一度に1つしか交換できないとする方式などが登場した。

; カセットテープ
: （マイクロコンピュータでは1970年代にデータレコーダでコンパクトカセットにセーブすることが一般化したが、同様に）プログラム電卓でもカセットテープにプログラムをセーブする方式が一部の機種で導入された。例えばカシオは1978年から1979年ころに発売したFX-501のオプション品として FA-1 というカセットインタフェースモジュールを発売し、プログラム電卓と、当時の一般家庭に普及していたラジカセ（あるいはオーディオ好きが所有していたカセットデッキ）を接続し、周波数偏移変調でデジタルデータを音響信号に変換して録音することでプログラムをセーブできた。 HPが1979年にリリースしたHP-41シリーズ用にはオプションでデジタルカセットドライブHP82161Aが用意され独自規格のカセットテープにセーブ/ロードする。

CASIO FX-501P Calculator & FA-1 Interface with CASIO ORIGINAL PROGRAM TAPE.jpg|CASIOのFX-501PにFA-1が装着された図
Digital cassette drive HP82161A for HP-41 calculator series.jpg|HP-41用のデジタルカセットドライブ HP82161A


; フロッピーディスク
: 一部の機種はフロッピーディスクを採用した。例えばHPのHP-41C、HP-71B、HP-75C/D等では、HP-ILインターフェースを使いフロッピーディスクドライブHP 9114A/Bを接続し3.5インチ2DDフロッピーディスクでセーブ/ロードすることが可能である。

; PCとの接続
: 一部の機種ではプログラムやデータをパーソナルコンピュータに転送・セーブできる。PCとの接続法には、登場年代順に、RS-232、IrDA、USB などがある。カセットテープよりも高速である。初期の例としてはカシオのFX-603PとFA-6インタフェースがある。この場合プログラムやデータはプレーンテキストとして転送されるので、セーブできるだけでなく、PC上のテキストエディタで編集も可能である。

; フラッシュメモリ
: フラッシュメモリを挿入するスロットを備えている機種もある。古くはおもに独自規格のフラッシュメモリが採用されたが、その後SDメモリを採用する機種が現れた。独自規格のフラッシュメモリを採用した機種は、HP 48GX、HP 49G、HP 49g+で、SDメモリを採用した機種は、カシオ fx-9860G SD、fx-9860GII SD、fx-CG10、fx-CG20である。

## 主なプログラム電卓
歴代の主なプログラム電卓。
* 現行品（現在、新品として販売されている機種）には☆印を表示。
* "電卓"ともされるが、フルキーボードを備えアメリカのテスト統括機関などで電卓ではなく"コンピュータ"と分類され試験会場に持ち込めないような、曖昧なものには▼印を表示。

; テキサス・インスツルメンツ （アメリカ）
: 、、TI-66、☆ TI-84 Plus シリーズ、☆ TI-Nspireシリーズ、☆ TI-89 シリーズ、▼ TI-92シリーズ
; ヒューレット・パッカード （アメリカ）
: HP-10Cシリーズ、HP-25、HP-28 シリーズ、HP 35s、HP-41C、HP 48 シリーズ、HP-65、 HP 49/50 シリーズ、HP 38G、☆ HP Prime

; カシオ計算機 （日本）
: FX-502P、FX-602P、FX-603P、、 ☆ Casio fx-5800P、☆ Casio 9750 G III （海外販売モデル）、、、Casio ClassPad 300
; シャープ 
: 注意点 ─ シャープでは条件分岐（IF〜THEN〜ELSE〜）や繰り返し命令を含まないような、低機能なプログラムで動く電卓を"プログラマブル電卓"と呼んで近年まで販売していた。これも一応はプログラム電卓に分類できるものの、近年の水準で比較すると、他社製の詳細な条件分岐を記述し繰り返し命令を実行できる本格的なプログラム電卓とは異なる、低水準のものである。
: COMPET 363P（CS-363P、1971年）、COMPET 364P (CS‑364P、1972年）、COMPET 365P（CS-365P、1973年)、CS-421（1972年）、COMPET PC-1001（1973年）、PC-1002（1974年）、EL-5100（1979年）、EL-5120 （英語版）（1996年）、EL-5250F (2007年)、EL-5060J (2010年) / 5160J（2011年）

; Sinclair （英国）
: Sinclair Cambridge Programmable

; Elektronika （ソ連・ロシアのブランド）
: B3-21、、MK-61、、MK-85、MK-90、MK-92、MK-98、MK-152、MK-161


File:TI-59 programmable calculator with magnetic card.jpg|TI-59
File:HP-41CX.jpg|HP-41CX と周辺機器（磁気カードリーダ/ライタとサーマルプリンタ）
File:Elektronika MK-52.JPG|ソビエト連邦で開発されたプログラム電卓（写真は）は宇宙開発でも使われた。
File:TI-nspire CX CAS.jpg|TI-Nspire CX CAS
File:Hp50.png|HP 50g で数式エディタを使っているところ
File:CasioClassPad300.JPG|Casio ClassPad 300 はタッチスクリーン式の電卓である。
File:Sinclair Cambridge Programmable.jpg|Sinclair Cambridge Programmable
File:CASIO fx-5800P SUPER-FX PLUS Scientific Calculator.jpg|CASIO fx-5800P SUPER-FX PLUS


## 用途の例
あくまで代表的な例である。
*科学・工学 
** 物理計算 - ニュートンの運動方程式を使った、速度、加速度、力などの計算。エネルギーの計算。
** 化学の計算 - 反応速度、モル比、反応エンタルピーなどの計算
** 電気・エレクトロニクスの計算 - 抵抗、インダクタンス、キャパシタンスを用いた直列回路・並列回路の計算。オームの法則を使った電圧、電流、抵抗の計算
** 材料工学的計算 - 材料の強度やひずみ率の計算、応力-ひずみ曲線の解析
** 統計計算 - 回帰分析、標準偏差、平均、分散、確率分布（正規分布、二項分布など）の計算
*財務・会計 
**税金の計算 - 消費税や法人税などの税額計算を自動化、効率化でき、税率変更がある場合にも、その値を変更すれば簡単に再計算でき、効率的である。
**支払利息の計算 - 融資や借入金に対する支払利息を計算するためのプログラムができる。毎月の利息計算を自動化し、手動で計算する手間を省ける。
**減価償却計算 - 減価償却の計算は繰り返し行うもので、定額法、定率法などがあり、プログラム電卓で自動化しておけば計算の効率化が図れる。
**割引現在価値（NPV）と内部収益率（IRR）の計算 - 投資案件の評価において割引現在価値（NPV）や内部収益率（IRR）を計算するためのプログラムを作成可能。
*教育 -  プログラミングの基礎的な学習ツール。学生が計算を自動化する作業し、プログラミングの初歩を知る。

そのほか、数字や文字の表示だけでできる簡単なゲームに使われることもある。

## プログラム電卓とポケットコンピュータの比較
プログラム電卓とポケットコンピュータを比較すると次のような相違点がある。

* 開発目的 ─ プログラム電卓は計算に特化した電卓に自動計算機能を加えることが当初の開発目的。ポケットコンピュータは汎用のマイクロコンピュータ（パソコン）をポケットサイズにすることが開発目的。開発目的や原型が異なっている。
* 筐体形状 ─  プログラム電卓は縦型が一般的。ポケットコンピュータは横型が一般的。
* キー配列 ─ プログラム電卓は筐体下側に電卓同様のテンキーおよび＋、−、✕、÷などの基本演算キーを配置し、筐体上側に関数キー（三角関数、対数関数など）および独自のファンクションキーを多数配置することが一般的。プログラム電卓はQWERTY配列のフルキーボードは備えないのが一般的。ポケットコンピュータのキーボードは、パソコンのキーボードを原型にしており、左側にQWERTY配列、右側にテンキーを配置することが一般的。
* 関数電卓のように使えるか否か？ ─ プログラム電卓のほぼすべての機種が関数電卓的に使うモードを備え、関数キーを多数備えている。ポケットコンピュータの大半の機種は関数電卓のようには使えない。
* プログラミング方式 ─ プログラム電卓のプログラミングはキーストローク方式や「逆ポーランド記法（RPN）」が主流であり、BASIC風のスクリプト言語を採用した機種でもキーストローク方式と融合した独自のスクリプト言語でプログラミングを行う。ポケットコンピュータのほうは、キーストローク方式の機種は無く、どれもプログラミング言語でプログラミングを行う。
* 表示　─ プログラム電卓は電卓が原型なので、古い機種では数字表示のみ、アルファベット表示ができる機種も大文字しか表示できない機種があるなど、表示機能はもともと貧弱。ポケットコンピュータのほうは（どの機種もプログラミング言語でプログラムを行うので）数字とアルファベットが表示でき、機種によっては任意の点や線を引けるなどグラフィック表示機能も備える。
* 電源　─ プログラム電卓は小型・軽量・低消費電力の電卓を原型にしている機種が多く、単3や単4電池だけでなく、ボタン電池で駆動する機種も多い。ポケットコンピュータは消費電量が大きい傾向があるため、単3電池のほかに容量の大きい充電池方式を採用し、重量が重い機種もある。
* 想定されている主なユーザや主な用途　─ プログラム電卓は各分野の専門家が、業務で日常的に繰り返す計算をするための道具として使うことを想定しており、パターン化された計算を繰り返す実務や、各分野の定番の関数や公式を使い数値をすばやく算出する実務をこなすのに向いている。なお、プログラム電卓はクセのある独特の記法でプログラムを作成するので、一般的なプログラミングの学習（パソコンでも使える一般的なプログラミング言語の記述法を学ぶこと）にはあまり向いていない。ポケットコンピュータのほうは、さまざまなタイプのユーザが汎用目的で使うことが想定されており、文字列操作やファイル操作の機能に優れ、パソコンでも使われる一般的なプログラミング言語（BASIC、C言語、アセンブラ 等）にかなり近い言語を使うことができるのでプログラミングの学習にも向いている。そのかわり、関数電卓のような使い方をするのには向いていない。

ただし、1990年代や2000年代にプログラム電卓も言語によるプログラミングの機能が強化された機種が増え、グラフ表示機能を持ち表示機能が強化された機種も増えたことで、プログラム電卓とポケットコンピュータの境界が少し曖昧になり、一部のメーカーは2つの商品カテゴリをひとまとめにしても良いと判断するようになったようである。たとえばカシオは、当初はプログラム電卓の型番に "fx-" をつけ筐体に "programmable calculator" と印字していた、ポケットコンピュータの型番は "pb-"とし、後に、フルキーで電卓モードなしのポケコンの型番も"FX ...."とした。

## 脚注
### 注釈


### 出典

## 関連項目

* 関数電卓
* グラフ電卓
* ポケットコンピュータ