ALGORITMI E SOLUZIONI DI PROBLEMI Il computer è una macchina complessa in grado di eseguire milioni di istruzioni al secondo, dotato di una memoria capace di contenere enormi quantità di dati, siano essi documenti, suoni, filmati o semplici numeri. Queste sue caratteristiche ci consentono di utilizzarlo per svolgere compiti molto complicati, anche se, per far sì che ciò sia possibile, dobbiamo indicargli le operazioni da compiere attraverso una serie di istruzioni (Programma) che consentono alla macchina di elaborare i dati in maniera appropriata. Dati iniziali Programma Dati finali Il compito che deve essere svolto dal computer è generalmente la soluzione di un problema, che può essere di diversa natura: matematica, scientifica, economica, finanziaria ecc. I problemi che possono essere risolti con un calcolatore possono essere ad esempio: 1. sommare due numeri interi; 2. stabilire se una parola viene alfabeticamente prima o dopo un'altra; 3. dati a e b risolvere l'equazione ax+b=0; 4. dati due numeri trovare il maggiore; 5. gestire acquisti e prestiti dei libri di una biblioteca; 6. Trovare gli zeri di una funzione f(x); Affinché un problema sia risolvibile, in generale è necessario che la sua definizione sia chiara e completa. Non tutti i problemi sono risolvibili attraverso l uso del calcolatore. In particolare esistono classi di problemi per le quali la soluzione automatica non è proponibile: 1. Se il problema presenta infinite soluzioni; 2. Non esiste un metodo risolutivo automatizzabile. Chiamiamo problema una qualsiasi situazione per cui è necessario elaborare una strategia per identificare una sua soluzione, ovvero una serie azioni da compiere per raggiungere il risultato. Ad esempio sono problemi le seguenti situazioni: disporre una lista di nomi in ordine alfabetico; calcolare l area di un rettangolo conoscendone le dimensioni Non esiste un unica soluzione per un problema. Prima di identificare una strategia è necessario distinguere i dati conosciuti (INPUT) dalle incognite che bisogna determinare (risultati: OUTPUT).
Chiamiamo algoritmo una sequenza ordinata di istruzioni che descrivono tutte le azioni che è necessario eseguire per arrivare alla soluzione di un problema. Una definizione più rigorosa: Un algoritmo è un insieme finito di istruzioni, chiare e non ambigue, effettivamente calcolabili, che, eseguito, fornisce un risultato, in una quantità di tempo finita. L'algoritmo deve essere: finito : la sequenza di istruzioni deve essere finita e portare a un risultato eseguibile:la sequenza di istruzioni devono poter essere eseguite materialmente dall'esecutore; non ambiguo(ciascuna istruzione deve essere descritta chiaramente ed interpretata univocamente, di modo che l azione descritta sia effettuata allo stesso modo da qualsiasi esecutore) generale: valido non solo per un particolare problema, ma per una classe di problemi; deterministico:partendo dagli stessi dati iniziali porta sempre allo stesso risultato finale; completo: deve considerare tutti i casi che si possono verificare durante l'esecuzione. Il termine algoritmo deriva dal nome del matematico arabo Al-Khowarzimi del IX secolo d.c. che per primo suggerì un metodo per sommare due numeri rappresentati nel sistema numerico Hindu e contribuì alla fondazione dell algebra. Il programmatore studia il problema e ne individua l'algoritmo risolutivo, cioè l'insieme delle operazioni (istruzioni) che devono essere eseguite per raggiungere il risultato. L'insieme di queste istruzioni prende il nome di programma, e ogni singola istruzione deve essere scritta utilizzando un linguaggio di programmazione. Problema Algoritmo Programma Il linguaggio di programmazione (linguaggio ad alto livello) è molto lontano dal codice binario (linguaggio a basso livello) che un computer è in grado di eseguire. Affinché sia in grado di comprenderlo deve essere fatta una traduzione da un linguaggio all'altro. Questa operazione viene eseguita da particolari programmi, detti compilatori o traduttori, che trasformano il programma (codice sorgente) scritto in linguaggio di
programmazione in codice macchina, eseguibile dal computer. Linguaggio ad alto livello Compilatore Linguaggio a basso livello Un algoritmo può essere graficamente schematizzato attraverso i diagrammi di flusso (flow chart) detti anche diagrammi a blocchi, che evidenziano il flusso delle istruzioni nel processo di elaborazione dei dati del problema. Diagrammi di flusso Il diagramma di flusso o flow chart è una rappresentazione grafica di un algoritmo costituita da un insieme di blocchi contenenti le istruzioni (figure geometriche standard) collegati da frecce che evidenziano l ordine in cui eseguire le azioni descritte. Esso presenta, rispetto alla descrizione verbale, una maggiore concisione, una minore possibilità di ambiguità e una comprensione più immediata. Per consentire una comprensione uniforme dei diagrammi di flusso, è bene disegnarli secondo alcune convenzioni grafiche standard. Come regola generale, il flusso delle operazioni procede dall alto in basso e da sinistra a destra; tuttavia si potrebbe talvolta dover variare questa regola, e a tale fine si utilizzano appunto le frecce nel modo opportuno. Osserviamo anche che le frasi scritte nei blocchi di un diagramma non devono seguire alcuna regola grammaticale o sintattica, ma possono avere una forma libera, purché indichino chiaramente l operazione da eseguire. L inizio e la fine dell algoritmo sono rappresentati da blocchi ovali. Sono gli unici blocchi da cui parte o arriva una sola freccia. Inizio fine ISTRUZIONI DI INGRESSO/USCITA (INPUT/OUTPUT) Le istruzioni di ingresso e di uscita (input / output) sono contenute in blocchi a forma di parallelogramma.
ISTRUZIONE DI INPUT LEGGI DATO ISTRUZIONE DI OUTPUT SCRIVI DATO BLOCCO ISTRUZIONE O DI ELABORAZIONE Le istruzioni contenenti operazioni sui dati (assegnazione o calcolo di espressioni) sono rappresentate all interno di blocchi rettangolari. Calcola area BLOCCO DI SELEZIONE O ALTERNATIVA si N1<0 no
Al suo interno vengono effettuate operazioni di confronto e il risultato può essere soltanto SI o NO (oppure VERO o FALSO) Lo scopo di questo metodo di strutturazione degli algoritmi è quello di rendere più facile la costruzione, la lettura e le eventuali successive modifiche dei procedimenti risolutivi dei problemi. All'interno di un algoritmo le istruzioni sono organizzate secondo schemi classificabili nel seguente modo: Lo schema di sequenza è una sequenza di passi eseguiti uno alla volta, nessun passo è ripetuto e l'ordine di esecuzione dei passi è lo stesso in cui sono scritti. Lo schema di selezione è usato quando si deve effettuare una scelta tra due passi alternativi, a seconda del risultato di un test o del verificarsi di una condizione. Lo schema di iterazione è usato quando si deve effettuare la ripetizione di una o più istruzioni un numero di volte definito o indefinito a seconda che si verifichi una condizione. Sequenza: Esempio 1:Calcolare la media di tre numeri INIZIO LEGGI A,B,C M=(A+B+C)/3 SCRIVI M FINE
Esempio 2: Calcolare area e perimetro di un rettangolo dati L1 e L2 Inizio Leggi L1, L2 P=(L1+L2)x2 A=L1xL2 L1, L2 Fine
Selezione: Esempio1: re il maggiore tra due numeri inizio Leggi n1 Leggi n2 si n1>n2 no n1 n2 fine
Esempio 2: trasformazione di numeri negativi in positivi inizio Leggi N1 V N1<0 F Moltiplica N1 x -1 N1 Fine In questo secondo esempio possiamo notare che viene a mancare un pezzo di istruzione e in questo caso parliamo di selezione semplice. Il caso di selezione semplice può quindi essere considerata un caso particolare di selezione doppia dove viene a mancare il ramo altrimenti; non è invece possibile avere un'istruzione semplice senza il ramo allora, con cioè solo il ramo altrimenti: se il ramo è uno solo, e quindi siamo in presenza di selezione semplice, necessariamente deve essere presente il ramo allora. Selezione multipla In molte situazioni capita di dover operare delle scelte, orientandosi tra più possibilità e non solo tra due come capita con la selezione binaria (vero/falso): si pensi a quando
si deve decidere dove andare in vacanza, che tipo di facoltà scegliere. Le scelte, di solito, sono motivate dal verificarsi o meno di certe circostanze. In questi casi dovremmo costruire una struttura complessa formata da tanti se...allora...altrimenti se...allora...altrimenti se... La struttura di selezione multipla consente di rappresentare in modo semplice questi casi, nei quali i gruppi di istruzioni in alternativa tra loro possono essere più di due. La decisione sulla strada da percorrere dipende dal valore assunto da una variabile di controllo, detta selettore. Esempio di selezione multipla Un insegnante valuta il test svolto da ciascun studente e attribuisce un giudizio in base al punteggio ottenuto secondo la seguente tabella: Da 0 a 10 Insufficienza grave Da 11 a 30 Da 31 a 60 Da 61 a 90 Da 91 a 100 Insufficiente Sufficiente Buono Ottimo inizio Leggi punteggio Punteggio Da 0 a 10 Punteggio Punteggio Punteggio Punteggio Da 11 a 30Da 31 a 6061 a 90 Da 91 a 100 Grav. insufficiente Insufficiente Sufficiente Buono Ottimo Fine