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