CAPITOLO 2 - PROBLEMI E ALGORITMI IL MATERIALE DEL PRESENTE CAPITOLO E' STATO INTEGRALMENTE TRATTO DAL LIBRO DI TESTO "INFORMATICA GENERALE" DI Piero Gallo e Fabio Salerno VOLUME 1 PER UNA VISIONE PIU' GENERALE DELL' ARGOMENTO SE NE CONSIGLIA L'ACQUISTO Problemi e algoritmi • - . .- CONOSCENZE • Concetto di dato e informazione 1 I problemi Preparare una torta, calcolare l'area di un rettangolo, piantare fiori nel giardino, ordinare 100 numeri, sono tutti problemi. Alcuni possono apparire più semplici, altri più compiessi, altri ancora assurdi. Ma come facciamo a definire un problema facile, difficile o assurdo? .Eprincipalmente: che cos'è un problema? " Un problema è un quesito che attende una risposta, detta soluzione. Non è semplice trovare una soluzione a un problema. Spesso pensiamo di averla trovata ma, dopo un'attenta verifica, ci rendiamo conto che non fornisce i risultati che attendevamo. Siamo quindi costretti a trovare una nuova soluzione e la cerchiamo per tentativi. Se un tentativo non ha successo si riprova con un altro, magari sfruttando i punti validi della soluzione fallita e facendo tesoro dell'insuccesso precedente. Il lavoro mentale volto alla ricerca della soluzione prende il nome di processo risolutivo (Fig. Cl.1). " Un processo risolutivo è un insieme di passi da compiere per giungere alla soluzione di un problema. Figura (1.1 " " Processo risolutivo ---~ Soluzione Unità di apprendimento La soluzione o risultato o risultato finale è l'obiettivo " Cl • Problemi e algor/tmi che vogliamo raggiungere. " Per poter risolvere un problema sono necessarie alcune informazioni iniziali e indispensabili che chiameremo dati iniziali. Consideriamo, ad esempio, l'emissione di un biglietto ferroviario da parte di un addetto in un'agenzia viaggi, il signor Gino. La situazione può essere schematizzata nel seguente modo (Fig. C1.2): Figura C1.2 Dati iniziali: Stazione di partenza Stazione di arrivo Data di partenza Numero di persone in pa~enza Orario ferroviario per la consultazione dei treni Problema: emettere un biglietto ferrovìarro , J Risultato finale: biglietto Processo risolutivo ProbkIna: Emettere un biglietto .. ! • lo '1. Il cliente, entrando in agenzia, effettua "vorrei un biglietto Biglietto la seguente richiesta: per due persone da Roma a Milano per il 20 marzo" Ottenuto il biglietto, il cliente lo-osserverà attentamente per verificare la correttezza delle informazioni contenute. Il suo criterio di verifica consisterà nel controllare che (Fig. C1.3): • • • • " la stazione di partenza coincida con Roma; la stazione di arrivo con Milano; la data sia il 20 marzo; il numero di persone sia due. 1/ criterio di verifica è un controllo rispondenti agli obiettivi sui risultati finali per verificare che questi siano iniziali. " .. Figura C1.3 Problema: Emettere un biglietto Risultati finali o I· ~. i- a ,- ..ro. l~ ,. ---~ Dati iniziali Biglietto da Roma a Milano per 2 persone il 20 marzo t__ Verifica dei risultati 2 La formulazione dei Formulare correttamente un problema roblemi o affermare che un problema è ben formulato, vuoi dire: 1. chiarire gli obiettivi giungere; finali, cioè lo scopo che la soluzione del problema intende rag- Area tematica [ • Le best della proçrsmmszlons 2. possedere le informazioni iniziali, cioè le informazioni necessarie a ottenere la soluzione del problema; 3. individuare il criterio di verifica, cioè il modo con cui verificare che la soluzione ottenuta sia effettivamente quella cercata. Un esempio di problema mal formulato è: "calcolare il Massimo Comun Divisore", Tale problema non potrà mai essere risolto in quanto mancano le informazioni iniziali e cioè i valori numerici sui quali calcolare il Massimo Comun Divisore. Occorre pertanto riformularlo! Il problema dell'emissione del biglietto ferroviario sarebbe stato mal formulato in uno qualsiasi dei seguenti modi: "vorrei un biglietto "vorrei un biglietto "vorrei un biglietto per due persone" per il 20 marzo" per Milano". Consideriamo un problema ben formulato. Può accadere che, nonostante vari tentativi di ricerca della soluzione, non si riesca a trovarne neanche una. In questo caso ci si trova di fronte a un problema non risolvi bile. Possiamo allora affermare che: " un problema non è risolvi bile se, pur essendo correttamente soluzioni. Ad esempio: "vorrei un biglietto formulato, non ammette per due persone da Roma per la Luna"! 3 Descrivere il·processo risolutivo La nostra attenzione si sofferma, ora, sulla descrizione del processo risolutivo di un dato problema, ovviamente ben formulato. Descrivere il processo risolutivo è un'attività creativa che richiede l'apporto di una persona in grado di risolverlo. Persone competenti diverse potrebbero ottenere diversi processi risolutivi che raggiungono gli stessi risultati finali. In questo caso alcuni di questi processi saranno più efficienti altri meno, alcuni più eleganti altri meno e così via. Nella ricerca della soluzione di un problema non si possono definire criteri, ma si possono proporre suggerimenti e strategie, che possono essere utilizzati in un considerevolenumero di situazioni problematiche . . Pertanto, per giungere alla soluzione di un problema è necessario: • conoscere il tema oggetto del problema. È indiscusso il grande vantaggio offerto dalla conoscenza dell'argomento relativo al problema preso in esame. Occorre, cioè, una persona competente in materia; • utilizzare metodi risolutivi già spèrimentati. È assolutamente sbagliato affrontare i problemi come casi isolati. "L'esperienza fa maestri", si dice. I problemi, nella loro complessità, hanno spesso elementi in comune tra loro, che possono essere sfruttati per adattare metodi risolutivi già individuati e sperimentati alle nuove situazioni problernatiche, • scindere il problema in sottoproblemi. Risolvere un problema partendo dai soli dati iniziali potrebbe talvolta essere di estrema difficoltà. È buona norma individuare in un problema dei problemi più piccoli, in modo da concentrarsi sulla loro risoluzione che, ovviamente, sarà più semplice rispetto al problema generale. Se ad esempio, il problema è quello di "preparare una torta gelato al cioccolato", è possibile individuare immediatamente tre sottoproblemi: - preparare la base per una torta; - preparare un gelato al cioccolato; - farcire la torta con il gelato. Il ------------~--------------------1·, Unità di apprendimento Cl • Problemi e algaritmi Ogni sottoproblerna, a sua volta, potrebbe essere suddiviso in ulteriori sottoproblemi sino a un livello ritenuto di semplice soluzione. Procedendo in questo modo noncorriamo il rischio di dover tenere sotto controllo troppe cose da fare contemporaneamente. • ripercorrere il cammino all'indietro, Spesso accade che nel cammino percorso durante un processo risolutivo ci accorgiamo che la strada seguita non porta a nessuna soluzione. In questo caso è opportuno ripercorrere i passi, tornare indietro a un punto del cammino dal quale si possa ripartire per un'altra strada. LI Chi risolve il croblema Quando si risolve un problema è sempre possibile far riferimento " a due tipi di attori: il risolutore, cioè colui che definisce la soluzione necessaria per risolvere il problema attraverso il processo risolutivo; . l'esecutore (o processore), cioè colui che esegue le azioni descritte dal risolutore per giungere concretamente alla soluzione del problema. Il risolutore è la persona che produce il processo risolutivo per un dato problema, mentre l'esecutore è la persona senza esperienza e senza iniziativa che sa soltanto eseguire le azioni elementari suggerite dal risolutore(Fig. (1.4). Figura C1.4 Risolutore ed esecutore Processo risolutivo umano Risolutore: Obiettivo iniziale Luigi -,.---_ .....• I ~ . D_at_i _in_iz_ia_li_---'I---+ Esecutore: Risultati finali Gino Verifica dei risultati Fornire le azioni da compiere è un'attività creativa e pertanto propria degli esseri umani, mentre eseguire le azioni è un'attività di per sé non creativa e pertanto propria delle macchine, in particolare dei computer. Spesso l'esecutore sarà identificato non più con una persona ma con il computer (Fig. (1.5)! " Rrea tematica Figura C1.5 Processo Risolutore: Obiettivo iniziale risolutivo Luigi I __ [ • Le basi della programmazione I~ ~D_a_ti_i_ni_Zia_l_i __ -.lt... Risultati finali -,.-----' Esecutore Verifica dei risultati 5 Descrizioni rigorose Facciamo un esempio di processo risolutivo. Potremmo considerare un qualsiasi problema, sia esso di tipo matematico sia preso dalla vita di tutti i giorni, poiché le considerazioni che faremo hanno validità generale. Consideriamo, allora, il seguente problema: Problema 1: "Cucinare la pasta asciutta per la propria famiglia" Come possiamo immaginare, è ben diverso cucinare pasta asciutta per 2 persone o per 8 persone. È evidente che manca un dato iniziale importantissimo: il numero di persone di cui è composta la nost-ra famiglia. Indichiamo genericamente con N questo dato iniziale. Quindi: Dati iniziali ') N: numero di persone di cui è composta . Un primo processo risolutivo seguenti passi: 1. 2. 3. 4. 5. 6. 7. 8. la propria famiglia che il risolutore prendere una pentola adeguata aggiungere dell'acqua nella pentola accendere il fuoco e mettere la pentola attendere che l'acqua bolla aggiungere il sale versare la pasta nella pentola attendere che sia cotta scolare la pasta togliendo l'acqua. potrebbe formulare può essere composta dai sul fornello Questo processo risolutivo a prima vista sembrerebbe sufficiente a descrivere la soluzione del nostro problema, ma osserviamolo meglio! Nel passo 1 si parla di "pentola adeguata". Ma cosa vuoi dire adeguata? Ciò che può essere adeguato per una persona potrebbe non esserlo per un'altra. Questo aggettivo risulta, pertanto, ambiguo e, quindi, non eseguibile dall'esecutore "stupido" da noi indicato. Come ambigue sarebbero le frasi: "una pentola sufficiente" oppure "una pentola giusta". È ambigua anche la 136 Unità di apprendimento O • PrDblemi e algDritmi frase: "una pentola per N persone". Come fa l'esecutore a stabilire quanto deve essere grande una pentola per N persone? Possiamospiegarglielo trasformando il passo 1 nel modo seguente: 1. prendere una pentola da N * L litri dove L è il numero di litri a persona (ad esempio L 0,5 , cioè, mezzo litro a persona). = L è, ora, un nuovo dato iniziale, che andiamo ad aggiungere nostro problema. all'insieme dei dati iniziali del Dati iniziali N: numero di persone di cui è composta la propria famiglia L: litri di acqua per persona Non è sempre immediatamente chiaro quali siano i dati iniziali di un problema, anzi, spesso ci si arriva durante la stesura del processo risolutivo. Riscriviamo, allora, anche il passo 2 che, ora, diventa: 2. aggiungere N * L litri di acqua nella pentola I passi 1 e 2 così riscritti ci aiutano a formalizzare il problema e il processo risolutivo e a dare rigore alle nostre descrizioni. Osserviamo, ora, il passo 3. Tale passo non è sufficientemente dettagliato. Cosa vuoi dire per un esecutore (stupido) attendere che l'acqua bolla? Occorre essere più precisi e scrivere: 3. attendere finché la temperatura ge i 100 gradi centigradi dell'acqua (misurata con un termometro) raggiun- Anche gli altri passi devono essere riscritti per evitare ambiguità: occorre essere precisi nella descrizione del da farsi. Una possibile riscrittura del processo risolutivo, pertanto, può essere: Processo risolutivo 1. prendere una pentola da N * L litri dove L è il numero di litri a persona (ad esempio L 0,5 mezzo litro a persona) 2. aggiungere N * L litri di acqua nella pentola 3. accendere il fuoco e mettere la pentola sul fornello acceso 4. attendere finché la temperatura dell'acqua (misurata con- un termometro) raggiun. gei 100 gradi centigradi 5. aggiungere N * 5 grammi di sale 6. versare N * G grammi di pasta nella pentola 7. attendere M minuti 8. scolare la pasta togliendo l'acqua. = dove: 5 indica la quantità in grammi di sale per ogni persona; M indica il tempo in minuti di cottura; G indica i grammi di pasta per persona. I dati iniziali sono ora i seguenti: Dati iniziali N: numero di persone L: litri di acqua per persona G: quantità di pasta per persona S: grammi di sale per persona M: tempo di cottura Rrea tematica [ • Le basi della programmazione Il processo risolutivo (descritto da un risolutore) è ora rigoroso nel senso che: • non è ambiguo; • è più completo; • è sufficientemente dettagliato. Solo in questo modo l'esecutore può compiere le azioni necessarie a risolvere il problema. Il problema appena analizzato è ben formulato; infatti, per quanto detto: 1. l'obiettivo finale è "cucinarela pasta asciutta" ed è, pertanto, esplicito; 2. il criterio di verifica sarà controllare che il risultato sia: "pasta asciutta correttamente cucinata: cioè al dente, non scotta, giustamente salata ecc."; 3. i dati iniziali indispensabili per proseguire nel processo risolutivo sono tutti presenti e cioè: N: numero di persone; L: litri di acqua per persona; G: grammi di pasta per persona; S: grammi di sale per persona; M: tempo di cottura. L'assenza di uno solo di tali dati non consentirebbe all'esecutore di cucinare la pasta. Notiamo, infine, che il processo risolutivo descrive come cucinare un qualsiasi tipo di pasta e non solo spaqhetti o farfalline. Si dice che tale soluzione è generale. " Un processo risolutivo è generale quando risolve problemi simili, cioè, problemi fanno parte di una stessa famiglia di problemi detta classe di problemi. che " Nel nostro esempio la classe di problemi è: "cucinare pasta asciutta". Se, invece, dobbiamo risolvere un'equazione di secondo grado, descriveremo come risolvere qualunque equazione di secondo grado e non solo una specifica equazione. Questo a condizione che ci forniscano, ogni volta, i coefficienti dell'equazione di cui vogliamo trovare le radici. 6 L'al oritmo Sappiamo che un processo risolutivo è caratterizzato da una serie di passi. Per essere più precisi, al termine passo dobbiamo sostituire quello di azione. Si definisce azione un qualunque evento di cui sono noti il soggetto, detto esecutore, l'oggetto, o gli oggetti, su cui l'esecutore deve agire e la trasformazione prodotta su di " essi in un'unità finita di tempo. La frase Giuseppe mangia un ananas puntualizza un'azione, in quanto, in un'unità finita di tempo, Giuseppe (esecutore) opera una trasformazione sull'ananas (oggetto). Se poniamo l'accento sull'azione svolta e su come Giuseppe mangia un ananas, risulta evidente che tale azione è composta da azioni più semplici. Dettagliatamente, infatti, l'azione in questione si può scomporre nel seguente modo: • • • • Giuseppe Giuseppe Giuseppe Giuseppe prende un ananas; sbuccia l'ananas; taglia a fette l'ananas;' mastica l'ananas. Le azioni devono awenire in sequenza, una dopo l'altra (non si ritiene quindi possibile che Giuseppe tagli a fette l'ananas e, contemporaneamente, lo mastichi). È preferibile ordinare tali azioni numerandole. 138 " Unità di apprendimento " O + Problemi e etaotttrnt Un'azione si dice elementare quando non può essere scomposta in altre azioni più semplici. " Prendiamo in esame il seguente problema: Problema 2: "Prelevare una somma dal bancomat" Dati iniziali C: codice segreto I: importo da prelevare Per descrivere il processo risolutivo azioni elementari: 1. 2. 3. 4. 5. possiamo utilizzare introdurre la carta nel lettore digitare il codice segreto ( digitare l'importo da prelevare I ritirare la carta dal bancomat prelevare le banconote Abbiamo ora tutti gli elementi per comprendere " la seguente sequenza ordinata di Si definisce algoritmo una sequenza finita e no la soluzione di un problema (Fig. (1.6). la seguente definizione: ordinata di azioni elementari che descrivo" Figura (1.6 Algoritmo :: Azione 1 :: Azione 2 , ---+ ·., • I ··,: • I :! Azione Risolutore: Obiettivo iniziale Luigi I ___ N D_a_t_i i_ni_Zi_al_i __ I~ --,.-._-------.. Risultati finali Esecutore Verifica dei risultati Affinché si possa parlare di algoritmo è necessario che vengano rispettate le caratteristiche fondamentali viste nei paragrafi precedenti. Un algoritmo deve essere infatti: • finito: il processo risolutivo descritto dall'algoritmo deve essere çomposto da un numero finito di azioni elementari; • univoco o non ambiguo o preciso: ogni azione deve essere definita nei suoi effetti rigorosamente e senza ambiguità per l'esecutore; • generale: deve essere valido non solo per un particolare problema, ma per tutti i problemi di una stessa classe; • completo: deve considerare tutti i casi possibili che si possono verificare durante l'esecuzione e, per ogni caso, indicare la soluzione da seguire; Area tematica [ • Le basi della aroarsmmeztone • osservabile nei risultati: deve esserci riscontro oggettivo del risultato, Nell'esempio del problema del "cucinare la pasta" ottengo della pasta da mangiare; • deterministico: a ogni unità finita di tempo l'esecutore deve scegliere e compiere una e una sola azione, Si dice anche che partendo dagli stessi dati iniziali, l'esecuzione dell'algoritmo deve fornire sempre gli stessi risultati finali, Non è detto che un algoritmo debba sempre terminare, È possibile, infatti, avere algoritmi che pur avendo un numero finito di azioni le eseguono infinite volte e quindi non terminano mai. Si pensi, ad esempio, all'algoritmo che esegue la divisione tra due numeri naturali, D (dividendo) e d (divisore), Se D vale 1 e d vale 3 (cioè stiamo eseguendo 1 "diviso" 3), notiamo che avremo come quoziente un numero periodico 0,333333,., (0,3), l'algoritmo che effettua la divisione (pur avendo un numero finito di azioni elementari) non si fermerà, perché il quoziente è periodico, Per farlo fermare dovremmo imporre all'algoritmo lo stop dopo un certo numero di cifre decimali per il quoziente, L'algoritmo, quindi, non terminerà per particolari ingressi. TItermine algoritmo deriva dal nome di un matematico arabo del IX secolo: Abu Leonardo da Pisa, un altro grandissimo matematico vissuto intorno agli inizi del XIll secolo e universalmente riconosciuto con il 'soprannome di Fibonacci, rtferendosì alle importanti scoperte del matematico arabo era solito semplificare il suo nome in questo modo: "Algoritmo diceva che...". Considerato che Abu Ja'far Mohammed ibn Musa al-Kowarizmi Si era sempre interessato allo studio dei procedimenti aritmetici di calcolo necessari per risolvere i problemi, il termine algorìtmo venne utilizzato per indicare questo tipo di procedimento. Ja'far lIIIohammed ibn lIIIusa al.-Kowarizmi (tradotto dall'arabo, il nome ha il seguente significato: padre dì Ja'far, Maometto, figlio di Mosè, nativo di Kowarizmi, dove Kowarizmi è il nome dell'odierna città russa !p;)iv~)\ Nell'825, questo personaggio pubblicò due opere: una di aritmetica e una intitolata Kitab Al-jabr Wal Muqabala. Dalla parte centrale di quest'ultima ebbe origine la parola inglese algebra, mentre il termine algoritmo deriva da modifiche e adattamenti del nome del matematico. Riconsideriamo il problema (e il relativo algoritmo) del "prelievo dal bancomat" introdotto nel paragrafo precedente. Le azioni descritte in quel semplice algoritmo sono perfetta-. mente applicabili se: • il bancomat funziona correttamente; • il codice segreto viene inserito correttamente. In altre parole l'algoritmo che descrive la soluzione del problema 2 non è completo! Trasformiamolo, allora, nel modo riportato di seguito, Per semplicità, supporremo che, in caso di inserimento errato del codice segreto, il bancomat non consenta di ridiqitarlo. '1. Verifica che il bancomat funzioni correttamente 9. Cercare un altro bancomat 2. Introdurre la carta nel lettore 3. Digitare il codice segreto 4. Verifica che il codice sia corretto È corretto· ------. 8. Operazione terminata 5. Digitare l'importo da prelevare 6. Prelevare le banconote 7. Ritirare la carta dal bancomat Unità di apprendimento Cl • Problemi e algoritmi Questa versione ha una nuova veste grafica. Per facilitare la lettura abbiamo utilizzato le frecce per visualizzare i percorsi logici presenti nell'algoritmo. Abbiamo, inoltre, raggruppato le azioni da eseguire al verificarsi di determinate situazioni. 7 La rappresentazione degli algoritmi Per indicare le azioni negli algoritmi analizzati finora abbiamo utilizzato la lingua italiana che . è un linguaggio naturale. Questo linguaggio però pur essendo molto utile per chiarire le idee sul problema, non si presta bene a una precisa descrizione dell'algoritmo. Il linguaggio naturale, infatti, contiene sinonimi, ambiguità e, talvolta, anche eccezioni, metafore, allegorie. Sedobbiamo affermare che uno studente è molto volenteroso possiamo anche utilizzare gli aggettivi: zelante, operoso, attivo, alacre, sollecito, dinamico, solerte ecc. Inoltre, se proviamo a leggere la frase: "Ieri sera ho visto Giuseppe con un conoscente" vediamo che può essere interpretata in due modi diversi. Vale a dire: "Ieri sera ho visto Giuseppe che era in compagnia di un conoscente" oppure: "Ieri sera ho visto Giuseppe mentre ero in compagnia di un conoscente". Un altro esempio di ambiguità sono le istruzioni 1 e 2 del processo risolutivo relativo al problema "Cucinare la pasta asciutta per la propria famiglia": 1. prendere una pentola adeguata; 2. aggiungere dell'acqua nella pentola. Per rappresentare • al formalismo • al formalismo inglese). un algoritmo possiamo ricorrrere: dello pseudolinguaggio; di diagrammi a blocchi (abbreviato in DaB o detto anche flow-chart in Diamo uno sguardo alle figure Cl.7a e 'C'l.Zb. La figura Cl.7a riporta una descrizione formale dell'algoritmo detta pseudocodice perché, pur essendo strutturata come un codice scritto in un linguaggio di programmazione, si serve di un linguaggio molto vicino a quello naturale, detto pseudolinguaggio o linguaggio di progetto. L'attività di scrittura prende il nome di pseudocodifica. Tale attività è una fase intermedia che si pone tra la fase di analisi del problema e quella di codifica in un vero e proprio linguaggio di programmazione. Scopo principale della pseudocodifica è di portare il risolutore a esprimere le proprie istruzioni in una forma naturale, utilizzando frasi ed espressioni elementari della lingua italiana. Ciò permette di concentrarsi sulla risoluzione logica del problema, invece che sulla forma e sui vincoli da rispettare nella sua enunciazione. Nella prossima unità vedremo le regole da seguire per scrivere correttamente algoritmi in pseudolinguaggio. Nella figura Cl.7b si ricorrere, invece, ai Diagrammi a Blocchi (abbreviato in DaB o detto anche flow-chart in inglese). Un DaB è una descrizione grafica dell'algoritmo mediante appositi simboli che mette in evidenza il flusso di esecuzione delle istruzioni. Figura C1.7a Algoritmo: Prelievo dal bancomat (in pseudocodice). 1. 2. 3. 141 SE il bancomat è in servizio ALLORA Introdurre la carta nel lettore Digitare il codice segreto Area tematica 4. [ • Le basi della programmazione SE il codice è corretto ALLORA 5. 6. 7. Digitare l'importo da prelevare Ritirare le banconote . Ritirare la carta dal bancomat ALTRIMENTI 8. Operazione terminata FINESE ALTRIMENTI 9. Cercare un altro bancomat FINESE Figura C1.7b Vero Nella prossima unità vedremo anche le regole da seguire per scrivere correttamente ritmi in DaB. algo- B Dall'algoritmo al programma Poiché il nostro esecutore è il computer, dovremmo trasformare l'algoritmo dolinguaggio, o un DaB, in uno scritto in un linguaggio di programmazione " Un algoritmo scritto in un linguaggio ma sorgente e l'attività di traduzione scritto in pseuvero e proprio. di programmazione prende il nome di programprende il nome di codifica. Il programmatore è la figura professionale che esegue l'attività di codifica (Fig. C1.8). Da un problema si possono ottenere diversi algoritmi risolutivi; chiameremo equivalenti due algoritmi se, a partire dagli stessi dati iniziali, producono gli stessi risultati finali. Un algoritmo può essere tradotto in programmi diversi che generano gli stessi risultati finali. La situazione è allora riassunta nella figura (1.9. 142 " Unità di apprendimento Figura C1.8 :: '. :: :• ,. :: Azione 1 :; Azione 2 ·, ·: ·: ··,, Obiettivo iniziale ,. · :: :. :: ,'. :; Istruzione N r :: Istruzione 1 :: Istruzione 2 ., , , ,, · ..: ., Codifica Programmatore: Algoritmo: Sequenza di azioni elementari :. ,. ,. :. ,. :; Azione N Risolutore: Luigi O • Problemi e algoritmi Programma: Sequenza di istruzioni . ,. , :,.. '. , . Marco --,..'--_ ...• -----.... Dati iniziali Risultati finali Esecutore Verifica dei risultati Figura C1.9 Problema Algoritmo1 Programma1 I Programma21 Un processo risolutivo è un insieme di passi da compiere per giungere alla soluzione di un problema. Il criterio di verifica è un controllo sui risultati finali per verificare che questi siano rispondenti agli obiettivi iniziali. Formulare correttamente un problema, o affermare che un problema è ben formulato, vuoi dire: - chiarire gli obiettivi finali, cioè lo scopo che la soluzione del problema intende raggiungere; - individuare il criterio di verifica, cioè il modo con cui verificare che la soluzione ottenuta sia effettiva- 143 I Algoritmo2 ProgrammaM I AlgoritmoN Programma 1 mente quella cercata; - -possedere le informazioni inizia'i, cioè le informazioni necessariea ottenere la soluzione del problema. Un problema non è risolvi bile se, pur essendocorrettamente formulato, non ammette soluzioni. Il risolutore è colui che fornisce il processorisolutivo mentre l'esecutore è colui che compie materialmente le azioni da eseguire. Forpire le azioni da compiere è un'attività creativa e pertanto propria degli esseri umani mentre eseguire le azioni è un'attività di per sé non creativa e pertanto propria delle macchi- I Pr,ogr~mma2 I I ProgrammaK I ne, in particolare dei computer. Si definisce azione un qualunqu~ evento di cui sono noti il soggetto detto esecutore, l'oggetto, o gli oggetti, su cui l'esecutore deve agire e la trasformazione prodotta su di essi in un'unità finita di tempo. Si definisce algoritmo una sequenza finita e ordinata di azioni elementari che descrivono la soluzione di un problema. Un algoritmo scritto in un linguag- .".~. gio comprensibile al computer prende il nome di programma e l'attività dì traduzione prende il nome di codifica.