User Tools

Site Tools


appunti3s:problema_e_algoritmo

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
appunti3s:problema_e_algoritmo [2018/05/03 11:17] profproappunti3s:problema_e_algoritmo [2020/06/08 22:19] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +> torna indietro > [[appunti3s:introduzione alla programmazione]]
 +
 +====A cosa serve un computer?====
 +
 +Immaginare di provare a spiegar a cosa può servire un computer ad una persona che non lo ha mai usato.
 +Ogni spiegazione si concentrerebbe su un particolare utilizzo:
 +  * qualcuno potrebbe dire che lo usa per vedere un video
 +  * qualcuno che lo usa per scrivere una lettera
 +  * qualcun altro che lo usa per navigare su Internet...
 +Chi ha dato la migliore spiegazione?
 +In un certo senso, ogni sono corretti tutti i tipi di utilizzo, che spiegano che un computer può essere usato per risolvere un problema. 
 +
 +====Cos'è un problema?====
 +
 +L'utente di fronte al computer deve svolgere dei compiti e si aspetta che il computer lo aiuti.
 +Un problema può essere il calcolo della dichiarazione dei redditi, la visualizzazione e la modifica di un documento, la riproduzione di un filmato...
 +Il computer non sa risolvere i problemi dell'utente. 
 +A ben pensarci, anche risolvendo due volte lo stesso tipo di problema, ogni volta ci saranno sicuramente delle piccole differenze, perché i dati di partenza potrebbero essere diversi.
 + 
 +====Come si descrive un problema?====
 +Nei problemi di matematica, __dopo__ aver letto il testo, si indicano quali sono i dati noti (di partenza) e quali sono i dati incogniti (usando un punto interrogativo).
 +
 +====Cos'è una soluzione?====
 +Per poter risolvere ogni tipo di problema (come anche quelli di matematica) __dopo__ aver visto i //dati//, è necessario conoscere un metodo risolutivo (di un problema generico).
 +Le istruzioni che risolvono questo problema generico potranno essere applicate a tutti i problemi dello stesso tipo (problemi specifici). 
 +Spesso la soluzione consiste nell'applicare una formula, sostituendo alle variabili presenti nella formula, il valore dei dati noti, per questo motivo è importante distinguere tra //costanti// e //variabili//.
 +Se ci sono più passaggi e più formule da utilizzare, oltre alle variabili di input e di output ci possono essere anche variabili temporanee (di lavoro).
 +
 +Il metodo risolutivo, viene detto anche //algoritmo//
 +
 +Esempio in cui il problema è quello di determinare (o calcolare) il valore massimo tra due numeri che sono forniti dall'utente. Se l'utente fornisse 5 e 9, quale sarebbe la risposta? 
 +
 +Sembra banale rispondere 9, ma non è banale descrivere il procedimento mentale che ci ha portato a questa risposta.
 +In generale i numeri potrebbero essere qualsiasi ed è necessario determinare un metodo risolutivo che ci dia la risposta corretta. Il programmatore ha il compito di descrivere il metodo risolutivo generico.
 +Più o meno il procedimento risolutivo sarebbe il seguente:
 +  - chiamare X il primo numero
 +  - chiamare Y il secondo numero
 +  - se l'espressione X > Y è vera, allora il risultato è X
 +  - altrimenti, se è falsa, il risultato è Y.
 +Questo metodo risolutivo funziona in tutti i casi? Quali sono i casi critici? 
 +Se un numero vale zero? Oppure se X = Y?
 +
 +
 +
 +
 +vedere l'introduzione alle [[appunti3s:tre_strutture]]
 +
 +====Come si descrive un metodo risolutivo?====
 +Un algoritmo può essere descritto usando diversi tipi di linguaggio: con delle parole (usando un linguaggio naturale o un linguaggio di programmazione) oppure usando un grafico (diagramma di flusso o flow chart).
 +Il metodo risolutivo viene infine fornito al computer, in forma numerica, all'interno di un programma (file eseguibile) che contiene le istruzioni //macchina// da eseguire.
 +Il programmatore segue un [[appunti3s:ingegneria del software#modelli_di_sviluppo_del_software_lifecycle|procedimento per sviluppare]] un programma per l'elaboratore e ottiene (oltre al programma desiderato) la relativa [[appunti3s:documentazione]].
 +
 +La documentazione è utilissima per poter fare la necessaria manutenzione al programma, come per la correzione degli errori, e per l'eventuale sviluppo di versioni future. 
 +Vi sono due tipi di documentazione:
 +  * la documentazione delle fasi del processo di sviluppo (responsabilità)
 +  * la documentazione delle funzioni usate nel programma (oggetti e variabili)
 +====Cos'è un programma?====
 +
 +Si può paragonare un programma ad una lunga e complessa ricetta di cucina.
 +Il computer è il cuoco che la deve eseguire per l'utente. 
 +Noi chi siamo? Siamo gli autori della ricetta (cioè del programma) da eseguire. 
 +Noi dobbiamo insegnare al computer a fare qualcosa, come glie lo possiamo insegnare?
 +
 +Esempio: Fiori di zucca ripieni al forno
 +  - lavare 6 fiori di zucca
 +  - lavare 1 zucchina
 +  - cuocere la zucchina a rondelle con sale ed olio per 10 minuti
 +  - frullare con il mixer la zucchina con 100 gr di ricotta 
 +  - riempire i fiori di zucca con il precedente preparato
 +  - mettere in forno ventilato a 160 gradi per 10 minuti 
 +  - spolverare le zucchine con parmigiano
 +  - mettere in forno per 5 minuti
 +
 +Per un cuoco esperto queste istruzioni possono essere semplici da realizzare, ma per altri no: si può notare che richiedono di sapere come si cuoce una zucca o come si accende il forno.
 +
 +Rispetto ad un vero cuoco, un computer non possiede nemmeno una propria intelligenza.
 +Le istruzioni che può eseguire un computer, quindi, devono essere molto più dettagliate, accade così che un programma risulti molto più lungo di una comune ricetta.