120 likes | 364 Views
algoritmi. proprietà e caratteristiche. descrizione degli algoritmi. codice e pseudo-codice usiamo pseudo-codice, useremo codice (Java) rapportata all’esecutore persona o macchina? se persona, adulto o bambino? se macchina, cosa è capace di fare? leggibilità della descrizione
E N D
algoritmi proprietà e caratteristiche
descrizione degli algoritmi • codice e pseudo-codice • usiamo pseudo-codice, useremo codice (Java) • rapportata all’esecutore • persona o macchina? • se persona, adulto o bambino? • se macchina, cosa è capace di fare? • leggibilità della descrizione • fondamentale per operazioni di correzione, manutenzione, adattamento e riuso (c) Fabrizio d'Amore, IGEA 02-03
pseudo-codice • input, output • start, stop • assegnazione <variabile> = <risultato di una espressione> • test if(<condizione>) <istruzioni se condizione vera> else <istruzioni se condizione falsa> (c) Fabrizio d'Amore, IGEA 02-03
pseudo-codice/2 • ripetizione o ciclo while(<condizione>) <istruzioni da ripetere finché condizione è vera> • esempio: somma primi n interi positivi start input(n) somma = 0 i = 0 while(i < n) somma = somma + i i = i + 1 output(somma) stop (c) Fabrizio d'Amore, IGEA 02-03
loop infiniti • una classica causa del malfunzionamento del software • 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 (c) Fabrizio d'Amore, IGEA 02-03
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 • si possono concepire esecutori molto limitati • es.: capacità di incrementare/decrementare numeri (una unità alla volta) e di confrontare un numero con zero • è meno “potente”? (c) Fabrizio d'Amore, IGEA 02-03
somma a + b • c = a • temp = b • while(temp > 0) incrementa c decrementa temp (c) Fabrizio d'Amore, IGEA 02-03
leggibilità degli algoritmi • qualità della descrizione degli algoritmi • non influenza correttezza ed efficienza! • fondamentale per operazioni di correzione, manutenzione, adattamento e riuso • oltre il 50% del tempo di sviluppo del software è dedicato alla correzione degli errori • la manutenzione del software viene spesso eseguita da terzi • 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 (c) Fabrizio d'Amore, IGEA 02-03
tecniche per la leggibilità • indentazione • non tutte le righe del codice (o pseudo-codice) hanno inizio alla stessa colonna • si tiene conto della “struttura” dell’algoritmo • commenti • per motivare scelte non ovvie e in generale per documentare il software • uso di nomi evocativi • usare variabili con nomi significativi • somma è un nome migliore di xyz (c) Fabrizio d'Amore, IGEA 02-03
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 (c) Fabrizio d'Amore, IGEA 02-03
esempio • giochiamo ad “alto-basso” • quale algoritmo scegliere? • 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!) (c) Fabrizio d'Amore, IGEA 02-03