Ripasso di: Algoritmi con le strutture di Selezione e cicliche in VB.Net Prof. M. Simone - ITCG Padre S. Lener Classe 4Gx Marcianise A.S.

Documenti analoghi
MODULO 4: LE STRUTTURE ITERATIVE: FOR, WHILE E DO LOOP UNTIL

MODULO 4 Dal Problema al form VBasic.Net con le strutture di sequenza e di selezione

MODULO 3 Dal Problema al form VBasic.Net con le strutture di sequenza e di selezione

1 PARTE Introduzione agli algoritmi e alla programmazione in VisualBasic.Net

MODULO 3 Programmazione in Visual Basic.Net. Parte1 - Introduzione alla programmazione in VisualBasic.Net

Paragrafo 1 - Ripasso Concetti base e Interfaccia di Visual Basic.Net 2005

1 PARTE Introduzione agli algoritmi e alla programmazione in VisualBasic.Net

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

PROGRAMMAZIONE STRUTTURATA

PROGRAMMAZIONE: Le strutture di controllo

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Rappresentazione degli algoritmi

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Reti di Calcolatori

La ricerca dicotomica

DAL DIAGRAMMA AL CODICE

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

I costrutti forniti dal linguaggio si dividono in corrispondenti classi di istruzioni

Laboratorio di Programmazione Laurea in Bioinformatica

MODULO 3 Algoritmi con le strutture Sequenza e Selezione e codifica in VB.Net

Esercitazioni di Elementi di Informatica

Corso di Fondamenti di Informatica Classi di istruzioni 2

Formalismi per la descrizione di algoritmi

CORSO DI PROGRAMMAZIONE

Programmazione con il linguaggio LibreOffice Basic

unità didattica 3 Le strutture condizionali e le strutture iterative

Fondamenti di Informatica

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

Sviluppo di programmi

Dall algoritmo al programma

Introduzione a Visual Basic Lezione 2 Cicli e anomalie

Esempio: quanto mi piace questo corso! qufuafantofo mifi pifiafacefe qufuefestofo coforsofo!

Esercitazione 4. Comandi iterativi for, while, do-while

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Esercitazioni di Fondamenti Informatica - Modulo A 1

Algoritmi e soluzione di problemi

INFORMATICA. Strutture iterative

VBA Principali Comandi

Costrutti condizionali e iterativi

Le strutture di controllo

= < < < < < Matematica 1

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Introduzione alla programmazione

Lezione 7: La Formalizzazione degli Algoritmi - Strutture di Controllo e Selettive La Programmazione Strutturata (3 p) Giovedì 21 Ottobre 2010

Matlab. Istruzioni condizionali, cicli for e cicli while.

Definizione di algoritmo

Introduzione alla programmazione Esercizi risolti

Algoritmo per l ordinamento di un array

Istruzioni iterative. Istruzioni iterative

STRUTTURE DI CONTROLLO DEL C++

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

28/02/2014 Copyright V. Moriggia

Laboratorio di programmazione

Algoritmi e dintorni: La radice quadrata Prof. Ettore Limoli. Formule iterative

Le strutture di controllo in C++

Iterazione (introduzione)

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Esercitazione 3. Espressioni booleane I comandi if-else e while

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Dall analisi alla codifica (1)

Matcos: matematica. Ing. Ivano Coccorullo

Istruzioni condizionali di diramazione in Fortran 90

Introduzione agli Algoritmi

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

C espressioni condizionali

Strutture di Controllo

Preparati per il compito in classe Modulo 5

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Esempio: somma di due numeri

Programmare in C. Esempio: Algoritmo del Risveglio

VISUAL BASIC FOR APPLICATION

Laboratorio di Python

Cosa si intende con stato

Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab 06 Array" Lab06 1

print((math.floor(1345/10)%10); print (Math.floor(1345/100)%10); Le funzioni in JavaScript

Lezione 6 Introduzione al C++ Mauro Piccolo

Istruzioni Condizionali

Istruzioni iterative (o cicliche)

Problemi, algoritmi e oggetti

Esercitazione. Esercizio 1 Scrivere un programma che calcoli e visualizzi la somma degli interi pari da 2 a 1000 (estremi compresi)

Esempi di Problemi Iterativi

Dall analisi alla codifica (2)

Fondamenti di Informatica T-1 Modulo 2

COSA SONO I FLOW CHART

(A) CONOSCENZA TERMINOLOGICA (B) CONOSCENZA E COMPETENZA

Esercizi di programmazione in linguaggio C - Costrutto iterazione

6) Descrivere con un diagramma a blocchi un algoritmo che legga da input due numeri ne calcoli il prodotto in termini di somme ripetute.

