Author Topic: The flood hydrograph for a given retun period with the SCS-CN method.  (Read 3959 times)

0 Members and 1 Guest are viewing this topic.

Offline bartok

  • Newbie
  • Posts: 80
    • View Profile
I have finally finished my program.
thank you very much for the answers to my questions!

"Unfortunately" the program is in Italian. The inputs are about the data of the precipitation properties of the area, and the phisical characteristics of the drainage basin.

The program, among other things, calculates the maximum water flow for a given return period.

If you press "123" and then ENTER on the first input, it loads an example.

At the end, press [1] to save data.

Tell me for any suggestion please.

Code: QB64: [Select]
  1. '**************************************************************************************************************************************************
  2. '*                                     Calcolo dell'idrogramma di piena di progetto tramite il metodo SCS-CN                                      *
  3. '*                                                             - ing. Carlo BARTOLINI -                                                           *
  4. '**************************************************************************************************************************************************
  5. '*                                                         Inizio sezione principale codice                                                       *
  6. '**************************************************************************************************************************************************
  7.  
  8. _TITLE "Calcolo dell'idrogramma di piena di progetto tramite il metodo SCS-CN - ing. Carlo BARTOLINI"
  9. TempiRitorno:
  10. DATA 0,2,5,10,20,50,100,200,500,1000
  11. DATA 1,0.82,1.24,1.46,1.69,2.04,2.34,2.70,3.22,3.64
  12. CoefficientiIdrogrammaUnitarioMockus:
  13. DATA 0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3,3.1,3.2,3.3,3.4,3.5,3.6,3.7,3.8,3.9,4,4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,5
  14. DATA 0.03,0.1,0.19,0.31,0.47,0.66,0.82,0.93,0.99,1,0.99,0.93,0.86,0.78,0.68,0.56,0.46,0.39,0.33,0.28,0.244,0.207,0.177,0.147,0.127,0.107,0.092,0.077,0.066,0.055,0.048,0.04,0.035,0.029,0.025,0.021,0.018,0.015,0.013,0.011,0.009,0.008,0.007,0.006,0.006,0.005,0.004,0.003,0.001,0
  15. CoefficientiDiscretizzazioneTemporale:
  16. DATA 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20,22,24,26,28,30,32
  17. DATA 0.1,0.2,0.3,0.2,0.3,0.3,0.3,0.3,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,1,1,1,1,1,1,1
  18.  
  19. TYPE mockus
  20.     tSUta AS SINGLE
  21.     qSUqp AS SINGLE
  22. TYPE CoefficientiDiscretizzazioneTemporale
  23.     N AS INTEGER
  24.     tSUta AS SINGLE
  25. TYPE TempiRitorno
  26.     T AS INTEGER
  27.     k AS SINGLE
  28. TYPE matrice1
  29.     mdt AS SINGLE
  30.     h1 AS SINGLE
  31.     i1 AS SINGLE
  32.     i2 AS SINGLE
  33.     DH AS SINGLE
  34.     H2 AS SINGLE
  35.     he AS SINGLE
  36.     Dhe AS SINGLE
  37.     tSUta AS SINGLE
  38.     qSUqp AS SINGLE
  39.     tmSUta AS SINGLE
  40.     qmSUqp AS SINGLE
  41.     qm AS SINGLE
  42. TYPE idrogramma
  43.     i AS _BYTE
  44.     ore AS SINGLE
  45.     portata AS SINGLE
  46. TYPE composizione
  47.     grafico AS LONG
  48.     composizione AS LONG
  49.  
  50. CONST R& = _RGB32(255, 0, 0)
  51. CONST G& = _RGB32(0, 255, 0)
  52. CONST B& = _RGB32(0, 0, 255)
  53. CONST bianco& = _RGB32(255, 255, 255)
  54. CONST giallo& = _RGB32(255, 255, 0)
  55. CONST grigio& = _RGB32(127, 127, 127)
  56. CONST azzurro& = _RGB32(0, 255, 255)
  57. CONST pastello& = _RGB32(183, 150, 139)
  58. CONST viola& = _RGB32(255, 0, 255)
  59. CONST trasparente& = _RGB32(0, 0)
  60. CONST LarghezzaColonna%% = 8
  61.  
  62.     DO
  63.         CLEAR
  64.         inizio:
  65.         IF _DIREXISTS(".\RisultatiQB64") THEN
  66.             ON ERROR GOTO cancel1
  67.             KILL (".\RisultatiQB64\*.*")
  68.             ON ERROR GOTO cancel2
  69.             RMDIR (".\RisultatiQB64")
  70.         END IF
  71.         ON ERROR GOTO 0
  72.  
  73.         DIM SHARED DESKTOPWIDTH%, DESKTOPHEIGHT%
  74.         DIM SHARED i%, n%%, z%%, p%%
  75.         DIM SHARED ieto%%
  76.         DIM SHARED VisualizzaIeto%%
  77.         DIM SHARED tipo%%
  78.         DIM SHARED esc~`, riavvio~`, menu~`, TornaAlGrafico~`
  79.         DIM SHARED interrompi~`(2) '
  80.         DIM SHARED inputs$(8)
  81.         DIM SHARED KeyPress$
  82.         DIM SHARED CoefficientiDiscretizzazioneTemporale(24) AS CoefficientiDiscretizzazioneTemporale
  83.         DIM SHARED TempiRitorno(10) AS TempiRitorno
  84.         DIM SHARED idrogrammi1a24(2, 24, 50, 1) AS idrogramma
  85.         DIM SHARED MassimiIdrogrammi1a24(2, 24, 1) AS idrogramma
  86.         DIM SHARED MassimiAssolutiIeto(2) AS idrogramma
  87.         DIM SHARED IdroMaxieto%%(2)
  88.         DIM SHARED FinePioggiaIdrogrammi1a24(2, 24, 1) AS idrogramma
  89.         DIM SHARED FinePioggiaIdrogrammi1e2(2) AS idrogramma
  90.         DIM SHARED PassiFinePioggia1a24%%(24)
  91.         DIM SHARED ore!(3), portata!(3)
  92.  
  93.         REDIM SHARED IdroPixel1(1) AS idrogramma
  94.         REDIM SHARED IdroPixel2(1) AS idrogramma
  95.         REDIM SHARED idrogramma1(1) AS idrogramma
  96.         REDIM SHARED idrogramma2(1) AS idrogramma
  97.  
  98.         DIM L%, H%
  99.         DIM posizione%
  100.         DIM OriginaleGrafico&
  101.         DIM schermo&
  102.         DIM unitari&
  103.         DIM quadro&
  104.         DIM ComplessivoIeto1e2(2) AS composizione
  105.         DIM idrogramma1e2(2) AS composizione
  106.         DIM MatriciIeto1e2(2, 24)
  107.         DIM mockus(50) AS mockus
  108.         DIM matrice1(2, 24, 50, 1) AS matrice1
  109.         DIM matrice2!(2, 24, 50, 50)
  110.         DIM MinimiMatriciQuadrante1(2, 24, 1) AS idrogramma
  111.         DIM MinimiMatriciQuadrante2(2, 24, 1) AS idrogramma
  112.         DIM MassimiQuadrante2(2, 24, 1) AS idrogramma
  113.         DIM k!
  114.         DIM a1!
  115.         DIM n1!
  116.         DIM A2&
  117.         DIM L~%
  118.         DIM s1!
  119.         DIM CNII%%
  120.         DIM CoeffPerditeIniziali!
  121.         DIM CNIII!
  122.         DIM tl!
  123.         DIM S2!
  124.         DIM Ia!
  125.         DIM tc!
  126.         DIM ta!
  127.         DIM qp!
  128.         DIM dt!(24)
  129.  
  130.         RESTORE TempiRitorno
  131.         FOR i% = 1 TO 20
  132.             IF i% <= 10 THEN READ TempiRitorno(i%).T
  133.             IF i% > 10 THEN READ TempiRitorno(i% - 10).k
  134.         NEXT i%
  135.         RESTORE CoefficientiIdrogrammaUnitarioMockus
  136.         FOR i% = 1 TO 100
  137.             IF i% <= 50 THEN READ mockus(i%).tSUta
  138.             IF i% > 50 THEN READ mockus(i% - 50).qSUqp
  139.         NEXT i%
  140.  
  141.         DESKTOPWIDTH% = _DESKTOPWIDTH
  142.         DESKTOPHEIGHT% = _DESKTOPHEIGHT
  143.         'DESKTOPWIDTH% = 1280 'limite inferiore della risoluzione dello schermo in pixel per il funzionamento del programma.
  144.         'DESKTOPHEIGHT% = 720
  145.         'DESKTOPWIDTH% = 1366 'valore intermedio della risoluzione dello schermo in pixel per il funzionamento del programma.
  146.         'DESKTOPHEIGHT% = 768
  147.         'DESKTOPWIDTH% = 1024 'sotto il limite inferiore della risoluzione dello schermo in pixel per il funzionamento del programma.
  148.         'DESKTOPHEIGHT% = 768
  149.         IF DESKTOPWIDTH% < 1280 THEN
  150.             esc~` = 1
  151.             PRINT "Il programma Š incompatibile con schermi larghi meno di 1280 pixel."
  152.             PRINT "Questo schermo Š largo"; DESKTOPWIDTH%; "pixel."
  153.             PRINT "Premere un tanto per uscire."
  154.             BEEP
  155.             SLEEP
  156.         END IF
  157.         L% = DESKTOPWIDTH%: H% = L% \ 1.62
  158.         DO
  159.             IF esc~` = 1 THEN EXIT DO
  160.             _FULLSCREEN
  161.             DO
  162.                 ERASE idrogrammi1a24, MassimiIdrogrammi1a24, FinePioggiaIdrogrammi1a24, MassimiAssolutiIeto, IdroMaxieto%%, FinePioggiaIdrogrammi1e2, PassiFinePioggia1a24%%, CoefficientiDiscretizzazioneTemporale, IdroPixel1,_
  163.                  IdroPixel2, idrogramma1, idrogramma2, dt!, matrice1, matrice2!, MinimiMatriciQuadrante1, MinimiMatriciQuadrante2, MassimiQuadrante2
  164.                 FOR ieto%% = 1 TO 2
  165.                     ComplessivoIeto1e2(ieto%%).grafico = _NEWIMAGE(L% - 48 * 8, H%, 32)
  166.                     ComplessivoIeto1e2(ieto%%).composizione = _NEWIMAGE(L%, H%, 32)
  167.                     idrogramma1e2(ieto%%).grafico = _NEWIMAGE(L% - 59 * 8, H%, 32)
  168.                     idrogramma1e2(ieto%%).composizione = _NEWIMAGE(L%, H%, 32)
  169.                     FOR z%% = 1 TO 24
  170.                         MatriciIeto1e2(ieto%%, z%%) = _NEWIMAGE(L%, H%, 32)
  171.                     NEXT z%%
  172.                 NEXT ieto%%
  173.                 schermo& = _NEWIMAGE(DESKTOPWIDTH%, DESKTOPHEIGHT%, 32)
  174.                 unitari& = _NEWIMAGE(L%, H%, 32)
  175.                 quadro& = _NEWIMAGE(L% - 97 * 8, H% \ 2, 32)
  176.                 SCREEN schermo&
  177.                 CLS
  178.                 menu~` = 0
  179.                 COLOR giallo&: PRINT "        C A L C O L O   D E L L ' I D R O G R A M M A   D I   P I E N A   D I   P R O G E T T O   T R A M I T E   I L   M E T O D O   S C S - C N"
  180.                 COLOR grigio&: PRINT "                                                  -  I N G .   C A R L O   B A R T O L I N I  -"
  181.                 COLOR bianco&
  182.                 PRINT "Questo programma calcola l'idrogramma di piena di progetto (e relativa portata di picco)  per un dato tempo di ritorno  utilizzando l'idrogramma unitario"
  183.                 PRINT "di Mockus, il metodo afflussi-deflussi SCS-CN e ietrogrammi tipo"; CHR$(34); "Chicago"; CHR$(34); " e "; CHR$(34); "costanti"; CHR$(34); "."
  184.                 PRINT "Sar… possibile scegliere se  visualizzare i risultati in base  a l'uno o all'altro  tipo di ietogramma, ma anche  quello non visualizzato, sar…  comunque"
  185.                 PRINT "calcolato e salvato nei risultati."
  186.                 PRINT "Il programma, dopo l'elaborazione, alla sua chiusura (premendo ESC o al suo termine), chieder… se salvare i risultati nella seguente directory:"
  187.                 PRINT
  188.                 PRINT CHR$(34); _CWD$; "\RisultatiQB64"; CHR$(34); "."
  189.                 PRINT
  190.                 PRINT "I file saranno di 3 tipi:"
  191.                 PRINT "- immagini dei grafici, con estensione "; CHR$(34); "BMP"; CHR$(34); ";"
  192.                 PRINT "- tabulati, con estensione "; CHR$(34); "CSV"; CHR$(34); ". Possono essere aperti con  Excel, ma per essere visualizzati correttamente, nelle impostazioni di Windows il separatore"
  193.                 PRINT "  dell'elenco dev'essere la virgola. Le celle dei fogli di lavoro dei file relativi al calcolo di ogni idrogramma contengono le formule,per cui in essi Š"
  194.                 PRINT "  esemplificata la procedura di calcolo del programma stesso;"
  195.                 PRINT "- un file con estensione "; CHR$(34); "TXT"; CHR$(34); " in cui Š riportato il codice del programma commentato, comprese le procedure di calcolo."
  196.                 PRINT "Riavviando  il programma,la directory "; CHR$(34); "RisultatiQB64"; CHR$(34); " sar… cancellata, quindi, se s'intende preservare i risultati, sar… prima necessario o rinominarla o"
  197.                 PRINT "spostarla."
  198.                 PRINT "---------------------------------------------------------------------------------------------------------------------------------------------------------"
  199.                 PRINT "Di seguito,si dovranno inserire i valori della curva di possibilit… climatica "; CHR$(34); "h = Ktúaúd^n"; CHR$(34); ". Se si dispone dei valori del Centro Funzionale, digitare il"
  200.                 PRINT "valore "; CHR$(34); "Kt"; CHR$(34); " relativo al  tempo di ritorno "; CHR$(34); "T"; CHR$(34); " d'interesse, con i relativi valori "; CHR$(34); "a"; CHR$(34); " e "; CHR$(34); "n"; CHR$(34); ". Se invece si ha una propria curva di possibilit… climatica,in"
  201.                 PRINT "corrispondenza di "; CHR$(34); "Kt"; CHR$(34); ", digitare "; CHR$(34); "INVIO"; CHR$(34); ", o "; CHR$(34); "1"; CHR$(34); ".In tal caso "; CHR$(34); "Kt"; CHR$(34); " sar… considerato pari a "; CHR$(34); "1"; CHR$(34); " e "; CHR$(34); "T"; CHR$(34); " come "; CHR$(34); "definito dall'utente"; CHR$(34); "."
  202.                 PRINT
  203.                 PRINT "- Kt [-] (INVIO per 1)                                            = "
  204.                 PRINT "- a [mm/d^n]                                                      = "
  205.                 PRINT "- n [-] (0ö1)                                                     = "
  206.                 PRINT "- Area reale del bacino idrografico [mý] (>=1)                    = "
  207.                 PRINT "- Lunghezza dell'asta principale del bacino idrografico [m] (>=1) = "
  208.                 PRINT "- Pendenza media del bacino idrografico [%] (>=1)                 = "
  209.                 PRINT "- CN(II) [-] (1ö100)                                              = "
  210.                 PRINT "- Coefficiente delle perdite inziali [-] (0ö0.2 - INVIO per 0.1)  = "
  211.                 LOCATE CSRLIN + 2,
  212.                 COLOR giallo&: PRINT "  [ESC]: esci; [TAB]: riavvia.": COLOR bianco&
  213.                 CALL InserimentoDati(k!, a1!, n1, A2&, L~%, s1!, CNII%%, CoeffPerditeIniziali!)
  214.                 IF esc~` = 1 OR riavvio~` = 1 THEN EXIT DO
  215.                 LOCATE PosizioneCursore%% + 9, 1
  216.                 COLOR giallo&
  217.                 PRINT "  [1]: utilizza lo ietogramma Chicago; [2]: utilizza lo ietogramma costante;"
  218.                 PRINT "  [ESC]: esci; [TAB]: riavvia; [F1]: torna agli input iniziali."
  219.                 COLOR bianco&
  220.                 DO
  221.                     _LIMIT 30
  222.                     KeyPress$ = INKEY$
  223.                 LOOP UNTIL KeyPress$ = "1" OR KeyPress$ = "2" OR KeyPress$ = CHR$(27) OR KeyPress$ = CHR$(9) OR KeyPress$ = CHR$(0) + CHR$(59)
  224.                 SELECT CASE KeyPress$
  225.                     CASE CHR$(27)
  226.                         esc~` = 1
  227.                     CASE CHR$(9)
  228.                         riavvio~` = 1
  229.                     CASE CHR$(0) + CHR$(59)
  230.                         menu~` = 1
  231.                     CASE ELSE
  232.                         VisualizzaIeto%% = VAL(KeyPress$)
  233.                 END SELECT
  234.                 IF esc~` = 1 OR riavvio~` = 1 OR menu~` = 1 THEN EXIT DO
  235.                 CNIII! = (23 * CNII%%) / (10 + 0.13 * CNII%%) '                                                  ¿
  236.                 tl! = 0.342 * ((L~% / 1000) ^ 0.8 / s1! ^ 0.5) * (1000 / CNIII! - 9) ^ 0.7 '* formula di Mockus. ³ dati immediatamente discendenti dagli input iniziali, che fungono da input interni al programma per le elaborazioni.
  237.                 S2! = 25.4 * (1000 / CNIII! - 10) '*                                                             ³
  238.                 Ia! = CoeffPerditeIniziali! * S2! '* coeff.=0.03-0.2. 'perdite iniziali                          ³ *  La sistemazione dei bacini montani - Vito Ferro - Seconda edizione - cap. 3.4.7. "Il metodo SCS" - pp. 195-205.
  239.                 tc! = tl! / 0.6 '**                                                                              ³
  240.                 ta! = tl! / 0.9 '*                                                                               ³ ** ibid. cap. 3.4.4. "Il tempo di corrivazione di un bacino" - p. 188.
  241.                 qp! = 0.208 * ((A2& / 1000000) / ta!) '*                                                         Ù
  242.                 RESTORE CoefficientiDiscretizzazioneTemporale
  243.                 FOR i% = 1 TO 48
  244.                     IF i% <= 24 THEN READ CoefficientiDiscretizzazioneTemporale(i%).N
  245.                     IF i% > 24 THEN READ CoefficientiDiscretizzazioneTemporale(i% - 24).tSUta
  246.                 NEXT i%
  247.                 FOR ieto%% = 1 TO 2
  248.                     interrompi~`(ieto%%) = 0
  249.                     continua1:
  250.                     IF interrompi~`(1) = 1 THEN IF ieto%% = 1 THEN _CONTINUE
  251.                     continua2:
  252.                     IF interrompi~`(2) = 1 THEN EXIT FOR
  253.                     IF ieto%% = 1 THEN ON ERROR GOTO salta1
  254.                     IF ieto%% = 2 THEN ON ERROR GOTO salta2
  255.                     FOR z%% = 1 TO 24
  256.                         GOSUB CalcolaMatriciIeto1e2
  257.                         GOSUB DisegnaMatriciIeto1e2
  258.                     NEXT z%%
  259.                     IF interrompi~`(ieto%%) = 0 THEN GOSUB DisegnaComplessivoIeto1e2
  260.                 NEXT ieto%%
  261.                 ON ERROR GOTO 0
  262.                 GOSUB TerminaSeErrore
  263.                 IF esc~` = 1 OR riavvio~` = 1 THEN EXIT DO
  264.                 GOSUB DisegnaUnitari
  265.                 _DEST schermo&
  266.                 PRINT "---------------------------------------------------------------------------------------------------------------------------------------------------------"
  267.                 PRINT "Sono stati calcolati 24 idrogrammi di piena con relative portate di picco,per durate della pioggia fino a 32 volte il tempo di corrivazione. Nella pagina"
  268.                 PRINT "successiva, saranno visualizzati insieme alla spezzata (in";: COLOR giallo&: PRINT " giallo";: COLOR bianco&: PRINT ") congiungente le portate di picco dei vari idrogrammi. Per  determinare l'idrogramma di"
  269.                 PRINT "progetto e relativa portata di picco, sar… possibile avvalersi dei suddetti risultati (per esempio tramite Excel), oppure proseguire su questo programma."
  270.                 PRINT
  271.                 SELECT CASE VisualizzaIeto%%
  272.                     CASE IS = 1
  273.                         PRINT "In tal caso, il programma chieder… 2 input:"
  274.                         PRINT "- Una soglia percentuale S, per il calcolo dell'idrogramma di progetto."
  275.                         PRINT "  Per esempio, scrivendo 10%, viene verificato se, sulla spezzata gialla, la portata di picco corrispondente all'ora 1 aumentata del 10%, Š minore  della"
  276.                         PRINT "  portata di picco corrispondente all'ora 2. Se Š minore, l'algoritmo prosegue finch‚ non trova la portata di picco di un'ora "; CHR$(34); "i"; CHR$(34); " che, aumentata del 10%,"
  277.                         PRINT "  risulta maggiore della portata di picco dell'ora "; CHR$(34); "i+1"; CHR$(34); ". Sar… considerato come idrogramma di progetto quello  relativo all'ultima ora la cui  portata di"
  278.                         PRINT "  picco risulta essere superiore alla portata di picco dell'ora precedente aumentata del 10%."
  279.                         PRINT "  Qualora la soglia percentuale  digitata sia troppo bassa per determinare, nel corso  delle iterazioni, un superamento  della  portata di picco dell'ora"
  280.                         PRINT "  successiva, viene computato, come idrogramma di progetto, quello che presenta la massima portata di picco tra i 24 calcolati."
  281.                         PRINT "- Un tempo a scelta, di cui viene calcolata la corrispondente portata di picco e relativo idrogramma."
  282.                     CASE IS = 2
  283.                         PRINT "In tal caso, il programma chieder… 1 input."
  284.                         PRINT "- Un tempo a scelta, di cui viene calcolata la corrispondente portata di picco e relativo idrogramma."
  285.                         PRINT "Come idrogramma di progetto, Š computato quello che presenta la massima portata di picco tra i 24 calcolati."
  286.                 END SELECT
  287.                 PRINT
  288.                 COLOR giallo&: PRINT "  [ESC]: esci; [TAB]: riavvia; [F1]: torna agli input iniziali; []: prosegui.": COLOR bianco&
  289.                 LOCATE CSRLIN + 1,
  290.                 DO
  291.                     _LIMIT 30
  292.                     KeyPress$ = INKEY$
  293.                 LOOP UNTIL KeyPress$ = CHR$(27) OR KeyPress$ = CHR$(9) OR KeyPress$ = CHR$(0) + CHR$(59) OR KeyPress$ = CHR$(0) + CHR$(77)
  294.                 SELECT CASE KeyPress$
  295.                     CASE CHR$(27)
  296.                         esc~` = 1
  297.                         IF VisualizzaIeto%% = 2 THEN
  298.                             CALL CalcolaIdrogramma(MassimiIdrogrammi1a24(VisualizzaIeto%%, 24, 1).ore, idrogrammi1a24(VisualizzaIeto%%, 24, 50, 1).ore, MassimiAssolutiIeto(VisualizzaIeto%%).ore, MassimiAssolutiIeto(VisualizzaIeto%%).portata, ComplessivoIeto1e2(VisualizzaIeto%%).grafico, ComplessivoIeto1e2(VisualizzaIeto%%).composizione)
  299.                             GOSUB DisegnaIdrogramma
  300.                         END IF
  301.                     CASE CHR$(9)
  302.                         riavvio~` = 1
  303.                     CASE CHR$(0) + CHR$(59)
  304.                         menu~` = 1
  305.                 END SELECT
  306.                 IF esc~` = 1 OR riavvio~` = 1 OR menu~` = 1 THEN EXIT DO
  307.                 CLS
  308.                 VIEW PRINT 1 TO 4
  309.                 DO
  310.                     DO
  311.                         TornaAlGrafico~` = 0
  312.                         ERASE IdroPixel1, IdroPixel2, idrogramma1, idrogramma2
  313.                         FOR ieto%% = 1 TO 2
  314.                             _DEST idrogramma1e2(ieto%%).grafico: CLS
  315.                             _DEST idrogramma1e2(ieto%%).composizione: CLS
  316.                         NEXT ieto%%
  317.                         GOSUB VisualizzaComplessivo
  318.                         CALL CalcolaIdrogramma(MassimiIdrogrammi1a24(VisualizzaIeto%%, 24, 1).ore, idrogrammi1a24(VisualizzaIeto%%, 24, 50, 1).ore, MassimiAssolutiIeto(VisualizzaIeto%%).ore, MassimiAssolutiIeto(VisualizzaIeto%%).portata, ComplessivoIeto1e2(VisualizzaIeto%%).grafico, ComplessivoIeto1e2(VisualizzaIeto%%).composizione)
  319.                         GOSUB DisegnaIdrogramma
  320.                         GOSUB VisualizzaIdrogramma
  321.                         IF esc~` = 1 OR riavvio~` = 1 OR menu~` = 1 OR TornaAlGrafico~` = 1 THEN EXIT DO
  322.                         GOSUB VisualizzaUnitari
  323.                         IF esc~` = 1 OR riavvio~` = 1 OR menu~` = 1 OR TornaAlGrafico~` = 1 THEN EXIT DO
  324.                         GOSUB VisualizzaMatrici
  325.                         EXIT DO
  326.                     LOOP
  327.                     IF esc~` = 1 OR riavvio~` = 1 OR menu~` = 1 THEN EXIT DO
  328.                 LOOP
  329.                 IF esc~` = 1 OR riavvio~` = 1 OR menu~` = 1 THEN EXIT DO
  330.             LOOP
  331.             IF riavvio~` = 1 OR menu~` = 1 THEN GOSUB freeimage
  332.             IF esc~` = 1 OR riavvio~` = 1 THEN EXIT DO
  333.         LOOP
  334.         IF esc~` = 1 OR riavvio~` = 1 THEN EXIT DO
  335.     LOOP
  336.     IF esc~` = 1 THEN EXIT DO
  337. _DEST shermo&
  338. IF VisualizzaIeto%% <> 0 THEN
  339.     IF interrompi~`(1) = 0 OR interrompi~`(2) = 0 THEN
  340.         PRINT
  341.         COLOR giallo&: PRINT "[ESC]: esci; [1]: salva su disco tabulati e immagini (richiede tempo); [2]: salva solo tabulati.": COLOR bianco&
  342.         PRINT
  343.         DO
  344.             _LIMIT 30
  345.             KeyPress$ = INKEY$
  346.         LOOP UNTIL KeyPress$ = CHR$(27) OR KeyPress$ = "1" OR KeyPress$ = "2"
  347.         IF KeyPress$ = "1" OR KeyPress$ = "2" THEN
  348.             MKDIR "RisultatiQB64"
  349.             CHDIR ".\RisultatiQB64"
  350.             PRINT "Attendere, salvataggio in corso nella directory:"
  351.             PRINT CHR$(34); _CWD$; CHR$(34); "."
  352.             PRINT "Il programma si chiuder… automaticamente a procedura ultimata."
  353.             PRINT
  354.             PRINT "Si ricorda che:"
  355.             PRINT "- La  directory  sar…  cancellata  in caso di  riavvio  del programma, pertanto se  si  desidera"
  356.             PRINT "  preservare i risultati, essa dovr… essere o rinominata, o spostata."
  357.             PRINT "- Per i file di estensione "; CHR$(34); "CSV"; CHR$(34); ",affinch‚ siano visualizzati correttamente in Excel, ";: COLOR R&: PRINT "Š necessario"
  358.             PRINT "  che nelle impostazioni di Windows il separatore dell'elenco sia la virgola";: COLOR bianco&: PRINT "."
  359.             SLEEP 5
  360.             SHELL _CWD$
  361.             GOSUB Risultati
  362.             CHDIR "..\"
  363.         END IF
  364.     END IF
  365. freeimage:
  366. IF DESKTOPWIDTH% >= 1280 THEN
  367.     FOR ieto%% = 1 TO 2
  368.         _FREEIMAGE ComplessivoIeto1e2(ieto%%).grafico
  369.         _FREEIMAGE ComplessivoIeto1e2(ieto%%).composizione
  370.         _FREEIMAGE idrogramma1e2(ieto%%).grafico
  371.         _FREEIMAGE idrogramma1e2(ieto%%).composizione
  372.         FOR z%% = 1 TO 24
  373.             _FREEIMAGE MatriciIeto1e2(ieto%%, z%%)
  374.         NEXT z%%
  375.     NEXT ieto%%
  376.     _FREEIMAGE unitari&
  377.     _FREEIMAGE quadro&
  378.     IF OriginaleGrafico& AND esc~` = 0 THEN _FREEIMAGE OriginaleGrafico&
  379. IF riavvio~` = 1 OR menu~` = 1 THEN RETURN
  380. '/////////////////////////////////////////////////// T E R M I N E   D E L   P R O G R A M M A ////////////////////////////////////////////////////
  381.  
  382. '**************************************************************************************************************************************************
  383. '*                                                        Inizio sezione gestione errori                                                          *
  384. '**************************************************************************************************************************************************
  385.  
  386. cancel1:
  387. cancel2:
  388. PRINT "Almeno un file interno alla directory"
  389. PRINT CHR$(34); _CWD$; "\RisultatiQB64\"; CHR$(34)
  390. PRINT "Š aperto in un altro programma."
  391. PRINT "Per proseguire chiudere i file e premere un tasto."
  392. RESUME inizio
  393. salta1:
  394. interrompi~`(1) = 1
  395. RESUME continua1
  396. salta2:
  397. interrompi~`(2) = 1
  398. RESUME continua2
  399.  
  400. '**************************************************************************************************************************************************
  401. '*                                          Termine sezione gestione errori e inizio sezione routines                                             *
  402. '**************************************************************************************************************************************************
  403.  
  404. TerminaSeErrore:
  405. 'routine che valuta come agire in caso di errore nell'elaborazione dei dati, se sono stati inseriti input non conformi.
  406.  
  407. IF interrompi~`(1) = 1 THEN
  408.     IF interrompi~`(2) = 1 THEN
  409.         _DEST schermo&
  410.         LOCATE 33,: PRINT STRING$(80, 32)
  411.         PRINT STRING$(80, 32)
  412.         LOCATE 33,: COLOR giallo&: PRINT "  I dati sono incompatibili con risultati attendibili.": COLOR bianco&
  413.         COLOR giallo&: PRINT "  [ESC]: esci; [TAB]: riavvia.": COLOR bianco&
  414.         DO
  415.             _LIMIT 30
  416.             KeyPress$ = INKEY$
  417.         LOOP UNTIL KeyPress$ = CHR$(27) OR KeyPress$ = CHR$(9)
  418.         SELECT CASE KeyPress$
  419.             CASE CHR$(27)
  420.                 esc~` = 1
  421.             CASE CHR$(9)
  422.                 riavvio~` = 1
  423.         END SELECT
  424.         RETURN
  425.     END IF
  426. SELECT CASE interrompi~`(VisualizzaIeto%%)
  427.     CASE IS = 0
  428.         EXIT SELECT
  429.     CASE IS = 1
  430.         _DEST schermo&
  431.         LOCATE 33,
  432.         COLOR giallo&
  433.         IF interrompi~`(1) = 0 THEN PRINT "  I dati sono incompatibili con risultati attendibili, ma utilizzando lo ietogramma Chicago sono stati ottenuti risultati. Visualizzarli? [S/(ESC o N)]"
  434.         IF interrompi~`(2) = 0 THEN PRINT "  I dati sono incompatibili con risultati attendibili, ma utilizzando lo ietogramma costante sono stati ottenuti risultati. Visualizzarli? [S/(ESC o N)]"
  435.         PRINT "  [ESC]: esci; [TAB]: riavvia; [F1]: torna agli input iniziali."
  436.         COLOR bianco&
  437.         DO
  438.             _LIMIT 30
  439.             KeyPress$ = LCASE$(INKEY$)
  440.         LOOP UNTIL KeyPress$ = "s" OR KeyPress$ = "n" OR KeyPress$ = CHR$(27) OR KeyPress$ = CHR$(9) OR KeyPress$ = CHR$(0) + CHR$(59)
  441.         SELECT CASE KeyPress$
  442.             CASE "s"
  443.                 IF interrompi~`(1) = 0 THEN VisualizzaIeto%% = 1
  444.                 IF interrompi~`(2) = 0 THEN VisualizzaIeto%% = 2
  445.             CASE "n", CHR$(27)
  446.                 esc~` = 1
  447.             CASE CHR$(9)
  448.                 riavvio~` = 1
  449.             CASE CHR$(0) + CHR$(59)
  450.                 menu~` = 1
  451.         END SELECT
  452. '--------------------------------------------------------------------------------------------------------------------------------------------------
  453. '--------------------------------------------------------------------------------------------------------------------------------------------------
  454. CalcolaMatriciIeto1e2:
  455. 'routine che esegue tutti i calcoli da cui seguiranno tutte le immagini, grafici e risultati. anticipando quanto detto sotto, verranno calcolati 24 idrogrammi. il programma chiede se salvare i risultati. in caso affermativo, tra
  456. 'i risultati, verranno creati anche dei file in formato CSV relativi a ciasuno di questi 24 idrogrammi. per visualizzare in dettaglio ciò che fa questa routine, è possibile vedere uno dei suddetti file, insieme ai commenti
  457. 'riportati qui sotto.
  458.  
  459. IF ieto%% = 1 THEN
  460.     dt!(z%%) = CoefficientiDiscretizzazioneTemporale(z%%).tSUta * ta! '***
  461.     PassiFinePioggia1a24%%(z%%) = (3 * CoefficientiDiscretizzazioneTemporale(z%%).N) / (2 * CoefficientiDiscretizzazioneTemporale(z%%).tSUta) 'detto M qui sotto.
  462. 'memorizza il passo temporale dt! di ciascuno dei 24+24 idrogrammi. man mano che vengono analizzate piogge di durata maggiore, è necessario aumentare la durata del passo temporale dt! di analisi. infatti l'idrogramma unitario
  463. 'adimensionale di Mockus è costituito da 2 vettori (t/ta e q/qp) di 50 elementi ciascuno, ma se il passo temporale è troppo piccolo, non si arriva a d (fine pioggia) in un massimo di 50 passi. tra l'altro, se dt! è
  464. 'sufficientemente grande da arrivare a d, potrebbe comunque essere ancora troppo piccolo per permettere l'analisi del ramo discendente dell'idrogramma oltre l'ora di fine pioggia, fino ad una portata prossima allo 0. quindi
  465. 'dt! dev'essere sempre tale da garantire il calcolo dell'intero idrogramma senza perdere troppo di precisione e senza essere tuttavia troppo piccolo da tagliarlo.
  466. 'il passo temporale dt! è così definito: dt!=C*ta!, dove C è un valore opportuno di t/ta dell'idrogramma unitario adimensionale di Mockus.
  467. 'per esempio, ponendo dt!=0.2*ta!, si ha:
  468. 't1=1*dt!=1*0.2*ta!->t1/ta!=0.2
  469. 't2=2*dt!=2*0.2*ta!->t2/ta!=0.4
  470. 't3=3*dt!=3*0.2*ta!->t3/ta!=0.6
  471. 't4=4*dt!=4*0.2*ta!->t4/ta!=0.8
  472. 'ponendo dt!=0.3*ta!, si ha:
  473. 't1=1*dt!=1*0.3*ta!->t1/ta!=0.3
  474. 't2=2*dt!=2*0.3*ta!->t2/ta!=0.6
  475. 't3=3*dt!=3*0.3*ta!->t3/ta!=0.9
  476. 't4=4*dt!=4*0.3*ta!->t4/ta!=1.2
  477. 'si vede dunque che in tal modo si discretizza l'idrogramma unitario adimensionale di Mockus ottenendo sempre valori tm/ta! coincidenti con valori di t/ta! dell'idrogramma unitario adimensionale di Mockus e per i quali sono
  478. 'quindi noti i corrispondenti valori q/qp!, evitando la necessità di effettuare interpolazioni.
  479. 'è da rilevare che nei calcoli è stato utilizzato anche il valore C=0.3: dt!=0.3*ta!. in questo caso però si "perde" il picco, in quanto si passa da t3/ta!=0.9 a t4/ta!=1.2, ma q/qp!=1 solo per t/ta!=1.
  480. 'ciò crea potenzialmente grosse discrepanze nei risultati, in quanto gli idrogrammi così calcolati possono presentare portate di picco fortemente sottistimate e palesemente più basse rispetto alle portate di picco di idrogrammi
  481. 'calcolati con parametri C che non "perdono" il picco. questo "inconveniente" tuttavia è trascurabile per durate della pioggia non troppo lunghe, in quanto il passo temporale dt! è sufficientemente piccolo da far "cadere"
  482. 'l'analisi comunque molto vicina al picco. Per contro, utilizzando altri coefficienti in grado di cogliere il picco, come 0.2 o 0.5, si potrebbe avere rispettivamente o un idrogramma visibilmente "tagliato", in quanto il
  483. 'dt! potrebbe essere insufficiente a permettere l'analisi fino al termine della pioggia o fino al quasi esaurimento della portata (come detto prima), oppure un idrogramma inutilmente impreciso, perché per cogliere il picco,
  484. 'si rinuncia alla precisione di analisi. i detti coefficienti sono quindi stati scelti cercando il miglior equilibrio: utilizzando il più possibile coefficienti bassi e sottomultipli di 1 per quelle durate della pioggia che
  485. 'possono essere efficacemente analizzate così. è stato utilizzato il coefficiente 0.3 per le "vie di mezzo" appena descritte. non si sono usati coefficienti come 0.6,0.7,0.8,0.9, in quanto implicano dei dt tali che la "perdita"
  486. 'del picco non sarebbe assolutamente trascurabile. si erano fatte delle prove in tal senso ed erano emerse le evidenti incongruenze nei dati descritte sopra. si sono invece usati i coefficienti 0.5 e 1 per coprire durate della
  487. 'pioggia più lunghe possibile, fino a 32 volte il tempo di corrivazione.
  488. 'i parametri C del valori t/ta! dell'idrogramma unitario adimensionale di Mockus utilizzati sono dunque: 0.1,0.2,0.3,0.5,1. essi, come detto, sono correlati al passo temporale dt! e quindi alla durata della pioggia d, che è
  489. 'espressa come d=N*tc! (cioè come multiplo di tc!). vi è dunque un legame tra i parametri C e il moltiplicatore N di tc!, infatti detto M il numero di passi dt! per arrivare alla durata d della pioggia (che, come detto, non può
  490. 'superare il valore 50), si ha:
  491. 'd=M*dt!=M*C*ta!=M*C*(tl!/0.9) e d=N*tc!=N*(tl!/0.6),
  492. 'da cui si ottiene l'espressione:
  493. 'M=3N/2C
  494. 'da cui, indicando con X la combinazione scelta:
  495. '         C=0.1   C=0.2   C=0.3   C=0.5   C=1
  496. '         ...................................
  497. '              /: numero non intero.
  498. '1)  N=1  M=15(X) M=/     M=5     M=3     M=/
  499. '2)  N=2  M=30    M=15(X) M=10    M=6     M=3    ------------> si è scelto C=0.2 perché con C=0.1 la discretizzazione temporale non permette l'analisi di tutto il ramo discendente dell'idrogramma oltre la durata della pioggia.
  500. '3)  N=3  M=45    M=/     M=15(X) M=9     M=/    ------------> idem.
  501. '4)  N=4          M=30(X) M=20    M=12    M=6
  502. '5)  N=5          M=/     M=25(X) M=15    M=/
  503. '6)  N=6          M=45    M=30(X) M=18    M=9    ------------> idem.
  504. '7)  N=7                  M=35(X) M=21    M=/    ------------> nonostante C=0.3 non colga il picco, la discretizzazione temporale dt! è sufficientemente piccola da non discostarsi molto dal picco.
  505. '8)  N=8                  M=40(X) M=24    M=12   ------------> idem.
  506. '9)  N=9                  M=45    M=27(X) M=/
  507. '10) N=10                 M=50    M=30(X) M=15
  508. '11) N=11                         M=33(X) M=/
  509. '12) N=12                         M=36(X) M=18
  510. '13) N=13                         M=39(X) M=/
  511. '14) N=14                         M=42(X) M=21
  512. '15) N=15                         M=45(X) M=/
  513. '16) N=16                         M=48(X) M=24
  514. '    N=17                                 M=/
  515. '17) N=18                                 M=27(X)
  516. '    N=19                                 M=/
  517. '18) N=20                                 M=30(X)
  518. '    N=21                                 M=/
  519. '19) N=22                                 M=33(X)
  520. '    N=23                                 M=/
  521. '20) N=24                                 M=36(X)
  522. '    N=25                                 M=/
  523. '21) N=26                                 M=39(X)
  524. '    N=27                                 M=/
  525. '22) N=28                                 M=42(X)
  526. '    N=29                                 M=/
  527. '23) N=30                                 M=45(X)
  528. '    N=31                                 M=/
  529. '24) N=32                                 M=48(X)
  530. '................................................
  531. 'vedasi anche i fogli di calcolo Excel con estensione CSV, dei risultati.
  532. FOR i% = 1 TO 50
  533.     matrice1(ieto%%, z%%, i%, 1).tSUta = mockus(i%).tSUta
  534.     matrice1(ieto%%, z%%, i%, 1).qSUqp = mockus(i%).qSUqp
  535.     matrice1(ieto%%, z%%, i%, 1).mdt = i% * dt!(z%%)
  536.     SELECT CASE (_ROUND(10 * (i% * CoefficientiDiscretizzazioneTemporale(z%%).tSUta))) / 10
  537.         CASE IS <= 5
  538.             matrice1(ieto%%, z%%, i%, 1).tmSUta = (_ROUND(10 * (i% * CoefficientiDiscretizzazioneTemporale(z%%).tSUta))) / 10 '=matrice1(i%).m *  matrice1(i%).mdt / ta!
  539.         CASE ELSE
  540.             matrice1(ieto%%, z%%, i%, 1).tmSUta = 0
  541.     END SELECT
  542. NEXT i%
  543. FOR i% = 1 TO 50
  544.     n%% = 1
  545.     DO
  546.         IF matrice1(ieto%%, z%%, i%, 1).tmSUta = matrice1(ieto%%, z%%, n%%, 1).tSUta THEN
  547.             matrice1(ieto%%, z%%, i%, 1).qmSUqp = matrice1(ieto%%, z%%, n%%, 1).qSUqp
  548.             EXIT DO
  549.         ELSE
  550.             n%% = n%% + 1
  551.         END IF
  552.     LOOP UNTIL n%% = 50
  553.     matrice1(ieto%%, z%%, i%, 1).qm = matrice1(ieto%%, z%%, i%, 1).qmSUqp * qp!
  554. NEXT i%
  555. FOR i% = 1 TO PassiFinePioggia1a24%%(z%%)
  556.     matrice1(ieto%%, z%%, i%, 1).h1 = k! * a1! * matrice1(ieto%%, z%%, i%, 1).mdt ^ n1!
  557.     IF i% = 1 THEN
  558.         matrice1(ieto%%, z%%, i%, 1).i1 = matrice1(ieto%%, z%%, i%, 1).h1 / dt!(z%%)
  559.     ELSE
  560.         matrice1(ieto%%, z%%, i%, 1).i1 = (matrice1(ieto%%, z%%, i%, 1).h1 - matrice1(ieto%%, z%%, i% - 1, 1).h1) / dt!(z%%)
  561.     END IF
  562. NEXT i%
  563. SELECT CASE ieto%%
  564.     CASE 1
  565.         GOSUB chicago
  566.     CASE 2
  567.         FOR i% = 1 TO PassiFinePioggia1a24%%(z%%)
  568.             matrice1(ieto%%, z%%, i%, 1).i2 = matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).h1 / matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).mdt
  569.         NEXT i%
  570. FOR i% = 1 TO PassiFinePioggia1a24%%(z%%)
  571.     matrice1(ieto%%, z%%, i%, 1).DH = matrice1(ieto%%, z%%, i%, 1).i2 * dt!(z%%)
  572.     IF i% = 1 THEN
  573.         matrice1(ieto%%, z%%, i%, 1).H2 = matrice1(ieto%%, z%%, i%, 1).DH
  574.     ELSE
  575.         matrice1(ieto%%, z%%, i%, 1).H2 = matrice1(ieto%%, z%%, i%, 1).DH + matrice1(ieto%%, z%%, i% - 1, 1).H2
  576.     END IF
  577.     SELECT CASE matrice1(ieto%%, z%%, i%, 1).H2 - Ia!
  578.         CASE IS < 0
  579.             matrice1(ieto%%, z%%, i%, 1).he = 0
  580.         CASE IS >= 0
  581.             matrice1(ieto%%, z%%, i%, 1).he = (matrice1(ieto%%, z%%, i%, 1).H2 - Ia!) ^ 2 / (matrice1(ieto%%, z%%, i%, 1).H2 - Ia! + S2!)
  582.     END SELECT
  583.     IF i% = 1 THEN
  584.         matrice1(ieto%%, z%%, i%, 1).Dhe = matrice1(ieto%%, z%%, i%, 1).he
  585.     ELSE
  586.         matrice1(ieto%%, z%%, i%, 1).Dhe = matrice1(ieto%%, z%%, i%, 1).he - matrice1(ieto%%, z%%, i% - 1, 1).he
  587.     END IF
  588. NEXT i%
  589. FOR n%% = 1 TO 50
  590.     FOR i% = n%% TO 50
  591.         matrice2!(ieto%%, z%%, i%, n%%) = matrice1(ieto%%, z%%, i% - n%% + 1, 1).Dhe * matrice1(ieto%%, z%%, n%%, 1).qm
  592.     NEXT i%
  593. NEXT n%%
  594. FOR i% = 1 TO 50
  595.     FOR n%% = 1 TO 50
  596.         idrogrammi1a24(ieto%%, z%%, i%, 1).portata = idrogrammi1a24(ieto%%, z%%, i%, 1).portata + matrice2!(ieto%%, z%%, i%, n%%)
  597.     NEXT n%%
  598.     idrogrammi1a24(ieto%%, z%%, i%, 1).ore = matrice1(ieto%%, z%%, i%, 1).mdt
  599. NEXT i%
  600. i% = 1
  601.     IF MassimiIdrogrammi1a24(ieto%%, z%%, 1).portata <= idrogrammi1a24(ieto%%, z%%, i%, 1).portata THEN
  602.         MassimiIdrogrammi1a24(ieto%%, z%%, 1).portata = idrogrammi1a24(ieto%%, z%%, i%, 1).portata
  603.         MassimiIdrogrammi1a24(ieto%%, z%%, 1).ore = idrogrammi1a24(ieto%%, z%%, i%, 1).ore
  604.         MassimiIdrogrammi1a24(ieto%%, z%%, 1).i = i%
  605.     ELSEIF MassimiIdrogrammi1a24(ieto%%, z%%, 1).portata > idrogrammi1a24(ieto%%, z%%, i%, 1).portata THEN EXIT DO
  606.     END IF
  607.     i% = i% + 1
  608. LOOP UNTIL i% = 51
  609. FinePioggiaIdrogrammi1a24(ieto%%, z%%, 1).ore = idrogrammi1a24(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).ore
  610. FinePioggiaIdrogrammi1a24(ieto%%, z%%, 1).portata = idrogrammi1a24(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).portata
  611. i% = 1
  612.     IF MassimiQuadrante2(ieto%%, z%%, 1).portata < matrice1(ieto%%, z%%, i%, 1).qm THEN
  613.         MassimiQuadrante2(ieto%%, z%%, 1).portata = matrice1(ieto%%, z%%, i%, 1).qm
  614.         MassimiQuadrante2(ieto%%, z%%, 1).ore = matrice1(ieto%%, z%%, i%, 1).mdt
  615.     ELSEIF MassimiQuadrante2(ieto%%, z%%, 1).portata > matrice1(ieto%%, z%%, i%, 1).qm THEN EXIT DO
  616.     END IF
  617.     i% = i% + 1
  618. SELECT CASE idrogrammi1a24(ieto%%, z%%, 50, 1).portata
  619.     CASE IS >= MassimiIdrogrammi1a24(ieto%%, z%%, 1).portata * 0.05
  620.         MinimiMatriciQuadrante1(ieto%%, z%%, 1).ore = idrogrammi1a24(ieto%%, z%%, 50, 1).ore
  621.         MinimiMatriciQuadrante1(ieto%%, z%%, 1).i = 50
  622.     CASE IS < MassimiIdrogrammi1a24(ieto%%, z%%, 1).portata * 0.05
  623.         i% = MassimiIdrogrammi1a24(ieto%%, z%%, 1).i
  624.         DO
  625.             IF idrogrammi1a24(ieto%%, z%%, i%, 1).portata < MassimiIdrogrammi1a24(ieto%%, z%%, 1).portata * 0.05 THEN
  626.                 MinimiMatriciQuadrante1(ieto%%, z%%, 1).ore = idrogrammi1a24(ieto%%, z%%, i%, 1).ore
  627.                 MinimiMatriciQuadrante1(ieto%%, z%%, 1).i = i%
  628.                 EXIT DO
  629.             END IF
  630.             i% = i% + 1
  631.         LOOP
  632. i% = 1
  633.     IF matrice1(ieto%%, z%%, i%, 1).qm = 0 THEN
  634.         MinimiMatriciQuadrante2(ieto%%, z%%, 1).ore = matrice1(ieto%%, z%%, i%, 1).mdt
  635.         MinimiMatriciQuadrante2(ieto%%, z%%, 1).i = i%
  636.         EXIT DO
  637.     END IF
  638.     i% = i% + 1
  639. IF MassimiAssolutiIeto(ieto%%).portata < MassimiIdrogrammi1a24(ieto%%, z%%, 1).portata THEN
  640.     MassimiAssolutiIeto(ieto%%).portata = MassimiIdrogrammi1a24(ieto%%, z%%, 1).portata
  641.     MassimiAssolutiIeto(ieto%%).ore = MassimiIdrogrammi1a24(ieto%%, z%%, 1).ore
  642.     IdroMaxieto%%(ieto%%) = z%%
  643. '--------------------------------------------------------------------------------------------------------------------------------------------------
  644. chicago:
  645. 'questa routine dispone l'intensità di pioggia relativa all'idrogramma in corso di calcolo con passo temporale dt! secondo lo ietogramma Chicago, cioè ipotizzando che cominci con una bassa intensità, aumenti fino al picco e
  646. 'e vada poi scemando.
  647. 'per ogni idrogramma calcolato con un nuovo dt! (così come definito in ***) crea un vettore dell'intensità di pioggia secondo lo ietogramma Chicago, partendo dal vettore dell'intensità di pioggia calcolato dalla curva di
  648. 'possibilità climatica, ponendo l'ultimo valore come ultimo, il penultimo come primo, il terzultimo come penultimo, il quartultimo come secondo e così via.
  649. 'il programma determina se l'idrogramma in corso di calcolo presenta uno stesso dt! già usato precedentemente per il calcolo di un altro idrogramma. se lo trova, ne copia i valori dell'intensità di pioggia secondo lo
  650. 'ietogramma Chicago nel vettore dell'intensità di pioggia secondo lo ietogramma Chicago dell'idrogramma in corso di calcolo. i valori rimanenti sono riempiti procedendo come prima, aggiungendoli come code ai valori copiati.
  651. 'questo è necessario perché, a seconda del numero di iterazioni M (durata di pioggia d) e M'(durata di pioggia d') con uno stesso dt!, se si assume per esempio che sia d>d' (quindi M>M'), il vettore dell'intensità di pioggia
  652. 'secondo lo ietogramma Chicago relativo a M non per forza, una volta aggiunte le code, coinciderebbe con quello relativo a M', ma potrebbe risultare invertito, come illustrato nell'esempio che segue.
  653. 'supponiamo di avere 2 durate di pioggia d e d' con d>d', discretizzate con con M e M' passi temporali, con lo stesso dt!.
  654. '                                                                                                                    La routine genera questi A e B
  655. '                                                                                                                  | ------------------------------
  656. 'M'  mm/ora          A      | M   mm/ora          B                            A       B                           | A       B
  657. ' 1  92.975          07.279 |  1  92.975          06.852 -->2° nuovo valore    /       06.852 -->2° nuovo valore   | /       06.852 -->2° nuovo valore
  658. ' 2  34.558          07.610 |  2  34.558          07.128                       07.279  07.128 |                    | 07.279  07.279 |
  659. ' 3  25.898          07.987 |  3  25.898          07.439                       07.610  07.439 |                    | 07.610  07.610 |
  660. ' 4  21.505          08.423 |  4  21.505          07.792                       07.987  07.792 |                    | 07.987  07.987 |
  661. ' 5  18.735          08.934 |  5  18.735          08.197                       08.423  08.197 |                    | 08.423  08.423 |
  662. ' 6  16.788          09.544 |  6  16.788          08.668                       08.934  08.668 |                    | 08.934  08.934 |
  663. ' 7  15.324          10.290 |  7  15.324          09.225                       09.544  09.225 |                    | 09.544  09.544 |
  664. ' 8  14.174          11.229 |  8  14.174          09.897                       10.290  09.897 |                    | 10.290  10.290 |
  665. ' 9  13.239          12.460 |  9  13.239          10.730                       11.229  10.730 |                    | 11.229  11.229 |
  666. '10  12.460          14.174 | 10  12.460          11.799                       12.460  11.799 |                    | 12.460  12.460 |
  667. '11  11.799          16.788 | 11  11.799          13.239                       14.174  13.239 |                    | 14.174  14.174 |
  668. '12  11.229 CHICAGO  21.505 | 12  11.229 CHICAGO  15.324 confrontando A con B  16.788  15.324 |                    | 16.788  16.788 |
  669. '13  10.730 -------> 34.558 | 13  10.730 -------> 18.735 --------------------> 21.505  18.735 |                    | 21.505  21.505 |
  670. '14  10.290          92.975 | 14  10.290          25.898  si nota i valori di  34.558  25.898 |                    | 34.558  34.558 | i valori di B non sono invertiti rispetto ad A.
  671. '15  09.897          25.898 | 15  09.897          92.975  B sono invertiti     92.975  92.975 |                    | 92.975  92.975 |
  672. '16  09.544          18.735 | 16  09.544          34.558  rispetto ad A.       25.898  34.558 |                    | 25.898  25.898 |
  673. '17  09.225          15.324 | 17  09.225          21.505                       18.735  21.505 |                    | 18.735  18.735 |
  674. '18  08.934          13.239 | 18  08.934          16.788                       15.324  16.788 |                    | 15.324  15.324 |
  675. '19  08.668          11.799 | 19  08.668          14.174                       13.239  14.174 |                    | 13.239  13.239 |
  676. '20  08.423          10.730 | 20  08.423          12.460                       11.799  12.460 |                    | 11.799  11.799 |
  677. '21  08.197          09.897 | 21  08.197          11.229                       10.730  11.229 |                    | 10.730  10.730 |
  678. '22  07.987          09.225 | 22  07.987          10.290                       09.897  10.290 |                    | 09.897  09.897 |
  679. '23  07.792          08.668 | 23  07.792          09.544                       09.225  09.544 |                    | 09.225  09.225 |
  680. '24  07.610          08.197 | 24  07.610          08.934                       08.668  08.934 |                    | 08.668  08.668 |
  681. '25  07.439          07.792 | 25  07.439          08.423                       08.197  08.423 |                    | 08.197  08.197 |
  682. '26  07.279          07.439 | 26  07.279          07.987                       07.792  07.987 |                    | 07.792  07.792 |
  683. '27  07.128          07.128 | 27  07.128          07.610                       07.439  07.610 |                    | 07.439  07.439 |
  684. '                             28  06.986          07.279                       07.128  07.279 |                    | 07.128  07.128 |
  685. '                             29  06.852          06.986 -->3° nuovo valore    /       06.986 -->3° nuovo valore   | /       06.986 -->3° nuovo valore
  686. '                             30  06.724          06.724 -->1° nuovo valore    /       06.724 -->1° nuovo valore   | /       06.724 -->1° nuovo valore
  687. 'l'eventuale inversione va evitata, in quanto si creerebbero delle piccole discrepanze che provocano il fatto che alcune portate di picco risultino localmente poco inferiori alla portata di picco dell'iterazione precedente,
  688. 'quando il trend generale è di aumento delle portate di picco all'aumentare della durata della pioggia. quindi per esempio l'iterazione z%%=1 corrisponde a d=1tc! con passo temporale dt'. l'iterazione z%%=2 corrisponde a d=2tc!
  689. 'con passo temporale dt''. l'iterazione z%%=3 corrisponde a d=3tc! con passo temporale dt'''. l'iterazione z%%=4 corrisponde a d=4tc! con passo temporale dt'', che è lo stesso dell'iterazione z%%=2 con d=2tc!. quindi lo ietogramma
  690. 'Chicago per d=4tc! è dato dallo stesso ietogramma che sia ha per d=2tc!, con l'aggiunta, ai suoi estremi, dei nuovi valori. il meccanismo si ripete per z%%=5, che corrisponde a d=5tc! con passo temporale dt''', che è lo stesso
  691. 'dell'iterazione z%%=3 con d=3tc!. in questo modo si fa l'ipotesi che, all'aumentare della durata della pioggia, discretizzata con uno stesso passo temporale dt! usato precedentemente per un'altra pioggia di durata inferiore,
  692. 'lo ietogramma contenga a sua volta il precedente con il medesimo dt!. in tal modo, se si consiera per esempio d=4tc!, si assume che l'altezza di pioggia corrispondente a 4tc!, coincida, per un tempo pari a 2tc!, con lo ietogramma
  693. 'relativo a d=2tc! e che l'altezza di pioggia rimamente sia dovuta ai nuovi valori.
  694. 'cioè determina infine una sorta di scatola cinese, in quanto gli ietogrammi Chicago calcolati "interamente", cioè quelli relativi ad un nuovo dt!, sono solo 5 su 24: quelli corrispondenti alla prima volta che vengono usati
  695. 'i coefficienti C=0.1,0.2,0.3,0.5,1, rispettivamente per durate della pioggia pari a N=1,2,3,9,17 volte tc!.
  696. 'invece, per esempio, per N=16, z%%=16 (numero di idrogramma in corso di calcolo), C=0.5. Ma C=0.5 anche per N=9,10,11,12,13,14,15 e z%%=9,10,11,12,13,14,15. quindi lo ietogramma Chicago relativo all'idrogramma di calcolo z%%=16
  697. 'contiene i propri nuovi valori aggiunti alle code e quello relativo a z%%=15, che a sua volta contiene i propri nuovi valori aggiunti alle code e quello relativo a z%%=14, che a sua volta contiene i propri nuovi valori aggiunti
  698. 'alle code e quello relativo a z%%=13 che a sua volta contiene i propri nuovi valori aggiunti alle code e quello relativo a z%%=12, che a sua volta contiene i propri nuovi valori aggiunti alle code e quello relativo a z%%=11, che a
  699. 'sua volta contiene i propri nuovi valori aggiunti alle code e quello relativo a z%%=10, che a sua volta contiene i propri nuovi valori aggiunti alle code e quello relativo a z%%=9.
  700. 'vedasi anche i fogli di calcolo Excel con estensione CSV, dei risultati.
  701.  
  702. DIM test~`
  703.  
  704. n%% = 1
  705.     IF z%% = 1 THEN test~` = 0: EXIT DO
  706.     IF dt!(z%%) = dt!(z%% - n%%) THEN test~` = 1: EXIT DO
  707.     IF n%% = z%% - 1 THEN test~` = 0: EXIT DO
  708.     n%% = n%% + 1
  709. p%% = PassiFinePioggia1a24%%(z%%)
  710. i% = 0
  711.     matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%) - i%, 1).i2 = matrice1(ieto%%, z%%, p%%, 1).i1
  712.     p%% = p%% - 1
  713.     IF test~` = 0 THEN IF p%% = 0 THEN EXIT DO
  714.     IF test~` = 1 THEN IF p%% = PassiFinePioggia1a24%%(z%% - n%%) THEN EXIT DO
  715.     matrice1(ieto%%, z%%, i% + 1, 1).i2 = matrice1(ieto%%, z%%, p%%, 1).i1
  716.     p%% = p%% - 1
  717.     i% = i% + 1
  718.     IF test~` = 0 THEN IF p%% = 0 THEN EXIT DO
  719.     IF test~` = 1 THEN IF p%% = PassiFinePioggia1a24%%(z%% - n%%) THEN EXIT DO
  720. IF test~` = 1 THEN
  721.     IF matrice1(ieto%%, z%%, i%, 1).i2 = 0 THEN i% = i% - 1
  722.     p%% = 1
  723.     DO
  724.         i% = i% + 1
  725.         matrice1(ieto%%, z%%, i%, 1).i2 = matrice1(ieto%%, z%% - n%%, p%%, 1).i2
  726.         p%% = p%% + 1
  727.     LOOP UNTIL p%% > PassiFinePioggia1a24%%(z%% - n%%)
  728. '--------------------------------------------------------------------------------------------------------------------------------------------------
  729. '--------------------------------------------------------------------------------------------------------------------------------------------------
  730. DisegnaMatriciIeto1e2:
  731. 'routine che crea, per lo ieto%% in corso di calcolo, le 24 immagini relative a ciascun idrogramma di calcolo.
  732. 'la routine procede nel seguente modo:
  733. '- con detinazione MatriciIeto1e2(ieto%%, z%%), scrive nella metà a destra i dati;
  734. '- con destinazione quadro&, disegna l'idrogramma con relativo ietogramma;
  735. '- incolla con _PUTIMAGE quadro& nel quadrante alto della metà sinistra di MatriciIeto1e2(ieto%%, z%%);
  736. '- con destinazione quadro&, disegna gli idrogrammi unitari del bacino.
  737. '- incolla con _PUTIMAGE quadro& nel quadrante basso della metà sinistra di MatriciIeto1e2(ieto%%, z%%).
  738. 'MatriciIeto1e2(ieto%%, z%%) dunque nella metà a sinistra riporterà l'idrogramma e gli idrogrammi unitari e a destra i dati.
  739.  
  740. DIM istoX!
  741.  
  742. posizione% = _WIDTH(MatriciIeto1e2(1, 1)) \ 8 - 94
  743. _DEST MatriciIeto1e2(ieto%%, z%%)
  744. LINE (0, 0)-(_WIDTH(MatriciIeto1e2(ieto%%, z%%)) - 1, _HEIGHT(MatriciIeto1e2(ieto%%, z%%)) - 1), R&, B
  745. LOCATE 2, posizione%
  746. COLOR bianco&: PRINT "Legenda: ";
  747. COLOR G&: PRINT "[Idrogramma]";
  748. COLOR R&: PRINT "[Pioggia effettiva]";
  749. COLOR B&: PRINT "[Pioggia efficace]"
  750. IF H% \ 16 >= 55 THEN
  751.     i% = 1: n%% = 1
  752.     i% = 2: n%% = 2
  753. LOCATE , posizione%
  754. FOR i% = i% TO 50 STEP n%%
  755.     CALL Tabella(i%, n%%,0, "-", bianco&, "ore", bianco&, "ore:min", G&, "mc/sec", R&, "mm", B&, "mm", bianco&, "mm/ora", 0, "", 2 ^ 4, 1, bianco&, i%, grigio&, matrice1(ieto%%, z%%, i%, 1).mdt,_
  756.     grigio&, matrice1(ieto%%, z%%, i%, 1).mdt,grigio&, idrogrammi1a24(ieto%%, z%%, i%, 1).portata, grigio&, matrice1(ieto%%, z%%, i%, 1).DH, grigio&, matrice1(ieto%%, z%%, i%, 1).Dhe, grigio&, matrice1(ieto%%, z%%, i%, 1).i2)
  757.     LOCATE CSRLIN - 1, FineColonna%(7): PRINT "³"
  758. NEXT i%
  759. LOCATE , posizione%: COLOR bianco&: PRINT "Sommano:";
  760. LOCATE , FineColonna%(4) + 1: COLOR R&: PRINT _TRIM$(STR$(Arrotonda!(matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).H2)));
  761. LOCATE , FineColonna%(5) + 1: COLOR B&: PRINT _TRIM$(STR$(Arrotonda!(matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).he)))
  762. LOCATE , posizione%: COLOR bianco&: PRINT "Media:";
  763. LOCATE , FineColonna%(6) + 1: PRINT _TRIM$(STR$(Arrotonda!(matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).H2 / matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).mdt)))
  764. CALL Dati(2 ^ 3 + 2 ^ 2 + 2 ^ 1 + 2 ^ 0, posizione% + 55)
  765. CALL DisegnaAssi("ore", "mc/s(idrogramma) - mm(ietogramma<--ordinate non in scala)", MinimiMatriciQuadrante1(ieto%%, z%%, 1).ore, MassimiIdrogrammi1a24(ieto%%, z%%, 1).portata, quadro&, R&, bianco&, bianco&, bianco&)
  766. istoX! = matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).mdt / PassiFinePioggia1a24%%(z%%)
  767. SELECT CASE ieto%%
  768.     CASE IS = 1
  769.         CALL ScalaOrigine(1, 1, MinimiMatriciQuadrante1(ieto%%, z%%, 1).ore, matrice1(ieto%%, 1, 1, 1).i1 * dt!(z%%), quadro&)
  770.         LINE (dx!, dy!)-(dx! + istoX!, dy! + matrice1(ieto%%, z%%, 1, 1).DH), R&, BF
  771.         LINE (dx!, dy!)-(dx! + istoX!, dy! + matrice1(ieto%%, z%%, 1, 1).DH), bianco&, B
  772.         i% = 2
  773.         DO UNTIL matrice1(ieto%%, z%%, i%, 1).DH = 0
  774.             LINE (dx! + (i% - 1) * istoX!, dy!)-(dx! + i% * istoX!, dy! + matrice1(ieto%%, z%%, i%, 1).DH), R&, BF
  775.             LINE (dx! + (i% - 1) * istoX!, dy!)-(dx! + i% * istoX!, dy! + matrice1(ieto%%, z%%, i%, 1).DH), bianco&, B
  776.             i% = i% + 1
  777.         LOOP
  778.         LINE (dx!, dy!)-(dx! + istoX!, dy! + matrice1(ieto%%, z%%, 1, 1).Dhe), B&, BF
  779.         LINE (dx!, dy!)-(dx! + istoX!, dy! + matrice1(ieto%%, z%%, 1, 1).Dhe), bianco&, B
  780.         i% = 2
  781.         DO
  782.             IF matrice1(ieto%%, z%%, i%, 1).Dhe = 0 THEN
  783.                 IF matrice1(ieto%%, z%%, i% - 1, 1).Dhe > 0 THEN EXIT DO
  784.             END IF
  785.             LINE (dx! + (i% - 1) * istoX!, dy!)-(dx! + i% * istoX!, dy! + matrice1(ieto%%, z%%, i%, 1).Dhe), B&, BF
  786.             LINE (dx! + (i% - 1) * istoX!, dy!)-(dx! + i% * istoX!, dy! + matrice1(ieto%%, z%%, i%, 1).Dhe), bianco&, B
  787.             i% = i% + 1
  788.         LOOP
  789.         LINE (dx!, dy!)-(dx! + istoX!, dy! + matrice1(ieto%%, z%%, 1, 1).DH), giallo&
  790.         i% = 2
  791.         DO UNTIL matrice1(ieto%%, z%%, i% + 1, 1).DH = 0
  792.             LINE (dx! + (i% - 1) * istoX!, dy! + matrice1(ieto%%, z%%, i% - 1, 1).DH)-(dx! + i% * istoX!, dy! + matrice1(ieto%%, z%%, i%, 1).DH), giallo&
  793.             i% = i% + 1
  794.         LOOP
  795.         LINE -(dx! + i% * istoX!, dy!), giallo&
  796.         LINE (dx!, dy!)-(dx! + istoX!, dy! + matrice1(ieto%%, z%%, 1, 1).Dhe), giallo&
  797.         i% = 2
  798.         DO UNTIL i% = PassiFinePioggia1a24%%(z%%)
  799.             LINE (dx! + (i% - 1) * istoX!, dy! + matrice1(ieto%%, z%%, i% - 1, 1).Dhe)-(dx! + i% * istoX!, dy! + matrice1(ieto%%, z%%, i%, 1).Dhe), giallo&
  800.             i% = i% + 1
  801.         LOOP
  802.         LINE -(dx! + i% * istoX!, dy!), giallo&
  803.         n%% = 0
  804.         DO
  805.             n%% = n%% + 1
  806.             IF matrice1(ieto%%, z%%, 1, 1).i1 * dt!(z%%) = matrice1(ieto%%, z%%, n%%, 1).DH THEN EXIT DO
  807.         LOOP
  808.         CALL DisegnaValore(matrice1(ieto%%, z%%, n%%, 1).mdt, matrice1(ieto%%, z%%, n%%, 1).DH, trasparente&, trasparente, bianco&)
  809.     CASE IS = 2
  810.         LINE (dx!, dy!)-(dx! + istoX! * PassiFinePioggia1a24%%(z%%), dy! + matrice1(ieto%%, z%%, 1, 1).DH), R&, BF
  811.         LINE (dx!, dy!)-(dx! + istoX! * PassiFinePioggia1a24%%(z%%), dy! + matrice1(ieto%%, z%%, 1, 1).DH), bianco&, B
  812.         LINE (dx!, dy!)-(dx! + istoX!, dy! + matrice1(ieto%%, z%%, 1, 1).Dhe), bianco&
  813.         i% = 2
  814.         DO
  815.             LINE (dx! + (i% - 1) * istoX!, dy! + matrice1(ieto%%, z%%, i% - 1, 1).Dhe)-(dx! + i% * istoX!, dy! + matrice1(ieto%%, z%%, i%, 1).Dhe), bianco&
  816.             IF i% = PassiFinePioggia1a24%%(z%%) THEN EXIT DO
  817.             i% = i% + 1
  818.         LOOP
  819.         PAINT (0.7 * dx! + i% * istoX!, 0.7 * dy! + matrice1(ieto%%, z%%, i%, 1).Dhe), B&, bianco&
  820. IF ieto%% = 1 THEN CALL ScalaOrigine(1, 1, MinimiMatriciQuadrante1(ieto%%, z%%, 1).ore, MassimiIdrogrammi1a24(ieto%%, z%%, 1).portata, quadro&)
  821. FOR i% = 1 TO MinimiMatriciQuadrante1(ieto%%, z%%, 1).i
  822.     CIRCLE (dx! + idrogrammi1a24(ieto%%, z%%, i%, 1).ore, dy! + idrogrammi1a24(ieto%%, z%%, i%, 1).portata), PMAP(3, 2), G&
  823.     PAINT (dx! + idrogrammi1a24(ieto%%, z%%, i%, 1).ore - PMAP(2.5, 2), dy! + idrogrammi1a24(ieto%%, z%%, i%, 1).portata), G&
  824.     IF i% = 1 THEN
  825.         LINE (dx!, dy!)-(dx! + idrogrammi1a24(ieto%%, z%%, i%, 1).ore, dy! + idrogrammi1a24(ieto%%, z%%, i%, 1).portata), G&
  826.     ELSE
  827.         LINE (dx! + idrogrammi1a24(ieto%%, z%%, i% - 1, 1).ore, dy! + idrogrammi1a24(ieto%%, z%%, i% - 1, 1).portata)-(dx! + idrogrammi1a24(ieto%%, z%%, i%, 1).ore, dy! + idrogrammi1a24(ieto%%, z%%, i%, 1).portata), G&
  828.     END IF
  829. NEXT i%
  830. CALL DisegnaValore(MassimiIdrogrammi1a24(ieto%%, z%%, 1).ore, MassimiIdrogrammi1a24(ieto%%, z%%, 1).portata, G&, G&, bianco&)
  831. CALL DisegnaValore(FinePioggiaIdrogrammi1a24(ieto%%, z%%, 1).ore, FinePioggiaIdrogrammi1a24(ieto%%, z%%, 1).portata, grigio&, grigio&, bianco&)
  832. COLOR bianco: _PRINTSTRING (_WIDTH(quadro&) - 33 * 8, 4), "Legenda:"
  833. COLOR grigio&: _PRINTSTRING (_WIDTH(quadro&) - 24 * 8, 4), "[Termine della pioggia]"
  834. _PUTIMAGE (0, 0)-(_WIDTH(quadro&), _HEIGHT(quadro&)), quadro&, MatriciIeto1e2(ieto%%, z%%)
  835. CALL DisegnaAssi("ore", "mc/(s * mm)", MinimiMatriciQuadrante2(1, 1, 1).ore, MassimiQuadrante2(1, 1, 1).portata, quadro&, R&, bianco&, bianco&, bianco&)
  836. CALL DisegnaValore(MassimiQuadrante2(ieto%%, z%%, 1).ore, MassimiQuadrante2(ieto%%, z%%, 1).portata, azzurro&, G&, bianco&)
  837. FOR i% = 1 TO 50
  838.     CIRCLE (dx! + matrice1(1, 1, i%, 1).mdt, dy! + matrice1(1, 1, i%, 1).qm), PMAP(3, 2), pastello&
  839.     PAINT (dx! + matrice1(1, 1, i%, 1).mdt - PMAP(2.5, 2), dy! + matrice1(1, 1, i%, 1).qm), pastello&
  840.     IF i% = 1 THEN
  841.         LINE (dx!, dy!)-(dx! + matrice1(1, 1, i%, 1).mdt, dy! + matrice1(1, 1, i%, 1).qm), pastello&, , 65280
  842.     ELSE
  843.         LINE (dx! + matrice1(1, 1, i% - 1, 1).mdt, dy! + matrice1(1, 1, i% - 1, 1).qm)-(dx! + matrice1(1, 1, i%, 1).mdt, dy! + matrice1(1, 1, i%, 1).qm), pastello&, , 65280
  844.     END IF
  845. NEXT i%
  846. FOR i% = 1 TO MinimiMatriciQuadrante2(ieto%%, z%%, 1).i
  847.     CIRCLE (dx! + matrice1(ieto%%, z%%, i%, 1).mdt, dy! + matrice1(ieto%%, z%%, i%, 1).qm), PMAP(3, 2), azzurro&
  848.     IF i% = 1 THEN
  849.         LINE (dx!, dy!)-(dx! + matrice1(ieto%%, z%%, i%, 1).mdt, dy! + matrice1(ieto%%, z%%, i%, 1).qm), azzurro&
  850.     ELSE
  851.         LINE (dx! + matrice1(ieto%%, z%%, i% - 1, 1).mdt, dy! + matrice1(ieto%%, z%%, i% - 1, 1).qm)-(dx! + matrice1(ieto%%, z%%, i%, 1).mdt, dy! + matrice1(ieto%%, z%%, i%, 1).qm), azzurro&
  852.     END IF
  853. NEXT i%
  854. LOCATE 2, _WIDTH(quadro&) \ 8 - 35: PRINT "Legenda:"
  855. LOCATE 4, _WIDTH(quadro&) \ 8 - 35: COLOR azzurro&: PRINT "[Idrogramma  unitario  del bacino"
  856. LOCATE , _WIDTH(quadro&) \ 8 - 35: PRINT "con la discretizzazione temporale"
  857. LOCATE , _WIDTH(quadro&) \ 8 - 35: PRINT "dt = "; _TRIM$(STR$(Arrotonda!(dt!(z%%)))); " ore = "; _TRIM$(STR$(INT(dt!(z%%)))); " ore e "; _TRIM$(STR$(CINT(60 * (dt!(z%%) - INT(dt!(z%%)))))); " minuti]"
  858. LOCATE 8, _WIDTH(quadro&) \ 8 - 35: COLOR pastello&: PRINT "[Idrogramma  unitario  del bacino"
  859. LOCATE , _WIDTH(quadro&) \ 8 - 35: PRINT "con la discretizzazione temporale"
  860. LOCATE , _WIDTH(quadro&) \ 8 - 35: PRINT "dt = "; _TRIM$(STR$(Arrotonda!(dt!(1)))); " ore = "; _TRIM$(STR$(INT(dt!(1)))); " ore e "; _TRIM$(STR$(CINT(60 * (dt!(1) - INT(dt!(1)))))); " minuti]"
  861. _PUTIMAGE (0, _HEIGHT(MatriciIeto1e2(ieto%%, z%%)) \ 2)-(_WIDTH(quadro&), _HEIGHT(MatriciIeto1e2(ieto%%, z%%)) - 1), quadro&, MatriciIeto1e2(ieto%%, z%%)
  862. '--------------------------------------------------------------------------------------------------------------------------------------------------
  863. '--------------------------------------------------------------------------------------------------------------------------------------------------
  864. DisegnaComplessivoIeto1e2:
  865. 'routine che, per lo ieto%% in corso di calcolo:
  866. '- con destinazione ComplessivoIeto1e2(ieto%%).composizione, scrive nella metà a destra i dati;
  867. '- con destinazione ComplessivoIeto1e2(ieto%%).grafico, disegna i 24 idrogrammi di calcolo;
  868. '- incolla con _PUTIMAGE ComplessivoIeto1e2(ieto%%).grafico, a sinistra, su ComplessivoIeto1e2(ieto%%).composizione.
  869. 'ComplessivoIeto1e2(ieto%%).composizione dunque riporterà a sinistra il grafico dei 24 idrogrammi e a destra i dati.
  870.  
  871. DIM colore&
  872.  
  873. posizione% = _WIDTH(ComplessivoIeto1e2(1).composizione) \ 8 - 45
  874. _DEST ComplessivoIeto1e2(ieto%%).composizione
  875. LOCATE 2, posizione%: PRINT "T U T T I   G L I   I D R O G R A M M I"
  876. CALL Dati(2 ^ 3, posizione%)
  877. VIEW PRINT _HEIGHT(ComplessivoIeto1e2(ieto%%).composizione) \ 16 - 26 TO _HEIGHT(ComplessivoIeto1e2(ieto%%).composizione) \ 16
  878. LOCATE , posizione%: COLOR bianco&: PRINT "Legenda: ";
  879. COLOR giallo&: PRINT "[Picchi]";
  880. COLOR G&: PRINT "[Durata della pioggia]"
  881. LOCATE , posizione%
  882. FOR z%% = 1 TO 24
  883.         CALL Tabella(z%%,1,0, "-", giallo&, "ore", giallo&, "ore:min", giallo&, "mc/sec", G&, "ore:min", G&, "ore/tc", 0, "", 0, "",2 ^ 4 + 2 ^ 2, 1, bianco&, z%%, giallo&, MassimiIdrogrammi1a24(VisualizzaIeto%%, z%%, 1).ore, giallo&,_
  884.         MassimiIdrogrammi1a24(VisualizzaIeto%%, z%%, 1).ore, giallo&,MassimiIdrogrammi1a24(VisualizzaIeto%%, z%%, 1).portata, grigio&, FinePioggiaIdrogrammi1a24(VisualizzaIeto%%, z%%, 1).ore, grigio&,_
  885.         CoefficientiDiscretizzazioneTemporale(z%%).N, 0, 0)
  886. NEXT z%%
  887. LINE (0, 0)-(_WIDTH(ComplessivoIeto1e2(ieto%%).composizione) - 1, _HEIGHT(ComplessivoIeto1e2(ieto%%).composizione) - 1), R&, B 'disegna il margine rosso.
  888. CALL DisegnaAssi("ore", "mc/s", idrogrammi1a24(ieto%%, 24, 50, 1).ore, MassimiAssolutiIeto(ieto%%).portata, ComplessivoIeto1e2(ieto%%).grafico, R&, bianco&, bianco&, bianco&)
  889. FOR z%% = 1 TO 24
  890.     SELECT CASE z%% MOD 3
  891.         CASE IS = 1
  892.             colore& = R&
  893.         CASE IS = 2
  894.             colore& = G&
  895.         CASE IS = 0
  896.             colore& = B&
  897.     END SELECT
  898.     FOR i% = 1 TO 50
  899.         IF i% = 1 THEN
  900.             LINE (dx!, dy!)-(dx! + idrogrammi1a24(ieto%%, z%%, i%, 1).ore, dy! + idrogrammi1a24(ieto%%, z%%, i%, 1).portata), colore&
  901.         ELSE
  902.             LINE (dx! + idrogrammi1a24(ieto%%, z%%, i% - 1, 1).ore, dy! + idrogrammi1a24(ieto%%, z%%, i% - 1, 1).portata)-(dx! + idrogrammi1a24(ieto%%, z%%, i%, 1).ore, dy! + idrogrammi1a24(ieto%%, z%%, i%, 1).portata), colore&
  903.         END IF
  904.     NEXT i%
  905. NEXT z%%
  906. CALL DisegnaValore(MassimiAssolutiIeto(ieto%%).ore, MassimiAssolutiIeto(ieto%%).portata, azzurro&, azzurro&, bianco&)
  907. CALL DisegnaLinea(ieto%%, ComplessivoIeto1e2(ieto%%).grafico, giallo&, bianco&)
  908. _PUTIMAGE (0, 0), ComplessivoIeto1e2(ieto%%).grafico, ComplessivoIeto1e2(ieto%%).composizione
  909. OriginaleGrafico& = _COPYIMAGE(ComplessivoIeto1e2(VisualizzaIeto%%).grafico)
  910. '--------------------------------------------------------------------------------------------------------------------------------------------------
  911. '--------------------------------------------------------------------------------------------------------------------------------------------------
  912. DisegnaUnitari:
  913. 'routine che disegna l'idrogramma unitario adimensionale di Mockus e l'idrogramma unitario del bacino idrografico.
  914. 'la routine procede nel seguente modo:
  915. '- con detinazione unitari&, scrive nella metà a destra i dati;
  916. '- con destinazione quadro&, disegna l'idrogramma unitario adimensionale di Mockus;
  917. '- incolla con _PUTIMAGE quadro& nel quadrante alto della metà sinistra di unitari&;
  918. '- con destinazione quadro&, disegna l'idrogramma unitario del bacino idrografico;
  919. '- incolla con _PUTIMAGE quadro& nel quadrante basso della metà sinistra di unitari&.
  920. 'unitari& dunque nella metà a sinistra riporterà gli idrogrammi unitari e a destra i dati.
  921.  
  922. posizione% = _WIDTH(unitari&) \ 8 - 94
  923. _DEST unitari&
  924. LOCATE 2, posizione%
  925. COLOR bianco&: PRINT "Legenda: ";
  926. COLOR giallo&: PRINT "[Idrogramma unitario adimensionale di Mockus]";
  927. COLOR G&: PRINT "[Idrogramma unitario del bacino]";
  928. IF H% \ 16 >= 55 THEN
  929.     i% = 1: n%% = 1
  930.     i% = 2: n%% = 2
  931. LOCATE , posizione%
  932. FOR i% = i% TO 50 STEP n%%
  933.     CALL Tabella(i%, n%%,0, "-", giallo&, "t/ta", giallo&, "q/qp", G&, "ore", G&, "mc/s*mm", 0, "", 0, "", 0, "", 0, 1, bianco&, i%, grigio&, mockus(i%).tSUta, grigio&, mockus(i%).qSUqp, grigio&, matrice1(1, 1, i%, 1).mdt, grigio&,_
  934.     matrice1(1, 1, i%, 1).qm, 0, 0, 0, 0)
  935. NEXT i%
  936. COLOR bianco&: LOCATE 4,
  937. CALL Dati(0, posizione% + 40)
  938. COLOR grigio&
  939. LOCATE 15, posizione% + 40: PRINT "La determinazione dell'idrogramma unitario di"
  940. LOCATE 17, posizione% + 40: PRINT "un bacino  di note  caratteristiche  consiste"
  941. LOCATE 19, posizione% + 40: PRINT "nell'amplificare l'ascissa e l'ordinata dello"
  942. LOCATE 21, posizione% + 40: PRINT "idrogramma unitario  adimensionale di  Mockus"
  943. LOCATE 23, posizione% + 40: PRINT "mediante  i  fattori  ta e  qp, specifici del"
  944. LOCATE 25, posizione% + 40: PRINT "bacino  esaminato. Il calcolo dell'idrogramma"
  945. LOCATE 27, posizione% + 40: PRINT "di piena presuppone poi che gli incrementi di"
  946. LOCATE 29, posizione% + 40: PRINT "deflusso siano utilizzati  per a mplificare i"
  947. LOCATE 31, posizione% + 40: PRINT "valori   dell' idrogramma  unitario  e  siano"
  948. LOCATE 33, posizione% + 40: PRINT "sommati a parit… d'istante."
  949. LINE (0, 0)-(_WIDTH(unitari&) - 1, _HEIGHT(unitari&) - 1), R&, B
  950. CALL DisegnaAssi("t/ta", "q/qp", 5, 1, quadro&, R&, bianco&, bianco&, bianco&)
  951. FOR i% = 1 TO UBOUND(mockus)
  952.     CIRCLE (dx! + mockus(i%).tSUta, dy! + mockus(i%).qSUqp), PMAP(3, 2), giallo&
  953.     PAINT (dx! + mockus(i%).tSUta - PMAP(2.5, 2), dy! + mockus(i%).qSUqp), giallo&
  954.     IF i% = 1 THEN
  955.         LINE (dx!, dy!)-(dx! + mockus(i%).tSUta, dy! + mockus(i%).qSUqp), giallo&
  956.     ELSE
  957.         LINE (dx! + mockus(i% - 1).tSUta, dy! + mockus(i% - 1).qSUqp)-(dx! + mockus(i%).tSUta, dy! + mockus(i%).qSUqp), giallo&
  958.     END IF
  959. NEXT i%
  960. _PUTIMAGE (0, 0)-(_WIDTH(quadro&), _HEIGHT(quadro&)), quadro&, unitari&
  961. CALL DisegnaAssi("ore", "mc/(s * mm)", matrice1(1, 1, 50, 1).mdt, MassimiQuadrante2(1, 1, 1).portata, quadro&, R&, bianco&, bianco&, bianco&)
  962. CALL DisegnaValore(MassimiQuadrante2(1, 1, 1).ore, MassimiQuadrante2(1, 1, 1).portata, azzurro&, azzurro&, bianco&)
  963. FOR i% = 1 TO 50
  964.     CIRCLE (dx! + matrice1(1, 1, i%, 1).mdt, dy! + matrice1(1, 1, i%, 1).qm), PMAP(3, 2), G&
  965.     PAINT (dx! + matrice1(1, 1, i%, 1).mdt - PMAP(2.5, 2), dy! + matrice1(1, 1, i%, 1).qm), G&
  966.  
  967.     IF i% = 1 THEN
  968.         LINE (dx!, dy!)-(dx! + matrice1(1, 1, i%, 1).mdt, dy! + matrice1(1, 1, i%, 1).qm), G&
  969.     ELSE
  970.         LINE (dx! + matrice1(1, 1, i% - 1, 1).mdt, dy! + matrice1(1, 1, i% - 1, 1).qm)-(dx! + matrice1(1, 1, i%, 1).mdt, dy! + matrice1(1, 1, i%, 1).qm), G&
  971.     END IF
  972. NEXT i%
  973. LOCATE 2, _WIDTH(quadro&) \ 8 - 35: PRINT "Idrogramma  unitario  del  bacino"
  974. LOCATE , _WIDTH(quadro&) \ 8 - 35: PRINT "con la discretizzazione temporale"; ""
  975. LOCATE , _WIDTH(quadro&) \ 8 - 35: PRINT "dt = "; _TRIM$(STR$(Arrotonda!(dt!(1)))); " ore = "; _TRIM$(STR$(INT(dt!(1)))); " ore e "; _TRIM$(STR$(CINT(60 * (dt!(1) - INT(dt!(1)))))); " minuti."
  976. _PUTIMAGE (0, _HEIGHT(unitari&) \ 2)-(_WIDTH(quadro&), _HEIGHT(unitari&) - 1), quadro&, unitari&
  977. '--------------------------------------------------------------------------------------------------------------------------------------------------
  978. '--------------------------------------------------------------------------------------------------------------------------------------------------
  979. VisualizzaComplessivo:
  980. 'routine che visualizza sullo schermo i 24 idrogrammi di calcolo relativi al tipo di ietogramma scelto e disegnati dalla routine DisegnaComplessivoIeto1e2. dopo questa routine, viene chiamata la subroutine CalcolaIdrogramma.
  981.  
  982. _DEST shermo&
  983. CLS 2
  984. ComplessivoIeto1e2(VisualizzaIeto%%).grafico = _COPYIMAGE(OriginaleGrafico&)
  985. _PUTIMAGE (0, 0), ComplessivoIeto1e2(VisualizzaIeto%%).grafico, ComplessivoIeto1e2(VisualizzaIeto%%).composizione
  986. _PUTIMAGE ((DESKTOPWIDTH% - _WIDTH(ComplessivoIeto1e2(VisualizzaIeto%%).composizione)), (DESKTOPHEIGHT% - _HEIGHT(ComplessivoIeto1e2(VisualizzaIeto%%).composizione) - 16)), ComplessivoIeto1e2(VisualizzaIeto%%).composizione, schermo&
  987. '--------------------------------------------------------------------------------------------------------------------------------------------------
  988. '--------------------------------------------------------------------------------------------------------------------------------------------------
  989. DisegnaIdrogramma:
  990. 'routine che viene attivata appena dopo la subroutine CalcolaIdrogramma e che utilizza i risultati da essa generati. in base al tipo di ietogramma scelto, cioè in base a VisualizzaIeto%%, viene disegnato l'idrogramma di progetto
  991. 'e, nel caso l'utente l'abbia voluto, anche l'idrogramma corrispondente all'ora di picco scelta.
  992. '- con destinazione idrogramma1e2(n%%).composizione, scrive nella metà a destra i dati;
  993. '- con destinazione idrogramma1e2(n%%).grafico, disegna l'idrogramma di progetto (o corrispondente all'ora di picco scelta);
  994. '- incolla con _PUTIMAGE idrogramma1e2(n%%).grafico, a sinistra, su idrogramma1e2(n%%).composizione.
  995. 'idrogramma1e2(n%%).composizione dunque riporterà a sinistra il grafico dell'idrogramma di progetto (o corrispondente all'ora di picco scelta) e a destra i dati.
  996.  
  997. FOR n%% = 1 TO 2
  998.     IF n%% = 1 THEN posizione% = _WIDTH(idrogramma1e2(n%%).composizione) \ 8 - 56
  999.     IF n%% = 2 THEN IF ore!(n%%) = 0 THEN EXIT FOR
  1000.     _DEST idrogramma1e2(n%%).composizione
  1001.     CLS
  1002.     IF n%% = 1 THEN
  1003.         LOCATE 2, posizione%: PRINT "I D R O G R A M M A   D I   P R O G E T T O"
  1004.     ELSEIF n%% = 2 THEN
  1005.         LOCATE 2, posizione%: PRINT "IDROGRAMMA CORRISPONDENTE ALL'ORA DI PICCO SCELTA"
  1006.     END IF
  1007.     CALL Dati(2 ^ 3, posizione%)
  1008.     VIEW PRINT _HEIGHT(idrogramma1e2(n%%).composizione) \ 16 - 26 TO _HEIGHT(idrogramma1e2(n%%).composizione) \ 16
  1009.     LOCATE , posizione%
  1010.     SELECT CASE n%%
  1011.         CASE IS = 1
  1012.             FOR i% = 1 TO 25
  1013.                 CALL Tabella(i%, 1,0, "-", bianco&, "ore", bianco&, "ore:min", bianco&, "mc/sec", 0, "-", bianco&, "ore", bianco&, "ore:min", bianco&, "mc/sec", 2 ^ 4, 1, bianco%, i%, grigio&, idrogramma1(i%).ore, grigio&,_
  1014.                 idrogramma1(i%).ore, grigio&, idrogramma1(i%).portata, 0, 0, 0, 0, 0, 0)
  1015.                 LOCATE CSRLIN - 1, FineColonna%(4): PRINT "³"
  1016.             NEXT i%
  1017.             LOCATE _HEIGHT(idrogramma1e2(n%%).composizione) \ 16 - 26 + 1,
  1018.             FOR i% = 26 TO UBOUND(idrogramma1)
  1019.                 CALL Tabella(i%, 1,0, "-", bianco&, "ore", bianco&, "ore:min", bianco&, "mc/sec", 0, "-", bianco&, "ore", bianco&, "ore:min", bianco&, "mc/sec", 2 ^ 4, 5, bianco%, i%, grigio&, idrogramma1(i%).ore, grigio&,_
  1020.                 idrogramma1(i%).ore, grigio&, idrogramma1(i%).portata, 0, 0, 0, 0, 0, 0)
  1021.             NEXT i%
  1022.         CASE IS = 2
  1023.             FOR i% = 1 TO 25
  1024.                 CALL Tabella(i%, 1,0, "-", bianco&, "ore", bianco&, "ore:min", bianco&, "mc/sec", 0, "-", bianco&, "ore", bianco&, "ore:min", bianco&, "mc/sec", 2 ^ 4, 1, bianco%, i%, grigio&, idrogramma2(i%).ore, grigio&,_
  1025.                 idrogramma2(i%).ore, grigio&, idrogramma2(i%).portata, 0, 0, 0, 0, 0, 0)
  1026.                 LOCATE CSRLIN - 1, FineColonna%(4): PRINT "³"
  1027.             NEXT i%
  1028.             LOCATE _HEIGHT(idrogramma1e2(n%%).composizione) \ 16 - 26 + 1,
  1029.             FOR i% = 26 TO UBOUND(idrogramma2)
  1030.                 CALL Tabella(i%, 1,0, "-", bianco&, "ore", bianco&, "ore:min", bianco&, "mc/sec", 0, "-", bianco&, "ore", bianco&, "ore:min", bianco&, "mc/sec", 2 ^ 4, 5, bianco%, i%, grigio&, idrogramma2(i%).ore, grigio&,_
  1031.                 idrogramma2(i%).ore, grigio&, idrogramma2(i%).portata, 0, 0, 0, 0, 0, 0)
  1032.             NEXT i%
  1033.     END SELECT
  1034.     VIEW PRINT
  1035.     LINE (0, 0)-(_WIDTH(idrogramma1e2(n%%).composizione) - 1, _HEIGHT(idrogramma1e2(n%%).composizione) - 1), R&, B
  1036. NEXT n%%
  1037. CALL DisegnaAssi("ore", "mc/s", IdroPixel1(UBOUND(IdroPixel1)).ore, portata!(1), idrogramma1e2(1).grafico, R&, bianco&, bianco&, bianco&)
  1038. CALL DisegnaValore(ore!(1), portata!(1), azzurro&, azzurro&, bianco&)
  1039. LOCATE 2, _WIDTH(idrogramma1e2(1).grafico) \ 8 - 25: COLOR bianco&: PRINT "Legenda: "
  1040. LOCATE 4, _WIDTH(idrogramma1e2(1).grafico) \ 8 - 25: COLOR B&: PRINT "[Termine della pioggia]"
  1041. n%% = 0
  1042. GOSUB idro1
  1043. _SOURCE idrogramma1e2(1).grafico
  1044. IF FinePioggiaIdrogrammi1e2(1).ore = FinePioggiaIdrogrammi1a24(VisualizzaIeto%%, IdroMaxieto%%(VisualizzaIeto%%), 1).ore THEN
  1045.     FinePioggiaIdrogrammi1e2(1).portata = FinePioggiaIdrogrammi1a24(VisualizzaIeto%%, IdroMaxieto%%(VisualizzaIeto%%), 1).portata
  1046.     y% = PMAP(dy!, 1)
  1047.     DO
  1048.         IF POINT(dx! + FinePioggiaIdrogrammi1e2(1).ore, PMAP(y%, 3)) = giallo& THEN EXIT DO
  1049.         y% = y% - 1
  1050.     LOOP
  1051.     FinePioggiaIdrogrammi1e2(1).portata = PMAP(y%, 3) - dy!
  1052. CALL DisegnaValore(FinePioggiaIdrogrammi1e2(1).ore, FinePioggiaIdrogrammi1e2(1).portata, B&, B&, bianco&)
  1053. idro1:
  1054. n%% = n%% + 1
  1055. FOR i% = 1 TO UBOUND(idrogramma1)
  1056.     CIRCLE (dx! + idrogramma1(i%).ore, dy! + idrogramma1(i%).portata), PMAP(3, 2), G&
  1057.     PAINT (dx! + idrogramma1(i%).ore - PMAP(2.5, 2), dy! + idrogramma1(i%).portata), G&
  1058. NEXT i%
  1059. FOR i% = 1 TO UBOUND(IdroPixel1)
  1060.     IF i% = 1 THEN
  1061.         LINE (dx!, dy!)-(dx! + IdroPixel1(i%).ore, dy! + IdroPixel1(i%).portata), giallo&
  1062.     ELSE
  1063.         LINE (dx! + IdroPixel1(i% - 1).ore, dy! + IdroPixel1(i% - 1).portata)-(dx! + IdroPixel1(i%).ore, dy! + IdroPixel1(i%).portata), giallo&
  1064.     END IF
  1065. NEXT i%
  1066. IF n%% = 1 THEN RETURN
  1067. _PUTIMAGE (0, 0), idrogramma1e2(1).grafico, idrogramma1e2(1).composizione
  1068. IF ore!(2) = 0 THEN RETURN
  1069. CALL DisegnaAssi("ore", "mc/s", IdroPixel2(UBOUND(IdroPixel2)).ore, portata!(2), idrogramma1e2(2).grafico, R&, bianco&, bianco&, bianco&)
  1070. CALL DisegnaValore(ore!(2), portata!(2), azzurro&, azzurro&, bianco&)
  1071. LOCATE 2, _WIDTH(idrogramma1e2(1).grafico) \ 8 - 25: COLOR bianco&: PRINT "Legenda: "
  1072. LOCATE 4, _WIDTH(idrogramma1e2(1).grafico) \ 8 - 25: COLOR B&: PRINT "[Termine della pioggia]"
  1073. GOSUB idro2
  1074. _SOURCE idrogramma1e2(2).grafico
  1075. y% = PMAP(dy!, 1)
  1076.     IF POINT(dx! + FinePioggiaIdrogrammi1e2(2).ore, PMAP(y%, 3)) = giallo& THEN EXIT DO
  1077.     y% = y% - 1
  1078. FinePioggiaIdrogrammi1e2(2).portata = PMAP(y%, 3) - dy!
  1079. CALL DisegnaValore(FinePioggiaIdrogrammi1e2(2).ore, FinePioggiaIdrogrammi1e2(2).portata, B&, B&, bianco&)
  1080. idro2:
  1081. FOR i% = 1 TO UBOUND(idrogramma1)
  1082.     CIRCLE (dx! + idrogramma2(i%).ore, dy! + idrogramma2(i%).portata), PMAP(3, 2), G&
  1083.     PAINT (dx! + idrogramma2(i%).ore - PMAP(2.5, 2), dy! + idrogramma2(i%).portata), G&
  1084. NEXT i%
  1085. FOR i% = 1 TO UBOUND(IdroPixel2)
  1086.     IF i% = 1 THEN
  1087.         LINE (dx!, dy!)-(dx! + IdroPixel2(i%).ore, dy! + IdroPixel2(i%).portata), giallo&
  1088.     ELSE
  1089.         LINE (dx! + IdroPixel2(i% - 1).ore, dy! + IdroPixel2(i% - 1).portata)-(dx! + IdroPixel2(i%).ore, dy! + IdroPixel2(i%).portata), giallo&
  1090.     END IF
  1091. NEXT i%
  1092. _PUTIMAGE (0, 0), idrogramma1e2(2).grafico, idrogramma1e2(2).composizione
  1093. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1094. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1095. VisualizzaIdrogramma:
  1096. 'routine che visulizza su schermo gli idrogrammi disegnati dalla routine DisegnaIdrogramma.
  1097. 'viene chiesto inoltre all'utente se vuole trovare, sull'idrogramma, una portata corrispondente ad un'ora a scelta.
  1098.  
  1099. _DEST schermo&: CLS 2
  1100. COLOR giallo&: PRINT "[ESC]: esci; [TAB]: riavvia; [F1]: torna agli input iniziali; [F2]: ripristina il grafico; []: visualizza l'idrogramma di progetto.": COLOR bianco&
  1101.     _LIMIT 30
  1102.     KeyPress$ = INKEY$
  1103. LOOP UNTIL KeyPress$ = CHR$(27) OR KeyPress$ = CHR$(9) OR KeyPress$ = CHR$(0) + CHR$(59) OR KeyPress$ = CHR$(0) + CHR$(60) OR KeyPress$ = CHR$(0) + CHR$(77)
  1104. SELECT CASE KeyPress$
  1105.     CASE CHR$(27)
  1106.         esc~` = 1
  1107.     CASE CHR$(9)
  1108.         riavvio~` = 1
  1109.     CASE CHR$(0) + CHR$(59)
  1110.         menu~` = 1
  1111.     CASE CHR$(0) + CHR$(60)
  1112.         TornaAlGrafico~` = 1
  1113. IF esc~` = 1 OR riavvio~` = 1 OR menu~` = 1 OR TornaAlGrafico~` = 1 THEN RETURN
  1114. tipo%% = 3
  1115. _PUTIMAGE ((DESKTOPWIDTH% - _WIDTH(idrogramma1e2(1).composizione)), (DESKTOPHEIGHT% - _HEIGHT(idrogramma1e2(1).composizione) - 16)), idrogramma1e2(1).composizione, schermo&
  1116. CALL DisegnaPortata(idrogramma1(UBOUND(idrogramma1)).ore, idrogramma1e2(1).grafico, idrogramma1e2(1).composizione)
  1117. IF portata!(1) = MassimiIdrogrammi1a24(VisualizzaIeto%%, IdroMaxieto%%(VisualizzaIeto%%), 1).portata THEN
  1118.     IF ore!(1) = MassimiIdrogrammi1a24(VisualizzaIeto%%, IdroMaxieto%%(VisualizzaIeto%%), 1).ore THEN
  1119.         CLS 2
  1120.         COLOR giallo&
  1121.         PRINT "- Poich‚ l'idrogramma di progetto coincide con uno dei 24 calcolati, Š possibile visualizzarne i dettagli. Visualizzare? [S/N]"
  1122.         PRINT "[ESC]: esci; [TAB]: riavvia; [F1]: torna agli input iniziali; [F2]: torna al grafico iniziale."
  1123.         COLOR bianco&
  1124.         DO
  1125.             _LIMIT 30
  1126.             KeyPress$ = LCASE$(INKEY$)
  1127.         LOOP UNTIL KeyPress$ = "s" OR KeyPress$ = "n" OR KeyPress$ = CHR$(27) OR KeyPress$ = CHR$(9) OR KeyPress$ = CHR$(0) + CHR$(59) OR KeyPress$ = CHR$(0) + CHR$(60)
  1128.         SELECT CASE KeyPress$
  1129.             CASE "s"
  1130.                 _PUTIMAGE ((DESKTOPWIDTH% - _WIDTH(MatriciIeto1e2(VisualizzaIeto%%, IdroMaxieto%%(VisualizzaIeto%%)))), (DESKTOPHEIGHT% - _HEIGHT(MatriciIeto1e2(VisualizzaIeto%%, IdroMaxieto%%(VisualizzaIeto%%))) - 16)), MatriciIeto1e2(VisualizzaIeto%%, IdroMaxieto%%(VisualizzaIeto%%)), schermo&
  1131.             CASE CHR$(27)
  1132.                 esc~` = 1
  1133.             CASE CHR$(9)
  1134.                 riavvio~` = 1
  1135.             CASE CHR$(0) + CHR$(59)
  1136.                 menu~` = 1
  1137.             CASE CHR$(0) + CHR$(60)
  1138.                 TornaAlGrafico~` = 1
  1139.         END SELECT
  1140.         IF esc~` = 1 OR riavvio~` = 1 OR menu~` = 1 OR TornaAlGrafico~` = 1 THEN RETURN
  1141.     END IF
  1142. IF ore!(2) = 0 THEN RETURN
  1143. _DEST schermo&: CLS 2
  1144. COLOR giallo&: PRINT "[ESC]: esci; [TAB]: riavvia; [F1]: torna agli input iniziali; [F2]: torna al grafico iniziale; []: visualizza l'idrogramma corrispondente all'ora scelta.": COLOR bianco&
  1145.     _LIMIT 30
  1146.     KeyPress$ = INKEY$
  1147. LOOP UNTIL KeyPress$ = CHR$(27) OR KeyPress$ = CHR$(9) OR KeyPress$ = CHR$(0) + CHR$(59) OR KeyPress$ = CHR$(0) + CHR$(60) OR KeyPress$ = CHR$(0) + CHR$(77)
  1148. SELECT CASE KeyPress$
  1149.     CASE CHR$(27)
  1150.         esc~` = 1
  1151.     CASE CHR$(9)
  1152.         riavvio~` = 1
  1153.     CASE CHR$(0) + CHR$(59)
  1154.         menu~` = 1
  1155.     CASE CHR$(0) + CHR$(60)
  1156.         TornaAlGrafico~` = 1
  1157. IF esc~` = 1 OR riavvio~` = 1 OR menu~` = 1 OR TornaAlGrafico~` = 1 THEN RETURN
  1158. CLS 2
  1159. _PUTIMAGE ((DESKTOPWIDTH% - _WIDTH(idrogramma1e2(2).composizione)), (DESKTOPHEIGHT% - _HEIGHT(idrogramma1e2(2).composizione) - 16)), idrogramma1e2(2).composizione, schermo&
  1160. CALL DisegnaPortata(idrogramma2(UBOUND(idrogramma2)).ore, idrogramma1e2(2).grafico, idrogramma1e2(2).composizione) 'viene chiesto all'utente se desidera trovare, sull'idrogramma, la portata corrispondente ad un'ora a scelta.
  1161. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1162. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1163. VisualizzaUnitari:
  1164. 'routine che visualizza l'idrogramma unitario adimensionale di Mockus e l'idrogramma unitario del bacino idrografico disegnati dalla routine DisegnaUnitari.
  1165.  
  1166. CLS 2
  1167. COLOR giallo&
  1168. PRINT "Visualizza l'idrogramma unitario adimesionale di Mockus e l'idrogramma unitario del bacino? [S/N]"
  1169. PRINT "[ESC]: esci; [TAB]: riavvia; [F1]: torna agli input iniziali; [F2]: torna al grafico iniziale."
  1170. COLOR bianco&
  1171.     _LIMIT 30
  1172.     KeyPress$ = LCASE$(INKEY$)
  1173. LOOP UNTIL KeyPress$ = "s" OR KeyPress$ = "n" OR KeyPress$ = CHR$(27) OR KeyPress$ = CHR$(9) OR KeyPress$ = CHR$(0) + CHR$(59) OR KeyPress$ = CHR$(0) + CHR$(60)
  1174. SELECT CASE KeyPress$
  1175.     CASE CHR$(27)
  1176.         esc~` = 1
  1177.     CASE CHR$(9)
  1178.         riavvio~` = 1
  1179.     CASE CHR$(0) + CHR$(59)
  1180.         menu~` = 1
  1181.     CASE CHR$(0) + CHR$(60)
  1182.         TornaAlGrafico~` = 1
  1183. IF esc~` = 1 OR riavvio~` = 1 OR menu~` = 1 OR TornaAlGrafico~` = 1 THEN RETURN
  1184. _DEST schermo&: CLS
  1185. _PUTIMAGE ((DESKTOPWIDTH% - _WIDTH(unitari&)), (DESKTOPHEIGHT% - _HEIGHT(unitari&) - 16)), unitari&, schermo&
  1186. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1187. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1188. VisualizzaMatrici:
  1189. 'routine che visualizza le immagini generate dalla routine DisegnaMatriciIeto1e2.
  1190.  
  1191. CLS 2
  1192. COLOR giallo&
  1193. PRINT "Visualizza i singoli idrogrammi calcolati? [S/(ESC o N)]"
  1194. PRINT "[ESC/N]: esci; [TAB]: riavvia; [F1]: torna agli input iniziali; [F2]: torna al grafico iniziale."
  1195. COLOR bianco&
  1196.     _LIMIT 30
  1197.     KeyPress$ = LCASE$(INKEY$)
  1198. LOOP UNTIL KeyPress$ = "s" OR KeyPress$ = "n" OR KeyPress$ = CHR$(27) OR KeyPress$ = CHR$(9) OR KeyPress$ = CHR$(0) + CHR$(59) OR KeyPress$ = CHR$(0) + CHR$(60)
  1199. SELECT CASE KeyPress$
  1200.     CASE CHR$(27), "n"
  1201.         esc~` = 1
  1202.     CASE CHR$(9)
  1203.         riavvio~` = 1
  1204.     CASE CHR$(0) + CHR$(59)
  1205.         menu~` = 1
  1206. IF esc~` = 1 OR riavvio~` = 1 OR menu~` = 1 = 1 THEN RETURN
  1207. z%% = 1
  1208.     CLS 2
  1209.     COLOR giallo&
  1210.     IF z%% <> 24 THEN
  1211.         PRINT "[ESC]: esci; [TAB]: riavvia; [F1]: torna agli input iniziali; []: precedente; []: successivo."
  1212.     ELSE
  1213.         PRINT "................................ T E R M I N E   D E L   P R O G R A M M A ............................................"
  1214.         PRINT "[ESC]: esci; [TAB]: riavvia; [F1]: torna agli input iniziali; []: precedente."
  1215.         PRINT "..."
  1216.     END IF
  1217.     _PUTIMAGE ((DESKTOPWIDTH% - _WIDTH(MatriciIeto1e2(VisualizzaIeto%%, z%%))), (DESKTOPHEIGHT% - _HEIGHT(MatriciIeto1e2(VisualizzaIeto%%, z%%)) - 16)), MatriciIeto1e2(VisualizzaIeto%%, z%%), schermo&
  1218.     DO
  1219.         _LIMIT 30
  1220.         KeyPress$ = INKEY$
  1221.     LOOP UNTIL KeyPress$ = CHR$(27) OR KeyPress$ = CHR$(9) OR KeyPress$ = CHR$(0) + CHR$(59) OR KeyPress$ = CHR$(0) + CHR$(75) OR KeyPress$ = CHR$(0) + CHR$(77)
  1222.     SELECT CASE KeyPress$
  1223.         CASE CHR$(27)
  1224.             esc~` = 1
  1225.         CASE CHR$(9)
  1226.             riavvio~` = 1
  1227.         CASE CHR$(0) + CHR$(59)
  1228.             menu~` = 1
  1229.         CASE CHR$(0) + CHR$(75)
  1230.             IF z%% = 1 THEN
  1231.                 z%% = z%% - 1
  1232.             ELSE
  1233.                 z%% = z%% - 2
  1234.             END IF
  1235.         CASE CHR$(0) + CHR$(77)
  1236.             IF z%% = 24 THEN z%% = z%% - 1
  1237.     END SELECT
  1238.     IF esc~` = 1 OR riavvio~` = 1 OR menu~` = 1 THEN EXIT DO
  1239.     z%% = z%% + 1
  1240. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1241. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1242. Risultati:
  1243. 'questa routine si attiva quando l'utente decide di uscire e salvare i risultati. essa genera 3 tipi di risultati, ognuno con un diverso tipo di estensione:
  1244. '- un file TXT: contenente questo Codice, in modo che l'utente, se vuole, possa verificare il metodo di calcolo, commentato;
  1245. '- file CSV: in cui sono riportati i tabulati di calcolo e che possono essere aperti con Excel. Affinché siano visualizzabili correttamente, nelle impostazioni di Windows il separatore di elenco dev'essere la virgola;
  1246. '- file BMP: in cui sono riportati i grafici generati dal programma;
  1247. 'i file BMP sono generati solo se espressamente richiesto dall'utente quando esce dal programma, in quanto il loro salvataggio richiede tempo.
  1248. 'durante il salvataggio, il programma, su Windows, apre automaticamente la directory in cui i file vengono salvati.
  1249. 'tutti i file sono generati con nomi che permettono, su Windows, la loro elencazione in sequenza secondo un criterio logico facilmente comprensibile.
  1250. 'i file CSV e BMP, secondo tale criterio logico, compaiono in coppia con identici nomi, in quanto il file BMP è la versione grafica del corrispondente tabulato CSV e viceversa.
  1251.  
  1252. DIM testo$
  1253.  
  1254. testo$ = "Nelle impostazioni di Windows il separatore dell'elenco dev'essere la virgola."
  1255. 'COLOR trasparente&: PRINT WriteCodiceData$("CODICE.bas.txt");: COLOR bianco&
  1256. IF VisualizzaIeto%% = 1 THEN
  1257.     OPEN "A.IdrogrammaProgettoCHICAGO+PortataPiccoProgetto.csv" FOR OUTPUT AS #1
  1258.     OPEN "B.IdrogrammaSceltoCHICAGO+PortataOraPiccoScelta.csv" FOR OUTPUT AS #2
  1259. ELSEIF VisualizzaIeto%% = 2 THEN
  1260.     OPEN "A.IdrogrammaProgettoCOSTANTE+PortataPiccoProgetto.csv" FOR OUTPUT AS #1
  1261.     OPEN "B.IdrogrammaSceltoCOSTANTE+PortataOraPiccoScelta.csv" FOR OUTPUT AS #2
  1262. IF ore!(1) <> 0 THEN
  1263.     WRITE #1, testo$
  1264.     n%% = 1: GOSUB DatiBase
  1265.     WRITE #1,
  1266.     SELECT CASE VisualizzaIeto%%
  1267.         CASE IS = 1
  1268.             IF soglia%% = 0 THEN
  1269.                 WRITE #1, "La soglia percentuale S scelta non permette di individuare all'interno del campo la corrispondente portata di picco. Verrà considerato come idrogramma di progetto quello relativo alla portata di picco massima tra i 24 calcolati."
  1270.             ELSE
  1271.                 PRINT #1, "S="; _TRIM$(STR$(soglia%%)); "%: Soglia percentuale scelta."
  1272.                 PRINT #1, "La soglia percentuale S scelta corrisponde all'ora di picco "; _TRIM$(STR$(ore!(1))); ". Ciò significa che la portata di picco che si avrebbe all'ora "; _TRIM$(STR$(ore!(1) + 1)); " sarebbe minore della portata di picco dell'ora"; ore(1); " aumentata del "; _TRIM$(STR$(soglia%%)); "%."
  1273.             END IF
  1274.         CASE IS = 2
  1275.             WRITE #1, "E' computato come idrogramma di progetto quello relativo alla portata di picco massima tra i 24 calcolati."
  1276.     END SELECT
  1277.     WRITE #1,
  1278.     PRINT #1, "LA PORTATA DI PICCO DI PROGETTO E' "; _TRIM$(STR$(portata!(1))); " MC/S ALL'ORA "; _TRIM$(STR$(ore!(1))); " CON TEMPO DI RITORNO "; UCASE$(T$); " CON DURATA DELLA PIOGGIA PARI A "; _TRIM$(STR$(FinePioggiaIdrogrammi1e2(1).ore)); " ORE."
  1279.     WRITE #1,
  1280.     WRITE #1, "IDROGRAMMA DI PROGETTO:"
  1281.     WRITE #1, "", "ore", "portata [mc/s]"
  1282.     FOR i% = 1 TO UBOUND(idrogramma1)
  1283.         WRITE #1, i%, idrogramma1(i%).ore, idrogramma1(i%).portata
  1284.     NEXT i%
  1285.     PRINT #1, "Non è stato definito dall'utente."
  1286. IF ore!(2) <> 0 THEN
  1287.     WRITE #2, testo$
  1288.     n%% = 2: GOSUB DatiBase
  1289.     WRITE #2,
  1290.     PRINT #2, "L'ORA DI PICCO SCELTA E' "; _TRIM$(STR$(ore!(2))); " A CUI CORRISPONDE LA PORTATA DI PICCO "; _TRIM$(STR$(portata!(2))); " MC/S CON TEMPO DI RITORNO "; UCASE$(T$); " CON DURATA DELLA PIOGGIA PARI A "; _TRIM$(STR$(FinePioggiaIdrogrammi1e2(2).ore)); " ORE."
  1291.     WRITE #2,
  1292.     PRINT #2, "IDROGRAMMA:"
  1293.     WRITE #2, "", "ore", "portata [mc/s]"
  1294.     FOR i% = 1 TO UBOUND(idrogramma2)
  1295.         WRITE #2, i%, idrogramma2(i%).ore, idrogramma2(i%).portata
  1296.     NEXT i%
  1297.     PRINT #2, "Non è stato definito dall'utente."
  1298. OPEN "C.IdrogrammiUnitari.csv" FOR OUTPUT AS #1
  1299. WRITE #1, testo$
  1300. n%% = 1: GOSUB DatiBase
  1301. WRITE #1, "La determinazione dell'idrogramma unitario di un bacino di note caratteristiche consiste nell'amplificare l'ascissa e l'ordinata dell'idrogramma unitario adimensionale di Mockus mediante i fattori ta e qp, specifici del bacino esaminato. Il calcolo dell'idrogramma di piena presuppone poi che gli incrementi di deflusso siano utilizzati per amplificare i valori dell'idrogramma unitario e siano sommati a parit… d'istante."
  1302. WRITE #1, "", "IDROGRAMMA UNITARIO ADIMENSIONALE DI MOCKUS:", "", "IDROGRAMMA UNITARIO DEL BACINO:"
  1303. WRITE #1, "", "t/ta", "q/qp", "ore", "mc/s*mm"
  1304. FOR i% = 1 TO 50
  1305.     WRITE #1, i%, mockus(i%).tSUta, mockus(i%).qSUqp, matrice1(1, 1, i%, 1).mdt, matrice1(1, 1, i%, 1).qm
  1306. NEXT i%
  1307. FOR ieto%% = 1 TO 2
  1308.     IF ieto%% = 1 THEN OPEN "D._1-24,idrogrammiCHICAGO+PortatePicco(da_1_a_32_volte_tc).csv" FOR OUTPUT AS #1
  1309.     IF ieto%% = 2 THEN OPEN "E._1-24,idrogrammiCOSTANTE+PortatePicco(da_1_a_32_volte_tc).csv" FOR OUTPUT AS #1
  1310.     WRITE #1, testo$
  1311.     n%% = 1: GOSUB DatiBase
  1312.     WRITE #1, "Di seguito sono riportate le portate di picco dei 24 idrogrammi calcolati e i relativi idrogrammi."
  1313.     WRITE #1, "Valori espressi in mc/s. Per i dati completi sui singoli idrogrammi, fare riferimento ai rispettivi file."
  1314.     WRITE #1, "PORTATE DI PICCO:"
  1315.     WRITE #1, "", "ora picco", "portata picco", "ora fine pioggia", "ore/tc"
  1316.     FOR z%% = 1 TO 24
  1317.         WRITE #1, z%%, MassimiIdrogrammi1a24(ieto%%, z%%, 1).ore, MassimiIdrogrammi1a24(ieto%%, z%%, 1).portata, FinePioggiaIdrogrammi1a24(ieto%%, z%%, 1).ore, CoefficientiDiscretizzazioneTemporale(z%%).N
  1318.     NEXT z%%
  1319.     WRITE #1, "IDROGRAMMI:"
  1320.     WRITE #1, "",
  1321.     FOR z%% = 1 TO 24
  1322.         WRITE #1, "", _TRIM$(STR$(CoefficientiDiscretizzazioneTemporale(z%%).N)) + " volte tc",
  1323.     NEXT z%%
  1324.     WRITE #1,
  1325.     WRITE #1, "",
  1326.     FOR z%% = 1 TO 24
  1327.         WRITE #1, "ore", "idrogramma n." + _TRIM$(STR$(z%%)),
  1328.     NEXT z%%
  1329.     WRITE #1,
  1330.     FOR i% = 1 TO 50
  1331.         WRITE #1, i%,
  1332.         FOR z%% = 1 TO 24
  1333.             WRITE #1, idrogrammi1a24(ieto%%, z%%, i%, 1).ore, idrogrammi1a24(ieto%%, z%%, i%, 1).portata,
  1334.         NEXT z%%
  1335.         WRITE #1,
  1336.     NEXT i%
  1337.     CLOSE #1
  1338.     FOR z%% = 1 TO 24
  1339.         IF ieto%% = 1 THEN OPEN "D." + _TRIM$(STR$(z%%)) + ",idrogrammaCHICAGO(" + _TRIM$(STR$(CoefficientiDiscretizzazioneTemporale(z%%).N)) + "_volte_tc).csv" FOR OUTPUT AS #1
  1340.         IF ieto%% = 2 THEN OPEN "E." + _TRIM$(STR$(z%%)) + ",idrogrammaCOSTANTE(" + _TRIM$(STR$(CoefficientiDiscretizzazioneTemporale(z%%).N)) + "_volte_tc).csv" FOR OUTPUT AS #1
  1341.         WRITE #1, testo$
  1342.         WRITE #1, "DATI", "", "", "", "", "", "", "", "", "LEGENDA"
  1343.         WRITE #1, "T=", "[anni]", T$, "tempo di ritorno", "", "", "", "", "", "P=", "[-]", "numero dell'iterazione."
  1344.         WRITE #1, "A=", "mq", A2&, "area del bacino idrografico", "", "", "", "", "", "P*dt=", "[ore]", "numero dell'iterazione moltiplicato per il passo temporale."
  1345.         WRITE #1, "K=", "[-]", k!, "parametro del Centro Funzionale", "", "", "", "", "", "h=", "[mm]", "altezza di pioggia secondo la curva di possibilità climatica."
  1346.         WRITE #1, "a=", "[mm/d^n]", a1!, "coefficiente della curva di possibilità climatica.", "", "", "", "", "", "i=", "[mm/ora]", "intensità di piggia della singola iterazione."
  1347.         WRITE #1, "n=", "[-]", n1!, "coefficiente della curva di possibilità climatica.", "", "", "", "", "", "iC=", "[mm/ora]", "intensità di pioggia della singola iterazione secondo lo ietogramma CHICAGO o costante."
  1348.         WRITE #1, "L=", "[m]", L~%, "lunghezza dell'asta principale del bacino idrografico.", "", "", "", "", "", "DH=", "[mm]", "altezza di pioggia della singola iterazione."
  1349.         WRITE #1, "s=", "[%]", s1!, "pendenza media del bacino idrografico.", "", "", "", "", "", "H=", "[mm]", "altezza di pioggia cumulata sino all'iterazione in corso."
  1350.         WRITE #1, "CN(II)=", "[-]", CNII%%, "", "", "", "", "", "", "he=", "[mm]", "pioggia efficace cumulata sino all'iterazione in corso."
  1351.         WRITE #1, "S=", "[mm]", "=25.4*((1000/C13)-10)", "contenuto idrico massimo del terreno.", "", "", "", "", "", "Dhe=", "[mm]", "altezza di pioggia efficace della singola iterazione."
  1352.         WRITE #1, "Ia=", "[mm]", "=0.1*C11", "perdite iniziali.", "", "", "", "", "", "t/ta=", "[-]", "valori in ascissa dell'idrogramma unitario adimensionale di Mockus."
  1353.         WRITE #1, "CN(III)=", "[-]", "=(23*C10)/(10+0.13*C10)", "", "", "", "", "", "", "q/qp=", "[-]", "valori in ordinata dell'idrogramma unitario adimensionale di Mockus."
  1354.         WRITE #1, "tl=", "[ore]", "=0.342*(((C8/1000)^0.8)/(C9^0.5))*(1000/C13-9)^0.7", "formula di Mockus esprimente il tempo di ritardo.", "", "", "", "", "", "tm/ta=", "[-]", "valori in ascissa dell'idrogramma unitario adimensionale di Mockus secondo il passo temporale dt utilizzato."
  1355.         WRITE #1, "tc=", "[ore]", "=C14/0.6", "tempo di corrivazione.", "", "", "", "", "", "qm/qp=", "[-]", "valori in ordinata dell'idrogramma unitario adimensionale di Mockus secondo il passo temporale dt utilizzato."
  1356.         WRITE #1, "N", "[-]", CoefficientiDiscretizzazioneTemporale(z%%).N, "moltiplicatore del tempo di corrivazione.", "", "", "", "", "", "qm=", "[mc/(s*mm)]", "valore dell'idrogramma unitario del bacino corrispondente alla colonna N*dt."
  1357.         WRITE #1, "d=ore/tc=", "[ore]", "=C16*C15", "durata della pioggia.", "", "", "", "", "", "Dhe*qm1-50=", "[mc/s]", "idrogramma relativo alla singole altezze di pioggia Dhe", " amplificata dal rispettivo valore qm."
  1358.         WRITE #1, "dt=", "[ore]", "=C21*C19", "passo temporale.", "", "", "", "", "", "Idrogramma=", "[mc/s]", "idrogramma complessivo, dato dalla somma a parità d'istante dei Dhe*qm1-50."
  1359.         WRITE #1, "ta=", "[ore]", "=C14/0.9", "tempo di picco."
  1360.         WRITE #1, "qp=", "[mc/(s*mm)]", "=0.208*((C4/1000000)/C19)", "portata al colmo dell'idrogramma unitario del bacino idrografico."
  1361.         WRITE #1, "C=", "[-]", CoefficientiDiscretizzazioneTemporale(z%%).tSUta, "coefficiente t/ta di Mockus utilizzato per la discretizzazione temporale."
  1362.         GOSUB DatiColonna
  1363.         WRITE #1, "1", "=A23*$C$18", "=SE(ARROTONDA(B23,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B23^$C$7,0)", "=SE(C23>0,C23/B23,0)", matrice1(ieto%%, z%%, 1, 1).i2, "=E23*$C$18", "=SE(C23>0,F23,0)", "=SE(G23-$C$12>=0,((G23-$C$12)^2)/(G23-$C$12+$C$11),0)", "=SE(C23>0,H23,0)", mockus(1).tSUta, mockus(1).qSUqp, matrice1(ieto%%, z%%, 1, 1).tmSUta, matrice1(ieto%%, z%%, 1, 1).qmSUqp, "=M23*$C$20", "=I23*$N$23", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O23:BL23)"
  1364.         WRITE #1, "2", "=A24*$C$18", "=SE(ARROTONDA(B24,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B24^$C$7,0)", "=SE(C24>0,(C24-C23)/$C$18,0)", matrice1(ieto%%, z%%, 2, 1).i2, "=E24*$C$18", "=SE(C24>0,G23+F24,0)", "=SE(G24-$C$12>=0,((G24-$C$12)^2)/(G24-$C$12+$C$11),0)", "=SE(C24>0,H24-H23,0)", mockus(2).tSUta, mockus(2).qSUqp, matrice1(ieto%%, z%%, 2, 1).tmSUta, matrice1(ieto%%, z%%, 2, 1).qmSUqp, "=M24*$C$20", "=I24*$N$23", "=I23*$N$24", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O24:BL24)"
  1365.         WRITE #1, "3", "=A25*$C$18", "=SE(ARROTONDA(B25,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B25^$C$7,0)", "=SE(C25>0,(C25-C24)/$C$18,0)", matrice1(ieto%%, z%%, 3, 1).i2, "=E25*$C$18", "=SE(C25>0,G24+F25,0)", "=SE(G25-$C$12>=0,((G25-$C$12)^2)/(G25-$C$12+$C$11),0)", "=SE(C25>0,H25-H24,0)", mockus(3).tSUta, mockus(3).qSUqp, matrice1(ieto%%, z%%, 3, 1).tmSUta, matrice1(ieto%%, z%%, 3, 1).qmSUqp, "=M25*$C$20", "=I25*$N$23", "=I24*$N$24", "=$I23*$N$25", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O25:BL25)"
  1366.         WRITE #1, "4", "=A26*$C$18", "=SE(ARROTONDA(B26,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B26^$C$7,0)", "=SE(C26>0,(C26-C25)/$C$18,0)", matrice1(ieto%%, z%%, 4, 1).i2, "=E26*$C$18", "=SE(C26>0,G25+F26,0)", "=SE(G26-$C$12>=0,((G26-$C$12)^2)/(G26-$C$12+$C$11),0)", "=SE(C26>0,H26-H25,0)", mockus(4).tSUta, mockus(4).qSUqp, matrice1(ieto%%, z%%, 4, 1).tmSUta, matrice1(ieto%%, z%%, 4, 1).qmSUqp, "=M26*$C$20", "=I26*$N$23", "=I25*$N$24", "=$I24*$N$25", "=$I23*$N$26", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O26:BL26)"
  1367.         WRITE #1, "5", "=A27*$C$18", "=SE(ARROTONDA(B27,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B27^$C$7,0)", "=SE(C27>0,(C27-C26)/$C$18,0)", matrice1(ieto%%, z%%, 5, 1).i2, "=E27*$C$18", "=SE(C27>0,G26+F27,0)", "=SE(G27-$C$12>=0,((G27-$C$12)^2)/(G27-$C$12+$C$11),0)", "=SE(C27>0,H27-H26,0)", mockus(5).tSUta, mockus(5).qSUqp, matrice1(ieto%%, z%%, 5, 1).tmSUta, matrice1(ieto%%, z%%, 5, 1).qmSUqp, "=M27*$C$20", "=I27*$N$23", "=I26*$N$24", "=$I25*$N$25", "=$I24*$N$26", "=$I23*$N$27", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O27:BL27)"
  1368.         WRITE #1, "6", "=A28*$C$18", "=SE(ARROTONDA(B28,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B28^$C$7,0)", "=SE(C28>0,(C28-C27)/$C$18,0)", matrice1(ieto%%, z%%, 6, 1).i2, "=E28*$C$18", "=SE(C28>0,G27+F28,0)", "=SE(G28-$C$12>=0,((G28-$C$12)^2)/(G28-$C$12+$C$11),0)", "=SE(C28>0,H28-H27,0)", mockus(6).tSUta, mockus(6).qSUqp, matrice1(ieto%%, z%%, 6, 1).tmSUta, matrice1(ieto%%, z%%, 6, 1).qmSUqp, "=M28*$C$20", "=I28*$N$23", "=I27*$N$24", "=$I26*$N$25", "=$I25*$N$26", "=$I24*$N$27", "=$I23*$N$28", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O28:BL28)"
  1369.         WRITE #1, "7", "=A29*$C$18", "=SE(ARROTONDA(B29,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B29^$C$7,0)", "=SE(C29>0,(C29-C28)/$C$18,0)", matrice1(ieto%%, z%%, 7, 1).i2, "=E29*$C$18", "=SE(C29>0,G28+F29,0)", "=SE(G29-$C$12>=0,((G29-$C$12)^2)/(G29-$C$12+$C$11),0)", "=SE(C29>0,H29-H28,0)", mockus(7).tSUta, mockus(7).qSUqp, matrice1(ieto%%, z%%, 7, 1).tmSUta, matrice1(ieto%%, z%%, 7, 1).qmSUqp, "=M29*$C$20", "=I29*$N$23", "=I28*$N$24", "=$I27*$N$25", "=$I26*$N$26", "=$I25*$N$27", "=$I24*$N$28", "=$I23*$N$29", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O29:BL29)"
  1370.         WRITE #1, "8", "=A30*$C$18", "=SE(ARROTONDA(B30,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B30^$C$7,0)", "=SE(C30>0,(C30-C29)/$C$18,0)", matrice1(ieto%%, z%%, 8, 1).i2, "=E30*$C$18", "=SE(C30>0,G29+F30,0)", "=SE(G30-$C$12>=0,((G30-$C$12)^2)/(G30-$C$12+$C$11),0)", "=SE(C30>0,H30-H29,0)", mockus(8).tSUta, mockus(8).qSUqp, matrice1(ieto%%, z%%, 8, 1).tmSUta, matrice1(ieto%%, z%%, 8, 1).qmSUqp, "=M30*$C$20", "=I30*$N$23", "=I29*$N$24", "=$I28*$N$25", "=$I27*$N$26", "=$I26*$N$27", "=$I25*$N$28", "=$I24*$N$29", "=$I23*$N$30", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O30:BL30)"
  1371.         WRITE #1, "9", "=A31*$C$18", "=SE(ARROTONDA(B31,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B31^$C$7,0)", "=SE(C31>0,(C31-C30)/$C$18,0)", matrice1(ieto%%, z%%, 9, 1).i2, "=E31*$C$18", "=SE(C31>0,G30+F31,0)", "=SE(G31-$C$12>=0,((G31-$C$12)^2)/(G31-$C$12+$C$11),0)", "=SE(C31>0,H31-H30,0)", mockus(9).tSUta, mockus(9).qSUqp, matrice1(ieto%%, z%%, 9, 1).tmSUta, matrice1(ieto%%, z%%, 9, 1).qmSUqp, "=M31*$C$20", "=I31*$N$23", "=I30*$N$24", "=$I29*$N$25", "=$I28*$N$26", "=$I27*$N$27", "=$I26*$N$28", "=$I25*$N$29", "=$I24*$N$30", "=$I23*$N$31", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O31:BL31)"
  1372.         WRITE #1, "10", "=A32*$C$18", "=SE(ARROTONDA(B32,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B32^$C$7,0)", "=SE(C32>0,(C32-C31)/$C$18,0)", matrice1(ieto%%, z%%, 10, 1).i2, "=E32*$C$18", "=SE(C32>0,G31+F32,0)", "=SE(G32-$C$12>=0,((G32-$C$12)^2)/(G32-$C$12+$C$11),0)", "=SE(C32>0,H32-H31,0)", mockus(10).tSUta, mockus(10).qSUqp, matrice1(ieto%%, z%%, 10, 1).tmSUta, matrice1(ieto%%, z%%, 10, 1).qmSUqp, "=M32*$C$20", "=I32*$N$23", "=I31*$N$24", "=$I30*$N$25", "=$I29*$N$26", "=$I28*$N$27", "=$I27*$N$28", "=$I26*$N$29", "=$I25*$N$30", "=$I24*$N$31", "=$I23*$N$32", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O32:BL32)"
  1373.         WRITE #1, "11", "=A33*$C$18", "=SE(ARROTONDA(B33,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B33^$C$7,0)", "=SE(C33>0,(C33-C32)/$C$18,0)", matrice1(ieto%%, z%%, 11, 1).i2, "=E33*$C$18", "=SE(C33>0,G32+F33,0)", "=SE(G33-$C$12>=0,((G33-$C$12)^2)/(G33-$C$12+$C$11),0)", "=SE(C33>0,H33-H32,0)", mockus(11).tSUta, mockus(11).qSUqp, matrice1(ieto%%, z%%, 11, 1).tmSUta, matrice1(ieto%%, z%%, 11, 1).qmSUqp, "=M33*$C$20", "=I33*$N$23", "=I32*$N$24", "=$I31*$N$25", "=$I30*$N$26", "=$I29*$N$27", "=$I28*$N$28", "=$I27*$N$29", "=$I26*$N$30", "=$I25*$N$31", "=$I24*$N$32", "=$I23*$N$33", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O33:BL33)"
  1374.         WRITE #1, "12", "=A34*$C$18", "=SE(ARROTONDA(B34,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B34^$C$7,0)", "=SE(C34>0,(C34-C33)/$C$18,0)", matrice1(ieto%%, z%%, 12, 1).i2, "=E34*$C$18", "=SE(C34>0,G33+F34,0)", "=SE(G34-$C$12>=0,((G34-$C$12)^2)/(G34-$C$12+$C$11),0)", "=SE(C34>0,H34-H33,0)", mockus(12).tSUta, mockus(12).qSUqp, matrice1(ieto%%, z%%, 12, 1).tmSUta, matrice1(ieto%%, z%%, 12, 1).qmSUqp, "=M34*$C$20", "=I34*$N$23", "=I33*$N$24", "=$I32*$N$25", "=$I31*$N$26", "=$I30*$N$27", "=$I29*$N$28", "=$I28*$N$29", "=$I27*$N$30", "=$I26*$N$31", "=$I25*$N$32", "=$I24*$N$33", "=$I23*$N$34", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O34:BL34)"
  1375.         WRITE #1, "13", "=A35*$C$18", "=SE(ARROTONDA(B35,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B35^$C$7,0)", "=SE(C35>0,(C35-C34)/$C$18,0)", matrice1(ieto%%, z%%, 13, 1).i2, "=E35*$C$18", "=SE(C35>0,G34+F35,0)", "=SE(G35-$C$12>=0,((G35-$C$12)^2)/(G35-$C$12+$C$11),0)", "=SE(C35>0,H35-H34,0)", mockus(13).tSUta, mockus(13).qSUqp, matrice1(ieto%%, z%%, 13, 1).tmSUta, matrice1(ieto%%, z%%, 13, 1).qmSUqp, "=M35*$C$20", "=I35*$N$23", "=I34*$N$24", "=$I33*$N$25", "=$I32*$N$26", "=$I31*$N$27", "=$I30*$N$28", "=$I29*$N$29", "=$I28*$N$30", "=$I27*$N$31", "=$I26*$N$32", "=$I25*$N$33", "=$I24*$N$34", "=$I23*$N$35", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O35:BL35)"
  1376.         WRITE #1, "14", "=A36*$C$18", "=SE(ARROTONDA(B36,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B36^$C$7,0)", "=SE(C36>0,(C36-C35)/$C$18,0)", matrice1(ieto%%, z%%, 14, 1).i2, "=E36*$C$18", "=SE(C36>0,G35+F36,0)", "=SE(G36-$C$12>=0,((G36-$C$12)^2)/(G36-$C$12+$C$11),0)", "=SE(C36>0,H36-H35,0)", mockus(14).tSUta, mockus(14).qSUqp, matrice1(ieto%%, z%%, 14, 1).tmSUta, matrice1(ieto%%, z%%, 14, 1).qmSUqp, "=M36*$C$20", "=I36*$N$23", "=I35*$N$24", "=$I34*$N$25", "=$I33*$N$26", "=$I32*$N$27", "=$I31*$N$28", "=$I30*$N$29", "=$I29*$N$30", "=$I28*$N$31", "=$I27*$N$32", "=$I26*$N$33", "=$I25*$N$34", "=$I24*$N$35", "=$I23*$N$36", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O36:BL36)"
  1377.         WRITE #1, "15", "=A37*$C$18", "=SE(ARROTONDA(B37,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B37^$C$7,0)", "=SE(C37>0,(C37-C36)/$C$18,0)", matrice1(ieto%%, z%%, 15, 1).i2, "=E37*$C$18", "=SE(C37>0,G36+F37,0)", "=SE(G37-$C$12>=0,((G37-$C$12)^2)/(G37-$C$12+$C$11),0)", "=SE(C37>0,H37-H36,0)", mockus(15).tSUta, mockus(15).qSUqp, matrice1(ieto%%, z%%, 15, 1).tmSUta, matrice1(ieto%%, z%%, 15, 1).qmSUqp, "=M37*$C$20", "=I37*$N$23", "=I36*$N$24", "=$I35*$N$25", "=$I34*$N$26", "=$I33*$N$27", "=$I32*$N$28", "=$I31*$N$29", "=$I30*$N$30", "=$I29*$N$31", "=$I28*$N$32", "=$I27*$N$33", "=$I26*$N$34", "=$I25*$N$35", "=$I24*$N$36", "=$I23*$N$37", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O37:BL37)"
  1378.         WRITE #1, "16", "=A38*$C$18", "=SE(ARROTONDA(B38,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B38^$C$7,0)", "=SE(C38>0,(C38-C37)/$C$18,0)", matrice1(ieto%%, z%%, 16, 1).i2, "=E38*$C$18", "=SE(C38>0,G37+F38,0)", "=SE(G38-$C$12>=0,((G38-$C$12)^2)/(G38-$C$12+$C$11),0)", "=SE(C38>0,H38-H37,0)", mockus(16).tSUta, mockus(16).qSUqp, matrice1(ieto%%, z%%, 16, 1).tmSUta, matrice1(ieto%%, z%%, 16, 1).qmSUqp, "=M38*$C$20", "=I38*$N$23", "=I37*$N$24", "=$I36*$N$25", "=$I35*$N$26", "=$I34*$N$27", "=$I33*$N$28", "=$I32*$N$29", "=$I31*$N$30", "=$I30*$N$31", "=$I29*$N$32", "=$I28*$N$33", "=$I27*$N$34", "=$I26*$N$35", "=$I25*$N$36", "=$I24*$N$37", "=$I23*$N$38", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O38:BL38)"
  1379.         WRITE #1, "17", "=A39*$C$18", "=SE(ARROTONDA(B39,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B39^$C$7,0)", "=SE(C39>0,(C39-C38)/$C$18,0)", matrice1(ieto%%, z%%, 17, 1).i2, "=E39*$C$18", "=SE(C39>0,G38+F39,0)", "=SE(G39-$C$12>=0,((G39-$C$12)^2)/(G39-$C$12+$C$11),0)", "=SE(C39>0,H39-H38,0)", mockus(17).tSUta, mockus(17).qSUqp, matrice1(ieto%%, z%%, 17, 1).tmSUta, matrice1(ieto%%, z%%, 17, 1).qmSUqp, "=M39*$C$20", "=I39*$N$23", "=I38*$N$24", "=$I37*$N$25", "=$I36*$N$26", "=$I35*$N$27", "=$I34*$N$28", "=$I33*$N$29", "=$I32*$N$30", "=$I31*$N$31", "=$I30*$N$32", "=$I29*$N$33", "=$I28*$N$34", "=$I27*$N$35", "=$I26*$N$36", "=$I25*$N$37", "=$I24*$N$38", "=$I23*$N$39", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O39:BL39)"
  1380.         WRITE #1, "18", "=A40*$C$18", "=SE(ARROTONDA(B40,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B40^$C$7,0)", "=SE(C40>0,(C40-C39)/$C$18,0)", matrice1(ieto%%, z%%, 18, 1).i2, "=E40*$C$18", "=SE(C40>0,G39+F40,0)", "=SE(G40-$C$12>=0,((G40-$C$12)^2)/(G40-$C$12+$C$11),0)", "=SE(C40>0,H40-H39,0)", mockus(18).tSUta, mockus(18).qSUqp, matrice1(ieto%%, z%%, 18, 1).tmSUta, matrice1(ieto%%, z%%, 18, 1).qmSUqp, "=M40*$C$20", "=I40*$N$23", "=I39*$N$24", "=$I38*$N$25", "=$I37*$N$26", "=$I36*$N$27", "=$I35*$N$28", "=$I34*$N$29", "=$I33*$N$30", "=$I32*$N$31", "=$I31*$N$32", "=$I30*$N$33", "=$I29*$N$34", "=$I28*$N$35", "=$I27*$N$36", "=$I26*$N$37", "=$I25*$N$38", "=$I24*$N$39", "=$I23*$N$40", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O40:BL40)"
  1381.         WRITE #1, "19", "=A41*$C$18", "=SE(ARROTONDA(B41,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B41^$C$7,0)", "=SE(C41>0,(C41-C40)/$C$18,0)", matrice1(ieto%%, z%%, 19, 1).i2, "=E41*$C$18", "=SE(C41>0,G40+F41,0)", "=SE(G41-$C$12>=0,((G41-$C$12)^2)/(G41-$C$12+$C$11),0)", "=SE(C41>0,H41-H40,0)", mockus(19).tSUta, mockus(19).qSUqp, matrice1(ieto%%, z%%, 19, 1).tmSUta, matrice1(ieto%%, z%%, 19, 1).qmSUqp, "=M41*$C$20", "=I41*$N$23", "=I40*$N$24", "=$I39*$N$25", "=$I38*$N$26", "=$I37*$N$27", "=$I36*$N$28", "=$I35*$N$29", "=$I34*$N$30", "=$I33*$N$31", "=$I32*$N$32", "=$I31*$N$33", "=$I30*$N$34", "=$I29*$N$35", "=$I28*$N$36", "=$I27*$N$37", "=$I26*$N$38", "=$I25*$N$39", "=$I24*$N$40", "=$I23*$N$41", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O41:BL41)"
  1382.         WRITE #1, "20", "=A42*$C$18", "=SE(ARROTONDA(B42,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B42^$C$7,0)", "=SE(C42>0,(C42-C41)/$C$18,0)", matrice1(ieto%%, z%%, 20, 1).i2, "=E42*$C$18", "=SE(C42>0,G41+F42,0)", "=SE(G42-$C$12>=0,((G42-$C$12)^2)/(G42-$C$12+$C$11),0)", "=SE(C42>0,H42-H41,0)", mockus(20).tSUta, mockus(20).qSUqp, matrice1(ieto%%, z%%, 20, 1).tmSUta, matrice1(ieto%%, z%%, 20, 1).qmSUqp, "=M42*$C$20", "=I42*$N$23", "=I41*$N$24", "=$I40*$N$25", "=$I39*$N$26", "=$I38*$N$27", "=$I37*$N$28", "=$I36*$N$29", "=$I35*$N$30", "=$I34*$N$31", "=$I33*$N$32", "=$I32*$N$33", "=$I31*$N$34", "=$I30*$N$35", "=$I29*$N$36", "=$I28*$N$37", "=$I27*$N$38", "=$I26*$N$39", "=$I25*$N$40", "=$I24*$N$41", "=$I23*$N$42", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O42:BL42)"
  1383.         WRITE #1, "21", "=A43*$C$18", "=SE(ARROTONDA(B43,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B43^$C$7,0)", "=SE(C43>0,(C43-C42)/$C$18,0)", matrice1(ieto%%, z%%, 21, 1).i2, "=E43*$C$18", "=SE(C43>0,G42+F43,0)", "=SE(G43-$C$12>=0,((G43-$C$12)^2)/(G43-$C$12+$C$11),0)", "=SE(C43>0,H43-H42,0)", mockus(21).tSUta, mockus(21).qSUqp, matrice1(ieto%%, z%%, 21, 1).tmSUta, matrice1(ieto%%, z%%, 21, 1).qmSUqp, "=M43*$C$20", "=I43*$N$23", "=I42*$N$24", "=$I41*$N$25", "=$I40*$N$26", "=$I39*$N$27", "=$I38*$N$28", "=$I37*$N$29", "=$I36*$N$30", "=$I35*$N$31", "=$I34*$N$32", "=$I33*$N$33", "=$I32*$N$34", "=$I31*$N$35", "=$I30*$N$36", "=$I29*$N$37", "=$I28*$N$38", "=$I27*$N$39", "=$I26*$N$40", "=$I25*$N$41", "=$I24*$N$42", "=$I23*$N$43", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O43:BL43)"
  1384.         WRITE #1, "22", "=A44*$C$18", "=SE(ARROTONDA(B44,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B44^$C$7,0)", "=SE(C44>0,(C44-C43)/$C$18,0)", matrice1(ieto%%, z%%, 22, 1).i2, "=E44*$C$18", "=SE(C44>0,G43+F44,0)", "=SE(G44-$C$12>=0,((G44-$C$12)^2)/(G44-$C$12+$C$11),0)", "=SE(C44>0,H44-H43,0)", mockus(22).tSUta, mockus(22).qSUqp, matrice1(ieto%%, z%%, 22, 1).tmSUta, matrice1(ieto%%, z%%, 22, 1).qmSUqp, "=M44*$C$20", "=I44*$N$23", "=I43*$N$24", "=$I42*$N$25", "=$I41*$N$26", "=$I40*$N$27", "=$I39*$N$28", "=$I38*$N$29", "=$I37*$N$30", "=$I36*$N$31", "=$I35*$N$32", "=$I34*$N$33", "=$I33*$N$34", "=$I32*$N$35", "=$I31*$N$36", "=$I30*$N$37", "=$I29*$N$38", "=$I28*$N$39", "=$I27*$N$40", "=$I26*$N$41", "=$I25*$N$42", "=$I24*$N$43", "=$I23*$N$44", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O44:BL44)"
  1385.         WRITE #1, "23", "=A45*$C$18", "=SE(ARROTONDA(B45,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B45^$C$7,0)", "=SE(C45>0,(C45-C44)/$C$18,0)", matrice1(ieto%%, z%%, 23, 1).i2, "=E45*$C$18", "=SE(C45>0,G44+F45,0)", "=SE(G45-$C$12>=0,((G45-$C$12)^2)/(G45-$C$12+$C$11),0)", "=SE(C45>0,H45-H44,0)", mockus(23).tSUta, mockus(23).qSUqp, matrice1(ieto%%, z%%, 23, 1).tmSUta, matrice1(ieto%%, z%%, 23, 1).qmSUqp, "=M45*$C$20", "=I45*$N$23", "=I44*$N$24", "=$I43*$N$25", "=$I42*$N$26", "=$I41*$N$27", "=$I40*$N$28", "=$I39*$N$29", "=$I38*$N$30", "=$I37*$N$31", "=$I36*$N$32", "=$I35*$N$33", "=$I34*$N$34", "=$I33*$N$35", "=$I32*$N$36", "=$I31*$N$37", "=$I30*$N$38", "=$I29*$N$39", "=$I28*$N$40", "=$I27*$N$41", "=$I26*$N$42", "=$I25*$N$43", "=$I24*$N$44", "=$I23*$N$45", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O45:BL45)"
  1386.         WRITE #1, "24", "=A46*$C$18", "=SE(ARROTONDA(B46,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B46^$C$7,0)", "=SE(C46>0,(C46-C45)/$C$18,0)", matrice1(ieto%%, z%%, 24, 1).i2, "=E46*$C$18", "=SE(C46>0,G45+F46,0)", "=SE(G46-$C$12>=0,((G46-$C$12)^2)/(G46-$C$12+$C$11),0)", "=SE(C46>0,H46-H45,0)", mockus(24).tSUta, mockus(24).qSUqp, matrice1(ieto%%, z%%, 24, 1).tmSUta, matrice1(ieto%%, z%%, 24, 1).qmSUqp, "=M46*$C$20", "=I46*$N$23", "=I45*$N$24", "=$I44*$N$25", "=$I43*$N$26", "=$I42*$N$27", "=$I41*$N$28", "=$I40*$N$29", "=$I39*$N$30", "=$I38*$N$31", "=$I37*$N$32", "=$I36*$N$33", "=$I35*$N$34", "=$I34*$N$35", "=$I33*$N$36", "=$I32*$N$37", "=$I31*$N$38", "=$I30*$N$39", "=$I29*$N$40", "=$I28*$N$41", "=$I27*$N$42", "=$I26*$N$43", "=$I25*$N$44", "=$I24*$N$45", "=$I23*$N$46", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O46:BL46)"
  1387.         WRITE #1, "25", "=A47*$C$18", "=SE(ARROTONDA(B47,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B47^$C$7,0)", "=SE(C47>0,(C47-C46)/$C$18,0)", matrice1(ieto%%, z%%, 25, 1).i2, "=E47*$C$18", "=SE(C47>0,G46+F47,0)", "=SE(G47-$C$12>=0,((G47-$C$12)^2)/(G47-$C$12+$C$11),0)", "=SE(C47>0,H47-H46,0)", mockus(25).tSUta, mockus(25).qSUqp, matrice1(ieto%%, z%%, 25, 1).tmSUta, matrice1(ieto%%, z%%, 25, 1).qmSUqp, "=M47*$C$20", "=I47*$N$23", "=I46*$N$24", "=$I45*$N$25", "=$I44*$N$26", "=$I43*$N$27", "=$I42*$N$28", "=$I41*$N$29", "=$I40*$N$30", "=$I39*$N$31", "=$I38*$N$32", "=$I37*$N$33", "=$I36*$N$34", "=$I35*$N$35", "=$I34*$N$36", "=$I33*$N$37", "=$I32*$N$38", "=$I31*$N$39", "=$I30*$N$40", "=$I29*$N$41", "=$I28*$N$42", "=$I27*$N$43", "=$I26*$N$44", "=$I25*$N$45", "=$I24*$N$46", "=$I23*$N$47", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O47:BL47)"
  1388.         WRITE #1, "26", "=A48*$C$18", "=SE(ARROTONDA(B48,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B48^$C$7,0)", "=SE(C48>0,(C48-C47)/$C$18,0)", matrice1(ieto%%, z%%, 26, 1).i2, "=E48*$C$18", "=SE(C48>0,G47+F48,0)", "=SE(G48-$C$12>=0,((G48-$C$12)^2)/(G48-$C$12+$C$11),0)", "=SE(C48>0,H48-H47,0)", mockus(26).tSUta, mockus(26).qSUqp, matrice1(ieto%%, z%%, 26, 1).tmSUta, matrice1(ieto%%, z%%, 26, 1).qmSUqp, "=M48*$C$20", "=I48*$N$23", "=I47*$N$24", "=$I46*$N$25", "=$I45*$N$26", "=$I44*$N$27", "=$I43*$N$28", "=$I42*$N$29", "=$I41*$N$30", "=$I40*$N$31", "=$I39*$N$32", "=$I38*$N$33", "=$I37*$N$34", "=$I36*$N$35", "=$I35*$N$36", "=$I34*$N$37", "=$I33*$N$38", "=$I32*$N$39", "=$I31*$N$40", "=$I30*$N$41", "=$I29*$N$42", "=$I28*$N$43", "=$I27*$N$44", "=$I26*$N$45", "=$I25*$N$46", "=$I24*$N$47", "=$I23*$N$48", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O48:BL48)"
  1389.         WRITE #1, "27", "=A49*$C$18", "=SE(ARROTONDA(B49,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B49^$C$7,0)", "=SE(C49>0,(C49-C48)/$C$18,0)", matrice1(ieto%%, z%%, 27, 1).i2, "=E49*$C$18", "=SE(C49>0,G48+F49,0)", "=SE(G49-$C$12>=0,((G49-$C$12)^2)/(G49-$C$12+$C$11),0)", "=SE(C49>0,H49-H48,0)", mockus(27).tSUta, mockus(27).qSUqp, matrice1(ieto%%, z%%, 27, 1).tmSUta, matrice1(ieto%%, z%%, 27, 1).qmSUqp, "=M49*$C$20", "=I49*$N$23", "=I48*$N$24", "=$I47*$N$25", "=$I46*$N$26", "=$I45*$N$27", "=$I44*$N$28", "=$I43*$N$29", "=$I42*$N$30", "=$I41*$N$31", "=$I40*$N$32", "=$I39*$N$33", "=$I38*$N$34", "=$I37*$N$35", "=$I36*$N$36", "=$I35*$N$37", "=$I34*$N$38", "=$I33*$N$39", "=$I32*$N$40", "=$I31*$N$41", "=$I30*$N$42", "=$I29*$N$43", "=$I28*$N$44", "=$I27*$N$45", "=$I26*$N$46", "=$I25*$N$47", "=$I24*$N$48", "=$I23*$N$49", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O49:BL49)"
  1390.         WRITE #1, "28", "=A50*$C$18", "=SE(ARROTONDA(B50,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B50^$C$7,0)", "=SE(C50>0,(C50-C49)/$C$18,0)", matrice1(ieto%%, z%%, 28, 1).i2, "=E50*$C$18", "=SE(C50>0,G49+F50,0)", "=SE(G50-$C$12>=0,((G50-$C$12)^2)/(G50-$C$12+$C$11),0)", "=SE(C50>0,H50-H49,0)", mockus(28).tSUta, mockus(28).qSUqp, matrice1(ieto%%, z%%, 28, 1).tmSUta, matrice1(ieto%%, z%%, 28, 1).qmSUqp, "=M50*$C$20", "=I50*$N$23", "=I49*$N$24", "=$I48*$N$25", "=$I47*$N$26", "=$I46*$N$27", "=$I45*$N$28", "=$I44*$N$29", "=$I43*$N$30", "=$I42*$N$31", "=$I41*$N$32", "=$I40*$N$33", "=$I39*$N$34", "=$I38*$N$35", "=$I37*$N$36", "=$I36*$N$37", "=$I35*$N$38", "=$I34*$N$39", "=$I33*$N$40", "=$I32*$N$41", "=$I31*$N$42", "=$I30*$N$43", "=$I29*$N$44", "=$I28*$N$45", "=$I27*$N$46", "=$I26*$N$47", "=$I25*$N$48", "=$I24*$N$49", "=$I23*$N$50", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O50:BL50)"
  1391.         WRITE #1, "29", "=A51*$C$18", "=SE(ARROTONDA(B51,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B51^$C$7,0)", "=SE(C51>0,(C51-C50)/$C$18,0)", matrice1(ieto%%, z%%, 29, 1).i2, "=E51*$C$18", "=SE(C51>0,G50+F51,0)", "=SE(G51-$C$12>=0,((G51-$C$12)^2)/(G51-$C$12+$C$11),0)", "=SE(C51>0,H51-H50,0)", mockus(29).tSUta, mockus(29).qSUqp, matrice1(ieto%%, z%%, 29, 1).tmSUta, matrice1(ieto%%, z%%, 29, 1).qmSUqp, "=M51*$C$20", "=I51*$N$23", "=I50*$N$24", "=$I49*$N$25", "=$I48*$N$26", "=$I47*$N$27", "=$I46*$N$28", "=$I45*$N$29", "=$I44*$N$30", "=$I43*$N$31", "=$I42*$N$32", "=$I41*$N$33", "=$I40*$N$34", "=$I39*$N$35", "=$I38*$N$36", "=$I37*$N$37", "=$I36*$N$38", "=$I35*$N$39", "=$I34*$N$40", "=$I33*$N$41", "=$I32*$N$42", "=$I31*$N$43", "=$I30*$N$44", "=$I29*$N$45", "=$I28*$N$46", "=$I27*$N$47", "=$I26*$N$48", "=$I25*$N$49", "=$I24*$N$50", "=$I23*$N$51", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O51:BL51)"
  1392.         WRITE #1, "30", "=A52*$C$18", "=SE(ARROTONDA(B52,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B52^$C$7,0)", "=SE(C52>0,(C52-C51)/$C$18,0)", matrice1(ieto%%, z%%, 30, 1).i2, "=E52*$C$18", "=SE(C52>0,G51+F52,0)", "=SE(G52-$C$12>=0,((G52-$C$12)^2)/(G52-$C$12+$C$11),0)", "=SE(C52>0,H52-H51,0)", mockus(30).tSUta, mockus(30).qSUqp, matrice1(ieto%%, z%%, 30, 1).tmSUta, matrice1(ieto%%, z%%, 30, 1).qmSUqp, "=M52*$C$20", "=I52*$N$23", "=I51*$N$24", "=$I50*$N$25", "=$I49*$N$26", "=$I48*$N$27", "=$I47*$N$28", "=$I46*$N$29", "=$I45*$N$30", "=$I44*$N$31", "=$I43*$N$32", "=$I42*$N$33", "=$I41*$N$34", "=$I40*$N$35", "=$I39*$N$36", "=$I38*$N$37", "=$I37*$N$38", "=$I36*$N$39", "=$I35*$N$40", "=$I34*$N$41", "=$I33*$N$42", "=$I32*$N$43", "=$I31*$N$44", "=$I30*$N$45", "=$I29*$N$46", "=$I28*$N$47", "=$I27*$N$48", "=$I26*$N$49", "=$I25*$N$50", "=$I24*$N$51", "=$I23*$N$52", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O52:BL52)"
  1393.         WRITE #1, "31", "=A53*$C$18", "=SE(ARROTONDA(B53,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B53^$C$7,0)", "=SE(C53>0,(C53-C52)/$C$18,0)", matrice1(ieto%%, z%%, 31, 1).i2, "=E53*$C$18", "=SE(C53>0,G52+F53,0)", "=SE(G53-$C$12>=0,((G53-$C$12)^2)/(G53-$C$12+$C$11),0)", "=SE(C53>0,H53-H52,0)", mockus(31).tSUta, mockus(31).qSUqp, matrice1(ieto%%, z%%, 31, 1).tmSUta, matrice1(ieto%%, z%%, 31, 1).qmSUqp, "=M53*$C$20", "=I53*$N$23", "=I52*$N$24", "=$I51*$N$25", "=$I50*$N$26", "=$I49*$N$27", "=$I48*$N$28", "=$I47*$N$29", "=$I46*$N$30", "=$I45*$N$31", "=$I44*$N$32", "=$I43*$N$33", "=$I42*$N$34", "=$I41*$N$35", "=$I40*$N$36", "=$I39*$N$37", "=$I38*$N$38", "=$I37*$N$39", "=$I36*$N$40", "=$I35*$N$41", "=$I34*$N$42", "=$I33*$N$43", "=$I32*$N$44", "=$I31*$N$45", "=$I30*$N$46", "=$I29*$N$47", "=$I28*$N$48", "=$I27*$N$49", "=$I26*$N$50", "=$I25*$N$51", "=$I24*$N$52", "=$I23*$N$53", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O53:BL53)"
  1394.         WRITE #1, "32", "=A54*$C$18", "=SE(ARROTONDA(B54,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B54^$C$7,0)", "=SE(C54>0,(C54-C53)/$C$18,0)", matrice1(ieto%%, z%%, 32, 1).i2, "=E54*$C$18", "=SE(C54>0,G53+F54,0)", "=SE(G54-$C$12>=0,((G54-$C$12)^2)/(G54-$C$12+$C$11),0)", "=SE(C54>0,H54-H53,0)", mockus(32).tSUta, mockus(32).qSUqp, matrice1(ieto%%, z%%, 32, 1).tmSUta, matrice1(ieto%%, z%%, 32, 1).qmSUqp, "=M54*$C$20", "=I54*$N$23", "=I53*$N$24", "=$I52*$N$25", "=$I51*$N$26", "=$I50*$N$27", "=$I49*$N$28", "=$I48*$N$29", "=$I47*$N$30", "=$I46*$N$31", "=$I45*$N$32", "=$I44*$N$33", "=$I43*$N$34", "=$I42*$N$35", "=$I41*$N$36", "=$I40*$N$37", "=$I39*$N$38", "=$I38*$N$39", "=$I37*$N$40", "=$I36*$N$41", "=$I35*$N$42", "=$I34*$N$43", "=$I33*$N$44", "=$I32*$N$45", "=$I31*$N$46", "=$I30*$N$47", "=$I29*$N$48", "=$I28*$N$49", "=$I27*$N$50", "=$I26*$N$51", "=$I25*$N$52", "=$I24*$N$53", "=$I23*$N$54", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O54:BL54)"
  1395.         WRITE #1, "33", "=A55*$C$18", "=SE(ARROTONDA(B55,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B55^$C$7,0)", "=SE(C55>0,(C55-C54)/$C$18,0)", matrice1(ieto%%, z%%, 33, 1).i2, "=E55*$C$18", "=SE(C55>0,G54+F55,0)", "=SE(G55-$C$12>=0,((G55-$C$12)^2)/(G55-$C$12+$C$11),0)", "=SE(C55>0,H55-H54,0)", mockus(33).tSUta, mockus(33).qSUqp, matrice1(ieto%%, z%%, 33, 1).tmSUta, matrice1(ieto%%, z%%, 33, 1).qmSUqp, "=M55*$C$20", "=I55*$N$23", "=I54*$N$24", "=$I53*$N$25", "=$I52*$N$26", "=$I51*$N$27", "=$I50*$N$28", "=$I49*$N$29", "=$I48*$N$30", "=$I47*$N$31", "=$I46*$N$32", "=$I45*$N$33", "=$I44*$N$34", "=$I43*$N$35", "=$I42*$N$36", "=$I41*$N$37", "=$I40*$N$38", "=$I39*$N$39", "=$I38*$N$40", "=$I37*$N$41", "=$I36*$N$42", "=$I35*$N$43", "=$I34*$N$44", "=$I33*$N$45", "=$I32*$N$46", "=$I31*$N$47", "=$I30*$N$48", "=$I29*$N$49", "=$I28*$N$50", "=$I27*$N$51", "=$I26*$N$52", "=$I25*$N$53", "=$I24*$N$54", "=$I23*$M$55", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O55:BL55)"
  1396.         WRITE #1, "34", "=A56*$C$18", "=SE(ARROTONDA(B56,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B56^$C$7,0)", "=SE(C56>0,(C56-C55)/$C$18,0)", matrice1(ieto%%, z%%, 34, 1).i2, "=E56*$C$18", "=SE(C56>0,G55+F56,0)", "=SE(G56-$C$12>=0,((G56-$C$12)^2)/(G56-$C$12+$C$11),0)", "=SE(C56>0,H56-H55,0)", mockus(34).tSUta, mockus(34).qSUqp, matrice1(ieto%%, z%%, 34, 1).tmSUta, matrice1(ieto%%, z%%, 34, 1).qmSUqp, "=M56*$C$20", "=I56*$N$23", "=I55*$N$24", "=$I54*$N$25", "=$I53*$N$26", "=$I52*$N$27", "=$I51*$N$28", "=$I50*$N$29", "=$I49*$N$30", "=$I48*$N$31", "=$I47*$N$32", "=$I46*$N$33", "=$I45*$N$34", "=$I44*$N$35", "=$I43*$N$36", "=$I42*$N$37", "=$I41*$N$38", "=$I40*$N$39", "=$I39*$N$40", "=$I38*$N$41", "=$I37*$N$42", "=$I36*$N$43", "=$I35*$N$44", "=$I34*$N$45", "=$I33*$N$46", "=$I32*$N$47", "=$I31*$N$48", "=$I30*$N$49", "=$I29*$N$50", "=$I28*$N$51", "=$I27*$N$52", "=$I26*$N$53", "=$I25*$N$54", "=$I24*$M$55", "=$I23*$M$56", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O56:BL56)"
  1397.         WRITE #1, "35", "=A57*$C$18", "=SE(ARROTONDA(B57,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B57^$C$7,0)", "=SE(C57>0,(C57-C56)/$C$18,0)", matrice1(ieto%%, z%%, 35, 1).i2, "=E57*$C$18", "=SE(C57>0,G56+F57,0)", "=SE(G57-$C$12>=0,((G57-$C$12)^2)/(G57-$C$12+$C$11),0)", "=SE(C57>0,H57-H56,0)", mockus(35).tSUta, mockus(35).qSUqp, matrice1(ieto%%, z%%, 35, 1).tmSUta, matrice1(ieto%%, z%%, 35, 1).qmSUqp, "=M57*$C$20", "=I57*$N$23", "=I56*$N$24", "=$I55*$N$25", "=$I54*$N$26", "=$I53*$N$27", "=$I52*$N$28", "=$I51*$N$29", "=$I50*$N$30", "=$I49*$N$31", "=$I48*$N$32", "=$I47*$N$33", "=$I46*$N$34", "=$I45*$N$35", "=$I44*$N$36", "=$I43*$N$37", "=$I42*$N$38", "=$I41*$N$39", "=$I40*$N$40", "=$I39*$N$41", "=$I38*$N$42", "=$I37*$N$43", "=$I36*$N$44", "=$I35*$N$45", "=$I34*$N$46", "=$I33*$N$47", "=$I32*$N$48", "=$I31*$N$49", "=$I30*$N$50", "=$I29*$N$51", "=$I28*$N$52", "=$I27*$N$53", "=$I26*$N$54", "=$I25*$M$55", "=$I24*$M$56", "=$I23*$M$57", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O57:BL57)"
  1398.         WRITE #1, "36", "=A58*$C$18", "=SE(ARROTONDA(B58,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B58^$C$7,0)", "=SE(C58>0,(C58-C57)/$C$18,0)", matrice1(ieto%%, z%%, 36, 1).i2, "=E58*$C$18", "=SE(C58>0,G57+F58,0)", "=SE(G58-$C$12>=0,((G58-$C$12)^2)/(G58-$C$12+$C$11),0)", "=SE(C58>0,H58-H57,0)", mockus(36).tSUta, mockus(36).qSUqp, matrice1(ieto%%, z%%, 36, 1).tmSUta, matrice1(ieto%%, z%%, 36, 1).qmSUqp, "=M58*$C$20", "=I58*$N$23", "=I57*$N$24", "=$I56*$N$25", "=$I55*$N$26", "=$I54*$N$27", "=$I53*$N$28", "=$I52*$N$29", "=$I51*$N$30", "=$I50*$N$31", "=$I49*$N$32", "=$I48*$N$33", "=$I47*$N$34", "=$I46*$N$35", "=$I45*$N$36", "=$I44*$N$37", "=$I43*$N$38", "=$I42*$N$39", "=$I41*$N$40", "=$I40*$N$41", "=$I39*$N$42", "=$I38*$N$43", "=$I37*$N$44", "=$I36*$N$45", "=$I35*$N$46", "=$I34*$N$47", "=$I33*$N$48", "=$I32*$N$49", "=$I31*$N$50", "=$I30*$N$51", "=$I29*$N$52", "=$I28*$N$53", "=$I27*$N$54", "=$I26*$M$55", "=$I25*$M$56", "=$I24*$M$57", "=$I23*$M$58", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O58:BL58)"
  1399.         WRITE #1, "37", "=A59*$C$18", "=SE(ARROTONDA(B59,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B59^$C$7,0)", "=SE(C59>0,(C59-C58)/$C$18,0)", matrice1(ieto%%, z%%, 37, 1).i2, "=E59*$C$18", "=SE(C59>0,G58+F59,0)", "=SE(G59-$C$12>=0,((G59-$C$12)^2)/(G59-$C$12+$C$11),0)", "=SE(C59>0,H59-H58,0)", mockus(37).tSUta, mockus(37).qSUqp, matrice1(ieto%%, z%%, 37, 1).tmSUta, matrice1(ieto%%, z%%, 37, 1).qmSUqp, "=M59*$C$20", "=I59*$N$23", "=I58*$N$24", "=$I57*$N$25", "=$I56*$N$26", "=$I55*$N$27", "=$I54*$N$28", "=$I53*$N$29", "=$I52*$N$30", "=$I51*$N$31", "=$I50*$N$32", "=$I49*$N$33", "=$I48*$N$34", "=$I47*$N$35", "=$I46*$N$36", "=$I45*$N$37", "=$I44*$N$38", "=$I43*$N$39", "=$I42*$N$40", "=$I41*$N$41", "=$I40*$N$42", "=$I39*$N$43", "=$I38*$N$44", "=$I37*$N$45", "=$I36*$N$46", "=$I35*$N$47", "=$I34*$N$48", "=$I33*$N$49", "=$I32*$N$50", "=$I31*$N$51", "=$I30*$N$52", "=$I29*$N$53", "=$I28*$N$54", "=$I27*$M$55", "=$I26*$M$56", "=$I25*$M$57", "=$I24*$M$58", "=$I23*$M$59", "", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O59:BL59)"
  1400.         WRITE #1, "38", "=A60*$C$18", "=SE(ARROTONDA(B60,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B60^$C$7,0)", "=SE(C60>0,(C60-C59)/$C$18,0)", matrice1(ieto%%, z%%, 38, 1).i2, "=E60*$C$18", "=SE(C60>0,G59+F60,0)", "=SE(G60-$C$12>=0,((G60-$C$12)^2)/(G60-$C$12+$C$11),0)", "=SE(C60>0,H60-H59,0)", mockus(38).tSUta, mockus(38).qSUqp, matrice1(ieto%%, z%%, 38, 1).tmSUta, matrice1(ieto%%, z%%, 38, 1).qmSUqp, "=M60*$C$20", "=I60*$N$23", "=I59*$N$24", "=$I58*$N$25", "=$I57*$N$26", "=$I56*$N$27", "=$I55*$N$28", "=$I54*$N$29", "=$I53*$N$30", "=$I52*$N$31", "=$I51*$N$32", "=$I50*$N$33", "=$I49*$N$34", "=$I48*$N$35", "=$I47*$N$36", "=$I46*$N$37", "=$I45*$N$38", "=$I44*$N$39", "=$I43*$N$40", "=$I42*$N$41", "=$I41*$N$42", "=$I40*$N$43", "=$I39*$N$44", "=$I38*$N$45", "=$I37*$N$46", "=$I36*$N$47", "=$I35*$N$48", "=$I34*$N$49", "=$I33*$N$50", "=$I32*$N$51", "=$I31*$N$52", "=$I30*$N$53", "=$I29*$N$54", "=$I28*$M$55", "=$I27*$M$56", "=$I26*$M$57", "=$I25*$M$58", "=$I24*$M$59", "=$I23*$M$60", "", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O60:BL60)"
  1401.         WRITE #1, "39", "=A61*$C$18", "=SE(ARROTONDA(B61,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B61^$C$7,0)", "=SE(C61>0,(C61-C60)/$C$18,0)", matrice1(ieto%%, z%%, 39, 1).i2, "=E61*$C$18", "=SE(C61>0,G60+F61,0)", "=SE(G61-$C$12>=0,((G61-$C$12)^2)/(G61-$C$12+$C$11),0)", "=SE(C61>0,H61-H60,0)", mockus(39).tSUta, mockus(39).qSUqp, matrice1(ieto%%, z%%, 39, 1).tmSUta, matrice1(ieto%%, z%%, 39, 1).qmSUqp, "=M61*$C$20", "=I61*$N$23", "=I60*$N$24", "=$I59*$N$25", "=$I58*$N$26", "=$I57*$N$27", "=$I56*$N$28", "=$I55*$N$29", "=$I54*$N$30", "=$I53*$N$31", "=$I52*$N$32", "=$I51*$N$33", "=$I50*$N$34", "=$I49*$N$35", "=$I48*$N$36", "=$I47*$N$37", "=$I46*$N$38", "=$I45*$N$39", "=$I44*$N$40", "=$I43*$N$41", "=$I42*$N$42", "=$I41*$N$43", "=$I40*$N$44", "=$I39*$N$45", "=$I38*$N$46", "=$I37*$N$47", "=$I36*$N$48", "=$I35*$N$49", "=$I34*$N$50", "=$I33*$N$51", "=$I32*$N$52", "=$I31*$N$53", "=$I30*$N$54", "=$I29*$M$55", "=$I28*$M$56", "=$I27*$M$57", "=$I26*$M$58", "=$I25*$M$59", "=$I24*$M$60", "=$I23*$M$61", "", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O61:BL61)"
  1402.         WRITE #1, "40", "=A62*$C$18", "=SE(ARROTONDA(B62,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B62^$C$7,0)", "=SE(C62>0,(C62-C61)/$C$18,0)", matrice1(ieto%%, z%%, 40, 1).i2, "=E62*$C$18", "=SE(C62>0,G61+F62,0)", "=SE(G62-$C$12>=0,((G62-$C$12)^2)/(G62-$C$12+$C$11),0)", "=SE(C62>0,H62-H61,0)", mockus(40).tSUta, mockus(40).qSUqp, matrice1(ieto%%, z%%, 40, 1).tmSUta, matrice1(ieto%%, z%%, 40, 1).qmSUqp, "=M62*$C$20", "=I62*$N$23", "=I61*$N$24", "=$I60*$N$25", "=$I59*$N$26", "=$I58*$N$27", "=$I57*$N$28", "=$I56*$N$29", "=$I55*$N$30", "=$I54*$N$31", "=$I53*$N$32", "=$I52*$N$33", "=$I51*$N$34", "=$I50*$N$35", "=$I49*$N$36", "=$I48*$N$37", "=$I47*$N$38", "=$I46*$N$39", "=$I45*$N$40", "=$I44*$N$41", "=$I43*$N$42", "=$I42*$N$43", "=$I41*$N$44", "=$I40*$N$45", "=$I39*$N$46", "=$I38*$N$47", "=$I37*$N$48", "=$I36*$N$49", "=$I35*$N$50", "=$I34*$N$51", "=$I33*$N$52", "=$I32*$N$53", "=$I31*$N$54", "=$I30*$M$55", "=$I29*$M$56", "=$I28*$M$57", "=$I27*$M$58", "=$I26*$M$59", "=$I25*$M$60", "=$I24*$M$61", "=$I23*$M$62", "", "", "", "", "", "", "", "", "", "", "=SOMMA(O62:BL62)"
  1403.         WRITE #1, "41", "=A63*$C$18", "=SE(ARROTONDA(B63,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B63^$C$7,0)", "=SE(C63>0,(C63-C62)/$C$18,0)", matrice1(ieto%%, z%%, 41, 1).i2, "=E63*$C$18", "=SE(C63>0,G62+F63,0)", "=SE(G63-$C$12>=0,((G63-$C$12)^2)/(G63-$C$12+$C$11),0)", "=SE(C63>0,H63-H62,0)", mockus(41).tSUta, mockus(41).qSUqp, matrice1(ieto%%, z%%, 41, 1).tmSUta, matrice1(ieto%%, z%%, 41, 1).qmSUqp, "=M63*$C$20", "=I63*$N$23", "=I62*$N$24", "=$I61*$N$25", "=$I60*$N$26", "=$I59*$N$27", "=$I58*$N$28", "=$I57*$N$29", "=$I56*$N$30", "=$I55*$N$31", "=$I54*$N$32", "=$I53*$N$33", "=$I52*$N$34", "=$I51*$N$35", "=$I50*$N$36", "=$I49*$N$37", "=$I48*$N$38", "=$I47*$N$39", "=$I46*$N$40", "=$I45*$N$41", "=$I44*$N$42", "=$I43*$N$43", "=$I42*$N$44", "=$I41*$N$45", "=$I40*$N$46", "=$I39*$N$47", "=$I38*$N$48", "=$I37*$N$49", "=$I36*$N$50", "=$I35*$N$51", "=$I34*$N$52", "=$I33*$N$53", "=$I32*$N$54", "=$I31*$M$55", "=$I30*$M$56", "=$I29*$M$57", "=$I28*$M$58", "=$I27*$M$59", "=$I26*$M$60", "=$I25*$M$61", "=$I24*$M$62", "=$I23*$M$63", "", "", "", "", "", "", "", "", "", "=SOMMA(O63:BL63)"
  1404.         WRITE #1, "42", "=A64*$C$18", "=SE(ARROTONDA(B64,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B64^$C$7,0)", "=SE(C64>0,(C64-C63)/$C$18,0)", matrice1(ieto%%, z%%, 42, 1).i2, "=E64*$C$18", "=SE(C64>0,G63+F64,0)", "=SE(G64-$C$12>=0,((G64-$C$12)^2)/(G64-$C$12+$C$11),0)", "=SE(C64>0,H64-H63,0)", mockus(42).tSUta, mockus(42).qSUqp, matrice1(ieto%%, z%%, 42, 1).tmSUta, matrice1(ieto%%, z%%, 42, 1).qmSUqp, "=M64*$C$20", "=I64*$N$23", "=I63*$N$24", "=$I62*$N$25", "=$I61*$N$26", "=$I60*$N$27", "=$I59*$N$28", "=$I58*$N$29", "=$I57*$N$30", "=$I56*$N$31", "=$I55*$N$32", "=$I54*$N$33", "=$I53*$N$34", "=$I52*$N$35", "=$I51*$N$36", "=$I50*$N$37", "=$I49*$N$38", "=$I48*$N$39", "=$I47*$N$40", "=$I46*$N$41", "=$I45*$N$42", "=$I44*$N$43", "=$I43*$N$44", "=$I42*$N$45", "=$I41*$N$46", "=$I40*$N$47", "=$I39*$N$48", "=$I38*$N$49", "=$I37*$N$50", "=$I36*$N$51", "=$I35*$N$52", "=$I34*$N$53", "=$I33*$N$54", "=$I32*$M$55", "=$I31*$M$56", "=$I30*$M$57", "=$I29*$M$58", "=$I28*$M$59", "=$I27*$M$60", "=$I26*$M$61", "=$I25*$M$62", "=$I24*$M$63", "=$I23*$M$64", "", "", "", "", "", "", "", "", "=SOMMA(O64:BL64)"
  1405.         WRITE #1, "43", "=A65*$C$18", "=SE(ARROTONDA(B65,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B65^$C$7,0)", "=SE(C65>0,(C65-C64)/$C$18,0)", matrice1(ieto%%, z%%, 43, 1).i2, "=E65*$C$18", "=SE(C65>0,G64+F65,0)", "=SE(G65-$C$12>=0,((G65-$C$12)^2)/(G65-$C$12+$C$11),0)", "=SE(C65>0,H65-H64,0)", mockus(43).tSUta, mockus(43).qSUqp, matrice1(ieto%%, z%%, 43, 1).tmSUta, matrice1(ieto%%, z%%, 43, 1).qmSUqp, "=M65*$C$20", "=I65*$N$23", "=I64*$N$24", "=$I63*$N$25", "=$I62*$N$26", "=$I61*$N$27", "=$I60*$N$28", "=$I59*$N$29", "=$I58*$N$30", "=$I57*$N$31", "=$I56*$N$32", "=$I55*$N$33", "=$I54*$N$34", "=$I53*$N$35", "=$I52*$N$36", "=$I51*$N$37", "=$I50*$N$38", "=$I49*$N$39", "=$I48*$N$40", "=$I47*$N$41", "=$I46*$N$42", "=$I45*$N$43", "=$I44*$N$44", "=$I43*$N$45", "=$I42*$N$46", "=$I41*$N$47", "=$I40*$N$48", "=$I39*$N$49", "=$I38*$N$50", "=$I37*$N$51", "=$I36*$N$52", "=$I35*$N$53", "=$I34*$N$54", "=$I33*$M$55", "=$I32*$M$56", "=$I31*$M$57", "=$I30*$M$58", "=$I29*$M$59", "=$I28*$M$60", "=$I27*$M$61", "=$I26*$M$62", "=$I25*$M$63", "=$I24*$M$64", "=$I23*$M$65", "", "", "", "", "", "", "", "=SOMMA(O65:BL65)"
  1406.         WRITE #1, "44", "=A66*$C$18", "=SE(ARROTONDA(B66,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B66^$C$7,0)", "=SE(C66>0,(C66-C65)/$C$18,0)", matrice1(ieto%%, z%%, 44, 1).i2, "=E66*$C$18", "=SE(C66>0,G65+F66,0)", "=SE(G66-$C$12>=0,((G66-$C$12)^2)/(G66-$C$12+$C$11),0)", "=SE(C66>0,H66-H65,0)", mockus(44).tSUta, mockus(44).qSUqp, matrice1(ieto%%, z%%, 44, 1).tmSUta, matrice1(ieto%%, z%%, 44, 1).qmSUqp, "=M66*$C$20", "=I66*$N$23", "=I65*$N$24", "=$I64*$N$25", "=$I63*$N$26", "=$I62*$N$27", "=$I61*$N$28", "=$I60*$N$29", "=$I59*$N$30", "=$I58*$N$31", "=$I57*$N$32", "=$I56*$N$33", "=$I55*$N$34", "=$I54*$N$35", "=$I53*$N$36", "=$I52*$N$37", "=$I51*$N$38", "=$I50*$N$39", "=$I49*$N$40", "=$I48*$N$41", "=$I47*$N$42", "=$I46*$N$43", "=$I45*$N$44", "=$I44*$N$45", "=$I43*$N$46", "=$I42*$N$47", "=$I41*$N$48", "=$I40*$N$49", "=$I39*$N$50", "=$I38*$N$51", "=$I37*$N$52", "=$I36*$N$53", "=$I35*$N$54", "=$I34*$M$55", "=$I33*$M$56", "=$I32*$M$57", "=$I31*$M$58", "=$I30*$M$59", "=$I29*$M$60", "=$I28*$M$61", "=$I27*$M$62", "=$I26*$M$63", "=$I25*$M$64", "=$I24*$M$65", "=$I23*$M$66", "", "", "", "", "", "", "=SOMMA(O66:BL66)"
  1407.         WRITE #1, "45", "=A67*$C$18", "=SE(ARROTONDA(B67,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B67^$C$7,0)", "=SE(C67>0,(C67-C66)/$C$18,0)", matrice1(ieto%%, z%%, 45, 1).i2, "=E67*$C$18", "=SE(C67>0,G66+F67,0)", "=SE(G67-$C$12>=0,((G67-$C$12)^2)/(G67-$C$12+$C$11),0)", "=SE(C67>0,H67-H66,0)", mockus(45).tSUta, mockus(45).qSUqp, matrice1(ieto%%, z%%, 45, 1).tmSUta, matrice1(ieto%%, z%%, 45, 1).qmSUqp, "=M67*$C$20", "=I67*$N$23", "=I66*$N$24", "=$I65*$N$25", "=$I64*$N$26", "=$I63*$N$27", "=$I62*$N$28", "=$I61*$N$29", "=$I60*$N$30", "=$I59*$N$31", "=$I58*$N$32", "=$I57*$N$33", "=$I56*$N$34", "=$I55*$N$35", "=$I54*$N$36", "=$I53*$N$37", "=$I52*$N$38", "=$I51*$N$39", "=$I50*$N$40", "=$I49*$N$41", "=$I48*$N$42", "=$I47*$N$43", "=$I46*$N$44", "=$I45*$N$45", "=$I44*$N$46", "=$I43*$N$47", "=$I42*$N$48", "=$I41*$N$49", "=$I40*$N$50", "=$I39*$N$51", "=$I38*$N$52", "=$I37*$N$53", "=$I36*$N$54", "=$I35*$M$55", "=$I34*$M$56", "=$I33*$M$57", "=$I32*$M$58", "=$I31*$M$59", "=$I30*$M$60", "=$I29*$M$61", "=$I28*$M$62", "=$I27*$M$63", "=$I26*$M$64", "=$I25*$M$65", "=$I24*$M$66", "=$I23*$M$67", "", "", "", "", "", "=SOMMA(O67:BL67)"
  1408.         WRITE #1, "46", "=A68*$C$18", "=SE(ARROTONDA(B68,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B68^$C$7,0)", "=SE(C68>0,(C68-C67)/$C$18,0)", matrice1(ieto%%, z%%, 46, 1).i2, "=E68*$C$18", "=SE(C68>0,G67+F68,0)", "=SE(G68-$C$12>=0,((G68-$C$12)^2)/(G68-$C$12+$C$11),0)", "=SE(C68>0,H68-H67,0)", mockus(46).tSUta, mockus(46).qSUqp, matrice1(ieto%%, z%%, 46, 1).tmSUta, matrice1(ieto%%, z%%, 46, 1).qmSUqp, "=M68*$C$20", "=I68*$N$23", "=I67*$N$24", "=$I66*$N$25", "=$I65*$N$26", "=$I64*$N$27", "=$I63*$N$28", "=$I62*$N$29", "=$I61*$N$30", "=$I60*$N$31", "=$I59*$N$32", "=$I58*$N$33", "=$I57*$N$34", "=$I56*$N$35", "=$I55*$N$36", "=$I54*$N$37", "=$I53*$N$38", "=$I52*$N$39", "=$I51*$N$40", "=$I50*$N$41", "=$I49*$N$42", "=$I48*$N$43", "=$I47*$N$44", "=$I46*$N$45", "=$I45*$N$46", "=$I44*$N$47", "=$I43*$N$48", "=$I42*$N$49", "=$I41*$N$50", "=$I40*$N$51", "=$I39*$N$52", "=$I38*$N$53", "=$I37*$N$54", "=$I36*$M$55", "=$I35*$M$56", "=$I34*$M$57", "=$I33*$M$58", "=$I32*$M$59", "=$I31*$M$60", "=$I30*$M$61", "=$I29*$M$62", "=$I28*$M$63", "=$I27*$M$64", "=$I26*$M$65", "=$I25*$M$66", "=$I24*$M$67", "=$I23*$M$68", "", "", "", "", "=SOMMA(O68:BL68)"
  1409.         WRITE #1, "47", "=A69*$C$18", "=SE(ARROTONDA(B69,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B69^$C$7,0)", "=SE(C69>0,(C69-C68)/$C$18,0)", matrice1(ieto%%, z%%, 47, 1).i2, "=E69*$C$18", "=SE(C69>0,G68+F69,0)", "=SE(G69-$C$12>=0,((G69-$C$12)^2)/(G69-$C$12+$C$11),0)", "=SE(C69>0,H69-H68,0)", mockus(47).tSUta, mockus(47).qSUqp, matrice1(ieto%%, z%%, 47, 1).tmSUta, matrice1(ieto%%, z%%, 47, 1).qmSUqp, "=M69*$C$20", "=I69*$N$23", "=I68*$N$24", "=$I67*$N$25", "=$I66*$N$26", "=$I65*$N$27", "=$I64*$N$28", "=$I63*$N$29", "=$I62*$N$30", "=$I61*$N$31", "=$I60*$N$32", "=$I59*$N$33", "=$I58*$N$34", "=$I57*$N$35", "=$I56*$N$36", "=$I55*$N$37", "=$I54*$N$38", "=$I53*$N$39", "=$I52*$N$40", "=$I51*$N$41", "=$I50*$N$42", "=$I49*$N$43", "=$I48*$N$44", "=$I47*$N$45", "=$I46*$N$46", "=$I45*$N$47", "=$I44*$N$48", "=$I43*$N$49", "=$I42*$N$50", "=$I41*$N$51", "=$I40*$N$52", "=$I39*$N$53", "=$I38*$N$54", "=$I37*$M$55", "=$I36*$M$56", "=$I35*$M$57", "=$I34*$M$58", "=$I33*$M$59", "=$I32*$M$60", "=$I31*$M$61", "=$I30*$M$62", "=$I29*$M$63", "=$I28*$M$64", "=$I27*$M$65", "=$I26*$M$66", "=$I25*$M$67", "=$I24*$M$68", "=$I23*$M$69", "", "", "", "=SOMMA(O69:BL69)"
  1410.         WRITE #1, "48", "=A70*$C$18", "=SE(ARROTONDA(B70,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B70^$C$7,0)", "=SE(C70>0,(C70-C69)/$C$18,0)", matrice1(ieto%%, z%%, 48, 1).i2, "=E70*$C$18", "=SE(C70>0,G69+F70,0)", "=SE(G70-$C$12>=0,((G70-$C$12)^2)/(G70-$C$12+$C$11),0)", "=SE(C70>0,H70-H69,0)", mockus(48).tSUta, mockus(48).qSUqp, matrice1(ieto%%, z%%, 48, 1).tmSUta, matrice1(ieto%%, z%%, 48, 1).qmSUqp, "=M70*$C$20", "=I70*$N$23", "=I69*$N$24", "=$I68*$N$25", "=$I67*$N$26", "=$I66*$N$27", "=$I65*$N$28", "=$I64*$N$29", "=$I63*$N$30", "=$I62*$N$31", "=$I61*$N$32", "=$I60*$N$33", "=$I59*$N$34", "=$I58*$N$35", "=$I57*$N$36", "=$I56*$N$37", "=$I55*$N$38", "=$I54*$N$39", "=$I53*$N$40", "=$I52*$N$41", "=$I51*$N$42", "=$I50*$N$43", "=$I49*$N$44", "=$I48*$N$45", "=$I47*$N$46", "=$I46*$N$47", "=$I45*$N$48", "=$I44*$N$49", "=$I43*$N$50", "=$I42*$N$51", "=$I41*$N$52", "=$I40*$N$53", "=$I39*$N$54", "=$I38*$M$55", "=$I37*$M$56", "=$I36*$M$57", "=$I35*$M$58", "=$I34*$M$59", "=$I33*$M$60", "=$I32*$M$61", "=$I31*$M$62", "=$I30*$M$63", "=$I29*$M$64", "=$I28*$M$65", "=$I27*$M$66", "=$I26*$M$67", "=$I25*$M$68", "=$I24*$M$69", "=$I23*$M$70", "", "", "=SOMMA(O70:BL70)"
  1411.         WRITE #1, "49", "=A71*$C$18", "=SE(ARROTONDA(B71,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B71^$C$7,0)", "=SE(C71>0,(C71-C70)/$C$18,0)", matrice1(ieto%%, z%%, 49, 1).i2, "=E71*$C$18", "=SE(C71>0,G70+F71,0)", "=SE(G71-$C$12>=0,((G71-$C$12)^2)/(G71-$C$12+$C$11),0)", "=SE(C71>0,H71-H70,0)", mockus(49).tSUta, mockus(49).qSUqp, matrice1(ieto%%, z%%, 49, 1).tmSUta, matrice1(ieto%%, z%%, 49, 1).qmSUqp, "=M71*$C$20", "=I71*$N$23", "=I70*$N$24", "=$I69*$N$25", "=$I68*$N$26", "=$I67*$N$27", "=$I66*$N$28", "=$I65*$N$29", "=$I64*$N$30", "=$I63*$N$31", "=$I62*$N$32", "=$I61*$N$33", "=$I60*$N$34", "=$I59*$N$35", "=$I58*$N$36", "=$I57*$N$37", "=$I56*$N$38", "=$I55*$N$39", "=$I54*$N$40", "=$I53*$N$41", "=$I52*$N$42", "=$I51*$N$43", "=$I50*$N$44", "=$I49*$N$45", "=$I48*$N$46", "=$I47*$N$47", "=$I46*$N$48", "=$I45*$N$49", "=$I44*$N$50", "=$I43*$N$51", "=$I42*$N$52", "=$I41*$N$53", "=$I40*$N$54", "=$I39*$M$55", "=$I38*$M$56", "=$I37*$M$57", "=$I36*$M$58", "=$I35*$M$59", "=$I34*$M$60", "=$I33*$M$61", "=$I32*$M$62", "=$I31*$M$63", "=$I30*$M$64", "=$I29*$M$65", "=$I28*$M$66", "=$I27*$M$67", "=$I26*$M$68", "=$I25*$M$69", "=$I24*$M$70", "=$I23*$M$71", "", "=SOMMA(O71:BL71)"
  1412.         WRITE #1, "50", "=A72*$C$18", "=SE(ARROTONDA(B72,4)<=ARROTONDA($C$17,4),$C$5*$C$6*B72^$C$7,0)", "=SE(C71>0,(C71-C71)/$C$18,0)", matrice1(ieto%%, z%%, 50, 1).i2, "=E72*$C$18", "=SE(C71>0,G71+F72,0)", "=SE(G72-$C$12>=0,((G72-$C$12)^2)/(G72-$C$12+$C$11),0)", "=SE(C72>0,H72-H71,0)", mockus(50).tSUta, mockus(50).qSUqp, matrice1(ieto%%, z%%, 50, 1).tmSUta, matrice1(ieto%%, z%%, 50, 1).qmSUqp, "=M72*$C$20", "=I72*$N$23", "=I71*$N$24", "=$I70*$N$25", "=$I69*$N$26", "=$I68*$N$27", "=$I67*$N$28", "=$I66*$N$29", "=$I65*$N$30", "=$I64*$N$31", "=$I63*$N$32", "=$I62*$N$33", "=$I61*$N$34", "=$I60*$N$35", "=$I59*$N$36", "=$I58*$N$37", "=$I57*$N$38", "=$I56*$N$39", "=$I55*$N$40", "=$I54*$N$41", "=$I53*$N$42", "=$I52*$N$43", "=$I51*$N$44", "=$I50*$N$45", "=$I49*$N$46", "=$I48*$N$47", "=$I47*$N$48", "=$I46*$N$49", "=$I45*$N$50", "=$I44*$N$51", "=$I43*$N$52", "=$I42*$N$53", "=$I41*$N$54", "=$I40*$M$55", "=$I39*$M$56", "=$I38*$M$57", "=$I37*$M$58", "=$I36*$M$59", "=$I35*$M$60", "=$I34*$M$61", "=$I33*$M$62", "=$I32*$M$63", "=$I31*$M$64", "=$I30*$M$65", "=$I29*$M$66", "=$I28*$M$67", "=$I27*$M$68", "=$I26*$M$69", "=$I25*$M$70", "=$I24*$M$71", "", "=SOMMA(O72:BL72)"
  1413.         WRITE #1, "SOMMA", "", "", "", "", "=SOMMA(F23:F72)", "", "", "=SOMMA(I23:I72)"
  1414.         WRITE #1, "MEDIA", "", "", "=SOMMA(D23:D72)/(CONTA.NUMERI(D23:D72)-CONTA.SE(D23:D72,0))", "=SOMMA(E23:E72)/(CONTA.NUMERI(E23:E72)-CONTA.SE(E23:E72,0))"
  1415.         WRITE #1, ""
  1416.         WRITE #1, "Se sopra compare #NOME?, qui di seguito è riportata la stessa matrice, con l'utilizzo dei valori calcolati dal programma, anziché con l'uso delle formule di Excel, in quanto talvolta, a seconda del computer, al posto del valore, compare #NOME?, anche se la formula è corretta: editandola facendo doppio click su di essa e premendo poi INVIO, compare il valore."
  1417.         GOSUB DatiColonna
  1418.         FOR i% = 1 TO 50
  1419.             WRITE #1,_
  1420.              i%,_
  1421.               matrice1(ieto%%, z%%, i%, 1).mdt,_
  1422.               matrice1(ieto%%, z%%, i%, 1).h1,_
  1423.               matrice1(ieto%%, z%%, i%, 1).i1,_
  1424.               matrice1(ieto%%, z%%, i%, 1).i2,_
  1425.               matrice1(ieto%%, z%%, i%, 1).DH,_
  1426.               matrice1(ieto%%, z%%, i%, 1).H2,_
  1427.               matrice1(ieto%%, z%%, i%, 1).he,_
  1428.               matrice1(ieto%%, z%%, i%, 1).Dhe,_
  1429.               matrice1(ieto%%, z%%, i%, 1).tSUta,_
  1430.               matrice1(ieto%%, z%%, i%, 1).qSUqp,_
  1431.               matrice1(ieto%%, z%%, i%, 1).tmSUta,_
  1432.               matrice1(ieto%%, z%%, i%, 1).qmSUqp,_
  1433.               matrice1(ieto%%, z%%, i%, 1).qm,
  1434.             FOR n%% = 1 TO 50
  1435.                 WRITE #1, matrice2!(ieto%%, z%%, i%, n%%),
  1436.             NEXT n%%
  1437.             WRITE #1, idrogrammi1a24(ieto%%, z%%, i%, 1).portata
  1438.         NEXT i%
  1439.         WRITE #1, "SOMMA", "", "", "", "", matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).H2, "", "", matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).he
  1440.         WRITE #1, "MEDIA", "", "", matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).h1 / matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).mdt, matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).H2 / matrice1(ieto%%, z%%, PassiFinePioggia1a24%%(z%%), 1).mdt
  1441.         CLOSE #1
  1442.     NEXT z%%
  1443. NEXT ieto%%
  1444. IF KeyPress$ = "1" THEN
  1445.     IF VisualizzaIeto%% = 1 THEN
  1446.         CALL CreaImmagine(idrogramma1e2(1).composizione, "A.IdrogrammaProgettoCHICAGO+PortataPiccoProgetto")
  1447.         IF ore!(2) <> 0 THEN CALL CreaImmagine(idrogramma1e2(2).composizione, "B.IdrogrammaSceltoCHICAGO+PortataOraPiccoScelta")
  1448.     ELSEIF VisualizzaIeto%% = 2 THEN
  1449.         CALL CreaImmagine(idrogramma1e2(1).composizione, "A.IdrogrammaProgettoCOSTANTE+PortataPiccoProgetto")
  1450.         IF ore!(2) <> 0 THEN CALL CreaImmagine(idrogramma1e2(2).composizione, "B.IdrogrammaSceltoCOSTANTE+PortataOraPiccoScelta")
  1451.     END IF
  1452.     CALL CreaImmagine(unitari&, "C.IdrogrammiUnitari")
  1453.     FOR ieto%% = 1 TO 2
  1454.         IF ieto%% = 1 THEN testo$ = "D._1-24,idrogrammiCHICAGO+PortatePicco(da_1_a_32_volte_tc)"
  1455.         IF ieto%% = 2 THEN testo$ = "E._1-24,idrogrammiCOSTANTE+PortatePicco(da_1_a_32_volte_tc)"
  1456.         CALL CreaImmagine(ComplessivoIeto1e2(ieto%%).composizione, testo$)
  1457.         i% = 0
  1458.         FOR z%% = 1 TO 24
  1459.             i% = i% + 1
  1460.             IF ieto%% = 1 THEN testo$ = "D." + _TRIM$(STR$(z%%)) + ",idrogrammaCHICAGO(" + _TRIM$(STR$(CoefficientiDiscretizzazioneTemporale(z%%).N)) + "_volte_tc)"
  1461.             IF ieto%% = 2 THEN testo$ = "E." + _TRIM$(STR$(z%%)) + ",idrogrammaCOSTANTE(" + _TRIM$(STR$(CoefficientiDiscretizzazioneTemporale(z%%).N)) + "_volte_tc)"
  1462.             CALL CreaImmagine(MatriciIeto1e2(ieto%%, z%%), testo$)
  1463.         NEXT z%%
  1464.     NEXT ieto%%
  1465. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1466. DatiBase:
  1467. 'routine che riporta i dati che devono  essere sicuramente scritti su ogni file CSV, in quanto contengono i dati principali del bacino idrografico.
  1468.  
  1469. WRITE #n%%, "DATI"
  1470. WRITE #n%%, "T=", "[anni]", T$, "tempo di ritorno"
  1471. WRITE #n%%, "A=", "mq", A2&, "area del bacino idrografico"
  1472. WRITE #n%%, "K=", "[-]", k!, "parametro del Centro Funzionale"
  1473. WRITE #n%%, "a=", "[mm/d^n]", a1!, "coefficiente della curva di possibilità climatica."
  1474. WRITE #n%%, "n=", "[-]", n1!, "coefficiente della curva di possibilità climatica."
  1475. WRITE #n%%, "L=", "[m]", L~%, "lunghezza dell'asta principale del bacino idrografico."
  1476. WRITE #n%%, "s=", "[%]", s1!, "pendenza media del bacino idrografico."
  1477. WRITE #n%%, "CN(II)=", "[-]", CNII%%
  1478. WRITE #n%%, "S=", "[mm]", "=25.4*((1000/C13)-10)", "contenuto idrico massimo del terreno."
  1479. WRITE #n%%, "Ia=", "[mm]", "=0.1*C11", "perdite iniziali."
  1480. WRITE #n%%, "CN(III)=", "[-]", "=(23*C10)/(10+0.13*C10)"
  1481. WRITE #n%%, "tl=", "[ore]", "=0.342*(((C8/1000)^0.8)/(C9^0.5))*(1000/C13-9)^0.7", "formula di Mockus esprimente il tempo di ritardo."
  1482. WRITE #n%%, "tc=", "[ore]", "=C14/0.6", "tempo di corrivazione."
  1483. WRITE #n%%, "ta=", "[ore]", "=C14/0.9", "tempo di picco."
  1484. WRITE #n%%, "qp=", "[mc/(s*mm)]", "=0.208*((C4/1000000)/C16)", "portata al colmo dell'idrogramma unitario del bacino idrografico."
  1485. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1486. DatiColonna:
  1487. 'routine che stampa i titoli delle colonne.
  1488.  
  1489. WRITE #1, "N", "N*dt", "h", "i", "iC", "DH", "H", "he", "Dhe", "t/ta", "q/qp", "tm/ta", "qm/qp", "qm",
  1490. FOR i% = 1 TO 50
  1491.     WRITE #1, "Dhe*qm" + _TRIM$(STR$(i%)),
  1492. NEXT i%
  1493. WRITE #1, "idrogramma"
  1494.  
  1495. '**************************************************************************************************************************************************
  1496. '*                                           Termine sezione routines e inizio sezione subroutines                                                *
  1497. '**************************************************************************************************************************************************
  1498.  
  1499. SUB InserimentoDati (k!, a1!, n1, A2&, L~%, s1!, CNII%%, CoeffPerditeIniziali!)
  1500.     'questa subroutine permette l'inserimento degli input in modo dinamico, cioè non utilizzando il comando INPUT.
  1501.     'INPUT è un comando che non permette l'esecuzione di altre operazioni se non quella dell'inserimento dell'input stesso. ogni altra operazione viene effettuata dopo l'inserimento. per esempio, se vi sono da inserire 10 input, il
  1502.     'comando INPUT non permette di spostarsi con la freccia su o giù tra i vari input e di modificarli, ma andrebbero inseriti uno per volta. se poi uno di questi 10 input fosse sbagliato o da modificare, andrebbe ripetuta l'intera
  1503.     'sequenza di richiesta dei 10 input. questa subroutine, permette dunque di inserire gli input richiesti, come se fosse un unico input massivo, all'interno del quale è possibile modificare ogni input.
  1504.  
  1505.     SHARED PosizioneCursore%%
  1506.  
  1507.     DIM richiesta%%
  1508.     DIM test~`
  1509.     DIM debug~`
  1510.     DIM carattere$
  1511.     DIM punti~`
  1512.     DIM T!
  1513.     DIM cursore~`
  1514.     DIM esci~`
  1515.  
  1516.     COLOR G&
  1517.     PosizioneCursore%% = CSRLIN - 11
  1518.     richiesta%% = 1
  1519.     DO
  1520.         _LIMIT 30
  1521.         KeyPress$ = INKEY$
  1522.         IF TIMER > T! + 0.5 THEN
  1523.             cursore~` = NOT cursore~`
  1524.             T! = TIMER
  1525.         END IF
  1526.         FOR i% = 1 TO 8
  1527.             LOCATE PosizioneCursore%% - 1 + i%, 69: PRINT inputs$(i%) + SPACE$(30)
  1528.         NEXT i%
  1529.         LOCATE PosizioneCursore%% - 1 + richiesta%%, 69 + LEN(inputs$(richiesta%%))
  1530.         IF debug~` = 1 THEN EXIT SUB
  1531.         IF esci~` = 1 THEN EXIT DO
  1532.         IF cursore~` THEN PRINT "_"
  1533.         SELECT CASE KeyPress$
  1534.             CASE CHR$(27)
  1535.                 esc~` = 1
  1536.                 EXIT SUB
  1537.             CASE CHR$(8)
  1538.                 IF LEN(inputs$(richiesta%%)) > 0 THEN inputs$(richiesta%%) = LEFT$(inputs$(richiesta%%), LEN(inputs$(richiesta%%)) - 1)
  1539.             CASE CHR$(9)
  1540.                 riavvio~` = 1
  1541.                 EXIT SUB
  1542.             CASE CHR$(44), CHR$(46)
  1543.                 SELECT CASE richiesta%%
  1544.                     CASE 4, 5, 7
  1545.                         IF KeyPress$ = CHR$(44) OR KeyPress$ = CHR$(46) THEN KeyPress$ = ""
  1546.                     CASE ELSE
  1547.                         punti~` = 0
  1548.                         IF KeyPress$ = CHR$(44) THEN KeyPress$ = CHR$(46)
  1549.                         FOR n%% = 1 TO LEN(inputs$(richiesta%%))
  1550.                             carattere$ = MID$(inputs$(richiesta%%), n%%, 1)
  1551.                             IF carattere$ = CHR$(46) THEN punti~` = 1
  1552.                         NEXT n%%
  1553.                         IF punti~` = 0 THEN inputs$(richiesta%%) = inputs$(richiesta%%) + KeyPress$
  1554.                 END SELECT
  1555.             CASE CHR$(48) TO CHR$(57)
  1556.                 inputs$(richiesta%%) = inputs$(richiesta%%) + KeyPress$
  1557.             CASE CHR$(0) + CHR$(72)
  1558.                 GOSUB ValutaInput
  1559.                 SELECT CASE test~`
  1560.                     CASE IS = 0
  1561.                         inputs$(richiesta%%) = ""
  1562.                     CASE IS = 1
  1563.                         IF richiesta%% = 1 THEN
  1564.                             EXIT SELECT
  1565.                         ELSEIF richiesta <= 10 THEN
  1566.                             richiesta%% = richiesta%% - 1
  1567.                         END IF
  1568.                 END SELECT
  1569.             CASE CHR$(13), CHR$(0) + CHR$(80)
  1570.                 GOSUB ValutaInput
  1571.                 IF richiesta%% <> 8 THEN IF KeyPress$ = CHR$(0) + CHR$(80) THEN KeyPress$ = CHR$(13)
  1572.                 IF richiesta%% <> 8 THEN IF LEN(inputs$(richiesta%%)) = 0 THEN test~` = 0
  1573.                 SELECT CASE test~`
  1574.                     CASE IS = 0
  1575.                         inputs$(richiesta%%) = ""
  1576.                     CASE IS = 1
  1577.                         IF richiesta%% = 8 THEN IF KeyPress$ = CHR$(13) THEN esci~` = 1
  1578.                         IF richiesta%% <> 8 THEN richiesta%% = richiesta%% + 1
  1579.                 END SELECT
  1580.         END SELECT
  1581.     LOOP
  1582.     k! = VAL(inputs$(1)): a1! = VAL(inputs$(2)): n1! = VAL(inputs$(3)): A2& = VAL(inputs$(4)): L~% = VAL(inputs$(5)): s1! = VAL(inputs$(6)): CNII%% = VAL(inputs$(7)): CoeffPerditeIniziali! = VAL(inputs$(8))
  1583.     COLOR bianco&
  1584.     EXIT SUB
  1585.     '--------------------------------------------------------------------------------------------------------------------------------------------------
  1586.     ValutaInput:
  1587.     'routine che si attiva quando l'utente vuol cambiare input, cioè quando preme FRECCIA SU o FRECCIA GIU' o INVIO. essa definisce il valore della variabile test~`, 0 o 1..
  1588.     '- se 0: l'input inserito è non conforme.
  1589.     '- se 1: l'input inserito è conforme.
  1590.     'a seconda del valore della variabile test~`, nella parte principale del codice della subroutine:
  1591.     '- se 0: rifiuta il cambio di input
  1592.     '- se 1: accetta il cambio di input o la validazione degli input che porta all'uscita dalla subroutine.
  1593.  
  1594.     SHARED T$
  1595.  
  1596.     test~` = 0
  1597.     SELECT CASE richiesta%%
  1598.         CASE 1
  1599.             IF inputs$(1) = "123" THEN
  1600.                 debug~` = 1
  1601.                 'Cillian:
  1602.                 k! = 2.34: a1! = 14.6653: n1! = 0.45596: A2& = 2641902: L~% = 3300: s1! = 41.5: CNII%% = 70: CoeffPerditeIniziali! = 0.1
  1603.                 'pialong:
  1604.                 'k! = 2.34: a1! = 17.097811: n1! = 0.497753: A2& = 2509318: L~% = 2919: s1! = 66.3: CNII%% = 66: CoeffPerditeIniziali! = 0.1
  1605.                 'mondange:
  1606.                 'k! = 2.04: a1! = 10.93228: n1! = 0.482321: A2& = 294873: L~% = 840: s1! = 74.7: CNII%% = 77: CoeffPerditeIniziali! = 0.1
  1607.                 inputs$(1) = STR$(k!): inputs$(2) = STR$(a1!): inputs$(3) = STR$(n1!): inputs$(4) = STR$(A2&): inputs$(5) = STR$(L~%): inputs$(6) = STR$(s1!): inputs$(7) = STR$(CNII%%): inputs$(8) = STR$(CoeffPerditeIniziali!)
  1608.                 GOSUB TrovaT
  1609.                 RETURN
  1610.             END IF
  1611.             IF LEN(inputs$(1)) = 0 THEN IF KeyPress$ = CHR$(13) THEN inputs$(1) = "1"
  1612.             GOSUB TrovaT
  1613.             IF KeyPress$ = CHR$(0) + CHR$(80) THEN IF LEN(inputs$(1)) = 0 THEN test~` = 0
  1614.         CASE 2
  1615.             test~` = 1
  1616.         CASE 3
  1617.             IF VAL(inputs$(3)) <= 1 THEN test~` = 1 ELSE test~` = 0
  1618.         CASE 4, 5, 6
  1619.             IF VAL(inputs$(richiesta%%)) >= 1 THEN
  1620.                 test~` = 1
  1621.             ELSEIF inputs$(richiesta%%) = "" THEN
  1622.                 test~` = 1
  1623.             ELSE
  1624.                 test~` = 0
  1625.             END IF
  1626.         CASE 7
  1627.             IF VAL(inputs$(richiesta%%)) >= 1 THEN
  1628.                 IF VAL(inputs$(richiesta%%)) <= 100 THEN test~` = 1
  1629.             ELSEIF inputs$(richiesta%%) = "" THEN test~` = 1
  1630.             ELSE
  1631.                 test~` = 0
  1632.             END IF
  1633.         CASE IS = 8
  1634.             IF LEN(inputs$(8)) = 0 THEN
  1635.                 IF KeyPress$ = CHR$(13) THEN inputs$(8) = "0.1"
  1636.                 test~` = 1
  1637.                 EXIT SELECT
  1638.             END IF
  1639.             IF VAL(inputs$(8)) >= 0 THEN
  1640.                 IF VAL(inputs$(8)) <= 0.2 THEN test~` = 1
  1641.             ELSE
  1642.                 test~` = 0
  1643.             END IF
  1644.     END SELECT
  1645.     RETURN
  1646.     '--------------------------------------------------------------------------------------------------------------------------------------------------
  1647.     TrovaT:
  1648.     'routine che determina il tempo di ritorno corrispondente al valore Kt del centro funzionale, rifiutando i valori non previsti.
  1649.  
  1650.     i% = 1
  1651.     FOR i% = 1 TO 10
  1652.         IF VAL(inputs$(1)) = TempiRitorno(i%).k THEN
  1653.             IF i% = 1 THEN
  1654.                 T$ = "Definito dall'utente"
  1655.                 test~` = 1
  1656.             ELSE
  1657.                 T$ = _TRIM$(STR$(TempiRitorno(i%).T)) + " anni"
  1658.                 test~` = 1
  1659.             END IF
  1660.             EXIT FOR
  1661.         ELSE
  1662.             test~` = 0
  1663.         END IF
  1664.     NEXT i%
  1665.     RETURN
  1666. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1667. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1668. SUB CalcolaIdrogramma (X1!, X2!, X3!, Y!, immagine&, destinazione&)
  1669.     'X1!: ora di picco dell'idrogramma di calcolo n. 24.
  1670.     'X2!: ora corrispondente all'ultimo istante temporale dell'idrogramma di calcolo n. 24.
  1671.     'X3!: ora corrispondente alla portata di picco massima tra le 24 calcolate.
  1672.     'Y!:  portata di picco massima tra le 24 calcolate.
  1673.     'immagine&: immagine in cui viene disegnato il grafico.
  1674.     'destinazione&: immagine in cui viene incollato immagine& e in cui sono riportati i tabulati.
  1675.     'subroutine che chiede all'utente l'inserimento della Soglia (per ietogramma Chicago) per il calcolo dell'idrogramma di progetto e dell'ora di picco scelta. quest'ultimo viene calcolato solo se l'utente specifica un'ora
  1676.     'di picco a scelta, quando richiesto.
  1677.     'l'idrogramma di progetto nel caso di ietogramma costante è sempre determinato e corrisponde a quello con portata di picco massima.
  1678.     'nel caso di ietogramma Chicago corrisponde a quello determinato dalla Soglia o, in caso di Soglia troppo bassa o nel caso non si stabilisca una Soglia, è computato quello corrispondente alla portata di picco massima.
  1679.     'nel caso di ietogramma Chicago, se si esce dal programma prima della richiesta della Soglia, non viene calcolato nessun idrogramma di progetto e, nel corrispondente file CSV, comparirà la scritta: "Non è stato definito
  1680.     'dall'utente."
  1681.     'nel caso dell'idrogramma di progetto, in base all'inserimento della Soglia, viene trovata l'ora e la portata di picco ad essa corrispondente. nel caso dell'idrogramma con portata di picco a scelta, viene calcolata la
  1682.     'corrispondente portata di picco. In entrambi i casi, la subroutine determina il relativo idrogramma per interpolazione tra i 2 adiacenti tra i 24 calcolati, rispetto alla portata di picco individuata. nel caso in cui
  1683.     'l'idrogramma di progetto coincida con uno dei 24 calcolati, non effettua interpolazioni ma considera quello.
  1684.     'il metodo utilizzato per i calcoli è di tipo grafico. essenzialmente, sui grafici, ad ogni pixel corrisponde una coppia di valori (ora,portata). quando per esempio viene chiesta la Soglia, si sta visualizzando il grafico
  1685.     'in cui sono riportati tutti i 24 idrogrammi, i cui punti corrispondenti alle rispettive portate di picco sono uniti da una spezzata gialla disegnata dalla subroutine DisegnaLinea. quando viene inserita una Soglia, la
  1686.     'subroutine esegue queste operazioni:
  1687.     '- prende in ascissa l'ora 1 e analizza la retta X=1, partendo da Y=0, avanzando pixel per pixel: (1,0), (1,1), (1,2), (1,3),...;
  1688.     '- quando trova un pixel giallo, lo interroga sul suo valore di portata.
  1689.     '- passa all'ora 2 e ripete il meccanismo fino a che non trova un pixel giallo e lo interroga sul suo valore di portata;
  1690.     '- confronta la portata di picco dell'ora 1 con quella dell'ora 2;
  1691.     '- se la portata di picco dell'ora 1 aumentata percentualmente della Soglia è maggiore della portata di picco dell'ora 2, si ferma e considera come ora di picco di progetto quella dell'ora 1, se no ripete confrontando
  1692.     '  l'ora 2 con l'ora 3;
  1693.     '- quando si ferma significa che ha trovato l'ora di picco corrispondente all'idrogramma di progetto, con la relativa portata di picco;
  1694.     '- considera i 2 idrogrammi di calcolo, tra i 24 calcolati, adiacenti alla portata di picco individuata e da ciascuno crea un un nuovo idrogramma (non visibile all'utente), con un colore diverso da quelli presenti sul
  1695.     '  grafico visibile (colore1 e colore2), in modo che i rispettivi picchi coincidano con il punto di picco di progetto precedentemente individuato;
  1696.     '- analizza la retta Y=1 procedendo pixel per pixel: (0,1), (1,1), (2,1), (3,1),...;
  1697.     '- quando trova colore1 o colore2, interroga il pixel sul suo valore (ora1, portata) e prosegue, fino a che non trova colore2 o colore1 e interroga il pixel sul suo valore (ore2,portata), pertanto si ha un valore di portata
  1698.     '  a cui sono associate 2 ore;
  1699.     '- calcola la media tra ore1 e ore2, ottenendo così un'unica coppia (ora,portata), che viene memorizzata nel vettore dell'idrogramma in corso di calcolo;
  1700.     '- incrementa in ordinana di un pixel, analizzando la retta Y=2 analogamente a prima e ripete per Y=3,4,... fino a che Y non corrisponde al valore della portata di picco;
  1701.     '- ripete l'algoritmo decrementando Y, fino a che non arriva a Y=0;
  1702.     '- al temine di queste operazioni, vi sono N coppie di valori (ore, portata), che rappresentano l'idrogramma di progetto;
  1703.     '- l'idrogramma è visualizzato sullo schermo;
  1704.     '- l'idrogramma così ottenuto però presenta centinaia di valori, in quanto costruito pixel per pixel e quindi esso viene infine discretizzato, in modo da ottenere 50 coppie di valori, come per i 24 idrogrammi calcolati.
  1705.     'Per il calcolo dell'idrogramma a scelta, viene utilizzato un procedimento analogo.
  1706.  
  1707.     SHARED dx%, dy%
  1708.     SHARED dx!, dy!
  1709.     SHARED soglia%%
  1710.  
  1711.     DIM soglia!
  1712.     DIM test~`
  1713.  
  1714.     REDIM _PRESERVE y%(i%)
  1715.  
  1716.     _DEST schermo&
  1717.     SELECT CASE VisualizzaIeto%%
  1718.         CASE IS = 1
  1719.             INPUT "- Inserire la soglia percentuale S per il calcolo dell'idrogramma di progetto e illustrata nella prima schermata (INVIO o 0 per tralasciare): ", soglia%%
  1720.             soglia! = soglia%% / 100
  1721.             _DEST immagine&
  1722.             _SOURCE immagine&
  1723.             CALL ScalaOrigine(0, 1, 0, 0, immagine&)
  1724.             i% = 0
  1725.             y%(1) = dy%
  1726.             DO
  1727.                 i% = i% + 1
  1728.                 REDIM _PRESERVE y%(i%)
  1729.                 DO
  1730.                     IF POINT(dx! + i%, PMAP(y%(i%), 3)) = giallo& THEN EXIT DO
  1731.                     y%(i%) = y%(i%) - 1
  1732.                 LOOP
  1733.                 IF i% > 1 THEN
  1734.                     IF PMAP(y%(i%), 3) < (1 + soglia!) * PMAP(y%(i% - 1), 3) THEN
  1735.                         test~` = 1
  1736.                         EXIT DO
  1737.                     ELSE
  1738.                         test~` = 0
  1739.                     END IF
  1740.                 END IF
  1741.             LOOP UNTIL i% = INT(X3!)
  1742.             SELECT CASE test~`
  1743.                 CASE IS = 1
  1744.                     ore!(1) = i% - 1
  1745.                     REDIM _PRESERVE y%(1 TO UBOUND(y%) - 1)
  1746.                     portata!(1) = PMAP(y%(UBOUND(y%)), 3) - dy!
  1747.                     CALL DisegnaValore(ore!(1), portata!(1), trasparente&, trasparente&, bianco&)
  1748.                     _DEST schermo&
  1749.                 CASE IS = 0
  1750.                     _DEST schermo&
  1751.                     CLS 2
  1752.                     SELECT CASE soglia%%
  1753.                         CASE IS = 0
  1754.                             PRINT "Verr… considerato come idrogramma di progetto quello relativo alla portata di picco massima."
  1755.                         CASE ELSE
  1756.                             PRINT "La soglia scelta non permette di individuare, all'interno del campo, la corrispondente portata di picco. Verr… considerato come idrogramma di progetto quello relativo alla portata di picco massima."
  1757.                             soglia%% = 0
  1758.                     END SELECT
  1759.                     portata!(1) = Y!
  1760.                     ore!(1) = X3!
  1761.             END SELECT
  1762.         CASE IS = 2
  1763.             test~` = 0
  1764.             portata!(1) = Y!
  1765.             ore!(1) = X3!
  1766.             IF esc~` = 1 THEN
  1767.                 tipo%% = 1
  1768.                 GOSUB interpola
  1769.                 EXIT SUB
  1770.             END IF
  1771.             PRINT "Verr… considerato come idrogramma di progetto quello relativo alla portata di picco massima."
  1772.     END SELECT
  1773.     tipo%% = 1
  1774.     _DEST immagine&
  1775.     LOCATE 2, _WIDTH(immagine&) \ 8 - 27: COLOR bianco&: PRINT "Legenda:"
  1776.     LOCATE 4, _WIDTH(immagine&) \ 8 - 27: COLOR azzurro&: PRINT "[Idrogramma di progetto]": COLOR bianco&
  1777.     GOSUB interpola
  1778.     tipo%% = 2
  1779.     CALL DisegnaPortata(X1!, immagine&, destinazione&)
  1780.     IF ore!(2) <> 0 THEN
  1781.         test~` = 1
  1782.         _DEST immagine&
  1783.         LOCATE 6, _WIDTH(immagine&) \ 8 - 27: COLOR viola&: PRINT "[Idrogramma corrispondente"
  1784.         LOCATE , _WIDTH(immagine&) \ 8 - 27: PRINT "all'ora  di picco  scelta]": COLOR bianco&
  1785.         GOSUB interpola
  1786.     END IF
  1787.     EXIT SUB
  1788.     '--------------------------------------------------------------------------------------------------------------------------------------------------
  1789.     interpola:
  1790.     'routine che crea i 2 idrogrammi di passaggio descritti precedentemente ed effettua l'interpolazione per la determinazione dell'idrogramma di progetto e di quello corrispondente all'ora di picco a scelta.
  1791.  
  1792.     DIM x%(2)
  1793.     DIM y%
  1794.     DIM k(2) AS idrogramma
  1795.     DIM costruisci(50, 2) AS idrogramma
  1796.     DIM max%
  1797.     DIM originale&
  1798.  
  1799.     originale& = _COPYIMAGE(immagine&)
  1800.     _SOURCE immagine&
  1801.     CALL ScalaOrigine(0, 1, 0, 0, immagine&)
  1802.     SELECT CASE test~`
  1803.         CASE IS = 0
  1804.             FOR i% = 1 TO 50
  1805.                 REDIM _PRESERVE idrogramma1(i%) AS idrogramma
  1806.                 REDIM _PRESERVE IdroPixel1(i%) AS idrogramma
  1807.                 idrogramma1(i%).ore = idrogrammi1a24(VisualizzaIeto%%, IdroMaxieto%%(VisualizzaIeto%%), i%, 1).ore
  1808.                 idrogramma1(i%).portata = idrogrammi1a24(VisualizzaIeto%%, IdroMaxieto%%(VisualizzaIeto%%), i%, 1).portata
  1809.                 IdroPixel1(i%).ore = idrogramma1(i%).ore
  1810.                 IdroPixel1(i%).portata = idrogramma1(i%).portata
  1811.             NEXT i%
  1812.             FinePioggiaIdrogrammi1e2(tipo%%).ore = FinePioggiaIdrogrammi1a24(VisualizzaIeto%%, IdroMaxieto%%(VisualizzaIeto%%), 1).ore
  1813.         CASE IS = 1
  1814.             z%% = 2
  1815.             DO
  1816.                 IF MassimiIdrogrammi1a24(VisualizzaIeto%%, z%%, 1).ore > ore!(tipo%%) THEN
  1817.                     k(1).ore = ore!(tipo%%) / MassimiIdrogrammi1a24(VisualizzaIeto%%, z%% - 1, 1).ore
  1818.                     k(1).portata = portata!(tipo%%) / MassimiIdrogrammi1a24(VisualizzaIeto%%, z%% - 1, 1).portata
  1819.                     k(2).ore = ore!(tipo%%) / MassimiIdrogrammi1a24(VisualizzaIeto%%, z%%, 1).ore
  1820.                     k(2).portata = portata!(tipo%%) / MassimiIdrogrammi1a24(VisualizzaIeto%%, z%%, 1).portata
  1821.                     EXIT DO
  1822.                 ELSE
  1823.                     z%% = z%% + 1
  1824.                 END IF
  1825.             LOOP
  1826.             FOR i% = 1 TO 50
  1827.                 costruisci(i%, 1).ore = k(1).ore * idrogrammi1a24(VisualizzaIeto%%, z%% - 1, i%, 1).ore
  1828.                 costruisci(i%, 1).portata = k(1).portata * idrogrammi1a24(VisualizzaIeto%%, z%% - 1, i%, 1).portata
  1829.                 costruisci(i%, 2).ore = k(2).ore * idrogrammi1a24(VisualizzaIeto%%, z%%, i%, 1).ore
  1830.                 costruisci(i%, 2).portata = k(2).portata * idrogrammi1a24(VisualizzaIeto%%, z%%, i%, 1).portata
  1831.             NEXT i%
  1832.             FinePioggiaIdrogrammi1e2(tipo%%).ore = (costruisci(PassiFinePioggia1a24%%(z%% - 1), 1).ore + costruisci(PassiFinePioggia1a24%%(z%%), 2).ore) / 2
  1833.             _DEST immagine&
  1834.             FOR n% = 1 TO 2
  1835.                 IF n% = 1 THEN colore& = pastello&
  1836.                 IF n% = 2 THEN colore& = viola&
  1837.                 FOR i% = 1 TO 50
  1838.                     IF i% = 1 THEN LINE (dx!, dy!)-(dx! + costruisci(i%, n%).ore, dy! + costruisci(i%, n%).portata), colore&
  1839.                     IF i% > 1 THEN LINE (dx! + costruisci(i% - 1, n%).ore, dy! + costruisci(i% - 1, n%).portata)-(dx! + costruisci(i%, n%).ore, dy! + costruisci(i%, n%).portata), colore&
  1840.                 NEXT i%
  1841.             NEXT n%
  1842.             i% = 0
  1843.             y% = PMAP(dy!, 1)
  1844.             DO
  1845.                 i% = i% + 1
  1846.                 SELECT CASE tipo%%
  1847.                     CASE IS = 1
  1848.                         REDIM _PRESERVE IdroPixel1(i%) AS idrogramma
  1849.                     CASE IS = 2
  1850.                         REDIM _PRESERVE IdroPixel2(i%) AS idrogramma
  1851.                 END SELECT
  1852.                 x%(1) = PMAP(dx!, 0)
  1853.                 x%(2) = PMAP(dx!, 0)
  1854.                 DO
  1855.                     IF POINT(PMAP(x%(2), 2), PMAP(y%, 3)) = viola& THEN EXIT DO
  1856.                     x%(2) = x%(2) + 1
  1857.                 LOOP
  1858.                 DO
  1859.                     IF POINT(PMAP(x%(1), 2), PMAP(y%, 3)) = pastello& THEN EXIT DO
  1860.                     x%(1) = x%(1) + 1
  1861.                 LOOP UNTIL PMAP(x%(1), 2) >= dx! + ore!(tipo%%)
  1862.                 IF PMAP(x%(1), 2) >= dx! + ore!(tipo%%) THEN x%(1) = x%(2)
  1863.                 SELECT CASE tipo%%
  1864.                     CASE IS = 1
  1865.                         IdroPixel1(i%).ore = (PMAP(x%(1), 2) + PMAP(x%(2), 2)) / 2 - dx!
  1866.                         IdroPixel1(i%).portata = PMAP(y%, 3) - dy!
  1867.                     CASE IS = 2
  1868.                         IdroPixel2(i%).ore = (PMAP(x%(1), 2) + PMAP(x%(2), 2)) / 2 - dx!
  1869.                         IdroPixel2(i%).portata = PMAP(y%, 3) - dy!
  1870.                 END SELECT
  1871.                 y% = y% - 1
  1872.             LOOP UNTIL y% = PMAP(dy! + portata!(tipo%%), 1)
  1873.             max% = i%
  1874.             i% = i% - 1
  1875.             y% = PMAP(dy! + portata!(tipo%%), 1)
  1876.             DO
  1877.                 i% = i% + 1
  1878.                 SELECT CASE tipo%%
  1879.                     CASE IS = 1
  1880.                         REDIM _PRESERVE IdroPixel1(i%) AS idrogramma
  1881.                     CASE IS = 2
  1882.                         REDIM _PRESERVE IdroPixel2(i%) AS idrogramma
  1883.                 END SELECT
  1884.                 x%(1) = PMAP(dx! + ore!(tipo%%), 0)
  1885.                 x%(2) = PMAP(dx! + ore!(tipo%%), 0)
  1886.                 DO
  1887.                     IF POINT(PMAP(x%(2), 2), PMAP(y%, 3)) = viola& THEN EXIT DO
  1888.                     x%(2) = x%(2) + 1
  1889.                 LOOP
  1890.                 DO
  1891.                     IF POINT(PMAP(x%(1), 2), PMAP(y%, 3)) = pastello& THEN EXIT DO
  1892.                     x%(1) = x%(1) + 1
  1893.                 LOOP UNTIL PMAP(x%(1), 2) >= X2! * 1.15
  1894.                 IF PMAP(x%(1), 2) >= X2! * 1.15 THEN x%(1) = x%(2)
  1895.                 SELECT CASE tipo%%
  1896.                     CASE IS = 1
  1897.                         IdroPixel1(i%).ore = (PMAP(x%(1), 2) + PMAP(x%(2), 2)) / 2 - dx!
  1898.                         IdroPixel1(i%).portata = PMAP(y%, 3) - dy!
  1899.                     CASE IS = 2
  1900.                         IdroPixel2(i%).ore = (PMAP(x%(1), 2) + PMAP(x%(2), 2)) / 2 - dx!
  1901.                         IdroPixel2(i%).portata = PMAP(y%, 3) - dy!
  1902.                 END SELECT
  1903.                 y% = y% + 1
  1904.                 IF costruisci(50, 1).portata > costruisci(50, 2).portata THEN IF PMAP(y%, 3) - dy! < costruisci(50, 1).portata THEN EXIT DO
  1905.                 IF costruisci(50, 1).portata <= costruisci(50, 2).portata THEN IF PMAP(y%, 3) - dy! < costruisci(50, 2).portata THEN EXIT DO
  1906.             LOOP UNTIL y% = PMAP(dy!, 1)
  1907.             SELECT CASE tipo%%
  1908.                 CASE IS = 1
  1909.                     passo% = UBOUND(IdroPixel1) \ 50
  1910.                     i% = 0
  1911.                     DO
  1912.                         i% = i% + 1
  1913.                         REDIM _PRESERVE idrogramma1(i%) AS idrogramma
  1914.                         IF i% * passo% >= max% THEN EXIT DO
  1915.                         idrogramma1(i%).ore = IdroPixel1(i% * passo%).ore
  1916.                         idrogramma1(i%).portata = IdroPixel1(i% * passo%).portata
  1917.                     LOOP
  1918.                     idrogramma1(i%).ore = ore!(1)
  1919.                     idrogramma1(i%).portata = portata!(1)
  1920.                     DO
  1921.                         i% = i% + 1
  1922.                         IF i% * passo% >= UBOUND(IdroPixel1) THEN EXIT DO
  1923.                         REDIM _PRESERVE idrogramma1(i%) AS idrogramma
  1924.                         idrogramma1(i%).ore = IdroPixel1(i% * passo%).ore
  1925.                         idrogramma1(i%).portata = IdroPixel1(i% * passo%).portata
  1926.                     LOOP UNTIL i% = 50
  1927.                 CASE IS = 2
  1928.                     passo% = UBOUND(IdroPixel2) \ 50
  1929.                     IF passo% >= 1 THEN
  1930.                         i% = 0
  1931.                         DO
  1932.                             i% = i% + 1
  1933.                             REDIM _PRESERVE idrogramma2(i%) AS idrogramma
  1934.                             IF i% * passo% >= max% THEN EXIT DO
  1935.                             idrogramma2(i%).ore = IdroPixel2(i% * passo%).ore
  1936.                             idrogramma2(i%).portata = IdroPixel2(i% * passo%).portata
  1937.                         LOOP
  1938.                         idrogramma2(i%).ore = ore!(2)
  1939.                         idrogramma2(i%).portata = portata!(2)
  1940.                         DO
  1941.                             i% = i% + 1
  1942.                             IF i% * passo% >= UBOUND(IdroPixel2) THEN EXIT DO
  1943.                             REDIM _PRESERVE idrogramma2(i%) AS idrogramma
  1944.                             idrogramma2(i%).ore = IdroPixel2(i% * passo%).ore
  1945.                             idrogramma2(i%).portata = IdroPixel2(i% * passo%).portata
  1946.                         LOOP UNTIL i% = 50
  1947.                     ELSE
  1948.                         FOR i% = 1 TO UBOUND(IdroPixel2)
  1949.                             REDIM _PRESERVE idrogramma2(i%) AS idrogramma
  1950.                             idrogramma2(i%).ore = IdroPixel2(i%).ore
  1951.                             idrogramma2(i%).portata = IdroPixel2(i%).portata
  1952.                         NEXT i%
  1953.                     END IF
  1954.             END SELECT
  1955.             immagine& = _COPYIMAGE(originale&)
  1956.     END SELECT
  1957.     _DEST immagine&
  1958.     IF tipo%% = 1 THEN colore& = azzurro&
  1959.     IF tipo%% = 2 THEN colore& = viola&
  1960.     SELECT CASE tipo%%
  1961.         CASE IS = 1
  1962.             FOR i% = 1 TO UBOUND(IdroPixel1)
  1963.                 IF i% = 1 THEN
  1964.                     LINE (dx!, dy!)-(dx! + IdroPixel1(i%).ore, dy! + IdroPixel1(i%).portata), colore&
  1965.                 ELSE
  1966.                     LINE (dx! + IdroPixel1(i% - 1).ore, dy! + IdroPixel1(i% - 1).portata)-(dx! + IdroPixel1(i%).ore, dy! + IdroPixel1(i%).portata), colore&
  1967.                 END IF
  1968.                 CIRCLE (dx! + IdroPixel1(i%).ore, dy! + IdroPixel1(i%).portata), PMAP(1, 2), colore&
  1969.                 PAINT (dx! + IdroPixel1(i%).ore, dy! + IdroPixel1(i%).portata), colore&
  1970.             NEXT i%
  1971.         CASE IS = 2
  1972.             FOR i% = 1 TO UBOUND(IdroPixel2)
  1973.                 IF i% = 1 THEN
  1974.                     LINE (dx!, dy!)-(dx! + IdroPixel2(i%).ore, dy! + IdroPixel2(i%).portata), colore&
  1975.                 ELSE
  1976.                     LINE (dx! + IdroPixel2(i% - 1).ore, dy! + IdroPixel2(i% - 1).portata)-(dx! + IdroPixel2(i%).ore, dy! + IdroPixel2(i%).portata), colore&
  1977.                 END IF
  1978.                 CIRCLE (dx! + IdroPixel2(i%).ore, dy! + IdroPixel2(i%).portata), PMAP(1, 2), colore&
  1979.                 PAINT (dx! + IdroPixel2(i%).ore, dy! + IdroPixel2(i%).portata), colore&
  1980.             NEXT i%
  1981.     END SELECT
  1982.     CALL DisegnaLinea(VisualizzaIeto%%, immagine&, giallo&, bianco&)
  1983.     _PUTIMAGE (0, 0), immagine&, destinazione&
  1984.     _PUTIMAGE ((DESKTOPWIDTH% - _WIDTH(destinazione&)), (DESKTOPHEIGHT% - _HEIGHT(destinazione&) - 16)), destinazione&, schermo&
  1985.     ERASE k, costruisci, x%
  1986.     _FREEIMAGE originale&
  1987.     RETURN
  1988. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1989. '--------------------------------------------------------------------------------------------------------------------------------------------------
  1990. SUB ScalaOrigine (scala~%, origine~%, X!, Y!, immagine&)
  1991.     'scala~%: se 1, attiva la routine scala, se 0, non l'attiva.
  1992.     'origine~%:  se 1, attiva la routine origine, se 0, non l'attiva.
  1993.     'X!: valore massimo in ascissa
  1994.     'Y!: valore massimo in ordinata.
  1995.     'immagine&: è l'immagine su cui viene fissata l'origine degli assi dalla routine origine.
  1996.     'subroutine che scala l'immagine tramite WINDOW. generalmente vengono eseguite entrambe le routine, tuttavia in certi casi il programma opera su immagini già scalate, per esempio quando compie operazioni grafiche su immagini
  1997.     'già scalate.
  1998.  
  1999.     SHARED dx%, dy%
  2000.     SHARED dx!, dy!
  2001.  
  2002.     DIM fattoreX!, fattoreY!
  2003.  
  2004.     fattoreX! = 1
  2005.     fattoreY! = 1
  2006.     IF scala~% = 0 AND origine~% = 1 THEN GOSUB origine
  2007.     IF scala~% = 1 AND origine~% = 1 THEN
  2008.         DO
  2009.             GOSUB scala
  2010.             GOSUB origine
  2011.             IF Y! * fattoreY! >= dy! + Y! + dy! + dy! THEN
  2012.                 IF X! * fattoreX! >= dx! + X! + dx! + dx! THEN
  2013.                     EXIT DO
  2014.                 ELSE
  2015.                     fattoreX! = fattoreX! + 0.01
  2016.                 END IF
  2017.             ELSE
  2018.                 fattoreY! = fattoreY! + 0.01
  2019.             END IF
  2020.         LOOP
  2021.     END IF
  2022.     EXIT SUB
  2023.     '--------------------------------------------------------------------------------------------------------------------------------------------------
  2024.     scala:
  2025.  
  2026.     WINDOW
  2027.     WINDOW (0, 0)-(X! * fattoreX!, Y! * fattoreY!)
  2028.     RETURN
  2029.     '--------------------------------------------------------------------------------------------------------------------------------------------------
  2030.     origine:
  2031.  
  2032.     dx% = 39
  2033.     dx! = PMAP(dx%, 2)
  2034.     dy% = _HEIGHT(immagine&) - 1 - dx%
  2035.     dy! = PMAP(dy%, 3)
  2036.     RETURN
  2037. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2038. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2039. SUB DisegnaAssi (X$, Y$, X!, Y!, immagine&, ColoreCartiglio&, ColoreAssi&, ColoreTacca&, ColoreNumeri&)
  2040.     'subroutine che disegna gli assi.
  2041.     'X$: titolo asse X.
  2042.     'Y$: titolo asse Y.
  2043.     'X!: valore massimo in ascissa.
  2044.     'Y!: valore massimo in ordinata.
  2045.  
  2046.     SHARED dx%, dy%
  2047.     SHARED dx!, dy!
  2048.  
  2049.     DIM x%, y%
  2050.     DIM taccaX!, taccaY!
  2051.  
  2052.     _DEST immagine&: CLS
  2053.     SELECT CASE X!
  2054.         CASE IS >= 12
  2055.             taccaX! = X! \ 6
  2056.         CASE IS <= 1
  2057.             taccaX! = 0.25
  2058.         CASE ELSE
  2059.             taccaX! = 0.5
  2060.     END SELECT
  2061.     SELECT CASE Y!
  2062.         CASE IS >= 12
  2063.             taccaY! = Y! \ 6
  2064.         CASE IS <= 1
  2065.             taccaY! = 0.25
  2066.         CASE ELSE
  2067.             taccaY! = 0.5
  2068.     END SELECT
  2069.     WINDOW
  2070.     LINE (0, 0)-(_WIDTH(immagine&) - 1, _HEIGHT(immagine&) - 1), ColoreCartiglio&, B
  2071.     CALL ScalaOrigine(1, 1, X!, Y!, immagine&)
  2072.     LINE (dx!, dy! + Y! + dy!)-(dx!, dy!), ColoreAssi&: LINE -(dx! + X! + dx!, dy!), ColoreAssi&
  2073.     PSET (dx!, dy! + Y! + dy!), ColoreAssi&: DRAW "F20": PSET (dx!, dy! + Y! + dy!), ColoreAssi&: DRAW "G20"
  2074.     PSET (dx! + X! + dx!, dy!), ColoreAssi&: DRAW "G20": PSET (dx! + X! + dx!, dy!), ColoreAssi&: DRAW "H20"
  2075.     COLOR ColoreNumeri&
  2076.     _PRINTSTRING (PMAP(dx! + X! + dx!, 0), dy%), X$
  2077.     _PRINTSTRING (dx%, PMAP(dy! + Y! + dy!, 1) - dx% \ 2), Y$
  2078.     _PRINTSTRING (dx% \ 4, dy% - 7), "0"
  2079.     i% = 1
  2080.     WHILE i% * taccaX! <= X!
  2081.         LINE (dx! + i% * taccaX!, PMAP(dy% + 5, 3))-(dx! + i% * taccaX!, PMAP(dy% - 5, 3)), ColoreTacca&
  2082.         x% = PMAP(dx! + i% * taccaX!, 0)
  2083.         _PRINTSTRING (x% - 3 * LEN(_TRIM$(STR$(i% * taccaX!))), _HEIGHT(immagine&) - 1 - dx% + 5), _TRIM$(STR$(i% * taccaX!))
  2084.         i% = i% + 1
  2085.     WEND
  2086.     i% = 1
  2087.     WHILE i% * taccaY! <= Y!
  2088.         LINE (PMAP(dx% - 5, 2), dy! + i% * taccaY!)-(PMAP(dx% + 5, 2), dy! + i% * taccaY!), ColoreTacca&
  2089.         y% = PMAP(dy! + i% * taccaY!, 1)
  2090.         _PRINTSTRING (dx% \ 4, y% - 7), _TRIM$(STR$(i% * taccaY!))
  2091.         i% = i% + 1
  2092.     WEND
  2093. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2094. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2095. SUB DisegnaValore (X!, Y!, ColoreLinea&, ColorePunto&, ColoreTesto&)
  2096.     'subroutine che disegna e scrive sul grafico il punto con valore (X!,Y!) e disegna 2 linee tratteggiate fino agli assi.
  2097.  
  2098.     SHARED dx%, dy%
  2099.     SHARED dx!, dy!
  2100.  
  2101.     DIM x%, y%
  2102.  
  2103.     CIRCLE (dx! + X!, dy! + Y!), PMAP(3, 2), ColorePunto&
  2104.     PAINT (dx! + X! + PMAP(0.5, 2), dy! + Y! + PMAP(0.5, 2)), ColorePunto&
  2105.     LINE (dx!, dy! + Y!)-(dx! + X!, dy! + Y!), ColoreLinea&, , 65520
  2106.     LINE -(dx! + X!, dy!), ColoreLinea&, , 65520
  2107.     x% = PMAP(dx! + X!, 0)
  2108.     y% = PMAP(dy! + Y!, 1)
  2109.     COLOR ColoreTesto&
  2110.     _PRINTSTRING (x% + 4, y% - 16), "(" + _TRIM$(STR$(Arrotonda!(X!))) + ";" + _TRIM$(STR$(Arrotonda!(Y!))) + ")"
  2111. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2112. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2113. SUB DisegnaPortata (X!, immagine&, destinazione&)
  2114.     'subroutine che utilizza la subroutine DisegnaValore per disegnare e scrivere sul grafico il punto con valore (X!,Y!). le linee tratteggiate, però, sono disegnate in modo animato, anziché visualizzate istantaneamente.
  2115.     'per la determinazione della portata (Y!), chiede come input l'ora (X!) e procede cercando il pixel giallo, similmente a come spiegato per la subroutine CalcolaIdrogramma.
  2116.  
  2117.     SHARED dx%, dy%
  2118.     SHARED dx!, dy!
  2119.  
  2120.     DIM ore%%, minuti%%
  2121.     DIM x%, y%
  2122.  
  2123.     _DEST schermo&
  2124.     SELECT CASE tipo%%
  2125.         CASE IS <> 3
  2126.             DO
  2127.                 DO
  2128.                     DO
  2129.                         VIEW PRINT 2 TO 5
  2130.                         CLS 2
  2131.                         PRINT "- Digitare le ore e i minuti a scelta (>= 20 minuti e <= "; _TRIM$(STR$(INT(X!))); " ore e "; _TRIM$(STR$(INT((X! - INT(X!)) * 60) - 1)); " minuti) di cui viene calcolata la corrispondente portata di picco e relativo idrogramma (INVIO o 0 per tralasciare)."
  2132.                         PRINT "Ore:"
  2133.                         PRINT "Minuti:"
  2134.                         LOCATE 3, 9
  2135.                         INPUT "", ore%%
  2136.                     LOOP WHILE ore%% > INT(X!)
  2137.                     LOCATE , 9
  2138.                     INPUT "", minuti%%
  2139.                     ore!(tipo%%) = Arrotonda!(ore%% + minuti%% / 60)
  2140.                     IF ore!(tipo%%) = 0 THEN EXIT DO
  2141.                 LOOP WHILE ore!(tipo%%) >= Arrotonda!(X!)
  2142.                 VIEW PRINT 1 TO 4
  2143.                 IF ore!(tipo%%) = 0 THEN EXIT SUB
  2144.             LOOP WHILE ore!(tipo%%) < Arrotonda!(20 / 60)
  2145.         CASE IS = 3
  2146.             DO
  2147.                 DO
  2148.                     CLS 2
  2149.                     PRINT "- Digitare le ore e i minuti (<= "; _TRIM$(STR$(INT(X!))); " ore e "; _TRIM$(STR$(INT((X! - INT(X!)) * 60) - 1)); " minuti) di cui si vuole conoscere la portata (INVIO o 0 per tralasciare)."
  2150.                     PRINT "Ore:"
  2151.                     PRINT "Minuti:"
  2152.                     LOCATE 2, 9
  2153.                     INPUT "", ore%%
  2154.                 LOOP WHILE ore%% > INT(X!)
  2155.                 LOCATE , 9
  2156.                 INPUT "", minuti%%
  2157.                 ore!(tipo%%) = Arrotonda!(ore%% + minuti%% / 60)
  2158.                 IF ore!(tipo%%) = 0 THEN EXIT SUB
  2159.             LOOP WHILE ore!(tipo%%) >= Arrotonda(X!)
  2160.     END SELECT
  2161.     _DEST immagine&
  2162.     _SOURCE immagine&
  2163.     CALL ScalaOrigine(0, 1, 0, 0, immagine&)
  2164.     x% = PMAP(dx! + ore!(tipo%%), 0)
  2165.     y% = PMAP(dy!, 1)
  2166.     DO
  2167.         y% = y% - 1
  2168.         IF tipo%% = 3 THEN
  2169.             IF POINT(dx! + ore!(tipo%%), PMAP(y%, 3)) = azzurro& THEN
  2170.                 _DEST schermo&
  2171.                 EXIT SUB
  2172.             END IF
  2173.         END IF
  2174.         IF POINT(dx! + ore!(tipo%%), PMAP(y%, 3)) = giallo& THEN EXIT DO
  2175.         LINE (dx! + ore!(tipo%%), dy!)-(dx! + ore!(tipo%%), PMAP(y%, 3)), grigio&, , 65520
  2176.         _PUTIMAGE ((DESKTOPWIDTH% - _WIDTH(destinazione&)), (DESKTOPHEIGHT% - _HEIGHT(destinazione&) - 16)), immagine&, schermo&
  2177.     LOOP
  2178.     portata!(tipo%%) = PMAP(y%, 3) - dy!
  2179.     CALL DisegnaValore(ore!(tipo%%), portata!(tipo%%), trasparente&, trasparente&, bianco&)
  2180.     i% = 2
  2181.     DO
  2182.         x% = x% - 1
  2183.         IF POINT(PMAP(x%, 2), PMAP(y%, 3)) = bianco& THEN EXIT DO
  2184.         LINE (dx! + ore!(tipo%%), PMAP(y%, 3))-(PMAP(x%, 2), PMAP(y%, 3)), grigio&, , 65520
  2185.         _PUTIMAGE ((DESKTOPWIDTH% - _WIDTH(destinazione&)), (DESKTOPHEIGHT% - _HEIGHT(destinazione&) - 16)), immagine&, schermo&
  2186.     LOOP
  2187.     _DEST schermo&
  2188. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2189. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2190. SUB DisegnaLinea (visualizza%%, immagine&, ColoreLinea&, ColorePunto&)
  2191.     'subroutine che disegna una spezzata (gialla) che, partendo dall'origine, congiunge le portate di picco dei 24 idrogrammi di calcolo. tale spezzata gialla è quella che interrompe la ricerca del pixel giallo ad opera delle
  2192.     'subroutine CalcolaIdrogramma e DisegnaPortata.
  2193.     'visualizza%%: può assumere il valore di ieto%% o di VisualizzaIeto%%. quando la subroutine è interna ad un ciclo FOR ieto%%=1 to 2, assume valore ieto%%. quando invece è chiamata per esempio per ritracciare la linea gialla
  2194.     'sul grafico su cui è stato disegnato l'idrogramma di progetto e/o corrispondente all'ora di picco scelta, assume valore VisualizzaIeto%%. Il ritracciamento della linea gialla è operato al termine della routine "interpola"
  2195.     'della subroutine CalcolaIdrogramma, per il motivo ivi illustrato.
  2196.  
  2197.     SHARED dx%, dy%
  2198.     SHARED dx!, dy!
  2199.  
  2200.     CALL ScalaOrigine(0, 1, 0, 0, immagine&)
  2201.     _SOURCE immagine&
  2202.     FOR z%% = 1 TO 24
  2203.         CIRCLE (dx! + MassimiIdrogrammi1a24(visualizza%%, z%%, 1).ore, dy! + MassimiIdrogrammi1a24(visualizza%%, z%%, 1).portata), PMAP(3, 2), ColorePunto&
  2204.         PAINT (dx! + MassimiIdrogrammi1a24(visualizza%%, z%%, 1).ore - PMAP(2.5, 2), dy! + MassimiIdrogrammi1a24(visualizza%%, z%%, 1).portata), ColorePunto&
  2205.         IF z%% = 1 THEN
  2206.             LINE (dx!, dy!)-(dx! + MassimiIdrogrammi1a24(visualizza%%, z%%, 1).ore, dy! + MassimiIdrogrammi1a24(visualizza%%, z%%, 1).portata), ColoreLinea&
  2207.         ELSE
  2208.             LINE (dx! + MassimiIdrogrammi1a24(visualizza%%, z%% - 1, 1).ore, dy! + MassimiIdrogrammi1a24(visualizza%%, z%% - 1, 1).portata)-(dx! + MassimiIdrogrammi1a24(visualizza%%, z%%, 1).ore, dy! + MassimiIdrogrammi1a24(visualizza%%, z%%, 1).portata), ColoreLinea&
  2209.         END IF
  2210.     NEXT z%%
  2211. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2212. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2213. SUB Dati (binario%%, colonna%)
  2214.     'subroutine che scrive i dati. le tipologie di dati sono 9:
  2215.     '1) Tempo di ritorno;
  2216.     '2) CN(III);
  2217.     '3) Contenuto idrico massimo del terreno;
  2218.     '4) Perdite iniziali;
  2219.     '5) Tempo di corrivazione;
  2220.     '6) Tipo di ietogrammi di calcolo;
  2221.     '7) Idrogramma di calcolo;
  2222.     '8) Durata della pioggia;
  2223.     '9) Passo temporale.
  2224.     'le prime 5 sono sempre scritte ogni volta che viene richiamata la subroutine. le rimanenti 4 sono scritte a seconda del valore della variabile binario%%.
  2225.     'binario%%: è un numero decimale che può assumere valore massimo 15=1*2^3+1*2^2+1*2^1+1*2^0=8+4+2+1, che corrisponde al numero binario 1111, dove ogni 1 corrisponde a considerare VERA la condizione di visualizzare la
  2226.     'corrispondente tipologia. tale condizione è verificata tramite l'operatore AND.
  2227.     'per esempio, supponendo di voler visualizzare:
  2228.     '- Idrogramma di calcolo;
  2229.     '- Passo temporale.
  2230.     'il numero binario dovrà essere 0101, cioè 0*2^3+1*2^2+0*2^1+1*2^0=4+1=5.
  2231.     'quindi si avrà:
  2232.     '- Tipo di ietogrammi di calcolo:
  2233.     '1000 AND
  2234.     '0101 FALSO
  2235.     '- Idrogramma di calcolo:
  2236.     '0100 AND
  2237.     '0101 VERO
  2238.     '- Durata della pioggia:
  2239.     '0010 AND
  2240.     '0101 FALSO
  2241.     '- Passo temporale:
  2242.     '0001 AND
  2243.     '0101 VERO
  2244.     'colonna%: variabile che permette di posizionare la scrittura dei dati nel punto desiderato.
  2245.  
  2246.     SHARED T$, CNIII!, S2!, Ia!, tc!, dt!()
  2247.  
  2248.     LOCATE , colonna%: PRINT "- Tempo di ritorno:"
  2249.     LOCATE , colonna% + 2: PRINT "T = "; T$; ";"
  2250.     LOCATE , colonna%: PRINT "- CN(III) = "; _TRIM$(STR$(Arrotonda!(CNIII!))); ";"
  2251.     LOCATE , colonna%: PRINT "- Contenuto idrico massimo del terreno:"
  2252.     LOCATE , colonna% + 2: PRINT "S = "; _TRIM$(STR$(Arrotonda!(S2!))); " mm;"
  2253.     LOCATE , colonna%: PRINT "- Perdite iniziali:"
  2254.     LOCATE , colonna% + 2: PRINT "Ia = "; _TRIM$(STR$(Arrotonda!(Ia!))); " mm;"
  2255.     LOCATE , colonna%: PRINT "- Tempo di corrivazione:"
  2256.     LOCATE , colonna% + 2: PRINT "tc = "; _TRIM$(STR$(Arrotonda!(tc!))); " ore = "; _TRIM$(STR$(INT(tc!))); " ore e "; _TRIM$(STR$(CINT(60 * (tc! - INT(tc!))))); " minuti."
  2257.     IF binario%% AND 2 ^ 3 THEN
  2258.         LOCATE , colonna%: PRINT "- Tipo di ietogrammi di calcolo:"
  2259.         LOCATE , colonna% + 2
  2260.         IF ieto%% = 1 THEN PRINT "CHICAGO;"
  2261.         IF ieto%% = 2 THEN PRINT "COSTANTE;"
  2262.         IF ieto%% > 2 THEN
  2263.             IF VisualizzaIeto%% = 1 THEN PRINT "CHICAGO;"
  2264.             IF VisualizzaIeto%% = 2 THEN PRINT "COSTANTE;"
  2265.         END IF
  2266.     END IF
  2267.     IF binario%% AND 2 ^ 2 THEN
  2268.         LOCATE , colonna%: PRINT "- Idrogramma di calcolo:"
  2269.         LOCATE , colonna% + 2: PRINT "n. "; _TRIM$(STR$(z%%)); ";"
  2270.     END IF
  2271.     IF binario%% AND 2 ^ 1 THEN
  2272.         LOCATE , colonna%: PRINT "- Durata della pioggia:"
  2273.         LOCATE , colonna% + 2: PRINT "d = "; _TRIM$(STR$(CoefficientiDiscretizzazioneTemporale(z%%).N)); " volte tc = "; _TRIM$(STR$(Arrotonda!(CoefficientiDiscretizzazioneTemporale(z%%).N * tc!))); " ore = "
  2274.         LOCATE , colonna% + 2: PRINT "= "; _TRIM$(STR$(INT(CoefficientiDiscretizzazioneTemporale(z%%).N * tc!))); " ore e "; _TRIM$(STR$(CINT(60 * (CoefficientiDiscretizzazioneTemporale(z%%).N * tc! - INT(CoefficientiDiscretizzazioneTemporale(z%%).N * tc!))))); " minuti;"
  2275.     END IF
  2276.     IF binario%% AND 2 ^ 0 THEN
  2277.         LOCATE , colonna%: PRINT "- Passo temporale:"
  2278.         LOCATE , colonna% + 2: PRINT "dt = "; _TRIM$(STR$(Arrotonda!(dt!(z%%)))); " ore = "; _TRIM$(STR$(INT(dt!(z%%)))); " ore e "; _TRIM$(STR$(CINT(60 * (dt!(z%%) - INT(dt!(z%%)))))); " minuti."
  2279.     END IF
  2280. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2281. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2282. SUB Tabella (k%%, n%%, ca1&, t1$, ca2&, t2$, ca3&, t3$, ca4&, t4$, ca5&, t5$, ca6&, t6$, ca7&, t7$, ca8&, t8$, binario%%, finecolonna%%, cb1&, v1!, cb2&, v2!, cb3&, v3!, cb4&, v4!, cb5&, v5!, cb6&, v6!, cb7&, v7!)
  2283.     'subroutine che scrive i titoli delle colonne della tabella e i dati della tabella stessa, riga per riga. gli elementi passati nella subroutine sono inseriti dentro i vettori c&(), v!(). i valori di v!() sono inoltre
  2284.     'convertiti in stringhe e caricati dentro il vettore t$().
  2285.     'k%%: la subroutine Tabella è inserita in cicli FOR e scrive una riga per volta. k%% è il contatore del ciclo del codice (che può essere i%, z%%,...) passato nella subroutine.
  2286.     'n%%: è un valore che dipende dallo schermo e rappresenta lo STEP del ciclo FOR. se lo schermo è sufficientemente grande da contenere tutti i valori della tabella (massimo 50) è = 1, se no, è = 2. k%% e n%%, hanno inizialmente
  2287.     'lo stesso valore. cioè, se lo schermo è grande, il ciclo parte dal valore 1, con STEP 1 e arriva per esempio a 50. Se lo schermo non è abbastanza grande, il ciclo parte da 2 con STEP 2 e arriva per esempio a 50.
  2288.     'binario%%: è un numero decimale che può assumere valore massimo 127=1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+1*2^1+1*2^0=64+32+16+8+4+2+1, che corrisponde al numero binario 1111111. ad ogni cifra corrisponde una colonna e ad ogni 1
  2289.     'corrisponde la colonna in cui l'ora dev'essere nel formato ore:min.
  2290.     'finecolonna%: stabilisce qual è la prima colonna in cui scrivere il primo "¦" della riga. poiché la colonna è larga 8 spazi, di cui l'ultimo è il carattere "¦", il primo "¦" è scritto alla fine della colonna indicata dalla
  2291.     'variabile. sembrerebbe superfluo dover specificare che il primo "¦" della riga sia quello della prima colonna. infatti generalmente è così. ma quando si visualizzano i dati relativi all'idrogramma di progetto o dell'ora di
  2292.     'picco a scelta, le ultime 4 colonne sono il proseguimento delle prime. per cui il programma, compilate le prime 4 colonne, esce dalla subroutine, che viene poi rieseguita. la colonna corretta in cui spostarsi è dunque
  2293.     'definita da questa variabile e sarà 5, non 1.
  2294.  
  2295.     DIM c&(8), t$(8), v!(7)
  2296.  
  2297.     SHARED FineColonna%()
  2298.  
  2299.     c&(1) = ca1&: c&(2) = ca2&: c&(3) = ca3&: c&(4) = ca4&: c&(5) = ca5&: c&(6) = ca6&: c&(7) = ca7&: c&(8) = ca8&: t$(1) = t1$: t$(2) = t2$: t$(3) = t3$: t$(4) = t4$: t$(5) = t5$: t$(6) = t6$: t$(7) = t7$: t$(8) = t8$
  2300.     IF k%% = n%% THEN
  2301.         FOR p%% = 1 TO 8
  2302.             COLOR c&(p%%): PRINT t$(p%%);
  2303.             IF t$(p%%) = "-" THEN FineColonna%(p%%) = POS(0) - 1 + 4
  2304.             IF t$(p%%) <> "-" THEN FineColonna%(p%%) = POS(0) - (LEN(t$(p%%)) + 1) + LarghezzaColonna%%
  2305.             IF p%% <= 7 THEN IF LEN(t$(p%% + 1)) > 0 THEN COLOR grigio&: LOCATE , FineColonna%(p%%): PRINT "³";
  2306.         NEXT p%%
  2307.         PRINT
  2308.     END IF
  2309.     c&(1) = cb1&: c&(2) = cb2&: c&(3) = cb3&: c&(4) = cb4&: c&(5) = cb5&: c&(6) = cb6&: c&(7) = cb7&: c&(8) = 0: v!(1) = v1!: v!(2) = v2!: v!(3) = v3!: v!(4) = v4!: v!(5) = v5!: v!(6) = v6!: v!(7) = v7!
  2310.     t$(1) = _TRIM$(STR$(Arrotonda!(v!(1)))): t$(2) = _TRIM$(STR$(Arrotonda!(v!(2)))): t$(3) = _TRIM$(STR$(Arrotonda!(v!(3)))): t$(4) = _TRIM$(STR$(Arrotonda!(v!(4)))): t$(5) = _TRIM$(STR$(Arrotonda!(v!(5)))):_
  2311.     t$(6) = _TRIM$(STR$(Arrotonda!(v!(6)))): t$(7) = _TRIM$(STR$(Arrotonda!(v!(7)))):t$(8) = ""
  2312.     FOR p%% = UBOUND(v!) - 1 TO 0 STEP -1
  2313.         IF binario%% AND 2 ^ p%% THEN t$(UBOUND(v!) - p%%) = _TRIM$(STR$(INT(v!(UBOUND(v!) - p%%)))) + ":" + _TRIM$(STR$(CINT(60 * (v!(UBOUND(v!) - p%%) - INT(v!(UBOUND(v!) - p%%))))))
  2314.     NEXT p%%
  2315.     LOCATE , FineColonna%(finecolonna%%) - 4
  2316.     FOR p%% = 1 TO 7
  2317.         COLOR c&(p%%): PRINT t$(p%%);
  2318.         IF p%% <= 6 THEN IF c&(p%% + 1) = 0 THEN EXIT FOR
  2319.         COLOR grigio&: LOCATE , FineColonna%(finecolonna%% - 1 + p%%): PRINT "³";
  2320.     NEXT p%%
  2321.     PRINT
  2322. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2323. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2324. SUB CreaImmagine (image&, filename$) 'subroutine presa da "http://www.qb64.org/wiki/SAVEIMAGE"
  2325.     'subroutine che legge le immagini generate dal programma e le trasforma in Bitmap. ha una funzione inversa rispetto a _LOADIMAGE.
  2326.  
  2327.     DIM bytesperpixel%, x&, y&, bb$, bpp&, c&, cv&, lastsource&, padder$, px&, py&, rr$, d$, ext$, f&
  2328.  
  2329.     bytesperpixel% = _PIXELSIZE(image&)
  2330.     IF bytesperpixel% = 0 THEN PRINT "Text modes unsupported!": END
  2331.     IF bytesperpixel% = 1 THEN bpp& = 8 ELSE bpp& = 24
  2332.     x& = _WIDTH(image&)
  2333.     y& = _HEIGHT(image&)
  2334.     bb$ = "BM????QB64????" + MKL$(40) + MKL$(x&) + MKL$(y&) + MKI$(1) + MKI$(bpp&) + MKL$(0) + "????" + STRING$(16, 0)
  2335.     IF bytesperpixel% = 1 THEN
  2336.         FOR c& = 0 TO 255
  2337.             cv& = _PALETTECOLOR(c&, image&)
  2338.             bb$ = bb$ + CHR$(_BLUE32(cv&)) + CHR$(_GREEN32(cv&)) + CHR$(_RED32(cv&)) + CHR$(0)
  2339.         NEXT
  2340.     END IF
  2341.     MID$(bb$, 11, 4) = MKL$(LEN(bb$))
  2342.     lastsource& = _SOURCE
  2343.     _SOURCE image&
  2344.     IF ((x& * 3) MOD 4) THEN padder$ = STRING$(4 - ((x& * 3) MOD 4), 0)
  2345.     FOR py& = y& - 1 TO 0 STEP -1
  2346.         rr$ = ""
  2347.         FOR px& = 0 TO x& - 1
  2348.             c& = POINT(px&, py&)
  2349.             IF bytesperpixel% = 1 THEN rr$ = rr$ + CHR$(c&) ELSE rr$ = rr$ + LEFT$(MKL$(c&), 3)
  2350.         NEXT px&
  2351.         d$ = d$ + rr$ + padder$
  2352.     NEXT py&
  2353.     _SOURCE lastsource&
  2354.     MID$(bb$, 35, 4) = MKL$(LEN(d$))
  2355.     bb$ = bb$ + d$
  2356.     MID$(bb$, 3, 4) = MKL$(LEN(bb$))
  2357.     IF LCASE$(RIGHT$(filename$, 4)) <> ".bmp" THEN ext$ = ".bmp"
  2358.     f& = FREEFILE
  2359.     OPEN filename$ + ext$ FOR OUTPUT AS #f&: CLOSE #f&
  2360.     OPEN filename$ + ext$ FOR BINARY AS #f&
  2361.     PUT #f&, , bb$
  2362.     CLOSE #f&
  2363. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2364. '--------------------------------------------------------------------------------------------------------------------------------------------------
  2365. FUNCTION Arrotonda! (num!)
  2366.     'funzione che arrotonda un numero alla seconda cifra decimale.
  2367.  
  2368.     Arrotonda! = _ROUND(num! * 100) / 100
  2369.  
  2370. '**************************************************************************************************************************************************
  2371. '*                                                          Termine sezione subroutines                                                           *
  2372. '**************************************************************************************************************************************************
  2373.  
  2374. ''$include: 'Codice.bm'
  2375.  
1.png
* 1.png (Filesize: 74.15 KB, Dimensions: 1238x809, Views: 91)
A.IdrogrammaProgettoCHICAGO+PortataPiccoProgetto.jpg
* A.IdrogrammaProgettoCHICAGO+PortataPiccoProgetto.jpg (Filesize: 159.35 KB, Dimensions: 1920x960, Views: 86)
C.IdrogrammiUnitari.jpg
* C.IdrogrammiUnitari.jpg (Filesize: 190.12 KB, Dimensions: 1920x960, Views: 86)
D._1-24,idrogrammiCHICAGO+PortatePicco(da_1_a_32_volte_tc).jpg
* D._1-24,idrogrammiCHICAGO+PortatePicco(da_1_a_32_volte_tc).jpg (Filesize: 273.76 KB, Dimensions: 1920x960, Views: 91)
D.5,idrogrammaCHICAGO(5_volte_tc).jpg
* D.5,idrogrammaCHICAGO(5_volte_tc).jpg (Filesize: 231.75 KB, Dimensions: 1920x960, Views: 87)
E._1-24,idrogrammiCOSTANTE+PortatePicco(da_1_a_32_volte_tc).jpg
* E._1-24,idrogrammiCOSTANTE+PortatePicco(da_1_a_32_volte_tc).jpg (Filesize: 265.58 KB, Dimensions: 1920x960, Views: 86)
E.9,idrogrammaCOSTANTE(9_volte_tc).jpg
* E.9,idrogrammaCOSTANTE(9_volte_tc).jpg (Filesize: 230.59 KB, Dimensions: 1920x960, Views: 84)
* Idrogramma di piena di progetto tramite il metodo SCS-CN.exe (Filesize: 3.66 MB, Downloads: 89)
« Last Edit: October 19, 2021, 10:07:01 am by bartok »

Offline Pete

  • Forum Resident
  • Posts: 2361
  • Cuz I sez so, varmint!
    • View Profile
Re: The flood hydrograph for a given retun period with the SCS-CN method.
« Reply #1 on: October 18, 2021, 03:52:07 pm »
Congrats! It has a SCREEN 0 look, that's perfect. Love the graph presentation. It's also a real testament to what QB64 is all about.

Pete
Want to learn how to write code on cave walls? https://www.tapatalk.com/groups/qbasic/qbasic-f1/

Offline Petr

  • Forum Resident
  • Posts: 1720
  • The best code is the DNA of the hops.
    • View Profile
Re: The flood hydrograph for a given retun period with the SCS-CN method.
« Reply #2 on: October 18, 2021, 04:17:55 pm »
That's a nice job! It doesn't matter that it's in Italian, the translator in the browser handled it brilliantly :) Really, it's a very nice job.

Offline bartok

  • Newbie
  • Posts: 80
    • View Profile
Re: The flood hydrograph for a given retun period with the SCS-CN method.
« Reply #3 on: October 19, 2021, 09:03:34 am »
Thank'ìs you very much!
It took me about 10 mounths in order to do it. One year ago I didn't know nothing about programming, except something with Matlab at the University and someting with QBasic when I was child. But, after have done the Terry Ritchie's tutorial, I thought to be able to face up to this challenge and I known that it would have been "hard", but I never thought 10 mounths! it had become a matter of principle. At the graphic level, there is nothing particularly complex, but the program itself I think is rather articulate and I tried to write it in the more concise way with the fewr number of lines.

In the main post I replaced the commented code, with a less commented one. considering that you are almost all English speaking, the code is more readable with less comments. Only routines and subroutines are commented. I attached also the EXE file, that creates, with the results, also the commented code itself.

Offline Pete

  • Forum Resident
  • Posts: 2361
  • Cuz I sez so, varmint!
    • View Profile
Re: The flood hydrograph for a given retun period with the SCS-CN method.
« Reply #4 on: October 19, 2021, 11:31:33 am »
10 months isn't bad for a beginner, and you started yourself with some good Karma. A lot of beginners don't finish projects because they get interested in something else while working on something that's taking too long. Sure, getting involved in new and different projects is a great way to learn, but it has a downside in that it creates a habit not finishing things. Most of the time programming is spent after all the fun, I want to see how this is going to look phase, is over. Then the real grunt work, refining, organizing, perfecting, etc. takes place. If only someone could code a program that would do that for us! Hey Cobalt, got a couple of decades?

Please excuse my English. I'm from America.

Pete
Want to learn how to write code on cave walls? https://www.tapatalk.com/groups/qbasic/qbasic-f1/

Offline Cobalt

  • QB64 Developer
  • Forum Resident
  • Posts: 878
  • At 60 I become highly radioactive!
    • View Profile
Re: The flood hydrograph for a given retun period with the SCS-CN method.
« Reply #5 on: October 19, 2021, 11:37:37 am »
10 months isn't bad for a beginner, and you started yourself with some good Karma. A lot of beginners don't finish projects because they get interested in something else while working on something that's taking too long. Sure, getting involved in new and different projects is a great way to learn, but it has a downside in that it creates a habit not finishing things. Most of the time programming is spent after all the fun, I want to see how this is going to look phase, is over. Then the real grunt work, refining, organizing, perfecting, etc. takes place. If only someone could code a program that would do that for us! Hey Cobalt, got a couple of decades?

Please excuse my English. I'm from America.

Pete

Huh???

Oh I thought you spoke that Californianan language?
Granted after becoming radioactive I only have a half-life!

Offline Cobalt

  • QB64 Developer
  • Forum Resident
  • Posts: 878
  • At 60 I become highly radioactive!
    • View Profile
Re: The flood hydrograph for a given retun period with the SCS-CN method.
« Reply #6 on: October 19, 2021, 11:40:43 am »
Hey Cobalt, got a couple of decades?
Pete

Only if there are hot, scantly clad women involved!
Granted after becoming radioactive I only have a half-life!

Offline Pete

  • Forum Resident
  • Posts: 2361
  • Cuz I sez so, varmint!
    • View Profile
Re: The flood hydrograph for a given retun period with the SCS-CN method.
« Reply #7 on: October 19, 2021, 11:47:17 am »
🤰

Well, I tried...

Pete
Want to learn how to write code on cave walls? https://www.tapatalk.com/groups/qbasic/qbasic-f1/