Programmare in Visual Basic
• Istruzione SE
• Contatori
• Ciclo di ripetizione
Questa opera è sotto licenza
Si puo’ usarla liberamente… • Citando la fonte
• Per scopi non commerciali
• Rimettendola a disposizione di tutti con la stessa licenza
• A cura di Stefano Floris [email protected](per scopi commerciali occorre richiedere espressa autorizzazione)
Testo del problema
Per ciascuno degli N prodotti acquistati da un cliente in un negozio sono noti: il prezzo unitario e la categoria merceologica (due tipi di categorie, supponiamo A e B).
Determinare (cioè calcolare):- Il numero di prodotti di categoria A- Il numero di prodotti di categoria B- L’importo totale dovuto dal cliente prima dello
sconto- L’importo totale scontato sapendo che lo sconto
è del 3% sul totale.
Facciamo un esempioimmaginiamo…
Un negozio
Una cassa
Il nostro carrello
Noi che dobbiamo fare il programma, dove stiamo?
Noi ci dobbiamo immaginare di essere dentro la cassa!
E che ci facciamo li dentro?
Dobbiamo fare lo scontrino!
• E per farlo dobbiamo vedere tutti i prodotti, controllare di quale categoria sono e il loro prezzo
Ma attenzione!C’è solo una piccola differenza.
.Rispetto ad una cassa
vera noi abbiamo bisogno di sapere prima quanti prodotti ci sono
nel carrello
Quindi partiremo così:Quanti articoli ci
sono nel carrello?
Poi possiamo partire a fare il lavoro
per tante volte quanti sono gli articoli nel carrello
Dati in input
• NP = numero prodotti
• P = prezzo
• CM = categoria merceologica
Dati in Output
• ITOT: Importo totale
• CONTB: Numero prodotti di categoria A
• CONTA: Numero prodotti di categoria B
• ISCONT: Importo scontato
Dunque…abbiamo risposto a quello che chiedeva il
testo del problema?
Per ciascuna domanda abbiamo una risposta!
• Per ciascuno degli N prodotti acquistati da un cliente in un negozio sono noti: il prezzo unitario e la categoria merceologica (due tipi di categorie, supponiamo A e B).
Determinare (cioè calcolare):• Il numero di prodotti di categoria A (CONTA)• Il numero di prodotti di categoria B (CONTB)• L’importo totale dovuto dal cliente prima dello
sconto (ITOT)• L’importo totale scontato sapendo che lo sconto
è del 3% sul totale (ISCONT).
Dati elaborazione
• Cont: numero totale di prodotti acquistati
Inizio
CONT=0CONTA=0CONTB=0
ITOT=0
NP i
vA
Quanti articoli ci sono nel carrello?
NP!
v
F
F
P;CM
Cont=cont+1
CM=“A” CONTA=CONTA+1CONTB=CONTB+1
ITOT=ITOT+P
CONT=NP
Questo è il ciclo. Cioè le istruzioni ripetute NP volte.
i
ISCONT=ITOT-(ITOT*3/100)
ITOT,ISCONT,CONTA,CONTB
o
A
FINE
ISCONT=ITOT-(ITOT*3/100)
ITOT,ISCONT,CONTA,CONTB
o
A
FINE
Anche questa è una elaborazione.
Però è fuori dal ciclo. Infatti viene svolta dopo che sono passati tutti i
prodotti dalla cassa.
Calcolo dello sconto!
Finalmente esce lo scontrino con - Importo totale
-Importo scontato- Quanti prodotti di
tipo A-E quanti di tipo B
E in Visual Basic, come si traduce?Cominciamo dall’inizio. Le
prime operazioni di input.
Inizio
NP i
TextBox
Nome: txtNP
Command
Nome:
cmdPassaAllaCassa
Per adesso è facile. Ma il ciclo?Calma, calma. Adesso inizia il codice ma….
Un passo per volta!Prima dichiariamo le
variabili!
Option Explicit' Dati di inputDim Np As IntegerDim P As DoubleDim CM As String
' Dati di elaborazioneDim Cont As Integer
' Dati di OutPutDim ContA As IntegerDim ContB As IntegerDim ITot As DoubleDim Iscont As Double
Il codice da scrivere deve essere eseguito alla pressione del
pulsante cmdPassaAllaCassa
Option Explicit' Dati di inputDim Np As IntegerDim P As DoubleDim CM As String
' Dati di elaborazioneDim Cont As Integer
' Dati di OutPutDim ContA As IntegerDim ContB As IntegerDim ITot As DoubleDim Iscont As Double
Private Sub cmdPassaAllaCassa_Click()
End Sub
Leggendo il diagramma a
blocchi, cominceremo a
scrivere qui!
NP i
Option Explicit' Dati di inputDim Np As IntegerDim P As DoubleDim CM As String
' Dati di elaborazioneDim Cont As Integer
' Dati di OutPutDim ContA As IntegerDim ContB As IntegerDim ITot As DoubleDim Iscont As Double
Private Sub cmdPassaAllaCassa_Click()
NP = txtNP.text
End Sub
ElaborazionePrivate Sub cmdPassaAllaCassa_Click()NP = txtNP.text
End Sub
CONT=0CONTA=0CONTB=0
ITOT=0
‘ Azzeramento variabili
Cont=0
ContA = 0
ContB = 0
Itot=0
Cominciamo a tradurre le istruzioni
v
F
F
P;CM
Cont=cont+1
CM=“A” CONTA=CONTA+1CONTB=CONTB+1
ITOT=ITOT+P
CONT=NP
Questo è il ciclo. Cioè le istruzioni ripetute NP volte.
La prima istruzione del CICLO non si vede ma c’è!
L’ultima istruzione del ciclo è quella da dove parte la
freccia che torna indietro per RIPETERE
ElaborazionePrivate Sub cmdPassaAllaCassa_Click()NP = txtNP.text
End Sub
‘ Azzeramento variabili
Cont=0
ContA = 0
ContB = 0
Itot=0
‘Inizio Ciclo
Repeat
Loop Until CONT = NP
Infatti si scrivono le istruzioni che
rappresentano l’INIZIO e la FINE del ciclo
Tra la REPEAT e la
LOOP metteremo le altre istruzioni
Quindi, si scrive dove inizia e dove finisce il ciclo…
v
F
F
P;CM
Cont=cont+1
CM=“A” CONTA=CONTA+1CONTB=CONTB+1
ITOT=ITOT+P
CONT=NP
Questo è il ciclo. Cioè le istruzioni ripetute NP volte.
REPEAT
LOOP UNTIL CONT=NP
A questo punto si passa alle istruzioni del CICLO
v
F
F
P;CM
Cont=cont+1
CM=“A” CONTA=CONTA+1CONTB=CONTB+1
ITOT=ITOT+P
CONT=NP
Questa è una istruzione di INPUT.
Fino ad adesso abbiamo imparato a tradurla con i TextBox.
Ma se siamo dentro un ciclo dobbiamo usare la
InputBox, anzi due inputbox perché due sono
le variabili (P e CM)
‘Inizio Ciclo
DO
P = InputBox(“Dimmi il prezzo”)
CM = InputBox(“Dimmi la categoria”)
Loop Until CONT = NP
P;CM Attenzione!!Un
simbolo e due
istruzioni.
‘Inizio Ciclo
Do
P = InputBox(“Dimmi il prezzo”)
CM = InputBox(“Dimmi la categoria”)
Cont = Cont + 1
Loop Until CONT = NP
Cont=cont+1 Questa è facile! E’
una assegnazi
one.
‘Inizio Ciclo
Do
P = InputBox(“Dimmi il prezzo”)
CM = InputBox(“Dimmi la categoria”)
Cont = Cont + 1
IF CM=“A” THEN
ELSE
END IF
Loop Until CONT = NP
CM=“A”
E quando trovo una struttura
condizionale la traduco con la se.
vF
Scrivo tutta la se, compreso IF, THEN, ELSE e l’END IF, poi
dentro metto le istruzioni
‘Inizio Ciclo
Do
P = InputBox(“Dimmi il prezzo”)
CM = InputBox(“Dimmi la categoria”)
Cont = Cont + 1
IF CM=“A” THEN
CONTA = CONTA+1
ELSE
CONTB = CONTB+1
END IF
Loop Until CONT = NP
FCM=“A”
CONTA=CONTA+1CONTB=CONTB+1
v
Le istruzioni della struttura condizionale (il se) le porto al posto giusto. In questo caso sono due assegnazioni
Stiamo conteggiando i
prodotti per categoria
ITOT=ITOT+P
‘Inizio Ciclo
Do
P = InputBox(“Dimmi il prezzo”)
CM = InputBox(“Dimmi la categoria”)
Cont = Cont + 1
IF CM=“A” THEN
CONTA = CONTA+1
ELSE
CONTB = CONTB+1
END IF
ITOT=ITOT+P
Loop Until CONT = NP
Qui invece, sommo l’importo
totale
DOVE SIAMO?
v
F
F
P;CM
Cont=cont+1
CM=“A” CONTA=CONTA+1CONTB=CONTB+1
ITOT=ITOT+P
CONT=NP
QUI!!!
Manca, poco…
ISCONT=ITOT-(ITOT*3/100)
ITOT,ISCONT,CONTA,CONTB
o
A
FINE
Il calcolo dell’importo scontato
L’Output dei risultati
ISCONT=ITOT-(ITOT*3/100)
ITOT,ISCONT,CONTA,CONTB
o
A
FINE
‘Inizio Ciclo
Do
P = InputBox(“Dimmi il prezzo”)
CM = InputBox(“Dimmi la categoria”)
Cont = Cont + 1
IF CM=“A” THEN
CONTA = CONTA+1
ELSE
CONTB = CONTB+1
END IF
‘ calcolo importo totale
ITOT=ITOT+P
Loop Until CONT = NP‘ Calcolo importo scontatoISCONT=ITOT-(ITOT*3/100)
‘Inizio Ciclo
Do
P = InputBox(“Dimmi il prezzo”)
CM = InputBox(“Dimmi la categoria”)
Cont = Cont + 1
IF CM=“A” THEN
CONTA = CONTA+1
ELSE
CONTB = CONTB+1
END IF
‘ calcolo importo totaleITOT=ITOT+P
Loop Until CONT = NP
‘ Calcolo importo scontatoISCONT=ITOT-(ITOT*3/100)MsgBox “L’importo totale è “ & cstr(Itot)MsgBox “L’importo scontato è “ & cstr(Iscont)MsgBox “I prodotti di tipo A sono “ & cstr(ContA)MsgBox “I prodotti di tipo B sono “ & cstr(ContB)
ISCONT=ITOT-(ITOT*3/100)
ITOT,ISCONT,CONTA,CONTB
o
A
FINE
Che aspettate a provare il programma?
Approfondimenti
FCM=“A”
CONTA=CONTA+1
vChe succede se ho una struttura
condizionale solo con il
vero?Come si traduce in VB?
IF CM=“A” THEN
CONTA = CONTA+1
END IF
Top Related