それでは、プログラムに戻りましょう。
000100識別部。 000200プログラムID。 こんにちは。 000300 * ---これは空の行です。 --- 000400環境部門。 000500データ部。 000600手続き部。 000,700から。 000800ディスプレイ「Hello World!」。 000,900実行を停止します。
データ部に追加します。 改行、つまりWORKING-STORAGE SECTIONセクション。 そして、いくつかのWS-AおよびWS-B変数。
次のようになります。
000500データ部。 000510ワーキングストレージセクション。 000 520 01 WS-A PIC 999。 000 530 01 WS-B PIC 9(3)。 000 540 01 WS-RESULT PIC9(6)。
手続き部で。 したがって、次の行があります。
000,700から。 000800ディスプレイ「こんにちは、新しい電卓です!」。 000900ディスプレイ「0〜999の最初の番号を入力してください」。 001000 WS-Aを受け入れます。 001100 DISPLAY「0〜999の2番目の数字を入力してください」。 001200 WS-Bを受け入れます。 001300ディスプレイ「------------------------------------」。 001400ディスプレイ「」。 001500 DISPLAY「結果は次のとおりです。」 001600 WS-AをWS-Bに追加してWS-RESULTを提供します。 001700 DISPLAY「Summ is:」、WS-RESULT。 001800 WS-AからWS-BからWS-RESULTを取得します。 001900 DISPLAY「減算::」、WS-RESULT。 002000 WS-BによるWS-Aの乗算、WS-RESULTの提供。 002100 DISPLAY“ Multiplication is:”、WS-RESULT。 002200 WS-BによるWS-Aの分割、WS-RESULTの提供。 002300 DISPLAY「Divide is:」、WS-RESULT。 002400実行を停止します。
伝統的に、これを拡張子.cobのファイルに保存し、コンパイラーを実行します。 (プログラムの欠落部分を追加することを忘れていませんでした?;-))
正常にアセンブルされた実行可能ファイルを起動し、次の例を参照します。
こんにちは、新しい電卓です! 0から999までの最初の番号を入力してください 300 0から999までの2番目の番号を入力してください 100 ------------------------------------ 結果は次のとおりです。 合計:000400 減算:000200 乗算は:030000 除算:000003
300と100を入力しましたが、残りはプログラムによって推測されました。 結果は一目瞭然であり、今度はより密接に導入した新しいコード行を検討します。
新しいデータ部から始めましょう。
000510ワーキングストレージセクション。 -通常の変数を記述するセクションの開始についてコンパイラーに通知します。 000 520 01 WS-A PIC 999。 000 530 01 WS-B PIC 9(3)。 000 540 01 WS-RESULT PIC 9(6)。
セマンティックロードの観点から見ると、これらの3行は同一であり、レベル01の3つの変数を定義し、その後に変数名(WS-A、WS-B、WS-RESULT)、PIC演算子(古い形式でも記述できます)が続きますPICTURE IS)のように、変数の形式とサイズを設定します。 そして、ここで他の言語に精通している人々にとっての主な驚きが始まります。 サイズと形式は、割り当てられたビット数ではなく、最大文字数によって示されます。
この例では、3つのVALUE番号を含む2つの変数と、6のVALUE番号を含む1つの変数について説明しました。
フォーマットの説明の詳細をご覧ください。 9-変数が数値になり、文字数が桁数を示すことをコンパイラに伝えます。大きな数値の場合、999999999999999のように何かを書き込んだり読んだりするのは不便であり、9(15)の書き方が行われました。括弧の前の文字を繰り返しました。
手続き部に進みましょう。
DISPLAY-プログラムとその出力から理解できるように、世界で最も有用な機能の1つに従事しています。 指定された変数またはテキストを画面に表示します。 カスタムテキストは二重引用符「」で囲む必要があります。 次のように、複数の変数またはテキストを表示できます。
001700 DISPLAY「Summ is:」、WS-RESULT。
主なことは、それらの間のコンマを忘れないことです。
このプログラムは、4つの数学関数にも注目しました。
ADD WS-AをWS-Bに追加して、WS-RESULTを提供します。
WS-RESULTを指定して、WS-AからWS-Aを減算します。
乗算WS-BによるWS-Aの乗算WS-RESULTの乗算。
WS-AによるWS-Bの分割、WS-RESULTの提供。
それらは同じ原理に基づいて構築されています。
<演算子> value1 TO / FROM / BY value2 GIVING変数。
値は、変数または数値のいずれかです。たとえば、
10から20までのWS-RESULTを追加します。
10から20を足して、結果(30)をWS-RESULTに書き込みます。
GIVINGと後続の変数名が省略された場合、結果はAFTER TO、FROM、BYの後に変数に書き込まれます。この場合はWS-B(ただし、DIVIDEの場合はWS-A)です。
小さいながらも重要な注意事項、たとえば次のようなわずかに異なる記述形式があります。
WS-Bに1 2 3を追加-したがって、最初に1 + 2 + 3を追加し、それをWS-Bの値に追加して、結果をWS-Bに書き込みます。
省略でき、TO-ADD 1 WS-A 2 WS-Bはこれらすべての値を追加し、結果をWS-Bに書き込みます。 TOの後に(TOの後の各変数に値が追加され、結果が対応する変数に書き込まれる)、GIVINGの後に、いくつかの変数を指定できます。その後、それぞれに結果が書き込まれます。 同様に、SUBTRACTで操作できます。
しかし、MULTIPLYとDIVIDEの場合、いくつかの変数の表示はGIVINGの後でのみ可能です(これはコンパイラーごとに個別に指定する必要があります)。
さらに、DIVIDEには2番目の録音形式があります。
WS-AをDIVIDE WS-B BY-INTOに変更するWS-Cを使用すると、変数の順序も変更されます。使用する形式はユーザーの選択のままです。 私はそれを示すだけです:
WS-AをWS-Bに分割するのはWS-B / WS-A = WS-Bです
WS-AによるWS-Bの分割WS-RESULTの提供
これはWS-B / WS-A = WS-RESULTです
これは重要です! BYオプションはGIVINGなしでは機能しません。 プログラムはエラーのためにコンパイルされません。
そして最後に、小さな「ギフト」-おそらく読者はすでに「変数に値を割り当てる方法」を疑問に思っていました。 MOVEを使用する
10をWS-Aに移動
またはWS-AからWS-Bに移動します
またはMOVE 10 TO WS-A WS-B
これは重要です! MOVEは、「出力」でのみいくつかの変数を受け入れます。 TOの後。
PSそして、あなたはおそらく出力で得た数字とそれらのゼロの数に驚くでしょうか? これについては、次の記事で検討します。
ボロンツォフ「nerfur」ビャチェスラフ。 2011年。
重要なアップデート! 残念ながら、DIVIDEの重要なキーワードを示すのを忘れていました。
WS-AによるWS-Bの分割WS-RESULT REMINDER <変数>の提供
REMAINDERを使用して、部門からのRESIDUEが書き込まれる変数を指定します。