13.14 Voorbeeld: gesproken tijd

Een programma moet de tijd afdrukken, zoals we hem spreken. Voorbeelden:
0013: dertien minuten over twaalf
0715: kwart over zeven
1029: een minuut voor half elf
1344: veertien minuten over half twee
2055: vijf minuten voor negen
2300: elf uur precies

illustratie: Geert Nijmolen

cartoon: man met klok als mond

Voor dit probleem is de oplossing gegeven in de vorm van een programmastructuurdiagram. Verder is er een tabel bij nodig. Die tabel heeft de naam klein en bevat de woorden een, twee, drie, vier, enzovoort tot en met veertien.

psd gesproken tijd

psd tot-kwart-over

psd na-kwart-over

De uitwerking van dit probleem in een COBOL-programma volgt hierna. De regels van het programma zijn genummerd om er in een opgave van het werkboek naar te kunnen verwijzen.


100 IDENTIFICATION DIVISION.
101 PROGRAM-ID. Gesproken-Tijd.
102*Auteur: Andree Hollander
103*Datum:  1989/01/03
104
105 DATA DIVISION.
106 WORKING-STORAGE SECTION.
107 01 tabel-klein.
108    02 klein        picture x(8), occurs 14 times.
109*   voor de woorden 'een' tot en met 'veertien'
110
111 01 systeemtijd.
112    02 uren         picture 99.
113    02 minuten      picture 99.
114*   voor de in woorden uit te drukken tijd
115
116 01 mintekst        picture x(7).
117*   voor de juiste minuten-tekst: 'minuut' of 'minuten'
118
119 01 hulp-subscript  picture 99.
120*   nodig omdat in COBOL een subscript als (30 - minuten) 
121*   niet is toegestaan
122
123 PROCEDURE DIVISION.
124 HOOFD-GEDEELTE.
125     Perform VUL-TABEL
126     Accept systeemtijd from time
127     If uren > 12 then subtract 12 from uren end-if
128     If uren = 0  then move 12 to uren       end-if
129     Evaluate minuten
130        when 1
131        when 29
132        when 31
133        when 59     move "minuut"  to mintekst
134        when other  move "minuten" to mintekst
135     end-evaluate
136     If minuten <= 15 
137        then perform TOT-KWART-OVER
138        else perform NA-KWART-OVER
139     end-if
140     Stop run.
141
142 VUL-TABEL.
143     Move "  een   " to klein(1)
144     Move "  twee  " to klein(2)
145     Move "  drie  " to klein(3)
146     Move "  vier  " to klein(4)
147     Move "  vijf  " to klein(5)
148     Move "  zes   " to klein(6)
149     Move " zeven  " to klein(7)
150     Move "  acht  " to klein(8)
151     Move " negen  " to klein(9)
152     Move "  tien  " to klein(10)
153     Move "  elf   " to klein(11)
154     Move " twaalf " to klein(12)
155     Move "dertien " to klein(13)
156     Move "veertien" to klein(14).
157
158 TOT-KWART-OVER.
159     Evaluate minuten
160        when 0
161             display klein(uren), space, "uur precies"
162        when 1 thru 14 
163             display klein(minuten), space, mintekst,
164                  " over ", klein(uren)
165        when 15
166             display "kwart over", space, klein(uren)
167     end-evaluate.
168
169 NA-KWART-OVER.
170     Add 1 to uren
171     If uren > 12 then subtract 12 from uren end-if
172     Evaluate minuten
173        when 16 thru 29
174             compute hulp-subscript = 30 - minuten
175             display klein(hulp-subscript), space,
176                 mintekst, " voor half ", klein(uren)
177        when 30 
178             display "half", space, klein(uren)
179        when 31 thru 44 
180             display klein(minuten - 30), space,
181                 mintekst, " over half ", klein(uren)
182        when 45 
183             display "kwart voor", space, klein(uren)
184        when 46 thru 59
185             compute hulp-subscript = 60 - minuten
186             display klein(hulp-subscript), space,
187                 mintekst, " voor ", klein(uren)
188     end-evaluate.
omslag 'Tijd voor COBOL'

Serie: leerboeken informatica

Titel: Tijd voor COBOL 2

Auteur: Andree Hollander

naamlogo