algoritmi proprietà e caratteristiche descrizione degli algoritmi codice e pseudo-codice rapportata all’esecutore usiamo pseudo-codice, useremo codice (Java) 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 ottobre 2002 (c) Fabrizio d'Amore, IGEA 02-03 2 pseudo-codice input, output start, stop assegnazione <variabile> = <risultato di una espressione> test if(<condizione>) <istruzioni se condizione vera> else <istruzioni se condizione falsa> ottobre 2002 (c) Fabrizio d'Amore, IGEA 02-03 3 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 ottobre 2002 (c) Fabrizio d'Amore, IGEA 02-03 4 loop infiniti una classica causa del malfunzionamento del software es.: somma dei primi n dispari i = 1 j = 0 somma = 0 while(j < i) somma = i = i + j = j + ottobre 2002 // errato! somma + i 2 1 (c) Fabrizio d'Amore, IGEA 02-03 5 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”? ottobre 2002 (c) Fabrizio d'Amore, IGEA 02-03 6 somma a + b 1. 2. 3. c = a temp = b while(temp > 0) incrementa c decrementa temp ottobre 2002 (c) Fabrizio d'Amore, IGEA 02-03 7 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 ottobre 2002 (c) Fabrizio d'Amore, IGEA 02-03 8 tecniche per la leggibilità indentazione commenti non tutte le righe del codice (o pseudo-codice) hanno inizio alla stessa colonna si tiene conto della “struttura” dell’algoritmo 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 ottobre 2002 (c) Fabrizio d'Amore, IGEA 02-03 9 es: max fra N numeri input(N) // input(x) // letti = 1 // max = x // while(letti < N) input(x) // if(x > max) max = x // letti = letti + output(max) // stop // ottobre 2002 lettura N lettura primo valore conta quanti valori letti max provvisorio! legge prossimo se grande aggiorna max 1 // aggiorna contatore output risultato termine (c) Fabrizio d'Amore, IGEA 02-03 10 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!) ottobre 2002 (c) Fabrizio d'Amore, IGEA 02-03 11