« 2007年5月9日

2007年5月10日の投稿

2007年5月13日 »

FizzBuzzという単語を最近見かけた記憶はありますか?

どうしてプログラマに・・・プログラムが書けないのか?

というエントリから始まったこの問題。
1から100までの数字について以下のルールの通りに
出力するプログラムを2分間で作れるか?という問題です。

  1. 3で割り切れる場合はFIZZと出力する
  2. 5で割り切れる場合はBUZZと出力する
  3. 15で割り切れる場合はFIZZBUZZと出力する
  4. それ以外は元の数字を出力する

という問題です。

私も挑戦してみました。
SEが名前を明かして取り組むのはかなりの勇気が必要です。
しかしこれも自己研鑽の1つと思ってやってみました。
結果は以下の通りです。

000100******************************************************************
000110 IDENTIFICATION        DIVISION.
000120 PROGRAM-ID.           FIZZBUZZ.
000130 AUTHOR.               YOUHEI YAMAGUCHI
000140 DATE.                 2007.05.10.
000150*
000160 ENVIRONMENT           DIVISION.
000170*
000180 INPUT-OUTPUT         SECTION.
000190 FILE-CONTROL.
000200 SELECT   LP-FILE   ASSIGN   TO   PRINT.
000210*
000220 DATA     DIVISION.
000230 FILE     SECTION.
000240 FD  LP-FILE
000250 RECORDING     MODE      IS     F
000260 BLOCK         CONTAINS  1      RECORDS
000270 RECORD        CONTAINS  133    CHARACTERS
000280 LABEL         RECORD           STANDARD
000290 DATA          RECORD           LP-REC.
000300 01  LP-REC.
000310 03  FILLER                     PIC  X(133).
000320*
000330 WORKING-STORAGE SECTION.
000340 01   COUNT-AREA.
000350 03   IM-CNT             PIC S9(15)   VALUE  ZERO  COMP-3.
000360 03   IM-GVN             PIC S9(15)   VALUE  ZERO  COMP-3.
000370 03   IM-RMD             PIC S9(15)   VALUE  ZERO  COMP-3.
000380 01   WORD-AREA.
000390 03   IM-FIZZ            PIC  X(04)   VALUE  'フィズ'.
000400 03   IM-BUZZ            PIC  X(04)   VALUE  'バズ'.
000410 03   IM-FZBZ            PIC  X(04)   VALUE  'フィズバズ'.
000420 01   PRINT01.
000430 03   FILLER             PIC  X(10)   VALUE  SPACE.
000440 03   PGNAME             PIC  X(10)
000450 VALUE  '(FIZZBUZZ)'.
000460 03   FILLER             PIC  X(20)   VALUE  SPACE.
000470 03   PGNAME             PIC  X(93)
000480 VALUE  '*** フィズ ト バズ ヲ シュツリョク スル プログラム ***'.
000490 01   PRINT02.
000500 03   FILLER             PIC  X(20)   VALUE  SPACE.
000510 03   PR-IDX             PIC  9(03).
000520 03   FILLER             PIC  X(10)   VALUE  SPACE.
000530 03   PR-OUT             PIC  X(10).
000540 03   FILLER             PIC  X(90)   VALUE  SPACE.
000550 EJECT
000560*
000570 PROCEDURE     DIVISION.
000580 FIZZBUZZ-RTN  SECTION.
000590 PERFORM       INIT-RTN.
000600 PERFORM       MAIN-RTN   UNTIL   IM-CNT=100.
000610 PERFORM       TERM-RTN.
000620 STOP RUN.
000630 FIZZBUZZ-EXIT.
000640 EXIT.
000650*
000660 INIT-RTN      SECTION
000670 OPEN     OUTPUT      LP-FILE.
000680 MOVE     ZERO        TO      IM-CNT.
000690 WRITE    LP-REC      FROM    PRINT01   AFTER   CC1.
000700 INIT-EXIT.
000710 EXIT.
000720*
000730 MAIN-RTN      SECTION.
000740 COMPUTE  IM-CNT      =       IM-CNT    +       1
000750 MOVE     IM-CNT      TO      PR-IDX.
000760 DIVIDE   IM-CNT      BY      15
000770          GIVING      IM-GVN
000780          REMINDER    IM-RMD.
000790 IF       IM-RMD      =       ZERO
000800          GO TO       MAIN-FIFTEEN.
000810 DIVIDE   IM-CNT      BY      3
000820          GIVING      IM-GBN
000830          REMINDER    IM-RMD.
000840 IF       IM-RMD      =       ZERO
000850          GO TO       MAIN-THREE.
000860 DIVIDE   IM-CNT      BY      5
000870          GIVING      IM-GBN
000880          REMINDER    IM-RMD.
000890 IF       IM-RMD      =       ZERO
000900          GO TO       MAIN-FIVE.
000910 MAIN-OTHER.
000920 MOVE     IM-IDX      TO      PR-OUT.
000930 GO TO    MAIN-EXIT.
000940 MAIN-FIFTEEN
000950 MOVE     IM-FZBZ     TO      PR-OUT.
000960 GO TO    MAIN-EXIT.
000970 MAIN-THREE.
000980 MOVE     IM-FIZZ     TO      PR-OUT.
000990 GO TO    MAIN-EXIT.
001000 MAIN-FIVE.
001010 MOVE     IM-BUZZ     TO      PR-OUT.
001020 GO TO    MAIN-EXIT.
001030 MAIN-EXIT.
001040 WRITE    LP-REC      FROM    PRINT02 AFTER 2.
001050 EXIT.
001060*
001070 TERM-RTN      SECTION.
001080 CLOSE    LP-FILE
001090 TERM-EXIT.
001100 EXIT.
001110 *****************************************************************


