Search code examples
compiler-errorscobolgnucobol

Multiple PROGRAM-ID's without matching END PROGRAM


I am trying to implement a simple calculator in COBOL and struggling with a particular issue.

My compiler, GNU Cobol 3.2.0 is always giving me this issue and I do not know how to fix ist.

The error is:

jdoodle.cobc:132: error: multiple PROGRAM-ID's without matching END PROGRAM 130 | exit program. 131 | 132 >

My code:

identification division.
program-id. taschenrechner.
data division.
working-storage section.
01 zahl_1 pic 9(10).
01 zahl_2 pic 9(10).
01 ergebnis pic 9(10).
01 rechenoperator pic 9(10).
01 clear_screen_counter pic 9(10).
01 zahl_1_str pic z.
01 zahl_2_str pic z.
01 ergebnis_str pic z.


procedure division.

    *> Rechenoperation abfragen
    *> Rechenoperationen in vier verschiedenen Methoden implementieren
    *> Ergebnis returnen
    
    display 'Taschenrechner in COBOL.'.
    display ' '.
    display 'Bitte wählen Sie einer der folgenden Optionen aus:'.
    display ' '.
    display 'Tippen Sie 1 für Addition'.
    display 'Tippen Sie 2 für Subtraktion'.
    display 'Tippen Sie 3 für Multiplikation'.
    display 'Tippen Sie 4 für Division'.
    display ' '.
    
    move 1 to rechenoperator.
    
    display 'Geben Sie die erste Zahl ein:'.
    move 1 to zahl_1.
    
    display 'Geben Sie die zweite Zahl ein:'.
    move 1 to zahl_2.
    

        
        
        
identification division.
program-id. addition.
data division.
    linkage section.
    01 zahl_1 pic 9(10).
    01 zahl_2 pic 9(10).
    01 ergebnis pic 9(10).
    01 zahl_1_str pic z.
    01 zahl_2_str pic z.
    01 ergebnis_str pic z.
procedure division.
    
    add zahl_1 to zahl_2 giving ergebnis.
    
    display '----------------------------------------------------------------------------------------------'
    display 'Das Ergebnis der Addition zwischen ' zahl_1_str ' und ' zahl_2_str ' lautet: ' ergebnis_str.
    display '----------------------------------------------------------------------------------------------'
    
exit program.
  
  
  
    
identification division.
program-id. subtraktion.
data division.
    linkage section.
    01 zahl_1 pic 9(10).
    01 zahl_2 pic 9(10).
    01 ergebnis pic 9(10).
    01 zahl_1_str pic z.
    01 zahl_2_str pic z.
    01 ergebnis_str pic z.
procedure division.
    
    subtract zahl_1 from zahl_2 giving ergebnis.
    
    display '----------------------------------------------------------------------------------------------'
    display 'Das Ergebnis der Subtraktion zwischen ' zahl_1_str ' und ' zahl_2_str ' lautet: ' ergebnis_str.
    display '----------------------------------------------------------------------------------------------'
    
exit program.
    
    
    
    
identification division.
program-id. multiplikation.
data division.
    linkage section.
    01 zahl_1 pic 9(10).
    01 zahl_2 pic 9(10).
    01 ergebnis pic 9(10).
    01 zahl_1_str pic z.
    01 zahl_2_str pic z.
    01 ergebnis_str pic z.
procedure division.
    
    multiply zahl_1 by zahl_2 giving ergebnis.
    
    display '----------------------------------------------------------------------------------------------'
    display 'Das Ergebnis der Multiplikation zwischen ' zahl_1_str ' und ' zahl_2_str ' lautet: ' ergebnis_str.
    display '----------------------------------------------------------------------------------------------'
    
exit program.
    
    
    
    
identification division.
program-id. division.
data division.
    linkage section.
    01 zahl_1 pic 9(10).
    01 zahl_2 pic 9(10).
    01 ergebnis pic 9(10).
    01 zahl_1_str pic z.
    01 zahl_2_str pic z.
    01 ergebnis_str pic z.
procedure division.
    
    divide zahl_1 by zahl_2 giving ergebnis.
    
    display '----------------------------------------------------------------------------------------------'
    display 'Das Ergebnis der Division zwischen ' zahl_1_str ' und ' zahl_2_str ' lautet: ' ergebnis_str.
    display '----------------------------------------------------------------------------------------------'
    
exit program.
    

I would be very thankful if someone could help me out.

I googled and tried to implement fixes that unfortunately did not work.


Solution

  • exit program.
    

    Does not end the scope of the nested program. Replace each occurrence of exit program. with end program followed by the program-name. At the end of the source add the end program for the main program.

    identification division.
    program-id. taschenrechner.
    ...
    
    identification division.
    program-id. addition.
    ...
    end program addition.
    
    identification division.
    program-id. subtraktion.
    ...
    end program subtraktion.
    
    identification division.
    program-id. multiplikation.
    ...
    end program multiplikation.
    
    identification division.
    program-id. division.
    ...
    end program division.
    
    end program taschenrechner.