1 MODULO 4: LE STRUTTURE ITERATIVE: FOR, WHILE

“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
MODULO 4: LE STRUTTURE ITERATIVE: FOR, WHILE E DO LOOP UNTIL
La struttura di ripetizione o iterativa o ciclo
Essa, in generale, consente di ripetere l’esecuzione di una porzione di algoritmo più volte,
finché è verificata una certa condizione . Essa può essere di tre tipi:
- a iterazione prestabilita o ciclo a contatore
- a iterazione a controllo di testa o ciclo a condizione iniziale.
- a iterazione a controllori coda o ciclo a condizione finale.
La struttura a iterazione prestabilita (FOR - TO - NEXT)
Essa, nel metodo del diagramma a blocchi, si rappresenta cosi:
Essa utilizza:
1) un nuovo blocco, l’esagono, che al suo interno contiene: una variabile conteggio come ad es.
i, j, k
2) un valore finale, VF, scelto dal programmatore, che stabilisce a priori il numero massimo di
iterazioni, ad es. 10, 100
3) blocco istruzioni che rappresenta la porzione di algoritmo da iterare, cioè il corpo dell’algoritmo
4) un piccolo rombo che sottintende ad ogni iterazione l’incremento della variabile conteggio
ad es. i ß i + 1; j ß j + 1
La ripetizione del blocco istruzioni avviene finché la variabile conteggio assume un valore < =
al valore finale VF prestabilito, mentre si arresta quando la variabile conteggio assume un
valore > del valore finale VF prestabilito.
Quando si usa tale struttura a iterazione prestabilita?
Essa si usa quando nell’algoritmo ci sono una o più istruzioni che si ripetono un numero di
volte prestabilito.
PROBLEMA1: Trovare l’algoritmo che letti 10 numeri interi N1,…N100, calcoli la loro somma
e la stampi a video. (Suggerimento: usare il controllo inputbox per leggere i 100 numeri)
Prima di applicare il metodo dei 5 passi, cerchiamo di capire meglio il problema:
Ricordiamo che l’algoritmo che risolveva il problema della somma di due numeri x e y, richiedeva 3
variabili: di cui 2 per i numeri N1 e N2 e una per la variabile som.
Qui, invece, il nostro problema è di fare la somma di 100 numeri, quindi dovremmo usare 101
variabili: di cui 100 per i numeri N1, …., N100 e una per la variabile somma SOM. Inoltre,
dovremmo leggere la prima variabile N1 e poi sommarla alla variabile somma SOM, leggere la
seconda variabile N2 e poi sommarla alla variabile somma SOM,……leggere la 100° variabile N100
e poi sommarla alla variabile somma SOM. Tale soluzione fa prevedere un algoritmo lunghissimo.
Come possiamo ovviare a questo problema? 1
1
Nota.: per far rendere conto gli allievi che effettivamente tale soluzione è lunghissima conviene disegnare alla lavagna a
sx l’algoritmo senza ciclo (fermandosi alla lettura e alla somma parziale delle prime due variabili n1 e n2, scrivendo i
puntini, e poi scrivendo la lettura e la somma parziale della variabile n100) e a dx l’algoritmo con il ciclo
1
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
Osservazione : In tale soluzione si ripetono 100 volte la coppia di istruzioni: lettura della variabile Ni
e somma del valore della variabile Ni al valore della variabile somma SOM.
Allora per quanto suddetto, possiamo usare una struttura a iterazione prestabilita per la
coppia di istruzioni suddette,
1) Tabelle delle variabili di input e output
Nome
Descrizione
N
Numero generico da sommare
SOM
Somma totale dei 10 numeri
X
E’ una stringa di caratteri
2) Algoritmo per passi
1. inizio
2. inizializza som a 0
3. Per I che va da 1 a 100
4. leggi il numero N
5. assegna a som, la quantità som + N
6. vai al prossimo I e torna al passo 3
7. scrivi a video il valore di som
8. fine
Tipo
Numero intero
Numero intero
Stringa
Input
X
Output
Lavoro
X
X
3) Algoritmo col diagramma a blocchi
4) Creazione del form Visualbasic. Net
5) Codifica del corpo dei pulsanti di calcolo
Private Sub btnSomma_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnSomma.Click
Dim i, numero, som As Integer
Dim x As String
For i = 1 To 10
x = "inserisci " & i & ") numero"
' le 2 & servono per concatenare il 1° messaggio:"inserisci "
‘ al valore corrente di i, al 2° messaggio ") numero"
numero = Val(InputBox(x))
som = som + numero
Next
lblRisultato.Text = som
End Sub
6) L’esecuzione del programma fa apparire a video 10 finestre per l’input box del tipo:
2
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
PROBLEMA2: Trovare l’algoritmo che letti M numeri interi, calcoli la loro somma e la stampi
a video.
(Suggerimento: usare il controllo textbox per leggere la dimensione N dei numeri e tante
inputbox per leggere gli N numeri)
1) Tabelle delle variabili di input e output
Nome
Descrizione
M
Dimensione dei numeri
N
Numero generico da sommare
SOM Somma totale dei 10 numeri
I
E’ l’indice del ciclo
X
E’ una stringa di caratteri
2) Algoritmo per passi
1. inizio
2. inizializza som a 0
3. leggi M
4. per I che va da 1 a M
5. leggi il numero N
6. assegna a som, la quantità som+N
7. vai al prossimo I e torna al passo 4
8. scrivi a video il valore di som
9. fine
4) Creazione del form Visualbasic. Net
Tipo
Numero intero
Numero intero
Numero intero
Numero intero
Stringa
Input
X
X
Output
Lavoro
X
X
X
3) Algoritmo col diagramma a blocchi
Non disegnato per mancanza di tempo
5) Codifica del corpo dei pulsanti di calcolo
Private Sub btnSomma_Click()
Dim i, n, m, som As Integer
Dim x As String
m = Val(txtMnumeri.Text)
For i = 1 To m
x = "inserisci " & i & ") numero"
' le 2 & servono per concatenare
‘ il 1° messaggio: "inserisci ",
‘ al valore corrente di i, al 2°
‘ messaggio ") numero"
n = Val(InputBox(x))
som = som + n
Next
lblRisultato.Text = som
End Sub
PROBLEMA3: Trovare l’algoritmo che permette di calcolare il maggiore tra 10 numeri interi
letti in input e di scriverlo in output 2
Prima di applicare il metodo dei 5 passi, cerchiamo di capire meglio il problema:
Tale problema è semplicemente la generalizzazione dello stesso problema visto precedentemente al
caso di tre numeri interi, che richiedeva al massimo 2 confronti nel caso peggiore, se si utilizzava la
variabile maggiore inizializzata al primo numero letto.
2
Nota: successivamente questo algoritmo si può complicare ricercando oltre al maggiore anche il minore e
successivamente generalizzarlo alla ricerca del maggiore e minore in una sequenza di M numeri interi letti in input.
3
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
1) Tabelle delle variabili di input e output
Nome
Descrizione
N
E’ il numero letto
MAX
E’ il maggiore dei 10 numeri
I
E’ l’indice del ciclo
X
E’ una stringa di caratteri
2) Algoritmo per passi
1. inizio
2. leggi il primo numero e assegnalo a max
3. per I che va da 2 a 10
4. leggi il I) numero
5. se il numero del passo 4 > max allora
a max, assegna il nuovo numero, fine se
6. vai al prossimo I e torna al passo 3
7. scrivi a video max
8. fine
Tipo
Numero intero
Numero intero
Numero intero
Stringa
Input
X
Output
Lavoro
X
X
X
3) Algoritmo col diagramma a blocchi
5) Codifica del corpo dei pulsanti di calcolo
Dim i, numero, max As Integer
Dim x As String
x="inserisci il 1) numero"
numero = Val(InputBox(x))
max = numero
For i = 2 To 10
x = "inserisci " & i & ") numero"
' le 2 & servono per concatenare
"inserisci " 'al valore corrente
di i, e al 2° msg ") numero"
numero = Val(InputBox(x))
If (numero > max) Then
max = numero
End If
Next
txtMax.Text = max
4) Creazione del form Visualbasic. Net
PROBLEMA4: Trovare l’algoritmo che letti M numeri interi, calcoli il maggiore degli M
numeri e lo stampi a video.
1) Tabelle delle variabili di input e output
Nome
Descrizione
M
E’ la dimensione dei numeri.
N
E’ il numero letto
MAX
E’ il maggiore degli N numeri letti
I
E’ l’indice del ciclo
X
E’ una stringa di caratteri
2) Algoritmo per passi
1. inizio
2. leggi la dimensione M
3. leggi il primo numero e assegnalo a MAX
Tipo
Numero intero
Numero intero
Numero intero
Numero intero
Stringa
Input
X
X
Output
Lavoro
X
X
X
3) Algoritmo col diagramma a blocchi
Non disegnato per mancanza di tempo
4
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
4. per I che va da 2 a M
5. leggi il I) numero
6. se il numero del passo 4 > MAX allora
a MAX, assegna il nuovo numero, fine se
7. vai al prossimo I e torna al passo 4
8. scrivi a video MAX
9. fine
4) Creazione del form Visualbasic
5) Codifica del corpo dei pulsanti di calcolo
Non effettuata poiché è la stessa del problema 3
precedente dove al posto di 10 c’è M
PROBLEMA5: Trovare l’algoritmo che letti i primi M numeri naturali, calcoli e stampi a video
il messaggio “è positivo” se il numero letto è positivo e il messaggio “è negativo” se il numero
letto è negativo. (Suggerimento: usare la funzione Inputbox( ) per leggere gli M numeri e la
funzione Msgbox( ) per stampare gli M messaggi a video)
1) Tabelle delle variabili di input e output
Nome
Descrizione
M
E’ la dimensione dei numeri.
N
E’ il numero letto
I
E’ l’indice del ciclo
X
E’ una stringa di caratteri
Tipo
Numero intero
Numero intero
Numero intero
Stringa
Input
X
X
Output
Lavoro
X
X
2) Algoritmo per passi
3) Algoritmo col diagramma a blocchi
1. inizio
Non disegnato per mancanza di tempo
2. leggi la dimensione M
3. per I che va da 1 a M
4) Creazione del form Visualbasic
4. leggi il I) numero, N
5. se il numero N del passo 4 > 0 allora
stampa il messaggio “è positivo” altrimenti
stampa il messaggio “è negativo”, fine se
7. vai al prossimo I e torna al passo 3
8. fine
5) Codifica del corpo del pulsante btnCalcola_Click
Dim m, n, i As Integer
Dim x As String
m = Val(txtM.Text)
For i = 1 To m
x = "inserisci il " & i & ") numero"
n = Val(InputBox(x))
If (n > 0) Then MsgBox("numero è positivo")
Else MsgBox("numero è negativo")
End If
' incremento indice i del ciclo
Next
6) L’esecuzione del programma fa apparire a video N coppie di finestre del tipo seguente:
5
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
PROBLEMA6: Trovare l’algoritmo che letti M numeri naturali, calcoli e stampi a video il
messaggio “è pari” se il numero letto è pari e il messaggio “è dispari” se il numero letto è
dispari. (Suggerimento: usare la funzione Inputbox( ) per leggere gli M numeri e la funzione
Msgbox( ) per stampare gli M messaggi a video; la funzione mod per calcolare il resto)
1) Tabelle delle variabili di input e output
Nome
Descrizione
M
E’ la dimensione dei numeri.
N
E’ il numero letto
I
E’ l’indice del ciclo
X
E’ una stringa di caratteri
Tipo
Numero intero
Numero intero
Numero intero
Stringa
Input
X
X
Output
Lavoro
X
X
2) Algoritmo per passi
3) Algoritmo col diagramma a blocchi
1. inizio
Non disegnato per mancanza di tempo
2. leggi la dimensione M
3. per I che va da 1 a M
4) Creazione del form Visualbasic
4. leggi il I) numero N
5. se il numero N MOD 2 = 0 allora stampa il
messaggio “è pari”, altrimenti stampa il
messaggio “è dispari”, fine se
7. vai al prossimo I del passo 3
8. fine
5) Codifica del corpo del pulsante btnCalcola_Click
Dim m, n, i As Integer
Dim x As String
m = Val(txtM.Text)
For i = 1 To m
x = "inserisci il " & i & ") numero"
n = Val(InputBox(x))
If (n Mod 2 = 0) Then MsgBox("numero è pari")
Else MsgBox("numero è dispari")
End If
Next
6) L’esecuzione del programma fa apparire a video N coppie di finestre del tipo seguente:
6
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
PROBLEMA7: Trovare l’algoritmo che letti N numeri naturali, calcoli la media tra il 1°
elemento, l’ultimo elemento e l’elemento centrale e la stampi a video.
1) Tabelle delle variabili di input e output
Nome
Descrizione
N
E’ la dimensione dei numeri
Num
E’ il numero letto
I
E’ l’indice del ciclo
Som
Somma dei 3 elementi
Media E’ la media dei 3 elementi
R
E’ il resto della divisione
Q
E’ il quoziente della divisione
Meta
Posizione dell’elemento centrale
2) Algoritmo per passi
1. inizio
2. leggi la dimensione N
3. Assegna a Q, N / 2
4. Assegna a R, N – 2 * Q
5. Se R = 0 allora Meta = N / 2
altrimenti Meta = N / 2 +1, fine se
6. Per I che va da 1 a N
7. Leggi Numero, Num
8. Se I=1 allora assegna a Som, Som+Num
9. Se I=Meta allora assegna a Som, Som+Num
10. Se I=N allora assegna a Som, Som+Num
11. Incrementa I, di 1 e torna al passo 6
12. Assegna a Media, Som / 3
13. Scrivi Media
14. fine
Tipo
Input
Numero intero
X
Numero intero
X
Numero intero
Numero Intero
Numero Decimale
Numero Intero
Numero Intero
Numero Intero
Output
Lavoro
X
X
X
X
X
X
3) Algoritmo col diagramma a blocchi
Non disegnato per mancanza di tempo
4) Creazione del form Visualbasic
(Test effettuato con i seguenti numeri: 1, 2,
3, 4, 5. In tal caso infatti la somma=1+3+5=9
e quindi la media è 9 / 3 = 3 )
5) Codifica del corpo del pulsante btnCalcolaMedia_Click
Dim N, NUM, Q, R As Integer
Dim Meta, SOM, I As Integer
Dim MEDIA As Decimal
N = Val(txtN.Text)
Q = N / 2, R = N - 2 * Q
If R = 0 Then
Meta = Q
Else
Meta = Q + 1
End If
For I = 1 To N
NUM=InputBox("Numero ?”)
If (I = 1) Then
SOM = SOM + NUM
End If
If (I = Meta) Then
SOM = SOM + NUM
End If
If (I = N) Then
SOM = SOM + NUM
End If
Next
MEDIA = SOM / 3
txtMedia.Text = MEDIA
7
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
PROBLEMA8: Trovare l’algoritmo che letti N numeri naturali, calcoli la media tra gli
elementi di indici pari e la stampi a video.
1) Tabelle delle variabili di input e output
Nome
Descrizione
N
E’ la dimensione dei numeri
Num
E’ il numero letto
I
E’ l’indice del ciclo
Som
Somma degli elementi di indici I pari
Media E’ la media degli elementi di indici pari
Cont
Contatore di elementi di indici pari
2) Algoritmo per passi
1. Inizio
2. Leggi N
3. Assegna a Cont, N / 2
4. Per I che va da 1 a N
5. Leggi Numero, Num
6. Q = I / 2
7. R = I – 2 * Q
8. Se R=0 allora assegna a Som, Som+Num
9. Incrementa I, di 1 e torna al passo 4
10. Assegna a Media, Som / Cont
11. Scrivi Media
12. Fine
Tipo
Input
Numero intero
X
Numero intero
X
Numero intero
Numero Intero
Numero Decimale
Numero Intero
Output
Lavoro
X
X
X
X
3) Algoritmo col diagramma a blocchi
Non disegnato per mancanza di tempo
4) Creazione del form Visualbasic
(Test effettuato con i seguenti numeri: 1, 2,
3, 4, 5, 6, 7. In tal caso infatti la somma = 2
+ 4 + 6 = 12 e quindi la media è 12 / 3 = 4 )
5) Codifica del corpo del pulsante btnCalcolaMedia_Click
Dim N, NUM, Q, R, I As Integer
Dim Som, Cont As Integer
Dim MEDIA As Decimal
N = Val(txtN.Text)
SOM = 0
Cont = N/2
‘ su N numeri letti i pari sono N/2
For I = 1 To N
NUM = InputBox("NUMERO?")
Q = I / 2
R = I - (2 * Q)
If R = 0 Then
SOM = SOM + NUM
End If
Next
MEDIA = (SOM / ContNumIndPari)
txtMedia.Text = MEDIA
La struttura a iterazione a controllo di testa (WHLE - END WHILE)
Essa, nel metodo del diagramma a blocchi, si rappresenta cosi:
8
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
Essa permette di iterare una porzione di algoritmo finché è vera una certa condizione stabilita
non a priori. Essa si dice a controllo di testa poiché la condizione è posta all’inizio ovvero prima
del blocco di istruzioni dell’algoritmo da iterare .
Quando si usa tale struttura a iterazione a controllo di testa?
Essa si usa quando non si sa a priori quante volte si deve iterare il corpo dell’ algoritmo e la
porzione di algoritmo da iterare potrebbe essere eseguita anche nessuna volta.
PROBLEMA9: Trovare un algoritmo che letto un numero NUM, controlli che esso sia non
negativo cioè che è vera la condizione di ciclo NUM > = 0. Nel caso la condizione di ciclo è vera
proceda a leggere altri numeri interi. Nel caso la condizione di ciclo è falsa, esca dal
programma stampando il messaggio “Lettura terminata”. (Suggerimento: Il programma
termina quando l’utente legge un numero NUM < 0)
1) Tabelle delle variabili di input e output
Nome
Descrizione
NUM
E’ il numero da leggere.
X
E’ una stringa di caratteri
2) Algoritmo per passi
1. inizio
2. leggi il primo numero, NUM
3. finché il numero letto NUM è > = 0 esegui
4. leggi un numero
5. vai al passo 3
6. stampa il messaggio “lettura terminata”
7. fine
Tipo
Numero intero
Stringa
Input
X
Output
Lavoro
X
3) Algoritmo col diagramma a blocchi
Non disegnato per mancanza di tempo
4) Creazione del form Visualbasic
5) Codifica del pulsante btnCalcola_Click
Test al computer
Private Sub btnLeggiNumeri_Click()
Dim num As Integer
Const x As String
x = "inserisci numero"
' lettura del primo numero
num = Val(InputBox(x))
'inizio ciclo while
While (num > = 0)
' lettura dei rimanenti numeri
num = Val(InputBox(x))
End While
'fine ciclo while se la
condizione è falsa
MsgBox("Lettura terminata")
End Sub
PROBLEMA10: Trovare un algoritmo che letto un numero NUM, controlli che esso sia non
negativo, cioè che è vera la condizione di ciclo NUM > = 0. Nel caso la condizione di ciclo è vera,
se il numero è anche = 0 lo conti e poi continui a leggere altri numeri. Nel caso la condizione di
9
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
ciclo è falsa, esca dal programma stampando a video la quantità dei numeri 0 inseriti
(Suggerimento: Il programma termina quando NUM < 0)
1) Tabelle delle variabili di input e output
Nome
Descrizione
NUM
E’ il numero da leggere.
CONT
E’ il contatore dei numeri = 0
X
E’ una stringa di caratteri
Tipo
Numero intero
Numero intero
Stringa
Input
X
Output
Lavoro
X
X
2) Algoritmo per passi
3) Algoritmo col diagramma a blocchi
1. inizio
Non disegnato per mancanza di tempo
2. assegna a CONT, 0
3. leggi il primo numero, NUM
4) Creazione del form Visualbasic
4. finché il numero NUM letto è > = 0 esegui
5. se NUM=0 allora incrementa CONT, fine se
6. leggi un altro numero, NUM
7. torna al passo 4
8. stampa il messaggio “lettura terminata”
9. fine
5) Codifica del pulsante btnCalcola_Click
Test al Computer
Private Sub btnContaZero_Click ( )
Dim num, cont As Integer
Dim x As String
' lettura del primo numero
cont = 0
x = “Hai inserito " & cont & "
numeri = 0")
num = Val(InputBox(“Num?”))
'inizio ciclo while
While (num > = 0)
If (num = 0) Then
cont = cont + 1
End If
' lettura dei rimanenti numeri
num = Val(InputBox(“Num?”))
End While
'fine ciclo while se la
condizione è falsa
MsgBox(X)
End Sub
PROBLEMA11: Trovare un algoritmo che letto un numero NUM, controlli che esso sia non
negativo, cioè che è vera la condizione di ciclo NUM > = 0. Nel caso la condizione di ciclo è vera,
se il numero è anche positivo lo sommi e lo conti e continui a leggere altri numeri. Nel caso la
condizione di ciclo è falsa, esca dal programma stampando a video la media dei numeri positivi
inseriti. (Suggerimenti: utilizzare una variabile contatore cont che conti i numeri non negativi
letti ed altre due variabili somma e media, il programma termina quando NUM < 0)
10
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
1) Tabelle delle variabili di input e output
Nome
Descrizione
NUM
E’ il numero da leggere.
CONT
E’ il contatore solo dei numeri > 0
SOM
E’ la somma solo dei numeri > 0
MEDIA E’ la media solo dei numeri > 0
X
E’ una stringa di caratteri
2) Algoritmo per passi
1. inizio
2. assegna a CONT e a SOM, 0
3. leggi il primo numero, NUM
4. finché il numero letto è > = 0 esegui
5. se NUM è anche > 0 allora
assegna a SOM, SOM * NUM
e incrementa di 1, CONT, fine se
6. leggi un altro numero, NUM
7. torna al passo 4
8. assegna a MEDIA, SOM / CONT
9. stampa MEDIA
10. fine
Tipo
Numero intero
Numero intero
Numero intero
Decimal
Stringa
Input
X
Output
Lavoro
X
X
X
X
3) Algoritmo col diagramma a blocchi
Non disegnato per mancanza di tempo
4) Creazione del form Visualbasic
5) Codifica del pulsante btnCalcola_Click
Test al Computer
Test al Computer
Private Sub btnMedia_Click( )
Dim num, cont, som As Integer
Dim x As String
Dim media As Decimal
cont = 0
som = 0
x = "inserisci numero"
' lettura del primo numero
num = Val(InputBox(x))
'inizio ciclo while
While (num > = 0)
If (num > 0) then
som = som + num
cont = cont + 1
endif
' lettura dei rimanenti numeri
num = Val(InputBox(x))
End While
'fine ciclo while se la
condizione è falsa
media = som / cont
MsgBox("La media è " & media)
End Sub
PROBLEMA12: Trovare un algoritmo che letta una parola PAR, controlli che sia diversa da “
”. Nel caso la condizione di ciclo è vera, calcoli la sua lunghezza e la sommi e poi continui a
leggere altre parole. Nel caso la condizione di ciclo è falsa, esca dal programma stampando a
11
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
video il messaggio la somma delle lunghezze delle parole inserite. (Suggerimenti: utilizzare la
funzione PAR.lenght per determinare la lunghezza di PAR, una variabile somma, il
programma termina quando la PAR inserita è nulla)
1) Tabelle delle variabili di input e output
Nome
Descrizione
PAR
Parola da leggere.
SOM
Somma delle lunghezze delle parole
L
Lunghezza di una parola
X
E’ una stringa di caratteri
2) Algoritmo per passi
1. inizio
2 leggi parola, PAR
3. finché la parola, PAR è non nulla esegui
4. assegna ad L, la lunghezza di PAR
5. assegna a SOM, SOM + L
6. leggi un’ altra parola, PAR
7. torna al passo 3
8. stampa SOM
9. fine
Test al Computer
Tipo
Stringa
Numero intero
Numero intero
Stringa
Input
X
Output
Lavoro
X
X
X
3) Algoritmo col diagramma a blocchi
Non disegnato per mancanza di tempo
4) Creazione del form Visualbasic
Private Sub btnSommaLungh_Click( )
Dim PAR, x As String
Dim som, l As Integer
x = "inserisci la parola"
PAR = InputBox(x)
While PAR <> ""
l = PAR.Length
som = som + l
PAR = InputBox(x)
End While
MsgBox("somma lunghezze è " & som)
End Sub
PROBLEMA13:
Una parola si dice che è palindroma se è leggibile nello stesso modo da destra a sinistra e
viceversa come ad es. anna, osso, salas, ecc
Trovare un algoritmo che letta una parola PAR, controlli se essa sia palindroma. Per
controllare ciò utilizzare una variabile booleana, BIT inizializzata al valore TRUE. Se alla fine
del ciclo BIT sarà ancora = TRUE allora si stampi a video il messaggio: “la parola” & PAR & “
è palindroma”, altrimenti se BIT = FALSE, allora si stampi il messaggio “la parola” & PAR &
“ non è palindroma”.
(Suggerimenti: utilizzare la funzione PAR.lenght, il programma termina non appena esso si
rende conto che 2 caratteri simmetrici della PAR analizzata sono diversi assegnando a BIT il
valore FALSE; la condizione del ciclo while deve essere doppia e deve usare l’operatore logico
di congiunzione AND. Tale condizione doppia sarà vera finchè entrambe sono vere).
12
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
1) Tabelle delle variabili di input e output
Nome
Descrizione
PAR
Parola da leggere.
I, J
Indici dei caratteri di PAR
L
Lunghezza di una parola
BIT
Variabile booleana, true e false
2) Algoritmo per passi
1. inizio
2 leggi parola, PAR; assegna ad I, il valore 0
3. finché la parola è non nulla esegui
4. assegna a L, la lunghezza di PAR e BIT, true
5. finchè I < L/2 and BIT = true esegui
6. assegna a J, L - I – 1
3) Diagramma a blocchi
Tipo
Stringa
Numero intero
Numero intero
Stringa
Input
X
Output
Lavoro
X
X
X
7. se PAR(I) < > PAR (J) allora BIT = false
6. incrementa l’indice I, di 1 e vai al passo 5
9. se BIT = true allora stampa il messaggio:
“la parola è palindroma” altrimenti stampa il
messaggio: “la parola non è palindroma”
10. fine
Test al Computer
Non disegnato per mancanza di tempo
4) Creazione del form Visualbasic
5) Codifica del pulsante btnCalcola_Click
Private Sub btnPalindroma_Click( )
Dim PAR As String
Dim l As Integer ' lungh = lunghezza della parola letta PAR
Dim i, j As Integer ' i e j sono gli indici dei caratteri di PAR
Dim bit As Boolean ' bit è una variabile booleana = true o false
PAR = InputBox("inserisci la parola")
l = PAR.Length
bit = True ‘bit è true finchè i caratteri confrontati sono =
i = 0 ' i=0 poichè il 1° carattere della parola PAR ha indice = 0
While (i < l/2 And bit = True) 'entrambe vere ?
j = l - i – 1
' j contiene la posizione del carattere di PAR simmetrico a i
If (PAR(i) <> PAR(j)) Then
‘bit è false quando i caratteri simmetrici sono diversi
bit = False
End If
i = i + 1
End While
If (bit = True) Then
MsgBox("la parola " & PAR & " è palindroma")
Else
MsgBox("la parola " & PAR & " non è palindroma")
End If
End Sub
13
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
OSSERVAZIONE: Del problema13 produrre su carta il seguente test al diagramma a blocchi
disegnato.
Test dell’algoritmo. Usare PAR = anna in modo da avere i seguenti valori
PAR
anna
Lungh
4
bit
true
i
0
1
2
j
3
2
PAR(i) PAR (j)
a
a
n
n
La struttura a iterazione a controllo di coda (DO - LOOP - UNTIL)
Essa, nel metodo del diagramma a blocchi, si rappresenta cosi:
Essa permette di iterare una porzione di algoritmo finché è falsa una certa condizione stabilita
non a priori. Essa si dice a controllo di coda poiché la condizione è posta alla fine ovvero dopo il
blocco di istruzioni dell’ algoritmo da iterare.
Quando si usa tale struttura a iterazione a controllo di coda?
Essa si usa quando non si sa a priori quante volte si deve iterare il corpo dell’ algoritmo e la
porzione di algoritmo da iterare potrebbe essere eseguita almeno una volta.
RIPETIAMO I PROBLEMI 7,8,9,10, 11 CON IL CICLO DO – LOOP – UNTIL PER FAR
NOTARE LE DIFFERENZE TRA ESSI.
PROBLEMA14: Trovare un algoritmo che letto un numero NUM, controlli che esso sia non
negativo cioè che è falsa la condizione di ciclo NUM < 0. Nel caso la condizione di ciclo è falsa
proceda a leggere altri numeri interi. Nel caso la condizione di ciclo è vera esca dal programma
stampando il messaggio “Lettura terminata”. (Suggerimento: Il programma termina quando
l’utente legge un numero NUM < 0, nella label descrizione modificare la proprietà autosize a
false)
1) Tabelle delle variabili di input e output
Nome
Descrizione
NUM
E’ il numero da leggere.
X
E’ una stringa di caratteri
2) Algoritmo per passi
1. inizio
2. Fai le seguenti istruzioni
3. leggi il numero, NUM
4. finché NUM < 0 è falsa torna al passo 2
5. stampa il messaggio “lettura terminata”
6. fine
Tipo
Numero intero
Stringa
Input
X
Output
Lavoro
X
3) Algoritmo col diagramma a blocchi
Non disegnato per mancanza di tempo
4) Creazione del form Visualbasic
14
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
TEST AL COMPUTER
Private Sub btnLeggiNumeri_Click()
'Dichiarazione delle variabili
Dim num As Integer
Dim x As String
x = "inserisci numero"
'inizio ciclo do loop until
Do
num=Val(InputBox(x))
Loop Until (num < 0)
'fine ciclo do loop until se la
condizione è vera
MsgBox("Lettura terminata")
End Sub
PROBLEMA15: Trovare un algoritmo che letto un numero NUM, controlli che esso sia = 0 e
nel caso positivo lo conti. Successivamente controlli, usando la condizione di ciclo, che esso sia
non negativo cioè che è falsa la condizione NUM < 0. Nel caso la condizione di ciclo è falsa
proceda a leggere altri numeri interi ed a contarli se sono anche = 0. Nel caso la condizione di
ciclo è vera esca dal programma stampando a video la quantità dei numeri 0 inseriti
(Suggerimento: Il programma termina quando l’utente legge un numero NUM < 0)
1) Tabelle delle variabili di input e output
Nome
Descrizione
NUM
E’ il numero da leggere.
CONT
E’ il contatore dei numeri = 0
X
E’ una stringa di caratteri
Tipo
Numero intero
Numero intero
Stringa
Input
X
Output
Lavoro
X
X
2) Algoritmo per passi
3) Algoritmo col diagramma a blocchi
1. inizio
Non disegnato per mancanza di tempo
2. assegna a CONT, 0
3. Fai le seguenti istruzioni:
4) Creazione del form Visualbasic
4. leggi il numero, NUM
5. se NUM = 0 allora incrementa CONT, fine se
6. la condizione NUM < 0 è falsa, vai al passo 4
7. stampa il messaggio “lettura terminata”
8. fine
Test al computer
5) Codifica del pulsante btnCalcola_Click
Private Sub btnContaZero_Click ( )
Dim num, cont As Integer
Dim x As String
' lettura del primo numero
x = "inserisci numero"
cont = 0
15
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
'inizio ciclo do loop until
Do
' lettura dei numeri
num = Val(InputBox(x))
If (num = 0) Then
cont = cont + 1
End If
loop until (num < 0)
'fine ciclo do loop until se la
condizione è vera
MsgBox("Hai inserito " & cont & "
numeri = 0")
End Sub
PROBLEMA16: Trovare un algoritmo che letto un numero NUM, controlli che esso sia > 0 e
nel caso positivo lo sommi e lo conti. Successivamente controlli, usando la condizione di ciclo,
che esso sia non negativo cioè che è falsa la condizione NUM < 0. Nel caso la condizione di ciclo
è falsa proceda a leggere altri numeri, a sommarli e a contarli se sono anche > 0. Nel caso la
condizione di ciclo è vera esca dal programma stampando a video la media dei numeri inseriti.
(Suggerimenti: utilizzare una variabile contatore cont che conti i numeri non negativi letti ed
altre due variabili somma e media, il programma termina quando l’utente legge un numero
NUM < 0)
1) Tabelle delle variabili di input e output
Nome
Descrizione
NUM
E’ il numero da leggere.
CONT
E’ il contatore solo dei numeri > 0
SOM
E’ la somma dei numeri > 0
MEDIA E’ la media dei numeri > 0
X
E’ una stringa di caratteri
2) Algoritmo per passi
1. inizio
2. assegna a CONT e a SOM, 0
3. fai le seguenti istruzioni:
4. leggi il numero, NUM
5. se NUM > 0 allora
assegna a SOM, SOM * NUM
e incrementa di 1, CONT, fine se
6. finchè NUM < 0 è falso, vai al passo 4
7. assegna a MEDIA, SOM / CONT
8. stampa MEDIA
9. fine
Test al computer
Tipo
Numero intero
Numero intero
Numero intero
Decimal
Stringa
Input
X
Output
Lavoro
X
X
X
X
3) Algoritmo col diagramma a blocchi
Non disegnato per mancanza di tempo
4) Creazione del form Visualbasic
5) Codifica del pulsante btnCalcola_Click
Private Sub btnMedia_Click()
Dim num, cont, som As Integer
Dim x As String
Dim media As Decimal
' lettura del primo numero
x = "inserisci numero"
16
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
cont = 0
som = 0
'inizio ciclo do loop until
Do
num = Val(InputBox(x))
If (num > 0) Then
som = som + num
cont = cont + 1
End If
Loop Until (num < 0)
'fine ciclo do loop until se
la condizione è vera
media = som / cont
MsgBox("La media è" & media)
End Sub
PROBLEMA17: Trovare un algoritmo che letta una parola PAR, controlli che la sua
lunghezza sia > 0 e nel caso positivo la sommi. Successivamente controlli, usando la condizione
di ciclo, che la parola non sia = “ “, cioè che è falsa la condizione PAR = “ ”. Nel caso la
condizione di ciclo è falsa proceda a leggere altre parole ed a sommarne le lunghezze. Nel caso
la condizione di ciclo è vera esca dal programma stampando a video il messaggio “somma
lunghezze è “ & som. (Suggerimenti: utilizzare la funzione PAR.lenght per determinare la
lunghezza di PAR, una variabile somma, il programma termina quando la PAR inserita è
nulla)
1) Tabelle delle variabili di input e output
Nome
Descrizione
PAR
Parola da leggere.
SOM
Somma delle lunghezze delle parole
L
Lunghezza di una parola
X
E’ una stringa di caratteri
2) Algoritmo per passi
1. inizio
2. fai le seguenti istruzioni:
3. leggi la parola PAR
4. assegna ad L, la lunghezza di PAR
5. se la lunghezza L > 0 allora
assegna a SOM, SOM + L, fine se
6. finchè PAR= “ ” è falso torna al passo 3
8. stampa SOM
9. fine
Test al Computer
Tipo
Stringa
Numero intero
Numero intero
Stringa
Input
X
Output
Lavoro
X
X
X
3) Algoritmo col diagramma a blocchi
Non disegnato per mancanza di tempo
4) Creazione del form Visualbasic
5) Codifica del pulsante btnCalcola_Click
Private Sub btnSommaLungh_Click( )
Dim PAR, x As String
Dim som, l As Integer
17
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
x = "inserisci la parola"
Do
PAR = InputBox(x)
l = PAR.Length
If (l > 0) Then
som = som + l
End if
Loop Until (PAR = "")
MsgBox("somma lunghezze è " &
som)
End Sub
PROBLEMA18
Una parola si dice che è palindroma se è leggibile nello stesso modo da destra a sinistra e
viceversa come ad es. anna, ossesso, e cc.
Trovare un algoritmo che letta una parola PAR, controlli se essa sia palindroma. Per
controllare ciò utilizzare una variabile booleana, BIT inizializzata al valore TRUE. Se alla fine
del ciclo BIT sarà ancora = TRUE allora si stampi a video il messaggio: “la parola” & PAR & “
è palindroma”, altrimenti se BIT = FALSE, allora si stampi il messaggio “la parola” & PAR &
“ non è palindroma”.
(Suggerimenti: utilizzare la funzione PAR.lenght; il programma termina non appena esso si
rende conto che 2 caratteri simmetrici della PAR analizzata sono diversi assegnando a BIT il
valore FALSE; la condizione del ciclo do loop until deve essere doppia e deve usare l’operatore
logico di congiunzione OR. Tale condizione doppia sarà falsa finchè entrambe sono false )
1) Tabelle delle variabili di input e output
Nome
Descrizione
PAR
Parola da leggere.
I, J
Indici dei caratteri di PAR
L
Lunghezza di una parola
BIT
Variabile booleana, true e false
Tipo
Stringa
Numero intero
Numero intero
Stringa
2) Algoritmo per passi
1. inizio
2 leggi parola, PAR
3. assegna a L, lenght(PAR), BIT, true, I a 0
5. fai le seguenti istruzioni:
6. Assegna a J, L-I-1
7. se PAR(I) < > PAR(J) allora a BIT, False
8. incrementa I, di 1
6. finchè (I >L/2 OR BIT=False) è falsa vai al 5.
7. se BIT=True allora “parola palindroma”
altrimenti stampa “parola non palindroma”
10. fine
3) Diagramma a blocchi
Input
X
Output
Lavoro
X
X
X
Test al Computer
Non disegnato per mancanza di tempo
4) Creazione del form Visualbasic
18
“Dal problema all’algoritmo al form VBasic .Net – “Le strutture iterative ” - Prof. M. Simone - ITCG ”Lener” - Classe 3Cx – Marcianise A.S. 2011 / 12
5) Codifica del pulsante btnCalcola_Click
Private Sub btnPalindroma_Click( )
Dim PAR, x As String
Dim l As Integer ' lungh = lunghezza della parola letta PAR
Dim i, j As Integer ' i e j sono gli indici dei caratteri di PAR
Dim bit As Boolean ' bit è una variabile booleana = true o false
x = "inserisci la parola"
i = 0 ' i=0 poichè il 1° carattere della parola PAR ha indice = 0
PAR = InputBox(x)
l = PAR.Length
bit = True 'bit è true finchè i caratteri confrontati sono =
Do
j = l - i - 1
' j contiene la posizione del carattere di PAR simmetrico a i
If (PAR(i) <> PAR(j)) Then
'bit è false quando i caratteri simmetrici sono diversi
bit = False
End If
i = i + 1
Loop Until (i > = l / 2 Or bit = False) 'entrambe false ?
If (bit = True) Then
MsgBox("la parola " & PAR & " è palindroma")
Else
MsgBox("la parola " & PAR & " non è palindroma")
End If
End Sub
OSSERVAZIONE: Del problema18 produrre su carta il seguente test al diagramma a blocchi
disegnato:
PAR = anna in modo da avere i seguenti valori
PAR
anna
Lungh
4
bit
true
i
0
1
2
j
3
2
PAR(i)
a
n
PAR (j)
a
n
Produrre altri test a vostra scelta su carta,
testando l’algoritmo con altre parole scelte
a caso.
ESERCIZI PER CASA CON IL CICLO WHILE O CON IL CICLO DO LOOP UNTIL
PROBLEMA19: Per una serata da ballo al "Maccheroni"
di Latina, leggere una serie di amici da invitare, finchè
l'utente non inserisce la parola "FINE" e stampare quanti
hanno nel contatto come ultimo carattere la vocale "n"
(pulsante LeggiStampa)
(Ad es. se leggo i contatti: TogniN, AlbertoN, MarangoN,
De Carlini, Baldassarre, ecc. devo stampare: contN = 3)
PROBLEMA20: Per una indagine Statistica, leggere una
serie di nomi di Supermercati, finchè l'utente non inserisce
la parola "STOP" e stampare quanti hanno il nome lungo
al massimo 5 caratteri (pulsante LeggiStampa ) (Ad es. se
leggo i nomi: Todis, Sidis, Conad, Lidl, Eurospin ecc. devo
stampare: cont5 = 3)
19