Informatica Problemi e algoritmi Problemi e algoritmi Col termine problema o situazione problematica s’indica una situazione che pone delle domande cui si devono dare risposte. Risolvere il problema vuol dire uscire da tale situazione problematica Sono esempi di situazioni problematiche: Individuare il cammino più breve per andare a scuola Scrivere in ordine alfabetico un elenco di nomi Calcolare l’area di un campo rettangolare Elementi caratteristici I dati iniziali sui quali basare la soluzione del problema, detti anche dati di input 2. I risultati che si vogliono ottenere, detti anche dati di output 3. Il procedimento risolutivo, che permette di passare dai dati di input ai dati di output 1. Determinare questi elementi significa analizzare il problema Risolvere un problema Risolvere un problema significa “ricercare ed esprimere un elenco di istruzioni che, interpretate da un esecutore, a partire da determinate informazioni iniziali, conducono ad altre finali. Risolvere un problema significa trovare l’algoritmo che lo risolve… Programmatori ed esecutori Dobbiamo distinguere fra il programmatore (detto anche risolutore) e l’esecutore. Il programmatore è colui che costruisce la procedura per risolvere il problema. L’esecutore esegue le istruzioni programmate dal programmatore. Concetto di algoritmo DEFINIZIONE: Una dettagliata sequenza di azioni/operazioni che devono essere eseguite per risolvere una classe di problemi… Tecnicamente un algoritmo è costituito da un numero finito di passi al termine dei quali deve essere generato un risultato. Proprietà Ogni algoritmo deve essere: Finito: il numero di istruzioni è finito, inoltre deve presentare un punto di inizio (dove comincia il procedimento risolutivo) ed un punto di fine raggiunto il quale si interrompe l'esecuzione delle istruzioni. Non ambiguo: ciascuna istruzione deve essere interpretabile in modo univoco, senza ambiguità. Eseguibile: cioè la sua esecuzione deve essere possibile con gli strumenti di cui si dispone. Deterministico: ad ogni passo deve essere sempre definita una ed una sola operazione successiva. Esaustivo: l’algoritmo deve essere valido per tutti i problemi dello stesso tipo. Strategie di risoluzione Per compiere l’analisi di un problema il programmatore deve svolgere una attività creativa nella ricerca della risoluzione del problema: interpretare l’enunciato del problema e definire gli obiettivi da realizzare; individuare i dati del problema (iniziali, finali e intermedi); descrivere il procedimento risolutivo individuando le operazioni da compiere sui dati iniziali per ottenere i risultati finali; eseguire nell’ordine le operazioni descritte nel processo risolutivo (il programmatore in questa fase diventa esecutore); verificare se i risultati ottenuti rispondono alle finalità del problema reale (attendibilità). Componenti Dati: cioè gli oggetti su cui operare, che possono essere classificati in diversi modi A ogni dato è associato un nome che lo identifica in modo univoco e un tipo. In base al tipo, possono essere: ◦ Numerici ◦ Alfanumerici, detti stringhe Istruzioni: cioè le azioni che devono essere eseguite Dati numerici Sono i dati che contengono numeri, sui quali è possibile effettuare le operazioni aritmetiche (somma, sottrazione divisione, moltiplicazione). Si suddividono in: interi: dati numerici che non prevedono cifre decimali reali: dati numerici che prevedono cifre decimali. Esempi: il numero di allievi di una classe è rappresentato da un dato numerico intero, mentre la temperatura media registrata nel mese di ottobre è un dato numerico reale. Dati alfanumerici Sono dati che contengono i caratteri alfabetici (A, B, C ... Z), caratteri speciali ($, % , !, ?, &….) e cifre (1, 2, 3, …), sulle quali non sono possibili le operazioni aritmetiche. Esempi: il nome, l’indirizzo e il codice fiscale di una persona; il numero di un autobus, anche se formato da cifre è alfanumerico in quanto qualsiasi operazione aritmetica su di essa sarebbe priva di significato. I Dati In base alla modalità di interazione con l’esecutore: a) Input: sono i dati forniti dall'esterno necessari all'elaborazione e devono essere noti al momento dell'esecuzione; b) Output sono i risultati calcolati dall'esecutore e comunicati all'esterno; c) Interni o di lavoro: sono i dati utilizzati nella trasformazione compiuta dall’algoritmo. I Dati In base alla loro variabilità: costanti: il valore del dato noto a priori, rimane immutato nel tempo; variabili: il valore del dato può cambiare nel tempo. Esempi: se si deve calcolare l'area di un cerchio di cui si conosce il raggio, i dati su cui opera l’algoritmo sono: raggio, area, π, ma mentre il raggio e l’area sono dati variabili, π è un dato costante che vale 3,14. Per nessun motivo il valore di π dovrà cambiare. Strumenti per la programmazione Per progettare un algoritmo dobbiamo saper come rappresentare e memorizzare i dati e come esprimere le diverse istruzioni che compongono l’algoritmo e che devono essere eseguite. Le Variabili Variabile: La variabile è la struttura dati più elementare e rappresenta, in maniera astratta, la cella di memoria in cui registrare le informazioni. Ogni variabile è identificata da un NOME e possiede un CONTENUTO (valore della variabile). Possiamo immaginare una variabile come una scatola caratterizzata da un’etichetta (nome) e contenente un dato (valore) che può essere un numero, una lettera o una sequenza di caratteri. Le Variabili Ogni variabile può contenere dati di un solo tipo; nella maggior parte dei linguaggi di programmazione è necessario dichiarare le variabili, cioè indicare il tipo di dati che possono essere contenuti nella variabile. Indicare il tipo di dati di una variabile significa essenzialmente due cose: stabilire una dimensione in memoria per la variabile e di conseguenza un intervallo di valori ammissibili per la variabile stessa; fissare l'insieme delle operazioni che possono essere applicate alla variabile. Le variabili vanno dichiarate all’inizio dell’algoritmo. Variabile e valore Il Valore di una variabile corrisponde al contenuto corrente della cella di memoria associata alla variabile. È bene ricordare che quando si modifica in qualche modo il contenuto di una variabile, l’informazione sul valore precedente la modifica viene “dimenticato”, a meno che non sia immagazzinato in un’altra variabile opportuna. NON CONFONDERE mai il NOME CON il VALORE!!!! Le Costanti Per esprimere direttamente valori prefissati (cioè che non devono essere modificati dal programma) si utilizzano le costanti Anche le costanti sono aree di memoria che però possono contenere un solo valore dall’inizio alla fine dell’esecuzione (che può essere un numero intero o reale o una stringa) Ad esempio, 1, ‘ciao’, 3.14, ecc.