• 締切済み

COBOL わかりません。。。

質問を書き直しました。テキストを読めば読むほどわからなくなります。 どなたか教えてくださいませんか?。。。 1月~6月の売上高の合計と、 半年の売上高の合計に対する各月の割合を表示するプログラムを作成しろという課題が出たのですが、実行してみたら合計の数字が違うのです。。。。 WORKING-STORAGE以下を貼り付けました。 01 1月 PIC 9(8). 01 2月 PIC 9(8). 01 3月 PIC 9(8). 01 4月 PIC 9(8). 01 5月 PIC 9(8). 01 6月 PIC 9(8). 01 半年合計 PIC 9(9). 01 表示半年合計 PIC Z(9)9. 01 1月割合 PIC Z(2)9.99. 01 2月割合 PIC Z(2)9.99. 01 3月割合 PIC Z(2)9.99. 01 4月割合 PIC Z(2)9.99. 01 5月割合 PIC Z(2)9.99. 01 6月割合 PIC Z(2)9.99. PROCEDURE DIVISION. DISPLAY "各月の売上高を入力してください。" AT 0505. DISPLAY "1月の売上高" AT 0705. ACCEPT 1月 AT 0718. DISPLAY "2月の売上高" AT 0805. ACCEPT 2月 AT 0818. DISPLAY "3月の売上高" AT 0905. ACCEPT 3月 AT 0918. DISPLAY "4月の売上高" AT 1005. ACCEPT 4月 AT 1018. DISPLAY "5月の売上高" AT 1105. ACCEPT 5月 AT 1118. DISPLAY "6月の売上高" AT 1205. ACCEPT 6月 AT 1218. COMPUTE 半年合計 = 1月 + 2月 + 3月 + 4月 + 5月 + 6月. MOVE 半年合計 TO 表示半年合計. DISPLAY "合計売上高は" AT 1405. DISPLAY 表示半年合計 AT 1428. DISPLAY "円です。" AT 1436. COMPUTE 1月割合 = 100.00 * (1月 / 半年合計). COMPUTE 2月割合 = 100.00 * (2月 / 半年合計). COMPUTE 3月割合 = 100.00 * (3月 / 半年合計). COMPUTE 4月割合 = 100.00 * (4月 / 半年合計). COMPUTE 5月割合 = 100.00 * (5月 / 半年合計). COMPUTE 6月割合 = 100.00 * (6月 / 半年合計). DISPLAY "半年間の売上高に対する各月の割合は" AT 1605. DISPLAY "1月:" AT 1905. DISPLAY 1月割合 AT 1912. DISPLAY "%" AT 1918. DISPLAY "2月:" AT 2005. DISPLAY 2月割合 AT 2012. DISPLAY "%" AT 2018. DISPLAY "3月:" AT 2105. DISPLAY 3月割合 AT 2112. DISPLAY "%" AT 2118. DISPLAY "4月:" AT 2205. DISPLAY 4月割合 AT 2212. DISPLAY "%" AT 2218. DISPLAY "5月:" AT 2305. DISPLAY 5月割合 AT 2312. DISPLAY "%" AT 2318. DISPLAY "6月:" AT 2405. DISPLAY 6月割合 AT 2412. DISPLAY "%" AT 2418. STOP RUN. 実行結果 例えば、1月 00000100       ・       ・       ・     6月 00000100 と各月すべて100と入力したら、合計は6円です。という具合に実行結果が出ます。 どのように直せばよいでしょうか?

みんなの回答

  • neko1963
  • ベストアンサー率49% (127/258)
回答No.4

COMPUTE 1月割合 = 100.00 * (1月 / 半年合計). と記述した場合、コンパイラは (1) 1月 / 半年合計 → 中間ワーク (2) 100.00 * 中間ワーク → 1月割合 に分解して実行するコードを生成します(大まかに言えば) ※中間ワークは、COMPUTEを使った場合にコンパイラが自動的に用意する無名のワーク領域で、その属性は、この場合「01 1月 PIC 9(8).」と「01 半年合計 PIC 9(9).」の属性を基準にして規則に沿って決められます。(中間ワークの桁数は処理系に依存するとされています) どのような処理系をお使いかわかりませんが、乗算を先にした「COMPUTE 1月割合 = (100.00 * 1月) / 半年合計).」というのも一つの方法です。 また、1月~6月を「PIC 9(8).9(2)」、半年合計を「PIC 9(9).9(2)」のように小数点付きの属性にすれば中間ワークの小数点以下の属性を増やせると思います。(中間ワークの桁数は処理系に依存するので、実際の桁数はこの御質問の範囲ではわかりません)

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.3

前の回答の意味は、 1月割合 = 100.00 * 1月 / 半年合計 もっといえば 1月割合 = ( 100.00 * 1月 ) / 半年合計 みたいにしてみたらってことです (評価規則からいうと括弧はいらないはずですが) 先に掛けてしまえば、内部精度は余り神経質にならなくてもいい場合が多々あるって意味です 何でか?ってのは自分で調べて理解してください

okayama_ss
質問者

補足

回答ありがとうございます。 試してみます。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.2

はじめから難しいものにチャレンジしないで、 簡単なものから 手がけましょう。 COBOL入門(Linux + TinyCOBOLでの学習) http://ueno.cool.ne.jp/shirokaze185/htcobol.html はじめてのCOBOL 【総合メニュー】 http://www16.plala.or.jp/hiyokogumi/3/300.html

参考URL:
http://ueno.cool.ne.jp/shirokaze185/htcobol.html
okayama_ss
質問者

お礼

参考URLありがとうございます! 課題なので少し難しい問題なのでしょうか・・・ 簡単なものは難なくこなせていたのですが、 基礎がまだまだみたいですね。 頑張ります。 ありがとうございました。

  • Isamu_S
  • ベストアンサー率21% (25/116)
回答No.1

先のあなたのご質問に答えたものです。 2つの回答が寄せられていて、今度のご質問にはその内容が反映されているようですが、あなたは我々の回答を試された上で解決に至らずに新たなご質問をされているのですか?先の回答に対してのなんのアクションも無く、同様の質問を新たにされていることに不快感を感じます。

okayama_ss
質問者

お礼

私のお礼文に目を通されていないということですね。 不快な思いをさせてしまったことに謝ります。

関連するQ&A