設計は数分で終わったんですが、コーディングに30分もかかりました。
JCLも用意してあります。
どなたかコンパイル指示書と実行指示書にハンコください。

というジョークです。
コーディングはテキストエディタ上で本当にやりました。
30分かかりました。

普段はNotesとVB.NETを守備範囲にしてます。
私はCOBOLでお金をいただいたことはありません。
新人の時に座学で学んだのみです。
(※そう言うわけで上記の例は弊社のCOBOL技術力とまったく関係ありません)

小中学生のときにn88-BASICに慣れ親しんだ者として
私はGOTOに拒絶反応を示さない体質です。
でもこれがダメな人って多いですよね。
わざとたっぷり使ってみました。大盛りGOTOダク、0C7乗せで。

yohei

« 2007年5月9日

2007年5月10日の投稿

2007年5月13日 »

» このブログのTOP

» オルタナティブ・ブログTOP



プロフィール

山口 陽平

山口 陽平

国内SIerに勤務。現在の担当業務は資金決済法対応を中心とした資金移動業者や前払式支払手段発行者向けの態勢整備コンサルティング。松坂世代。

詳しいプロフィール

Special

- PR -
カレンダー
2013年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
yohei
Special オルタナトーク

仕事が嫌になった時、どう立ち直ったのですか?

カテゴリー
エンタープライズ・ピックアップ

news094.gif 顧客に“ワォ!”という体験を提供――ザッポスに学ぶ企業文化の確立
単に商品を届けるだけでなく、サービスを通じて“ワォ!”という驚きの体験を届けることを目指している。ザッポスのWebサイトには、顧客からの感謝と賞賛があふれており、きわめて高い顧客満足を実現している。(12/17)

news094.gif ちょっとした対話が成長を助ける――上司と部下が話すとき互いに学び合う
上司や先輩の背中を見て、仕事を学べ――。このように言う人がいるが、実際どのようにして学べばいいのだろうか。よく分からない人に、3つの事例を紹介しよう。(12/11)

news094.gif 悩んだときの、自己啓発書の触れ方
「自己啓発書は説教臭いから嫌い」という人もいるだろう。でも読めば元気になる本もあるので、一方的に否定するのはもったいない。今回は、悩んだときの自己啓発書の読み方を紹介しよう。(12/5)

news094.gif 考えるべきは得意なものは何かではなく、お客さまが高く評価するものは何か
自社製品と競合製品を比べた場合、自社製品が選ばれるのは価格や機能が主ではない。いかに顧客の価値を向上させることができるかが重要なポイントになる。(11/21)

news094.gif なんて素敵にフェイスブック
夏から秋にかけて行った「誠 ビジネスショートショート大賞」。吉岡編集長賞を受賞した作品が、山口陽平(応募時ペンネーム:修治)さんの「なんて素敵にフェイスブック」です。平安時代、塀に文章を書くことで交流していた貴族。「塀(へい)に嘯(うそぶ)く」ところから、それを「フェイスブック」と呼んだとか。(11/16)

news094.gif 部下を叱る2つのポイント
叱るのは難しい。上司だって人間だ、言いづらいことを言うのには勇気がいるもの。役割だと割り切り、叱ってはみたものの、部下がむっとしたら自分も嫌な気分になる。そんな時に気をつけたいポイントが2つある。(11/14)

news094.gif 第6回 幸せの創造こそ、ビジネスの使命
会社は何のために存在するのでしょうか。私の考えはシンプルです。人間のすべての営みは、幸せになるためのものです――。2012年11月発売予定の斉藤徹氏の新著「BE ソーシャル!」から、「はじめに」および、第1章「そして世界は透明になった」を6回に分けてお送りする。(11/8)

オルタナティブ・ブログは、専門スタッフにより、企画・構成されています。入力頂いた内容は、アイティメディアの他、オルタナティブ・ブログ、及び本記事執筆会社に提供されます。


サイトマップ | 利用規約 | プライバシーポリシー | 広告案内 | お問い合わせ