Visual basic base Lezione 13. Ancora su ListBox e cicli

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

Modulo 1 Concetti di base della Tecnologia dell Informazione

Transcript:

MODULO 2 Algoritmi con le strutture di Selezione e cicliche in VB.Net 1) Si parla di struttura di selezione ad una via, quando il percorso falso non è presente. Essa, nel metodo del diagramma a blocchi, si rappresenta cosi: Nel diagramma a blocchi Esempio: N1 è positivo? In Visual Basic.Net Dim N1 As Integer ' INPUT N1=Val(txtN1.text) ' CALCOLO If N1 > 0 Then MsgBox(N1) 2) Si parla di struttura di selezione a 2 vie, quando vi sono entrambi i percorsi: vero e falso. Essa, nel metodo del diagramma a blocchi, si rappresenta cosi: Nel diagramma a blocchi Esempio: Max tra N1 e N2 In Visual Basic.Net ' DICHIARAZIONE DELLE VARIABILI Dim N1, N2, Max As Integer ' INPUT N1=Val(txtN1.text); N2=Val(txtN2.text) ' CALCOLO If N1 > N2 Then Max = N1 Else Max = N2 OUTPUT MsgBox(Max) 3) Si parla di struttura di selezione a più vie, quando oltre ai percorsi vero e falso ce ne sono altri. Essa, nel metodo del diagramma a blocchi, si rappresenta cosi: (vedi esempio) Esempio: Letto un prezzo di un prodotto e la sua quantità, in base alla quantità richiesta effettua uno tasso di sconto diverso. In Visual Basic.Net Dim prezzo, quantità, tasso As Decimal 'INPUT prezzo = Val(txtPrezzo.Text) quantita = Val(txtQuantita.Text) 'SELEZIONE MULTIPLA IN VB.NET Select Case quantita Case 1 tasso = 10 Case 2 tasso = 20 Case 3 tasso = 30 Case Else tasso = 40 'COMPRENDE I CASI quantita > 3 End Select 1

Problema1: Dati due numeri N1 e N2, determinare il minimo e il massimo e stamparli N1 N2 Primo Numero Secondo Numero MIN MA Minimo tra i due numeri Massimo tra due numeri 2. dammi due valori diversi per N1 e per N2 3. confronta N1 con N2 4. se N1 > N2, allora MA=N1 e MIN = N2 5. altrimenti MIN = N1 e MA = N2 6. stampa MIN e MA 7. fine 4) Creazione del form Visualbasic. Net 5) Codifica del corpo dei pulsanti di calcolo Dim N1, N2, Max, Min As Integer ' input N1 = Val(txtN1.Text) N2 = Val(txtN2.Text) ' controllo selezione a 2 vie If N1 > N2 Then Max = N1 Min = N2 Else Max = N2 Min = N1 ' output lbl4.text = Max lbl5.text = Min Problema2 : Dati due numeri N1 e N2, ordinarli in ordine crescente e stamparli a video N1 N2 Primo Numero Secondo Numero 2. dammi due valori diversi per N1 e per N2 3. confronta N1 con N2 4. se N1 > N2, allora stampa N2 e poi N1 5. altrimenti stampa N1 e poi N2 6. fine 4) Creazione del form Visualbasic. Net 5) Codifica del corpo dei pulsanti di calcolo Dim N1, N2 As Integer ' input N1 = Val(txtN1.Text) N2 = Val(txtN2.Text) ' controllo e stampa a video If N1 < N2 Then lbl3.text = N1 lbl4.text = N2 Else lbl3.text = N2 lbl4.text = N1 2

