- 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

- - -

zadání

název
sekvenční zápis a čtení souboru dat
data
I volba typu souboru a programovacího jazyka - definováno ve zdrojovém textu
I počet zpracovávaných záznamů - zadáno z klávesnice (1 až 200 milionů)
I systémový čas
W sekvenční datový soubor
O protokol o časové náročnosti zpracování - textový soubor
algoritmy
A cyklus pro vytvoření pracovního souboru - alternativy ve zdrojovém textu
B cyklus pro přečtení pracovního souboru - alternativy ve zdrojovém textu
C pomocné služby a výpočet časové náročnosti - opticky odstíněno od A a B
popis
cílem jsou programovací vzory řešení jedné ze základních úloh pro práci se soubory
podmínky
- vzhledem k rozsahu dat je nutno realizovat na lokálním počítači

qqqqqqqqqqqqqq

$set sourceformat"free"
identification division.
program-id.
    file-seq.
file-control.
    select SB-S assign "seq.dat" line sequential.
    select SB-P assign JM-SB-P line sequential.
data division.
file section.
fd  SB-S.
1   VT-S pic x(9).
fd  SB-P.
1   VT-P pic x(120).
working-storage section.
    copy "sluzby-ws.txt".
 
procedure division.
    move "cob-1 soubor zaznamu s pevnou delkou - Cobol"
       to RADEK-1
    perform ZACNE-I
    perform until P > N
       move P to VT-S *> perform RADEK
       write VT-S
       add 1 to P
    end-perform
    perform KONEC-I
    perform ZACNE-O
    perform until DOST
       read SB-S
          end set DOST to true
          not end continue
       end-read
    end-perform
    perform KONEC-O.
    stop run.
    copy "sluzby-pd.txt".

- - -


 1   R pic 9.
 88  PRACE  value 0.
 88  DOST   value 1.
1   JM-SB-P pic x(20) value " ".
1   RADEK-1 pic x(120).
1   T pic 9(8).
1   P pic 9(9).
1   N pic 9(9).
1   K pic x(20).
 88  TIME-1 value "zapis" "cteni".
 88  TIME-2 value " ".
1   E pic zzzbzz9b999.
 
1   CAS-1.
 2   H1  pic 99.
 2   M1  pic 99.
 2   V1  pic 99.
 2   S1  pic 99.
1   CAS-1R pic 9(8) redefines CAS-1.
1   CAS-2.
 2   H2  pic 99.
 2   M2  pic 99.
 2   V2  pic 99.
 2   S2  pic 99.  
1   CAS-2R pic 9(8) redefines CAS-2.
1   ROZDIL pic 9(8).
1   R-EDIT pic z(5)9,99.
1   C-EDIT pic 99b99b99,99.

- - -

 

<<<  o zpráva z programu, komentář

<<<  COBOL
<<<  99 Bottles of Beer - *e
<<<  i/o komunikace s programem

COBOL není "case sensitivní", tj. nerozlišuje malá a velké písmena

compile_cobol_online,

referenční manuály:
   Cevela about COBOL - - - accept, display - Data items ... - - -
   GnuCOBOL - index - accept - display - pic - - - 
   Micro Focus Visual Cobol / Program definition - data description entry - accept - display - - - 


pg-1   výstup 

 

compile_cobol_onlinewww.tutorialspoint.com/cobol
GnuCOBOL - free compiler
MF Visual Cobol - dokumentace

rozdíly online GNU/Open Cobol oproti Mico Focus Cobol

  • vždy povinně odstavec
       program-id. "jmeno-prog".
  • nestačí záhlaví použité sekce, ale vždy musí být i nadřízená division
  • povinně příkaz "stop run." a příkaz před ním musí končit tečkou