listati

Il listato! Quanti ricordi evoca questa parola in coloro che, come me, hanno iniziato a programmare nei primi anni '80! In quel tempo, ahimè, già così lontano, tutto ciò di cui disponevamo in termini di memoria di computer era 1 kB o poco più (il mitico VIC20 era dotato di ben 3,5 kB di RAM!). Con santa pazienza, si ricopiavano dalle riviste specializzate i listati, cioè righe e righe di codice. Mandate in esecuzione, generavano quasi inevitabilmente qualche Syntax Error, per cui toccava scoprire dove si era sbagliato nella digitazione. Faticoso, ma istruttivo. Poi venne la programmazione ad oggetti...

La programmazione ad oggetti, si sa, facilita molto il compito del programmatore. Scrivere oggi un programma comporta, come nel passato, un intenso lavoro creativo, con il vantaggio di non doversi più preoccupare di creare il codice apposito per ogni "oggetto" rappresentato nella finestra del programma. I piccoli programmi presentati in questo sito sono stati generati in Visual Basic 1.0, e in questa pagina se ne propone, a scopo didattico, il codice utilizzato, scritto e ideato da Vittorio Villasmunta.

Altezza della base delle nubi

La pressione del pulsante Calcola! comporta l'esecuzione del seguente codice:

Sub Command1_Click ()
H = 125 * (Val(text1.text) - Val(text2.text))
text3.text = Str$(H)
text4.text = Str$(H * 3.3)
End Sub

Previsione delle brinate notturne

La pressione del pulsante Calcola! comporta l'esecuzione del seguente codice:

Sub Command1_Click ()
tc = 0
tcd = 0
result = 0
label4.caption = ""

tc = Val(text1.text)
tcd = Val(text2.text)
cost = 9 / 5
If tcd > tc Then GoTo sospendi

tf = 32 + cost * tc
tfd = 32 + cost * tcd

label5.caption = Str$(tf) + "°F"
label6.caption = Str$(tfd) + "°F"
result = tf + tfd / 2
If result < 79 And check1.value Then label4.caption = "Possibili brinate notturne" Else label4.caption = "Condizioni sfavorevoli alla formazione di brinate notturne"
GoTo fine
sospendi:
label4.caption = "Attenzione! La temperatura di rugiada non può essere superiore a quella effettiva!":
fine:
End Sub

Temperatura di bulbo bagnato

Sub Command1_Click ()

T:
T = Val(text1.text)
If text1.text = "" Then MsgBox "Inserire la temperatura", 16
Ur:
Ur = Val(text2.text)
If text2.text = "" Then MsgBox "Inserire l'umidità relativa", 16
p:
p = Val(text3.text)
If text3.text = "" Then MsgBox "Inserire la pressione", 16
Tw = T * (.45 + .006 * Ur * Sqr(p / 1060))
Tw = Int(Tw * 100) / 100
label1.caption = Str$(Tw)
End Sub

Calcolo della temperatura equivalente potenziale

Sub Command1_Click ()
P = Val(text1.text)
T = Val(text2.text)
D = Val(text3.text)
A = 19.0785
B = 4098.025
C = 237.3
C1 = 18 / 28.96

V = Exp(A - B / (D + C))
text5.text = Str$(V)

X = V / (P - V) * C1
If P > 0 Then Q = (1000 / P) ^ .29 Else text4.text = "Errore!"
TE = 273.2 + T + 2480 * X / 1
THETAE = TE * Q
text4.text = Str$(THETAE)

S = Exp(A - B / (T + C))
text6.text = Str$(S)

XS = S / (P - S) * C1
TES = 273.2 + T + 2480 * XS / 1
THETAES = TES + Q
text7.text = Str$(THETAES)
End Sub

Indice di stabilità per la previsione della nebbia da irraggiamento

Sub Command1_Click ()
Dim fogsi As Integer


Label8.BackColor = &HC0C0C0
Label9.BackColor = &HC0C0C0
Label10.BackColor = &HC0C0C0

ts = Val(Text1.Text)
tds = Val(Text2.Text)
If tds > ts Then MsgBox "La temperatura di rugiada non può mai essere superiore alla temperatura effettiva! Inserire un valore corretto.":
t850 = Val(Text3.Text)
w850 = Val(Text4.Text)
tmp = t850 + tds
fogsi = (4 * ts - 2 * tmp + w850)
Text5.Text = Str$(fogsi)
If fogsi < 31 Then Label8.BackColor = &HFF&
If fogsi >= 31 And fogsi < 55 Then Label9.BackColor = &HFFFF&
If fogsi >= 55 Then Label10.BackColor = &HFF00&

End Sub

Calcolo della pressione ad una determinata quota

Sub Command1_Click ()

PHPA = .9877 ^ (Val(text2.text) / 100) * 1013.25
LABEL4.CAPTION = Str$(PHPA)