Problema3: Dati due numeri N1 e N2, calcolare quello positivo e quello negativo e stamparlo N1 N2 Primo Numero Secondo Numero POS NEG Numero Positivo Numero Negativo Numero Intero Numero Intero 2. dammi due valori diversi per N1 e per N2 3. confronta N1 con N2 4. se N1 > 0, allora POS=N1 e stampa POS 5. altrimenti NEG=N1 e stampa NEG 5. se N2 >0, allora POS=N2 e stampa POS 5. altrimenti NEG=N2 e stampa NEG 6. fine 4) Creazione del form Visualbasic. Net 5) Codifica del corpo dei pulsanti di calcolo Dim N1, N2, POS, NEG As Integer N1 = Val(txtN1.text) N2 = Val(txtN2.text) If N1 > 0 Then POS = N1 lbl4.text = POS Else NEG = N1 lbl3.text = NEG If N2 > 0 Then POS = N1 lbl4.text = POS Else NEG = N2 Lbl3.Text = NEG Problema4: Dati due numeri N1 e N2, determinare quello pari e quello dispari e stamparli N1 N2 Primo Numero Secondo Numero PARI DISP Numero Pari Numero Dispari Numero Intero Numero Intero Q1,Q2 R1,R2 Quozienti dei numeri N1 e N2 Resti delle divisioni per 2 Numero Intero Numero Intero 2. dammi due valori diversi per N1 e per N2 3. Calcola Q1=INT(N1/2) e R1=N1-2*Q1 4. Calcola Q2=INT(N2/2) e R2=N2-2*Q2 5. se R1=0 allora PARI=N1 e stampa PARI 5) Codifica del corpo dei pulsanti di calcolo Dim N1, N2, PARI, DISP As Integer 6. altrimenti DISP=N1 e stampa DISP Dim Q1, Q2, R1, R2 As Integer N1 = Val(txtN1.text) 7. se R2=0 allora PARI=N2 e stampa PARI N2 = Val(txtN2.text) 8. altrimenti DISP=N2 e stampa DISP Q1=INT(N1/2); Q2=INT(N2/2) 9. fine R1=N1-2*Q1; R2=N2-2*Q2 If R1 = 0 Then 4) Creazione del form Visualbasic. Net PARI = N1; lbl4.text = PARI Else DISP = N1; lbl3.text = DISP If R2 = 0 Then PARI = N2; lbl4.text = PARI Else DISP = N2; lbl3.text = DISP 3

Problema5: Dati tre numeri N1,N2 e N3 determinare quello Max e stamparlo a video N1 N2 N3 Primo Numero Secondo Numero Terzo Numero 2. dammi i valori N1, N2, N3 3. Assegna a Max, il numero N1 4. Se N2 > Max allora a Max assegna N2 5. Se N3 > Max allora a Max assegna N3 6. stampa Max 7. fine 4) Creazione del form Visualbasic. Net 5) Codifica del corpo del pulsante calcola Dim N1, N2, N3, Max As Integer ' input N1 = Val(txtN1.text) N2 = Val(txtN2.text) N3 = Val(txtN3.text) Max = N1 ' calcolo If N2 > Max Then Max = N2 If N3 > Max Then Max = N3 ' output lbl5.text = Max PROBLEMA6: Scrivere un algoritmo che dati 3 numeri N1, N2 e N3 positivi e negativi, calcoli la somma dei numeri positivi e la stampi a video. N1 N2 N3 Primo Numero Secondo Numero Terzo Numero SOM Somma dei numeri positivi 2. dammi i valori N1, N2, N3 3. Se N1 > 0 allora a SOM=SOM+N1 4. Se N2 > 0 allora a SOM=SOM+N2 5. Se N3 > 0 allora a SOM=SOM+N3 6. stampa SOM 7. fine 4) Creazione del form Visualbasic. Net 5) Codifica del corpo del pulsante calcola Dim N1, N2, N3, Max As Integer ' input N1 = Val(txtN1.text) N2 = Val(txtN2.text) N3 = Val(txtN3.text) ' calcolo If N1 > 0 Then SOM=SOM+N1 If N2 > 0 Then SOM=SOM+N2 If N3 > 0 Then SOM=SOM+N3 ' output lbl5.text = SOM 4

La variabile conteggio Una variabile conteggio è un contatore che viene inizializzato al valore zero 1 e poi viene incrementato di una unità ogni qual volta si verifica una certa condizione. PROBLEMA7: Scrivere un algoritmo che dati 3 numeri N1, N2 e N3 positivi e negativi, conti quanti sono positivi e li stampi a video. (Suggerimento: usare una variabile conteggio contapos). N1 N2 N3 Primo Numero Secondo Numero Terzo Numero CONTPOS Contatore di numeri positivi 2. dammi i valori N1, N2, N3 3. Se N1 > 0 allora CONTPOS+=1 4. Se N2 > 0 allora CONTPOS+=1 5. Se N3 > 0 allora CONTPOS+=1 6. stampa CONTPOS 7. fine 4) Creazione del form Visualbasic. Net 5) Codifica del corpo del pulsante calcola Dim N1, N2, N3, Max As Integer ' input N1 = Val(txtN1.text) N2 = Val(txtN2.text) N3 = Val(txtN3.text) ' calcolo If N1 > 0 Then CONTPOS+=1 If N2 > 0 Then CONTPOS+=1 If N3 > 0 Then CONTPOS+=1 ' output lbl5.text = CONTPOS PROBLEMA8: Scrivere un algoritmo che dati 3 numeri N1, N2 e N3 pari e dispari, conti quanti sono pari e li stampi a video. (Suggerimento: usare una variabile conteggio contapari) N1 N2 N3 Primo Numero Secondo Numero Terzo Numero CONTPARI Q1, Q2 R1, R2 Contatore dei numeri pari Quozienti Q1 e Q2 Resto R1 e R2 1 Per far capire il perché la variabile conteggio viene inizializzata a zero, dire che essa è simile al contatore del contachilometri dell automobile o al contasecondi del cronometro di un orologio: tutti partono da zero. In seguito, però, ci saranno anche variabili a conteggio che saranno inizializzata ad un valore diverso come ad es. la variabile indice ciclo (ad 1, a 2) ecc. 5

