- příkaz "accept CAS-1 from time" na začátku příslušné varianty zpracování přečte ze systému aktuální čas ve
formátu H1 = hodina, M1 = minuta, V1 = vteřina, S1 = setina vteřiny - na konci pak obdobně pro CAS-2
- problém je v tom, že hodina má 60 minut a minuta 60 vteřin, ale rozdíl je potřeba znát v setinách vteřiny,
takže úkol zní:
máme konkretní hodnoty ve strukturách CAS-1 a CAS-2 a je potřeba vypočítat ROZDIL = CAS-2 - CAS-1
- vzorec pro řešení úkolu je uveden dále - realizováno kompilítorem MF Visual Object Cobol 1996 ve Windows XP
$set sourceformat"free"
identification division.
program-id.
pg-time.
file-control.
select SOUBOR assign "write.dat" sequential.
select CASY assign "casy.txt" line sequential.
data division.
file section.
fd SOUBOR.
1 VETA pic 9(8) comp.
fd CASY.
1 RADEK pic x(120).
working-storage section.
1 STAV-SB pic 9.
88 CTENI value 0.
88 KONEC value 1.
1 P pic 9(9) comp.
1 L pic 9(9) comp value 1000000.
1 E pic zzzbzzzbzzzbzzz.
1 CAS-1.
2 H1 pic 99.
2 M1 pic 99.
2 V1 pic 99.
2 S1 pic 99.
1 CAS-2.
2 H2 pic 99.
2 M2 pic 99.
2 V2 pic 99.
2 S2 pic 99.
1 ROZDIL pic 9(8).
procedure division.
open output CASY
perform ZAPIS
perform READ-1
perform READ-2
perform READ-3
close CASY
stop run.
READ-1 section.
open input SOUBOR
set CTENI to true
accept CAS-1 from time
perform until KONEC
read SOUBOR
end set KONEC to true
not end
continue
end-read
end-perform
accept CAS-2 from time
perform VYPOCET
close SOUBOR.
READ-2 section.
open input SOUBOR
accept CAS-1 from time.
A.
read SOUBOR
end go B.
go A.
B.
accept CAS-2 from time
perform VYPOCET
close SOUBOR.
C.
exit section.
READ-3 section.
open input SOUBOR
set CTENI to true
accept CAS-1 from time
read SOUBOR
end set KONEC to true
end-read
perform until KONEC
read SOUBOR
end set KONEC to true
end-read
end-perform
accept CAS-2 from time
perform VYPOCET
close SOUBOR.
ZAPIS section.
open output SOUBOR
move 1 to P
accept CAS-1 from time
perform until P > L
write VETA from P
add 1 to P
end-perform
accept CAS-2 from time
perform VYPOCET
close SOUBOR.
VYPOCET section.
move L to E
compute ROZDIL =
((H2*3600*100)+(M2*60*100)+(V2*100)+(S2)) -
((H1*3600*100)+(M1*60*100)+(V1*100)+(S1))
move " " to RADEK
string
"počet: " E
" čas-1: " CAS-1
" čas-2: " CAS-2
" rozdíl: " ROZDIL
into RADEK
write RADEK
.
protokol - soubor má 4 MB (věta 4 B)
počet: 1 000 000 čas-1: 09240218 čas-2: 09240335 rozdíl: 00000117
počet: 1 000 000 čas-1: 09240337 čas-2: 09240356 rozdíl: 00000019
počet: 1 000 000 čas-1: 09240357 čas-2: 09240376 rozdíl: 00000019
počet: 1 000 000 čas-1: 09240376 čas-2: 09240396 rozdíl: 00000020
protokol s rozsáhlejšími daty - soubor má 400 MB (věta 4 B)
počet: 100 000 000 čas-1: 08553195 čas-2: 08572812 rozdíl: 00011617
počet: 100 000 000 čas-1: 08572812 čas-2: 08574837 rozdíl: 00002025
počet: 100 000 000 čas-1: 08574837 čas-2: 08580820 rozdíl: 00001983
počet: 100 000 000 čas-1: 08580820 čas-2: 08582817 rozdíl: 00001997
- - -