L’algoritmo Il termine algoritmo deriva da AL-KWHARIZMI, matematico arabo vissuto nell’VIII secolo d.C. considerato il padre dell’algebra. In realtà i primi algoritmi risalgono a 4000 anni fa e sono descritti nelle prime tavolette dell’antica Mesopotamia e riguardano operazioni di misurazione della superficie quadrata. Il termine algoritmo è tutt’ora utilizzato come sinonimo di: Procedura effettiva; Procedimento di calcolo; Metodo di risoluzione di un problema Insieme di regole per eseguire una determinata operazione Definizione di algoritmo E’ un insieme di istruzioni elementari che consentono di risolvere il problema trasformando i dati iniziali del problema stesso nel risultato, cioè nell’insieme dei dati finali che rappresentano la soluzione CARATTERISTICHE: 1. FINITO: l’algoritmo deve essere composto da un numero finito di passi elementari che vengono eseguiti un numero finito di volte; 2. DETERMINISTICO: deve portare sempre allo stesso risultato; 3. REALIZZABILE: le istruzioni si devono poter effettuare; 4. GENERALE: deve risolvere una famiglia di problemi: 5. NON AMBIGUO: i passi che compongono l’algoritmo devono essere interpretabili in modo univoco Componenti di un algoritmo Dati iniziali e finali: sono gli elementi (iniziali o in ingresso) che vengono elaborati dall’algoritmo e i risultati prodotti dall’algoritmo (finali o in uscita) Istruzioni: sono i passi elementari da eseguire Dati di input Algoritmo Dati di output Ad ogni dato è associato un nome che lo identifica in modo univoco come, per esempio, area, lato, nome…, ed è sempre buona norma dare ai dati nomi significativi che permettano di comprenderne il significato. I dati e la loro classificazione Ci sono diversi modi di classificare i dati: • In base alla modalità di interazione con l’elaboratore; • A seconda degli oggetti che rappresentano; • In base alla possibilità di cambiare il valore del dato durante l’esecuzione dell’algoritmo I dati e la loro classificazione Modalità di interazione con l’elaboratore Input: dati forniti dall’esterno e noti al momento dell’esecuzione; Output: dati calcolati dall’elaboratore e comunicati all’esterno Interni o di lavoro: utlizzati dall’algoritmo, trasparenti all’utente e non vengono comunicati in output. I dati e la loro classificazione A seconda degli oggetti che rappresentano possono essere di tre tipi; •Numerici (interi o reali): contengono numeri, possono essere utilizzati per fare le operazioni aritmetiche; •Alfanumerici: detti anche stringhe, contengono caratteri alfabetici, speciali e cifre non utilizzabili per le operazioni aritmetiche. Es: numero dell’autobus, numero di telefono, p.iva, ecc… •Logici e booleani: possono valere VERO o FALSO e sono utlizzati quando si vuole indicare la possibilità di scelta tra due opzioni. I dati e la loro classificazione In base alla possibilità di cambiare il valore del dato durante l’esecuzione dell’algoritmo si classificano come: Costanti: il valore del dato è immutato nel tempo. Variabili: il valore del dato può cambiare. Es. Calcolo dell’area di un cerchio di cui si conosce il raggio. Area = raggio * raggio * π COSTANTE VARIABILE DI INPUT VARIABILE DI OUTPUT Fisicamente le variabili risiedono in memoria centrale: ad ogni variabile sono assegnate celle contigue in grado di memorizzare il valore. Le istruzioni Sono i passi elementari che compongono l’algoritmo e permettono di dare comandi all’esecutore (computer) Istruzione di lettura (leggi) permette di assegnare ad una variabile un valore tramite la sua digitazione sulla tastiera del computer Istruzione di scrittura (scrivi) permette di visualizzare a video un messaggio o il valore della variabile Istruzione di assegnazione (=) permette di assegnare un valore ad una variabile. Tutte le volte che viene scritta un’operazione di assegnazione è necessario assicurarsi che le variabili siano state inizializzate con un valore (non necessariamente lo zero) Esempi di assegnazione A = 10; nome = “Maria”. Alla variabile viene assegnato un valore determinato (costante) A = B. Se B ha valore 5 anche A avrà lo stesso valore A = ( k + 3 ) / 2. Alla variabile A è assegnato il risultato dell’espressione. Rappresentazione degli algoritmi. Un modo semplice e intuitivo per rappresentare gli algoritmi potrebbe essere quello di numerare i passi, ma non è un metodo universale. Il metodo più diffuso è quello di assegnare ad ogni simbolo un preciso tipo di operazione Flow-chart o diagramma di flusso. INIZIO / FINE OPERAZIONE DI ASSEGNAZIONE LETTURA / SCRITTURA Verifica degli algoritmi Dopo aver definito la sequenza di istruzioni necessarie per risolvere il problema dato, non abbiamo nessuno strumento che ci assicuri che la soluzione adottata sia corretta almeno fino a quando non saremo in grado di fare eseguire il programma dal computer. Per valutare la validità dell’algoritmo è utile la sua simulazione o prova logica che si esegue seguendo passo passo l’algoritmo, proprio come si comporterà il computer dovendo eseguire il programma. Programmazione strutturata Gli schemi o strutture presenti in un algoritmo sono: struttura di sequenza struttura di selezione struttura di iterazione Quando nella programmazione si fa uso di queste strutture, la programmazione si dice strutturata. Le tecniche di questa programmazione nascono a metà degli anni sessanta, quando al crescere della attività di progettazione del software , si sentì la necessità di fornire regole nella progettazione in modo che i lavori prodotti fossero non solo più leggibili ma anche più manutenibili (cioè modificabili nel tempo). Il teorema di Böhm-Jacopini afferma: qualsiasi algoritmo può essere definito usando esclusivamente le strutture di sequenza, selezione e iterazione Struttura sequenziale e di selezione STRUTTURA SEQUENZIALE: le operazioni descritte vanno eseguite una dopo l’altra, secondo l’ordine con cui son definite. STRUTTURA DI SELEZIONE: permette di impostare percorsi diversi in base a condizioni che possono essere o meno verificate nel corso dell’esecuzione stessa. La condizione dovrà essere scritta secondo regole precise: saranno confrontate due espressioni tramite un operatore logico ( = > < <> >= <=). Tipi di selezione Semplice a una via: se la condizione è vera allora… Esercizio: dati in input il nome e l’età di una persona stampa il nome e la scritta MAGGIORENNE se la persona è maggiorenne. Semplice a due vie : se la condizione è vera allora… altrimenti.. Esercizio: dato in input un numero calcola il cubo se è maggiore di zero, il quadrato in caso contrario. In cascata: due o più condizioni. Esercizio: dato in input il nome e il prezzo di un prodotto, calcola e stampa il prezzo da pagare sapendo che se il prezzo è superiore a 3000 euro applichi il 6% di sconto e, inoltre, se il pagamento avviene in contanti, applica un ulteriore 2% di sconto. Visualizzare il prezzo aggiornato. Tipi di selezione Annidata: la seconda condizione è presa in considerazione solo se la prima è vera Esercizio:dati due numeri se sono entrambi positivi farne la somma, altrimenti il prodotto. Composta: due condizioni con operatore AND. Esercizio: di una persona vengono forniti il nome e la data di nascita: stampa un messaggio di buon compleanno se compie gli anni nel giorno corrente I dati in VB.NET Variabili: per definire le variabili è necessario usare la parola chiave DIM seguita dal nome e dal tipo. Il nome serve per poterla richiamare all’interno del programma, il tipo indica il tipo di dato che potrà contenere. Ecco alcuni esempi: Dim I as integer Dim area as single Dim distanza as double Dim sesso as char Dim nome as string Dim risposta as boolean Costanti: vengono dichiarate facendo precedere la parola CONST e assegnando subito un valore. Const intestazione=“Mio programma” Const pigreco= 3.14 Const iva = 21 ISTRUZIONI DI INPUT/OUTPUT Vengono gestite tramite gli oggetti disponibili nel linguaggio: i più usati sono caselle di testo da inserire nel form e finestre di dialogo. GESTIONE DELL’INPUT Casella di testo (textbox): la proprietà text rappresenta il valore contenuto nella casella. E’ di tipo string per cui se si deve effettuare la lettura di un numero lo si deve convertire da stringa a numerico con la funzione VAL. Es. nome=txtcasella.text numero = val(txtcasella.text) Inputbox (finestra di dialogo) consiste in una finestra con all’interno una textbox e un messaggio di testo. Es. numero = val(Inputbox(“dammi il numero”)) ISTRUZIONI DI INPUT/OUTPUT GESTIONE DELL’OUTPUT Etichetta (label) Es. label.text = nome Casella di testo (textbox) Es. casella.text = nome Msgbox (finestra di dialogo) può contenere il messaggio da visualizzare e concatenare il valore di una variabile da visualizzare o un altro messaggio. Es. msgbox (“il nome è:” & nome) Assegnazione in VB.NET Sono contrassegnate dal simbolo =. Var1 = costante Var1 = var2 Var1 = var1 + var2 Var1 = espressione Per evitare problemi è necessario che ciò che compare sulla destra dell’= sia dello stesso tipo di ciò che compare a sinistra. Nelle istruzioni di assegnazione possono comparire gli operatori aritmetici per eseguire dei calcoli. (+, -, *, /, mod). Un particolare tipo di assegnazione in VisualBasic è la concatenazione di stringhe con & Esercizi 1. Data la base e l’altezza di un rettangolo, calcolare l’area e il perimetro 2. Dato il nome e l’anno di nascita di una persona, visualizzare l’età. 3. Scrivere un programma che calcoli e visualizzi l’ammontare della bolletta della luce di un utente, ricevendo in input il nome dell’utente, il numero di Kwh della lettura precedente e il numero di kwh della lettura attuale. L’ammontare della bolletta è dato dalla quota fissa, che deve esser fornita in input e dall’importo relativo al consumo, considerando costante il costo per kwh ( euro 0,07 per kwh) Strutture iterative La struttura iterativa (di ripetizione) consente di ripetere più volte la stessa istruzione o blocco di istruzioni finchè si verifica una determinata condizione. Viene chiamata anche struttura ciclica. Esistono due tipi di strutture iterative: Con il controllo in testa (precondizionale) Con il controllo in coda (postcondizionale) Struttura iterativa precondizionale Struttura iterativa con controllo in testa (precondizionale). L’iterazione potrebbe non essere mai eseguita e ciò accade quando la condizione di ciclo risulta falsa in partenza: Do While condizione Istruzione è una istruzione o un blocco di istruzioni e viene eseguita fintanto che la condizione risulta vera Loop Struttura iterativa postcondizionale Struttura iterativa con controllo in coda (postcondizionale). L’iterazione viene eseguita almeno una volta. Do Istruzione1 vengono eseguite in sequenza fintanto Istruzione2 che la condizione risulta falsa ……… Istruzione N Loop until condizione Il concetto di accumulatore e contatore Contatore è la variabile che si incrementa o decrementa all’interno di un ciclo per calcolare il numero di volte che viene ripetuto un blocco di istruzioni. Accumulatore è la variabile usata per totalizzare un certo valore all’interno di un ciclo. Esempio: media di N numeri. Esercizi con strutture iterative 1. Scrivere un programma che visualizzi la tabellina del 2, a partire dal numero 2 e fino al numero 20. 2. Scrivere un programma che visualizza la successione dei numeri interi a partire da 1, finchè non rispondi negativamente alla domanda “vuoi continuare?” 3. Calcola la media dei voti di uno studente 4. Calcola quanto spendi in un negozio acquistando un certo numero di prodotti. Conosci il numero di prodotti che hai acquistato e, per ogni prodotto, inserisci il costo 5. Dati in input N numeri (N > 0), segnalare quanti sono i numeri positivi e quanti i numeri negativi. Visualizzare inoltre la somma dei positivi e dei negativi Il record Ricordate che cos’è un vettore? Un vettore è una variabile strutturata, formata da più elementi tutti dello stesso tipo. Contiene quindi dati omogenei. A volte c’è la necessità di rappresentare dati di tipo diverso. Esempio: per rappresentare i dati di una persona è necessario avere a disposizione una variabile nome, (stringa) una variabile indirizzo,(stringa) una variabile età, (intero)tutte viste come un’unica entità__ PERSONA. Il record è una variabile strutturata composta da elementi non omogenei, detti campi. Esempio PERSONA è un record composto dai campi nome, indirizzo, età. La tabella E’ un vettore nel quale gli elementi sono record contenenti dati non omogenei tra di loro. Esempio: il listino prezzi di un bar è costituito da tanti elementi (uno per ogni prodotto) ciascuno dei quali è suddiviso in descrizione e prezzo. LISTINO indice 1 2 3 descrizione Caffè Cappuccino Thè prezzo 1,00 1,20 1,50 Per accedere ad un campo è necessario definire l’indice della tabella (i) e il nome dl campo di interesse, per esempio listino(i).prezzo. Record e tabelle in VisualBasic Public Structure PERSONA Dim nome as String Dim indirizzo as String Dim eta as integer End Structure La dichiarazione di un tipo record definisce la struttura dei dati ma non contiene dati. Occorre quindi definire una variabile di tipo PERSONA in questo modo Dim Pers as PERSONA Per assegnare un valore ad un campo di Pers si scrive: Pers.nome=“Rossi”. Per eseguire operazioni su più campi del record si scrive: Pers.nome=txtnome.text With Pers .nome=txtnome.text Pers.indirizzo=txtinidirizzo.text .indirizzo=txtindirizzo.text Pers.eta=txteta.text .eta=txteta.text .End With Record e tabelle in VisualBasic Quando è necessario memorizzare queste informazioni per diverse persone si può dichiarare un array di record, cioè una tabella: Dim Agenda(19) as PERSONA Se l’indice della tabella è I, ricordando che l’indice della prima componente è zero, i riferimenti ai campi si scrivono: Agenda(i).nome Agenda(i).indirizzo Agenda(i).età Oppure: With Agenda(i) .nome =txtnome.text .indirizzo=txtindirizzo.text .eta=txteta.text End With