Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Vettori e tabelle - vettori.cbl

vettori.cbl

Caricato da: Netarrow
Scarica il programma completo

  1. * Questo programma fa l'intersezione e la differenza di due tabelle
  2.  
  3. identification division.
  4. * Questo è tipo il program di pascal
  5. program-id. operazioni-su-vettori-e-tabelle.
  6. author. Matteo.
  7. data division.
  8. * Questo sarebbe tipo var
  9. working-storage section.
  10.  
  11. * Queste sono tabelle contenenti 20 elementi, che hanno
  12. * come campi codice fiscale, nome e titolo di studio
  13. 01  abitanti.
  14.     02  abitante occurs 20 times.
  15.       03  codice-fiscale-abitante pic x(30).
  16.       03  nome-abitante pic x(30).
  17.       03  titolo-studio-abitante pic x(30).
  18.  
  19. 01  dipendenti.
  20.     02  dipendente occurs 20 times.
  21.       03  codice-fiscale-dipendente pic x(30).
  22.       03  nome-dipendente pic x(30).
  23.       03  qualifica-dipendente pic x(30).
  24.  
  25. 01  interurbani.
  26.     02  interurbano occurs 20 times.
  27.       03  cod-fis-interurbano pic x(30).
  28.       03  nome-interurbano pic x(30).
  29.       03  qualifica-interurbano pic x(30).
  30.  
  31. 01  non-dipendenti.
  32.     02  non-dipendente occurs 20 times.
  33.       03  cod-fis-non-dipendente pic x(30).
  34.       03  nome-non-dipendente pic x(30).
  35.       03  titolo-studio-non-dipendente pic x(30).
  36.  
  37. * Crea della variabili intere normali
  38. * in pascal sarebbe dim:integer ecc...
  39. 77  dim-abitanti pic 99.
  40. 77  dim-dipendenti pic 99.
  41. 77  i pic 99.
  42. 77  j pic 99.
  43. 77  k pic 99.
  44.      
  45. procedure division.
  46.  
  47. * Questa è la procedura iniziale
  48. * in pascal era begin..end. indicato spesso col commento {MAIN}
  49. inizio.
  50. * Con perform si richiamano le procedure
  51.     perform insDimAbitanti.
  52.     perform insAbitanti.
  53.     perform insDimDipendenti.
  54.     perform insDipendenti.
  55.     perform cercaNonDipendenti.
  56. * Display sarebbe un writeln
  57.     display "Gli abitanti non dipendenti sono:"
  58. * In COBOL un vettore lo si può stampare direttamente
  59. * senza creae la procedura visualizza con il ciclo for come in pascal
  60.     display non-dipendenti.
  61.     perform cercaInterurbani.
  62.     display "I dipendenti non abitanti sono:".
  63.     display interurbani.
  64.     stop run.
  65.  
  66. * Questa procedura crea una tabella contenente i dipendenti
  67. * che non sono abitanti in quel comune
  68. cercaInterurbani.
  69. * inizializza le variabili i, j e k a 1, in pascal sarebbe
  70. * i:=1 j:=1 k:=1;
  71.     set i j k to 1.
  72.  
  73. * Con perform until si crea un while del pascal, visto che in cobol
  74. * i cicli iterano per falso o si aggiunge not o si scambiano le relazioni:
  75. * (maggiore diventa minore, uguale diverso e così via)
  76.     perform until not (i <= dim-abitanti and j <= dim-dipendenti)
  77. * Almeno l'if è uguale a pascal, le () tonde sarebbero le [] di pascal per indicare
  78. * gli indici dei vettori
  79.       if codice-fiscale-abitante(i) = codice-fiscale-dipendente(j)
  80. * aggiunge 1 a i e j
  81.         add 1 to i j
  82.       else
  83.         if codice-fiscale-abitante(i) > codice-fiscale-dipendente(j)
  84. * con move si assegna il valore della prima variabile/campo
  85. * a quella/quello specificato/a dopo to: move sorgente to destinazione
  86. * N.B il valore viene copiato non spostato, quindi entrambe le variabili avranno
  87. * lo stesso valore
  88.           move codice-fiscale-dipendente(j) to cod-fis-interurbano(k)
  89.           move nome-dipendente(j) to nome-interurbano(k)
  90.           move qualifica-dipendente(j) to qualifica-interurbano(k)
  91.           add 1 to j k
  92.       else
  93.           add 1 to i  
  94.         end-if  
  95.       end-if
  96.     end-perform.
  97.     perform until not (j <= dim-dipendenti)
  98.       move codice-fiscale-dipendente(j) to cod-fis-interurbano(k)
  99.       move nome-dipendente(j) to nome-interurbano(k)
  100.       move qualifica-dipendente(j) to qualifica-interurbano(k)
  101.       add 1 to j k
  102.     end-perform.
  103. ex-cercaInterurbani. exit.
  104.  
  105. * Crea una tabella contenente gli abitanti non lavoratori
  106. cercaNonDipendenti.
  107.     set i j k to 1.
  108.     perform until not (i <= dim-abitanti and j <= dim-dipendenti)
  109.       if codice-fiscale-abitante(i) = codice-fiscale-dipendente(j)
  110.         add 1 to i j
  111.       else
  112.         if codice-fiscale-abitante(i) < codice-fiscale-dipendente(j)
  113.           move codice-fiscale-abitante(i) to cod-fis-non-dipendente(k)
  114.           move nome-abitante(i) to nome-non-dipendente(k)
  115.           move titolo-studio-abitante(i) to titolo-studio-non-dipendente(k)
  116.           add 1 to i k
  117.         else
  118.           add 1 to j
  119.         end-if  
  120.       end-if
  121.     end-perform.
  122.     perform until not (i <= dim-abitanti)
  123.       move codice-fiscale-abitante(i) to cod-fis-non-dipendente(k)
  124.       move nome-abitante(i) to nome-non-dipendente(k)
  125.       move titolo-studio-abitante(i) to titolo-studio-non-dipendente(k)
  126.       add 1 to i k
  127.     end-perform.
  128. ex-cercaNonDipendenti. exit.
  129.  
  130. * Questo è l'inserimento della tabella dei dipendenti
  131. insDipendenti.
  132.  
  133. * Questo sarebbe un ciclo for, tradotto sarebbe:
  134. * inizializza i ad 1 e aumentala di 1 fino a quando
  135. * non arriva alla dimensione inserita(dim-dipendenti)
  136.    perform varying i from 1 by 1 until i > dim-dipendenti
  137. * Come in pascal per stampare il valore di una variabile
  138. * si scrive il suo nome fuori dalle ", in cobol non serve la virgola
  139.      display "Inserire codice fiscale del dipendente "  i
  140. * accept sarebbe un readln
  141.      accept codice-fiscale-dipendente(i)
  142.      display "Inserire nome del dipendente "  i
  143.      accept nome-dipendente(i)
  144.      display "Inserire qualifica del dipendente "  i
  145.      accept qualifica-dipendente(i)
  146.    end-perform.
  147.  
  148. ex-insDipendenti. exit.
  149.  
  150. * Questo è l'inserimento della dimensione della tabella controllando che
  151. * sia compreso fra 1 e il massimo
  152. insDimDipendenti.
  153.     set dim-dipendenti to 0.
  154.    
  155.     perform until dim-dipendenti >= 1 and <= 20
  156.       display "Inserire numero dipendenti, max 20"
  157.       accept dim-dipendenti
  158.     end-perform.
  159.    
  160. ex-insDimDipendenti. exit.
  161.  
  162. insAbitanti.
  163.  
  164.    perform varying i from 1 by 1 until i > dim-abitanti
  165.      display "Inserire codice fiscale dell'abitante "  i
  166.      accept codice-fiscale-abitante(i)
  167.      display "Inserire nome dell'abitante "  i
  168.      accept nome-abitante(i)
  169.      display "Inserire titolo di studio dell'abitante "  i
  170.      accept titolo-studio-abitante(i)
  171.    end-perform.
  172.  
  173. ex-insAbitanti. exit.  
  174.  
  175. insDimAbitanti.
  176.     set dim-abitanti to 0.
  177.  
  178.     perform until dim-abitanti >= 1 and <= 20
  179.       display "Inserire numero abitanti, max 20"
  180.       accept dim-abitanti
  181.     end-perform.
  182.  
  183. ex-insDimAbitanti. exit.