COBOL è un linguaggio di programmazione datato 1959, terribilmente macchinoso e obsoleto, molto odiato. Trova applicazione in ambito finanziario, operazioni delle banche, in quanto i vecchi sistemi continuano ad usarlo ed è difficile fare una transizione che coinvolga l'intero sistema bancario. Vediamo alcune caratteristiche:
- linguaggio compilato, essendo molto "macchinoso" e a basso livello, si tratta di dare istruzioni alla macchina più che una programmazione "moderna", finalizzata all'astrazione e molto più versatile
- commentare il codice è un parto: i commenti (che inziano col simbolo * o *> a seconda dei casi, delle "divisioni" in cui è strutturato il programma) devono appartenere alla colonna corretta, altrimenti genera errore di compilazione; una cosa al giorno d'oggi inconcepibile
- prima di compilare occorre inserire una riga vuota alla fine, altrimenti il compilatore ti avvisa (nello screen poi mostro anche questo risultato 😁 )
- le espressioni vanno inserite singolarmente, a differenza di tutti i linguaggi di programmazione o quasi (se scrivo x=1+2-1/4+... in genere, sia compilatore che interprete, lo capiscono senza problemi, con COBOL invece non si può fare); quindi in ambito scientifico, è proprio una limitazione estrema, alcune espressioni sono difficili o quasi impossibili da "scompattare" in una serie di istruzioni singole, richiedono (inutili) variabili di appoggio ecc
Fatta questa premessa: a parte l'ambito bancario, COBOL è poco usato, in pochi lo conoscono bene (tra l'altro le posizioni lavorative sono pagate in modo esorbitante rispetto al resto, peccato che sia un linguaggio proprio di... hem..). Quindi realisticamente parlando ha poco senso impiegarlo per altri scopi. Proprio per questa ragione, <<Just For Fun>> ho deciso di realizzare un programma con utilità ingegneristica ovvero: ambito idrodinamico, calcolo dell'altezza di moto uniforme e altezza critica. Quindi formule empiriche usate per le correnti a pelo libero, un'indicazione del comportamento idrodinamico per suddividere "alvei fluviali" da "alvei torrentizi" (i primi generalmente più lenti, livello più alto, viceversa i secondi); il punto che fa da limite ovvero Yu=Yc viene detto "alveo in condizioni critiche" ed è caratterizzato dal valore minimo di energia per quella portata.
Riporto il codice (per chi conosce un po' di programmazione, guardate quanto sono macchinose le istruzioni, dalla creazione delle variabili alla struttura del programma, alle singole espressioni):
IDENTIFICATION DIVISION.
PROGRAM-ID. IDRODINAMICA-1D.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 Q PIC 999V99.
01 b PIC 999V99.
01 ks PIC 99.
01 iff PIC 9V9999.
01 Yu PIC 99V999.
01 Yc PIC 99V999.
01 TEMP PIC 999999V99999999.
PROCEDURE DIVISION.
SET Q TO 100.
SET ks TO 25.
SET iff TO 0.005.
SET b to 100.
DIVIDE b INTO Q GIVING Yu.
DIVIDE ks INTO Yu GIVING Yu.
COMPUTE TEMP=iff**0.5.
DIVIDE TEMP INTO Yu GIVING Yu.
COMPUTE Yu=Yu**0.6.
MULTIPLY b BY b GIVING TEMP.
MULTIPLY TEMP BY 9.8 GIVING TEMP.
DIVIDE TEMP INTO Q GIVING Yc.
COMPUTE TEMP=1.0/TEMP.
MULTIPLY TEMP BY Q GIVING Yc.
MULTIPLY Yc BY Q GIVING Yc.
COMPUTE Yc=Yc**0.33333.
DISPLAY " ".
DISPLAY "DATI DI PARTENZA:".
DISPLAY "Q = " Q " [m3/s]".
DISPLAY "ks = " ks " [(m1/3)/s]".
DISPLAY "if = " iff " [/]".
DISPLAY "b = " b " [m]".
DISPLAY " ".
DISPLAY "RISULTATI:".
DISPLAY "Yu = " Yu " m".
DISPLAY "Yc = " Yc " m".
IF Yu>Yc
DISPLAY "Yu > Yc, ALVEO FLUVIALE"
ELSE
DISPLAY "Yu < Yc, ALVEO TORRENTIZIO"
STOP RUN.
Con i dati di esempio che ho impostato (eventualmente si possono cambiare per vedere poi il risulato), l'alveo risulta di tipo fluviale.
Vi riporto poi uno screenshot dei risultati, per praticità ho usato il compilatore online di tutorialspoint.com, altrimenti installare e configurare COBOL su Linux è un'altra impresa solo quella! 😁

Conoscete COBOL? Cosa ne pensate per l'ambito tecnico/scientifico? Direi che è completamente controindicato e online non si trova nulla a riguardo, proprio per questo è bene usarlo! 😂 😂