2. dammi i valori N1, N2, N3 3. Q1=N1/2, Q2=N2/2, Q3=N3/2 4. R1=N1-Q1*2, R2=N2-Q2*2, R3=N3-Q3*2, 5. Se R1 = 0 allora CONTPARI+=1 6. Se R2 = 0 allora CONTPARI+=1 7. Se R3 = 0 allora CONTPARI+=1 8. stampa CONTPARI 9. fine 4) Creazione del form Visualbasic. Net 5) Codifica del corpo del pulsante calcola Dim N1, N2, N3, Q1, Q2, Q3 As Integer ' input N1=Val(txtN1.text), Q1=N1/2, R1=N1-Q1*2 N2=Val(txtN2.text), Q2=N2/2, R2=N2-Q2*2 N3=Val(txtN3.text), Q3=N3/2, R3=N3-Q3*2 ' calcolo If R1 = 0 Then CONTPARI+=1 If R2 = 0 Then CONTPARI+=1 If R3 = 0 Then CONTPARI+=1 ' output lbl5.text = CONTPOS PROBLEMA9: Scrivere un algoritmo che dati 3 numeri a, b e c li ordini in modo strettamente crescente. (Suggerimento: basta calcolare prima il minimo tra a e b ed tra a e c; poi calcolare il minimo tra b e c; usare una variabile scambio) a b c Primo Numero Secondo Numero Terzo Numero T Variabile Temporanea 2. dammi i valori a, b, c 3. se a > b scambiali di posto in modo che il minimo sia al 1) posto 4. se a > c scambiali di posto in modo che il minimo sia al 1) posto 5. se b > c scambiali di posto in modo che il minimo sia al 2) posto 6. stampa a video i nuovi valori di a,b e c 7. fine 4) Creazione del form Visualbasic. Net 5) Codifica del corpo del pulsante calcola Dim t, a, b, c As Integer ' input a = Val(txtA.Text) b = Val(txtB.Text) c = Val(txtC.Text) ' calcolo del minimo tra a,b e c e lo si mette al primo posto If a > b Then t = a a = b b = t If a > c Then t = a a = c c = t ' calcolo del minimo tra b e c e lo si mette al secondo posto If b > c Then t = b b = c c = t ' stampa dei numeir in ordine crescente lbl5.text=a lbl6.text=b lbl7.text=c 6

PROBLEMA 10. Sapendo che un numero a è un quadrato perfetto se la sua radice è un numero intero, cioè: trovare l algoritmo che consenta di sapere se il numero a inserito è un quadrato perfetto. Suggerimento: la funzione radice quadrata da usare in VisualBasic.Net è math.sqrt( ) a Numero da verificare b qb Parte intera radice quadrata di a Quadrato di b 2. dammi il valore del numero: a 3. ad b associa la parte intera della radice quadrata di a 4. se b*b = a allora stampa il messaggio a video a è un quadrato perfetto 5. altrimenti stampa il messaggio a video a non è un quadrato perfetto 6. fine 4) Creazione del form Visualbasic. Net 5) Codifica del corpo del pulsante calcola Dim a, b, qb As Integer; a = val(inputbox(txta.text)) b = int(math.sqrt(a)) qb=b*b If qb = a Then lbl1.text= "a è un quadrato perfetto" else lbl1.text= "a non è un quadr. perfetto" PROBLEMA11: Scrivere un algoritmo che dati i 2 coefficienti b e c, di una equazione di 1 grado bx + c = 0, calcoli: il valore della soluzione x, se l'equazione è determinata oppure stampi a video il messaggio eq. impossibile o eq. indeterminata (Suggerimento l eq. bx + c = 0 con b e c 0 è determinata e ha un unica soluzione x = - c / b; l equazione del tipo 0 = c, con c diverso da 0 è impossibile; l equazione 0 = 0 è indeterminata (cioè ha infinite soluzioni)). b c x Coefficiente della x Coefficiente termine noto Soluzione dell equazione Numero decimale 7

