360 likes | 479 Views
Programmare in Visual Basic. Istruzione SE Contatori Ciclo di ripetizione. 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).
E N D
Programmare in Visual Basic • Istruzione SE • Contatori • Ciclo di ripetizione
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 Il nostro carrello Una cassa
Noi che dobbiamo fare il programma, dove stiamo? Noi ci dobbiamo immaginare di essere dentro la cassa!
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
A i NP ISCONT=ITOT-(ITOT*3/100) CONT=0 CONTA=0 CONTB=0 ITOT=0 o ITOT,ISCONT, CONTA,CONTB P;CM Cont=cont+1 CM=“A” F v CONTB=CONTB+1 CONTA=CONTA+1 ITOT=ITOT+P Questo è il ciclo. Cioè le istruzioni ripetute NP volte. CONT=NP F Inizio Quanti articoli ci sono nel carrello? NP! i FINE v A
A Calcolo dello sconto! ISCONT=ITOT-(ITOT*3/100) o ITOT,ISCONT, CONTA,CONTB • Finalmente esce lo scontrino con - Importo totale • Importo scontato- Quanti prodotti di tipo A • E quanti di tipo B Anche questa è una elaborazione. Però è fuori dal ciclo. Infatti viene svolta dopo che sono passati tutti i prodotti dalla cassa. FINE
i NP E in Visual Basic, come si traduce? Cominciamo dall’inizio. Le prime operazioni di input. Inizio TextBox Nome: txtNP Command Nome: cmdPassaAllaCassa
Per adesso è facile. Ma il ciclo? Calma, calma. Adesso inizia il codice ma…. Option Explicit ' Dati di input Dim Np As Integer Dim P As Double Dim CM As String ' Dati di elaborazione Dim Cont As Integer ' Dati di OutPut Dim ContA As Integer Dim ContB As Integer Dim ITot As Double Dim Iscont As Double Un passo per volta! Prima dichiariamo le variabili!
Il codice da scrivere deve essere eseguito alla pressione del pulsante cmdPassaAllaCassa
Option Explicit ' Dati di input Dim Np As Integer Dim P As Double Dim CM As String ' Dati di elaborazione Dim Cont As Integer ' Dati di OutPut Dim ContA As Integer Dim ContB As Integer Dim ITot As Double Dim Iscont As Double Private Sub cmdPassaAllaCassa_Click() End Sub Leggendo il diagramma a blocchi, cominceremo a scrivere qui!
i NP Option Explicit ' Dati di input Dim Np As Integer Dim P As Double Dim CM As String ' Dati di elaborazione Dim Cont As Integer ' Dati di OutPut Dim ContA As Integer Dim ContB As Integer Dim ITot As Double Dim Iscont As Double Private Sub cmdPassaAllaCassa_Click() NP = txtNP.text End Sub
CONT=0 CONTA=0 CONTB=0 ITOT=0 Elaborazione Private Sub cmdPassaAllaCassa_Click() NP = txtNP.text End Sub ‘ Azzeramento variabili Cont=0 ContA = 0 ContB = 0 Itot=0
P;CM Cont=cont+1 CM=“A” F v CONTB=CONTB+1 CONTA=CONTA+1 ITOT=ITOT+P Questo è il ciclo. Cioè le istruzioni ripetute NP volte. CONT=NP F Cominciamo a tradurre le istruzioni 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
Elaborazione Private Sub cmdPassaAllaCassa_Click() NP = txtNP.text End Sub Infatti si scrivono le istruzioni che rappresentano l’INIZIO e la FINE del ciclo ‘ Azzeramento variabili Cont=0 ContA = 0 ContB = 0 Itot=0 ‘Inizio Ciclo Repeat Loop Until CONT = NP Tra la REPEAT e la LOOP metteremo le altre istruzioni
P;CM Cont=cont+1 CM=“A” F v CONTB=CONTB+1 CONTA=CONTA+1 ITOT=ITOT+P Questo è il ciclo. Cioè le istruzioni ripetute NP volte. CONT=NP F Quindi, si scrive dove inizia e dove finisce il ciclo… REPEAT LOOP UNTIL CONT=NP
A questo punto si passa alle istruzioni del CICLO Questa è una istruzione di INPUT. P;CM Fino ad adesso abbiamo imparato a tradurla con i TextBox. Cont=cont+1 CM=“A” F v CONTB=CONTB+1 CONTA=CONTA+1 Ma se siamo dentro un ciclo dobbiamo usare la InputBox, anzi due inputbox perché due sono le variabili (P e CM) ITOT=ITOT+P CONT=NP F
Attenzione!!Un simbolo e due istruzioni. P;CM ‘Inizio Ciclo DO P = InputBox(“Dimmi il prezzo”) CM = InputBox(“Dimmi la categoria”) Loop Until CONT = NP
Questa è facile! E’ una assegnazione. Cont=cont+1 ‘Inizio Ciclo Do P = InputBox(“Dimmi il prezzo”) CM = InputBox(“Dimmi la categoria”) Cont = Cont + 1 Loop Until CONT = NP
CM=“A” F v ‘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 E quando trovo una struttura condizionale la traduco con la se. Scrivo tutta la se, compreso IF, THEN, ELSE e l’ENDIF, poi dentro metto le istruzioni
CM=“A” F v CONTB=CONTB+1 CONTA=CONTA+1 ‘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 Le istruzioni della struttura condizionale (il se) le porto al posto giusto. In questo caso sono due assegnazioni Stiamo conteggiando i prodotti per categoria
‘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 ITOT=ITOT+P Qui invece, sommo l’importo totale
DOVE SIAMO? P;CM Cont=cont+1 CM=“A” F v CONTB=CONTB+1 CONTA=CONTA+1 QUI!!! ITOT=ITOT+P CONT=NP F
A ISCONT=ITOT-(ITOT*3/100) o ITOT,ISCONT, CONTA,CONTB Manca, poco… Il calcolo dell’importo scontato L’Output dei risultati 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 scontato ISCONT=ITOT-(ITOT*3/100) A ISCONT=ITOT-(ITOT*3/100) o ITOT,ISCONT, CONTA,CONTB 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 scontato ISCONT=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) A ISCONT=ITOT-(ITOT*3/100) o ITOT,ISCONT, CONTA,CONTB FINE
Approfondimenti Che succede se ho una struttura condizionale solo con il vero? CM=“A” F v Come si traduce in VB? CONTA=CONTA+1 IF CM=“A” THEN CONTA = CONTA+1 END IF