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.