2. dammi valori dei coefficienti: b, c 3. se b<> 0 allora stampa x= - c / b 4. se b=0 e c<>0 allora eq. indeterminata 5. se b=0 e c=0 allora eq. impossibile 6. fine 4) Creazione del form Visualbasic. Net 5) Codifica del corpo del pulsante calcola Dim b, c As Integer Dim x As Decimal ' bx+c=0 b = Val(TextBox1.Text) c = Val(TextBox2.Text) If (b<>0) Then x = -c / b lbl.text=x If (b=0 And c<>0) Then MsgBox("b=0 e c<>0 non esistono soluzioni",32, "Attenzione") If (b=0 And c=0) Then 'caso in cui b = 0 e c = 0 MsgBox(" 0=0 infinite soluzioni ", 32, "Attenzione") PROBLEMA12: Scrivere un algoritmo che dati i 3 coefficienti a,b e c, tutti e 3 0, di una equazione di 2 grado calcoli, se il delta > 0 i valori delle soluzioni: x 1 e x 2 della equazione: ax 2 +bx+c = 0. Se invece il delta < 0, stampi a video il messaggio soluzioni non reali a b c Coefficiente della x 2 Coefficiente della x Termine noto delta x1 x2 Valore = b 2-4*a*c Prima radice Seconda radice 2. dammi valori dei coefficienti: a, b, c 3. calcolo del delta=b*b - 4*a*c 4. se delta < 0 allora mostra a video il messaggio che le soluzioni non sono reali, altrimenti 5. calcola x1 con la formula conosciuta 6. calcola x2 con la formula conosciuta 7. stampa a video i valori di x1 e di x2 8. fine 4) Creazione del form Visualbasic. Net 5) Codifica del corpo del pulsante calcola Dim a, b, c, delta As Integer Dim x1, x2 As Double ' input a = Val(txtA.Text) b = Val(txtB.Text) c = Val(txtC.Text) 'calcolo delta = (b * b) - (4 * a * c) If delta < 0 Then MsgBox(" <0 soluzioni non reali", 32, "Attenzione") Else ' Math.Sqrt() è la f. radice quadrata x1 = (-b - Math.Sqrt(delta)) / (2 * a) x2 = (-b + Math.Sqrt(delta)) / (2 * a) ' output lbl6.text = x1 lbl8.text = x2 8

Problema13: Scrivere un algoritmo che dati il prezzo e la quantità di un prodotto da acquistare, calcoli sull importo totale lordo: lo sconto del 10% se la quantità = 1; lo sconto del 20% se la quantità = 2; lo sconto del 30% se la quantità = 3; e lo sconto del 40% in tutti gli altri casi e stampi a video l importo netto scontato da pagare. Per la realizzazione di un programma in VB.net seguire i seguenti 5 passi: 1) Tabelle delle variabili di input, di output e di lavoro prezzo quantità Prezzo del prodotto Quantità dello stesso prodotto Numero decimale ilordo inetto sconto tasso Importo lordo Importo netto da pagare Sconto da applicare all importo lordo Tasso di sconto in base alla quantità Numero decimale Numero decimale 1. Inizio 2. Leggi il prezzo del prodotto 3. Leggi la quantità del prodotto 4. Calcola ilordo = prezzo*quantita 5. Se la quantità = 1 allora tasso = 10 6. Se la quantità = 2 allora tasso = 20 7. Se la quantità = 3 allora tasso = 30 8. Negli altri casi, altrimenti tasso = 40 9. Calcola sconto = ilordo*tasso /100 10. Calcola inetto = ilordo - sconto 11. Stampa a video l importo netto 12. Fine 4) Creazione del form Visualbasic. Net 5) CODIFICA PULSANTE Calcola Dim prezzo, ilordo As Decimal Dim inetto, sconto As Decimal Dim quantita, tasso As Byte 'INPUT prezzo = Val(txtPrezzo.Text) quantita = Val(txtQuantita.Text) 'CALCOLO IMPORTO LORDO DEL TOTALE DELLA SPESA ilordo = prezzo * quantita 'SELEZIONE MULTIPLA IN VIASUAL BASIC.NET Select Case quantita 9