End Sub

Riduzione della pressione al livello del mare

Sub Command1_Click ()
z = 0: p2 = 0: p1 = 0
'tm=temperatura media
'z=livello a cui si trova il barometro
z = Val(text1.text)
p2 = Val(text2.text)
t2 = Val(text4.text)
t1 = t2 + .6 * (z / 100)
tm = (t1 + t2) / 2
m = z / (18429 + 67.53 * tm + .003 * z)
p1 = p2 * 10 ^ m
text3.text = Str$(p1)
End Sub

Regole di previsione basate sulle temperature in quota

Sub Command1_Click ()
text1.text = ""
hvf$ = "Heinz Von Ficker dice: " + Chr$(13) + Chr$(10)
If check1.value Then a = 1 Else a = 0
If check2.value Then b = 10 Else b = 0
If check3.value Then c = 100 Else c = 0
If check4.value Then d = 1000 Else d = 0
If check5.value Then e = 10000 Else e = 0
If check6.value Then f = 100000 Else f = 0
If check7.value Then g = 1000000 Else g = 0
If check8.value Then h = 2 Else h = 0
If check9.value Then i = 20 Else i = 0

tot = a + b + c + d + e + f + g + h + i
'regola n.1
If tot = 11 Then text1.text = hvf$ + "Indizi di persistente bel tempo."
'regola n.2
If tot = 1101 Then text1.text = hvf$ + "E' in arrivo una depressione."
'regola n.3
If tot = 11001 Then text1.text = hvf$ + "Indizio di persistente condizione ciclonica."
'regola n.4
If tot = 111000 Then text1.text = hvf$ + "Questi indizi segnano la transizione verso il dorso della depressione e preannuncia l'arrivo di onde di freddo."
'regola n.5
If tot = 1011000 Then text1.text = hvf$ + "|Il rasserenamento non è ancora imminente!"
'regola n.6
If tot = 1010010 Then text1.text = hvf$ + "E' in vista un pronto rasserenamento."
'regola n.7
If tot = 1000110 Then text1.text = hvf$ + "Prendono sviluppo condizioni anticicloniche; esse durano sino a che al suolo la pressione cominci a decrescere."
'regola n.8
If tot = 2 Then text1.text = "Condizioni favorevoli ai temporali."
'regola n.9
If tot = 20 Then text1.text = "Condizioni favorevoli alla formazione di nebbie."

End Sub

Calcolo della temperatura di condensazione

Sub Command1_Click ()
'tc ~ td - (0.001296 * td + 0.1963) * (t - td)


t = Val(text1.text)
td = Val(text2.text)
p = Val(text5.text)
tc = td - (.001296 * td + .1963) * (t - td)
text3.text = Str$(tc)
k = 7 / 2
tk = t + 273
tck = tc + 273
pc = p * ((tck / tk) ^ k)
text4.text = Str$(pc)
End Sub

Calcolo della classe di stabilità di Pasquill

Sub Command1_Click ()
label1.caption = ""
a$ = "A: condizioni estremamente instabili"
b$ = "B: condizioni moderatamente instabili"
c$ = "C: condizioni debolmente instabili"
d$ = "D: condizioni di neutralità"
e$ = "E: condizioni debolmente stabili"
f$ = "F: condizioni moderatamente stabili"
If option1.value And option6.value Then label1.caption = a$
If option2.value And option6.value Then label1.caption = a$ + " e " + b$
If option3.value And option6.value Then label1.caption = b$
If option4.value And option6.value Then label1.caption = c$
If option5.value And option6.value Then label1.caption = c$

If option1.value And option7.value Then label1.caption = a$ + " e " + b$
If option2.value And option7.value Then label1.caption = b$
If option3.value And option7.value Then label1.caption = b$ + " e " + c$
If option4.value And option7.value Then label1.caption = c$ + " e " + d$
If option5.value And option7.value Then label1.caption = d$

If option1.value And option8.value Then label1.caption = b$
If option2.value And option8.value Then label1.caption = c$
If option3.value And option8.value Then label1.caption = c$
If option4.value And option8.value Then label1.caption = d$
If option5.value And option8.value Then label1.caption = d$

If option1.value And option9.value Then label1.caption = e$
If option2.value And option9.value Then label1.caption = e$
If option3.value And option9.value Then label1.caption = d$
If option4.value And option9.value Then label1.caption = d$
If option5.value And option9.value Then label1.caption = d$

If option1.value And option10.value Then label1.caption = f$
If option2.value And option10.value Then label1.caption = f$
If option3.value And option10.value Then label1.caption = e$
If option4.value And option10.value Then label1.caption = d$
If option5.value And option10.value Then label1.caption = d$

End Sub


Questa pagina è stata realizzata da Vittorio Villasmunta

Ultimo aggiornamento: 29/11/14