COBOLのADD・SUBTRACT文の使い方を完全ガイド!初心者でもわかる足し算と引き算の基本
生徒
「先生、COBOLで足し算や引き算をするにはどうすればいいんですか?」
先生
「良い質問ですね。COBOLではADD文とSUBTRACT文を使うことで、数値の足し算や引き算が簡単にできます。」
生徒
「へえ!英語みたいですね。実際にどんなふうに書くんですか?」
先生
「それでは、実際の使い方と注意点を一緒に見ていきましょう。」
1. ADD文とは?COBOLで足し算を行う基本Web
COBOLにおけるADD文は、数値同士を足し合わせるための最も基本的な命令です。プログラミング未経験の方でも直感的に理解しやすいよう、英語の「Add A to B(AをBに加える)」という自然な文章に近い形式で記述します。
ADD文の基本構文
最もよく使われる書き方は次の通りです。計算結果は、必ずTOの後に指定した変数(入れ物)に上書き保存されるという点に注目しましょう。
ADD 数値1 TO 変数2.
この命令が実行されると、内部では「変数2 = 変数2 + 数値1」という計算が行われています。つまり、TOの後の変数は、もともと持っていた値に新しい値がプラスされて更新される仕組みです。
【実践】未経験者でもわかるサンプルプログラム
例えば、お買い物で「100円のりんご」を「300円の財布の中身」に加算するシーンをイメージしてみましょう。実際のコードでは以下のようになります。
IDENTIFICATION DIVISION.
PROGRAM-ID. ADD-BASIC-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
* りんごの値段(3桁の数字)
01 APPLE-PRICE PIC 9(3) VALUE 100.
* 財布の中のお金(3桁の数字)
01 WALLET PIC 9(3) VALUE 300.
PROCEDURE DIVISION.
* 財布の金額にりんごの値段を足す
ADD APPLE-PRICE TO WALLET.
DISPLAY "合計金額は " WALLET " 円になりました。"
STOP RUN.
実行結果:
合計金額は 400 円になりました。
このプログラムでは、ADD APPLE-PRICE TO WALLETという一行で、財布(300円)にりんご(100円)の値を足し、財布の中身を400円に書き換えています。このように、COBOLの計算は事務処理を英語で命令するような感覚で記述できるのが最大の特徴です。まずはこの「足した結果が後ろの変数に入る」という流れをしっかり押さえましょう。
2. SUBTRACT文とは?
SUBTRACT文は、COBOLで引き算を行う命令です。英語の「subtract(引く)」という意味で、数値を引いて結果を保存します。
基本の形は次のようになります。
SUBTRACT 数値1 FROM 数値2.
これは「数値2 − 数値1」という意味です。つまり、「FROMの後の値」から「前の値」を引きます。最初は逆に見えて戸惑うかもしれませんが、英語の語順の通りに読めば簡単です。
IDENTIFICATION DIVISION.
PROGRAM-ID. SUBTRACT-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(3) VALUE 10.
01 B PIC 9(3) VALUE 3.
PROCEDURE DIVISION.
SUBTRACT A FROM B.
DISPLAY "結果は " B " です。"
STOP RUN.
結果は -7 です。
この例では、B(3)− A(10)なので、結果は−7になります。FROMの位置に注意しましょう。
3. ADD文とSUBTRACT文の応用:結果を別の変数に入れる
COBOLのADD文やSUBTRACT文は、結果を別の変数に保存することもできます。
例えば、次のようにGIVING(与える)を使うと、計算結果を指定した変数に格納できます。
ADD 10 TO 20 GIVING RESULT.
SUBTRACT 5 FROM 15 GIVING RESULT.
「GIVING」は「〜に与える」という意味で、計算結果を別の変数に渡すというイメージです。実際に動かしてみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. GIVING-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 RESULT PIC 9(4).
PROCEDURE DIVISION.
ADD 10 TO 20 GIVING RESULT.
DISPLAY "足し算の結果:" RESULT.
SUBTRACT 5 FROM 15 GIVING RESULT.
DISPLAY "引き算の結果:" RESULT.
STOP RUN.
足し算の結果:30
引き算の結果:10
このように、GIVINGを使えば元の値を変更せずに結果を別の変数に保存できます。これは業務プログラムで「計算結果だけを記録したい」ときにとても便利です。
4. 複数の変数をまとめて計算する
COBOLでは、複数の数値を一度に加えたり引いたりすることもできます。
ADD A B C TO TOTAL.
SUBTRACT TAX DISCOUNT FROM TOTAL.
このように書くと、A + B + CをTOTALに加えたり、TAXとDISCOUNTをTOTALから引いたりすることができます。計算式を短くまとめられるのが特徴です。
5. ADD文・SUBTRACT文を使うときの注意点
COBOLのADD文とSUBTRACT文を使うときには、いくつかの注意点があります。初心者がつまずきやすいポイントを整理しておきましょう。
① データ型(PIC句)の桁数を確認する
COBOLでは、数値を格納する変数に「PIC句(ピク句)」で桁数を指定します。もし計算結果が桁を超えると、「オーバーフロー(値が大きすぎて入らない)」が発生します。
たとえば、PIC 9(3)だと最大値は999までしか入らないので、それ以上の結果を足すと誤動作する可能性があります。
② 小数を扱うときはVを使う
COBOLでは、小数点を扱いたいときはVを使います。たとえばPIC 9(3)V9(2)なら「999.99」まで扱えます。
01 PRICE PIC 9(3)V9(2) VALUE 100.50.
01 TAX PIC 9(3)V9(2) VALUE 5.25.
01 TOTAL PIC 9(4)V9(2).
ADD PRICE TO TAX GIVING TOTAL.
このようにして、正確な小数計算ができます。
③ FROMとTOを混同しない
ADDでは「TO」、SUBTRACTでは「FROM」を使います。これを間違えると計算結果がまったく違ってしまいます。
「ADD〜TO〜」「SUBTRACT〜FROM〜」という英語の語順で覚えるとミスを防げます。
④ GIVINGを使うと安全に計算できる
特に業務プログラムでは、元の値を上書きしないほうが安全です。GIVINGを使えば、元の変数を壊さずに計算結果だけを新しい変数に保存できます。
6. ADD・SUBTRACTとCOMPUTEの違い
COBOLにはCOMPUTE文という、より自由に計算できる命令もあります。実は、ADDやSUBTRACTはCOMPUTEでも書き換えられます。
ADD A TO B.
COMPUTE B = B + A.
どちらでも同じ結果になりますが、ADDやSUBTRACTは「意味が明確で読みやすい」ため、金融システムなどのビジネスプログラムで今もよく使われています。
7. 実務でも役立つCOBOLの数値計算
COBOLは銀行や保険、会計などのシステムで使われることが多いため、数値計算の処理がとても重要です。ADDとSUBTRACTを正しく使いこなすことで、売上の合計、在庫の増減、税金の計算など、さまざまなビジネスロジックを正確に表現できます。
また、COBOLの命令文は英語に近い形で書けるため、他のプログラミング言語よりも読みやすく、初心者にも理解しやすいという特徴があります。
まとめ
今回の記事では、COBOLプログラミングにおける基本中の基本である、数値計算の「ADD文」と「SUBTRACT文」について詳しく解説してきました。プログラミングにおいて計算処理は避けて通れない要素ですが、COBOLの設計思想は「事務処理用」であるため、非常に直感的で英語の文章を読んでいるかのような構文が特徴です。
COBOLの算術演算のポイント再確認
COBOLの計算命令で最も大切なのは、計算後の値がどこに格納されるかを正しく把握することです。ADD文では「TO」の後に続く変数が更新され、SUBTRACT文では「FROM」の後に続く変数から値が引かれ、その結果が保持されます。また、ビジネスロジックを実装する上で非常に強力な味方となるのが「GIVING句」です。これを使うことで、元の数値を破壊することなく、新しい変数に計算結果だけを代入できるため、データの整合性を保ちやすくなります。
さらに、実務においては「複数の項目を一度に計算する」というシーンが多々あります。例えば、商品の単価に複数の手数料を加算する場合や、在庫数から出荷数と不良品数を一括で差し引く場合など、ADDやSUBTRACTの構文を工夫することで、冗長なコードを避けてシンプルに記述することが可能です。
C#との比較で見る計算の考え方
現代的な言語であるC#に慣れている方にとっては、代入演算子(+= や -=)を使わないCOBOLの記述法は少し独特かもしれません。しかし、どちらの言語でも「オーバーフロー」や「精度」の意識は共通して重要です。参考までに、C#で同様の処理を行う場合のコードを見てみましょう。
using System;
class CalculationSample
{
static void Main()
{
// 変数の宣言と初期化
int price = 1000;
int tax = 100;
int discount = 50;
// 加算処理(ADD TO に相当)
price += tax;
Console.WriteLine("消費税加算後の価格: " + price);
// 減算処理(SUBTRACT FROM に相当)
price -= discount;
Console.WriteLine("割引適用後の最終価格: " + price);
// 新しい変数に結果を格納(GIVING に相当)
int finalResult = price + 500;
Console.WriteLine("追加オプション込みの合計: " + finalResult);
}
}
実行結果は以下のようになります。
消費税加算後の価格: 1100
割引適用後の最終価格: 1050
追加オプション込みの合計: 1550
C#では記号を使って簡潔に書けますが、COBOLは「ADD」「SUBTRACT」「TO」「FROM」という単語を使うことで、仕様書を読んでいるかのような可読性を提供してくれます。これは、大規模な金融システムや公共インフラにおいて、コードの意図を誰もが正確に読み取れるようにするための工夫なのです。
今後の学習に向けて
基本の足し算・引き算をマスターしたら、次は掛け算の「MULTIPLY」や割り算の「DIVIDE」、そして複雑な数式を一気に書ける「COMPUTE」を学習することをおすすめします。特にCOMPUTE文は、今回のADDやSUBTRACTを包括する強力なツールですが、まずは基本の文法をしっかり身につけることが、バグの少ない堅牢なプログラムを書くための第一歩となります。
COBOLは「古い言語」と言われることもありますが、その数値計算の正確さと安定性は今もなお高く評価されています。今回学んだ基礎を大切に、ぜひ実際のプログラムを動かしてその挙動を体感してみてください。
生徒
「先生、ADDとSUBTRACTの使い方がだいぶ分かってきました!ADDはTOを使って、SUBTRACTはFROMを使う。まるで英語の構文をそのまま書いているみたいですね。」
先生
「その通りです。COBOLは自然言語に近い形で記述できるように設計された言語ですからね。実際にコードを書いてみて、何か気づいたことはありますか?」
生徒
「はい、SUBTRACTの『FROMの後の値から引く』というルールが、最初は頭の中で逆転しそうになりました。でも、英語で『AをBから引く(Subtract A from B)』と覚えれば、間違えずに済みそうです!」
先生
「素晴らしい気づきですね。言語の背景にあるルールを理解すると定着が早くなります。GIVING句についても使ってみましたか?」
生徒
「使ってみました!元の値を書き換えたくない時にすごく便利ですね。売上データとか、元の数値を残しておきたい計算では必須になりそうです。あと、複数の項目をまとめて計算できるのも、コードがスッキリして良いなと思いました。」
先生
「そうですね。ビジネスプログラムでは大量のデータを扱うので、効率的かつ安全に計算を行う工夫が随所に散りばめられています。次は、小数の扱いやCOMPUTE文についても触れていきましょうか。」
生徒
「はい!もっと複雑な計算もできるようになりたいので、ぜひお願いします!」
先生
「その意気です。では、最後に一つだけ。数値計算をするときは、常に変数の桁数(PIC句)を意識することを忘れないでくださいね。入れ物が小さいと、せっかくの計算結果が溢れてしまいますから。」
生徒
「そうでした、桁あふれ(オーバーフロー)ですね。変数を定義するときからしっかり計算結果を予測して設計するようにします!」