Case 1 tasso = 10 Case 2 tasso = 20 Case 3 tasso = 30 'TALE CASO INGLOBA TUTTI GLI ALTRI POSSIBILI CASI, CIOE CON QUANTITA > 3 Case Else tasso = 40 End Select 'CALCOLO SCONTO SULL IMPORTO TOTALE LORDO sconto = ilordo * tasso / 100 inetto = ilordo - sconto 'OUTPUT IMPORTO NETTO txtimporto.text = inetto Problema14: Scrivere un algoritmo che dato il prezzo di un cellulare e data la quantità dei pezzi venduti calcoli sull imponibile: lo sconto del 10% se la quantità dei pezzi venduti è fino a 3; lo sconto del 20% se la quantità dei pezzi venduti è fino a 5; lo sconto 2 del 30% se la quantità dei pezzi venduti è fino a 10; lo sconto del 40% se la quantità dei pezzi venduti è > 10. Calcoli, inoltre, il tasso di sconto, l imponibile, l importo netto scontato, l iva del 20%, l importo ivato. Stampare a video: il tasso di sconto, lo sconto, l imponibile, l importo netto scontato, l IVA del 20% e l importo ivato (o lordo o totale) 1) Tabelle delle variabili e costanti costo pezzi Costo di un cellulare N.ro di pezzi dello stesso cellulare Numero decimale iva ilordo inetto ivato sconto tasso Iva da aggiungere all importo netto Importo lordo Importo al netto dello sconto Importo totale ivato Sconto da applicare Tasso di sconto in base ai pezzi Numero decimale Numero decimale Numero decimale Numero decimale Numero decimale 1. Inizio 2. Leggi il costo di un cellulare 3. Leggi il n.ro di pezzi di quel cellulare 4. Calcola imponibile = costo*n.ro dei pezzi 5. Se i pezzi sono fino a 3 allora tasso = 10 6. Se i pezzi sono fino a 5 allora tasso = 20 7. Se i pezzi sono fino a 10 allora tasso = 30 8. Negli altri casi, altrimenti il tasso = 40 9. Calcola lo sconto = imponibile*tasso /100 10. Calcola inetto = imponibile sconto 11. Calcola iva=inetto*20/100 12. Calcola ivato=inetto+iva 11. Stampa a video il tasso, lo sconto, 12. Stampare l importo lordo, l importo netto 13. Stampare l IVA, l importo Ivato 12. Fine 5) Codifica del corpo del pulsante Calcola Dim pezzi, tasso As Byte Dim costo, imponibile As Decimal Dim inetto, ivato As Decimal Dim iva, sconto As Decimal 'INPUT costo = Val(txtCosto.Text) pezzi = Val(txtPezzi.Text) 'SELEZIONE MULTIPLA IN VBASIC.NET Select Case pezzi Case 1 To 3 tasso = 10 Case 1 To 5 tasso = 20 Case 1 To 10 tasso = 30 2 Attenzione: Nel problema13 si usa la frase quantità uguale ad 3 e nel problema 14 si usa la frase pezzi fino ad 3. Questa diversità determina una differenza nell uso del costrutto Case nel codice di VisualBasic.Net 10

4) Creazione del Form Visualbasic. Net Case Else tasso = 40 End Select imponibile = costo * pezzi sconto = imponibile * tasso / 100 inetto = imponibile - sconto iva = inetto * 20 / 100 ivato = inetto + iva 'OUTPUT txttasso.text = tasso txtsconto.text = sconto txtilordo.text = imponibile txtinetto.text = inetto txtiva.text = iva txtivato.text = ivato Problema15: Scrivere un algoritmo che data una temperatura stampa a video il messaggio: a) molto caldo se la temperatura è > 32; b) caldo se la temperatura è > 25; c) mite se la temperatura è > 16; d) fresco se la temperatura è > 10; e) freddo se la temperatura è > 0; f) molto freddo se la temperatura è altrimenti. 1) Tabelle delle variabili e costanti temp Temperatura scelta Numero decimale 1. Inizio 2. leggi la temperatura temp 3. Se la temp > 32 allora molto caldo 4. Se la temp > 25 allora caldo 5. Se la temp > 16 allora mite 6. Se la temp > 10 allora fresco 7. Se la temp > 0 allora freddo 8. Altrimenti il messaggio molto freddo 9. Fine 4) Creazione del Form Visual Basic. Net 5) Codifica del corpo del pulsante Calcola Dim temp As Integer temp = Val(txtTemperatura.Text) Select Case temp Case Is > 25 lblmessaggio.text = "Caldo" Case Is > 16 lblmessaggio.text = "Mite" Case Is > 10 lblmessaggio.text = "Fresco" Case Is > 0 lblmessaggio.text = "Freddo" Case Else lblmessaggio.text = "Molto Freddo" End Select Problema16 Scrivere un algoritmo che creata una combobox contenente i numeri da 1 a 10, in base all elemento scelto dall utente nella combobox e alla pressione del tasto calcola visualizzi in 10 label la tabellina del numero richiesto. 1) Tabelle delle variabili e costanti num numero della tabellina 1. Inizio 2. Scegli elemento dalla combobox 3. Assegna a num, l elemento scelto 5) Codifica del corpo del pulsante Calcola 11

