algoritmi proprietà e caratteristiche
ottobre 2002(c) Fabrizio d'Amore, IGEA descrizione degli algoritmi codice e pseudo-codice codice e pseudo-codice usiamo pseudo-codice, useremo codice (Java) usiamo pseudo-codice, useremo codice (Java) rapportata allesecutore rapportata allesecutore persona o macchina? persona o macchina? se persona, adulto o bambino? se persona, adulto o bambino? se macchina, cosa è capace di fare? se macchina, cosa è capace di fare? leggibilità della descrizione leggibilità della descrizione fondamentale per operazioni di correzione, manutenzione, adattamento e riuso fondamentale per operazioni di correzione, manutenzione, adattamento e riuso
ottobre 2002(c) Fabrizio d'Amore, IGEA pseudo-codice input, output input, output start, stop start, stop assegnazione assegnazione = = test testif(<condizione>) else
ottobre 2002(c) Fabrizio d'Amore, IGEA pseudo-codice/2 ripetizione o ciclo ripetizione o ciclowhile(<condizione>) esempio: somma primi n interi positivi esempio: somma primi n interi positivistartinput(n) somma = 0 i = 0 while(i < n) somma = somma + i i = i + 1 output(somma)stop
ottobre 2002(c) Fabrizio d'Amore, IGEA loop infiniti una classica causa del malfunzionamento del software una classica causa del malfunzionamento del software es.: somma dei primi n dispari es.: somma dei primi n dispari i = 1 j = 0 somma = 0 while(j < i) // errato! somma = somma + i i = i + 2 j = j + 1
ottobre 2002(c) Fabrizio d'Amore, IGEA esecutori gli algoritmi vanno formulati tenendo conto delle capacità dei loro esecutori gli algoritmi vanno formulati tenendo conto delle capacità dei loro esecutori un computer sa di norma eseguire le quattro operazioni, confronti fra numeri e alcune semplici operazioni logiche un computer sa di norma eseguire le quattro operazioni, confronti fra numeri e alcune semplici operazioni logiche si possono concepire esecutori molto limitati si possono concepire esecutori molto limitati es.: capacità di incrementare/decrementare numeri (una unità alla volta) e di confrontare un numero con zero es.: capacità di incrementare/decrementare numeri (una unità alla volta) e di confrontare un numero con zero è meno potente? è meno potente?
ottobre 2002(c) Fabrizio d'Amore, IGEA somma a + b 1. c = a 2. temp = b 3. while(temp > 0) incrementa c decrementa temp
ottobre 2002(c) Fabrizio d'Amore, IGEA leggibilità degli algoritmi qualità della descrizione degli algoritmi qualità della descrizione degli algoritmi non influenza correttezza ed efficienza! non influenza correttezza ed efficienza! fondamentale per operazioni di correzione, manutenzione, adattamento e riuso fondamentale per operazioni di correzione, manutenzione, adattamento e riuso oltre il 50% del tempo di sviluppo del software è dedicato alla correzione degli errori oltre il 50% del tempo di sviluppo del software è dedicato alla correzione degli errori la manutenzione del software viene spesso eseguita da terzi la manutenzione del software viene spesso eseguita da terzi spesso il software deve essere modificato per tener conto di modifiche delle specifiche spesso il software deve essere modificato per tener conto di modifiche delle specifiche il buon riuso del software è alla base di una buona produttività ed abbattimento costi il buon riuso del software è alla base di una buona produttività ed abbattimento costi
ottobre 2002(c) Fabrizio d'Amore, IGEA tecniche per la leggibilità indentazione indentazione non tutte le righe del codice (o pseudo-codice) hanno inizio alla stessa colonna non tutte le righe del codice (o pseudo-codice) hanno inizio alla stessa colonna si tiene conto della struttura dellalgoritmo si tiene conto della struttura dellalgoritmo commenti commenti per motivare scelte non ovvie e in generale per documentare il software per motivare scelte non ovvie e in generale per documentare il software uso di nomi evocativi uso di nomi evocativi usare variabili con nomi significativi usare variabili con nomi significativi somma è un nome migliore di xyz somma è un nome migliore di xyz
ottobre 2002(c) Fabrizio d'Amore, IGEA es: max fra N numeri input(N)// lettura N input(x)// lettura primo valore letti = 1// conta quanti valori letti max = x// max provvisorio! while(letti < N) input(x)// legge prossimo if(x > max) max = x// se grande aggiorna max letti = letti + 1 // aggiorna contatore output(max)// output risultato stop// termine
ottobre 2002(c) Fabrizio d'Amore, IGEA esempio giochiamo ad alto-basso giochiamo ad alto-basso quale algoritmo scegliere? quale algoritmo scegliere? cè differenza concettuale con la ricerca tabellare? cè differenza concettuale con la ricerca tabellare? es., ricerca su un elenco telefonico: supponendo 1ms per ogni controllo, come fa info412 a controllare oltre 10 milioni di numeri? (1000 secondi!) es., ricerca su un elenco telefonico: supponendo 1ms per ogni controllo, come fa info412 a controllare oltre 10 milioni di numeri? (1000 secondi!)