4. Fai le seguenti assegnazioni R1=1 * num R2=2 * num R3 = 3 * num R4=4 * num R5=5 * num R6 = 6 * num R7=7 * num R8=8 * num R9 = 9 * num R10 = 10 * num 5. Stampa in label R1,R2,R3,R4,R5 6. Fine 4) Creazione del Form Visualbasic. Net Dim num As Integer Dim R1, R2, R3, R4, R5, R6, R7, R8, R9, R10 As Integer ' input num = cmbnumero.selecteditem 'calcolo R1=1 * num R2=2 * num R3 = 3 * num R4=4 * num R5=5 * num R6 = 6 * num R7=7 * num R8=8 * num R9 = 9 * num R10 = 10 * num ' output lbl1.text=r1 lbl2.text=r2 lbl3.text=r3 lbl4.text=r4 lbl5.text=r5 lbl6.text=r6 lbl7.text=r7 lbl8.text=r8 lbl9.text=r9 lbl10.text = R10 Problema 17. Scrivere un algoritmo che creata una combobox di 30 parole scritte in italiano", in base alla parola scelta la traduca in dialetto napoletano, visualizzando la parola tradotta in controllo a vostra scelta: casella di testo o label. (Suggerimento: utilizzare la struttura di selezione Select Case per gestire tutti e 30 i casi nella combobox) 1) Tabelle delle variabili e costanti parola E il termine selezionato da tradurre stringa 1. Inizio 2. assegna a parola, il termine selezionato 3. se parola= ragazzo allora scrivi guaglione 4. se parola= fidanzata allora scrivi guagliona 5. ecc 6. Fine 4) Creazione del Form Visualbasic. Net 5) Codifica del Combobox cmbita Dim parola As String parola = cmbita.selecteditem Select Case parola Case "ragazzo" txtnap.text = "guaglione" Case "fidanzata" txtnap.text = "guagliona" Case "padre" txtnap.text = "pat" Case "madre" txtnap.text = "mam" Case "sorella" txtnap.text = "sor"............ End Select Le strutture di ripetizione o iterative o ciclo Esse, in generale, consentono di ripetere l esecuzione di una porzione di algoritmo più volte, finché è verificata una certa condizione. Esse possono 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 - NET) Essa, nel metodo del diagramma a blocchi, si rappresenta cosi: 12

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? 3 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, N Numero generico da sommare SOM Somma totale dei 10 numeri E una stringa di caratteri 3 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 13

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 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: 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) 14

M N SOM I Dimensione dei numeri Numero generico da sommare Somma totale dei 10 numeri E l indice del ciclo E una stringa di caratteri 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 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 4 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. N E il numero letto MA E il maggiore dei 10 numeri I E l indice del ciclo E una stringa di caratteri 4 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. 15

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 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 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. M N E la dimensione dei numeri. E il numero letto MA E il maggiore degli N numeri letti I E l indice del ciclo E una stringa di caratteri 2. leggi la dimensione M 3. leggi il primo numero e assegnalo a MA 4. per I che va da 2 a M 5. leggi il I) numero 6. se il numero del passo 4 > MA allora a MA, assegna il nuovo numero, fine se 7. vai al prossimo I e torna al passo 4 8. scrivi a video MA 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 16

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) M N E la dimensione dei numeri. E il numero letto I E l indice del ciclo E una stringa di caratteri 2. leggi la dimensione M 3. per I che va da 1 a M 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 4) Creazione del form Visualbasic 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") ' incremento indice i del ciclo Next 6) L esecuzione del programma fa apparire a video N coppie di finestre del tipo seguente: 17

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) M N E la dimensione dei numeri. E il numero letto I E l indice del ciclo E una stringa di caratteri 2. leggi la dimensione M 3. per I che va da 1 a M 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 4) Creazione del form Visualbasic 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") Next 6) L esecuzione del programma fa apparire a video N coppie di finestre del tipo seguente: 18

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. N Num E la dimensione dei numeri E il numero letto I Som Media R Q Meta E l indice del ciclo Somma dei 3 elementi E la media dei 3 elementi E il resto della divisione E il quoziente della divisione Posizione dell elemento centrale Numero Intero Numero Decimale Numero Intero Numero Intero Numero Intero 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 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 For I = 1 To N NUM=InputBox("Numero? ) If (I = 1) Then SOM = SOM + NUM If (I = Meta) Then SOM = SOM + NUM If (I = N) Then SOM = SOM + NUM Next MEDIA = SOM / 3 txtmedia.text = MEDIA PROBLEMA8: Trovare l algoritmo che letti N numeri naturali, calcoli la media tra gli elementi di indici pari e la stampi a video. 19

N Num I Som Media Cont E la dimensione dei numeri E il numero letto E l indice del ciclo Somma degli elementi di indici I pari E la media degli elementi di indici pari Contatore di elementi di indici pari Numero Intero Numero Decimale Numero Intero 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 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 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: 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. 20

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) NUM E il numero da leggere. E una stringa di caratteri 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 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 ciclo è falsa, esca dal programma stampando a video la quantità dei numeri 0 inseriti (Suggerimento: Il programma termina quando NUM < 0) NUM CONT E il numero da leggere. E il contatore dei numeri = 0 21

E una stringa di caratteri 2. assegna a CONT, 0 3. leggi il primo numero, NUM 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 4) Creazione del form Visualbasic 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 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 ' lettura dei rimanenti numeri num = Val(InputBox( Num? )) End While 'fine ciclo while se la condizione è falsa MsgBox() 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) NUM E il numero da leggere. CONT SOM MEDIA E il contatore solo dei numeri > 0 E la somma solo dei numeri > 0 E la media solo dei numeri > 0 E una stringa di caratteri Decimal 22

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 4) Creazione del form Visualbasic 5) Codifica del pulsante btncalcola_click 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 Test al Computer 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 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) 23

PAR Parola da leggere. SOM Somma delle lunghezze delle parole L Lunghezza di una parola E una stringa di caratteri 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 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). PAR Parola da leggere. I, J Indici dei caratteri di PAR L BIT Lunghezza di una parola Variabile booleana, true e false 24

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 4) Creazione del form Visualbasic 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 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 i = i + 1 End While If (bit = True) Then MsgBox("la parola " & PAR & " è palindroma") Else MsgBox("la parola " & PAR & " non è palindroma") End Sub 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 Lungh bit i j PAR(i) PAR (j) anna 4 true 0 3 a a 1 2 n n 2 25

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) NUM E il numero da leggere. E una stringa di caratteri 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 4) Creazione del form Visualbasic 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 26

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) NUM E il numero da leggere. CONT E il contatore dei numeri = 0 E una stringa di caratteri 2. assegna a CONT, 0 3. Fai le seguenti istruzioni: 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 4) Creazione del form Visualbasic 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 'inizio ciclo do loop until Do ' lettura dei numeri num = Val(InputBox(x)) If (num = 0) Then cont = cont + 1 loop until (num < 0) 'fine ciclo do loop until se la condizione è vera MsgBox("Hai inserito " & cont & " numeri = 0") End Sub 27

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) NUM E il numero da leggere. CONT SOM MEDIA E il contatore solo dei numeri > 0 E la somma dei numeri > 0 E la media dei numeri > 0 E una stringa di caratteri Decimal 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 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" cont = 0 som = 0 'inizio ciclo do loop until Do num = Val(InputBox(x)) If (num > 0) Then som = som + num cont = cont + 1 Loop Until (num < 0) 'fine ciclo do loop until se la condizione è vera media = som / cont MsgBox("La media è" & media) End Sub 28

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) PAR Parola da leggere. SOM Somma delle lunghezze delle parole L Lunghezza di una parola E una stringa di caratteri 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 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 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, 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. 29

(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 ) PAR Parola da leggere. I, J Indici dei caratteri di PAR L BIT Lunghezza di una parola Variabile booleana, true e false 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 3) Diagramma a blocchi 4) Creazione del form Visualbasic 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 Test al Computer 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 i = i + 1 Loop Until (i > = l / 2 Or bit = False) 'entrambe false? If (bit = True) Then 30

MsgBox("la parola " & PAR & " è palindroma") Else MsgBox("la parola " & PAR & " non è palindroma") 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 Lungh bit i j PAR(i) PAR (j) Produrre altri test a vostra scelta su carta, anna 4 true 0 3 a a testando l algoritmo con altre parole scelte 1 2 n n a caso. 2 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) 31