Sei sulla pagina 1di 31

Informatica

CdL Scienze e Tecniche Psicologiche


a.a. 2018-2019

Algoritmi
Problema
Usualmente i problemi che ci troviamo ad affrontare nella quotidianità
possono ricondursi all’elaborazione di una serie di informazioni.

L’uomo compie una serie di azioni (fisiche o mentali) che alla fine
“producono” la soluzione del problema

Quindi un problema è caratterizzato da:


 un insieme di dati di partenza
 un risultato cercato
 una soluzione: procedura che genera il risultato a partire dai dati di
partenza

Esempi:
 calcolare l’area di un cerchio
 riconoscere il volto di una persona

Informatica Andrea Frosini 2


La soluzione

La conoscenza di come si risolve un problema e la capacità di risolverlo


sono competenze distinte
Esempio: ognuno è capace di riconoscere un volto, ma come avviene questo
riconoscimento? Come descrivere la procedura per riconoscere uno
specifico volto?

Può capitare di trovarsi di fronte ad un problema la cui soluzione debba


essere attuata non da noi, ma da una altro soggetto (anche un
calcolatore). Il soggetto può non sapere come risolvere il problema,
sebbene possa dichiarare la sua disponibilità ad attuare la soluzione nel
momento in cui gli venisse insegnata

Informatica Andrea Frosini 3


La procedura di soluzione

La procedura di soluzione deve allora essere realizzata in fasi


distinte e successive:

 analisi del problema e identificazione di una soluzione da parte


del primo soggetto
 descrizione della soluzione da parte del primo soggetto in
termini comprensibili al secondo soggetto
 interpretazione della soluzione da parte del secondo soggetto
 attuazione della soluzione da parte del secondo soggetto

Informatica Andrea Frosini 4


L’esecutore
La procedura di soluzione deve essere
descritta in una forma che l’esecutore
sia in grado di interpretare in modo
corretto

La soluzione deve specificare delle


azioni che l’esecutore è in grado di
attuare

Ogni esecutore è caratterizzato dalle


sue capacità di interpretazione e di
attuazione

Informatica Andrea Frosini 5


L’esecutore calcolatore
I calcolatori sono degli esecutori di soluzioni che esseri umani hanno
precedentemente identificato e descritto.
I calcolatori hanno una notevole velocità di esecuzione e possono ripetere
la stessa operazione producendo sempre lo stesso risultato un numero
elevato di volte

Il calcolatore in quanto esecutore è caratterizzato da:


- un linguaggio che è in grado di interpretare, con il quale devono
essere descritte le soluzioni che vuole che esso attui
- l’insieme delle azioni che è in grado di compiere
- l’insieme delle regole (istruzioni) che a ogni costrutto linguistico
sintatticamente corretto associano le rispettive azioni da compiere

Informatica Andrea Frosini 6


Problemi e algoritmi

Se un problema è particolarmente semplice, l’esecutore potrebbe essere


in grado di eseguire la soluzione direttamente

Esempio: determinare la superficie di un cerchio di raggio r

Se il risolutore non conosce la formula risolutiva la si deve indicare


esplicitamente: s =  r2

Tuttavia se l’esecutore non conosce come elevare un numero al quadrato,


si ha che la soluzione contiene a sua volta un problema la cui
soluzione deve essere descritta in modo esplicito

Informatica Andrea Frosini 7


Gerarchia di problemi
In generale per giungere alla descrizione della soluzione di un
problema si scompone il problema in sotto-problemi, e questi in
sotto-sottoproblemi

Ci si ferma quando si giunge ad un problema elementare o primitivo la


cui soluzione corrisponda ad una azione elementare che può essere
direttamente compiuta dall’esecutore

Risolvere un problema equivale


a risolvere una opportuna
successione di problemi più semplici

Informatica Andrea Frosini 8


Procedura effettiva

L’insieme dei sotto-problemi viene risolto da una procedura effettiva


quando:

 tutti i problemi sono elementari

 è fissato l’ordine di soluzione dei problemi

 è specificato il modo in cui un problema utilizza i risultati dei


problemi che lo precedono

Informatica Andrea Frosini 9


Algoritmi e programmi

Le soluzioni effettive (soluzioni che possono essere rese comprensibili


all’esecutore) per esecutori caratterizzati formalmente sono chiamate
algoritmi:
 Il termine algoritmo deriva dal nome di un matematico arabo Al-
Khuwarizmi (IX sec d.C.)

 un algoritmo è una successione ordinata di istruzioni (o passi) che


definiscono le operazioni da eseguire su dei dati per risolvere una classe di
problemi

Nel caso di calcolatori,


- le soluzioni effettive sono tradotte in procedure effettive o programmi
- il linguaggio formale per la loro descrizione è detto linguaggio di
programmazione

Informatica Andrea Frosini 10


Sviluppo di un programma

Il processo di sviluppo di un programma è organizzato in:

Analisi del problema e identificazione di una soluzione

Formalizzazione della soluzione e


definizione dell’algoritmo risolutivo

Programmazione, cioè scrittura dell’algoritmo in un


linguaggio di programmazione ad “alto livello”

Traduzione del programma in un “linguaggio macchina”


direttamente interpretabile dalla macchina

Informatica Andrea Frosini 11


Linguaggi di alto livello
e linguaggio macchina

I linguaggi di alto livello sono più facilmente comprensibili dagli esseri


umani ma sono sempre linguaggi formali

Il linguaggio macchina è un linguaggio formale comprensibile


direttamente da uno specifico calcolatore

La traduzione da quello di alto livello a quello macchina può essere


fatta automaticamente in virtù delle proprietà formali di entrambi

Informatica Andrea Frosini 12


Proprietà degli algoritmi
Perché una sequenza di istruzioni sia un algoritmo devono essere
soddisfatti i seguenti requisiti:

Finitezza

– Il numero di istruzioni è finito

– Ogni istruzione è eseguita in un intervallo finito di tempo

– Ogni istruzione è eseguita un numero finito di volte

Informatica Andrea Frosini 13


Proprietà degli algoritmi
Perché una sequenza di istruzioni sia un algoritmo devono essere
soddisfatti i seguenti requisiti:

Generalità

– un algoritmo deve fornire la soluzione ad una classe di


problemi
cioè:
•dato un insieme di definizione o dominio
•dato un insieme di arrivo o codominio

l’algoritmo può operare su tutti i dati appartenenti al dominio


per fornire una soluzione all’interno dei codominio

Informatica Andrea Frosini 14


Proprietà degli algoritmi
Perché una sequenza di istruzioni sia un algoritmo devono essere
soddisfatti i seguenti requisiti:

Non ambiguità

– le istruzioni sono definite in modo univoco

– non ci sono paradossi, contraddizioni, ambiguità

– il risultato dell’algoritmo è identico indipendentemente


da chi lo sta eseguendo

Informatica Andrea Frosini 15


Istruzioni

Ma quali sono le istruzioni possibili


in un calcolatore moderno?

Cosa riesce a fare direttamente?

Quali sono i blocchi elementari che possiamo


comporre per costruire espressioni sempre più
complesse, programmi sempre più sofisticati ?

Informatica Andrea Frosini 16


Istruzioni

Le istruzioni possono essere divise in 6 categorie:

 istruzioni operative

 istruzioni di salto

 istruzioni di inizio/fine esecuzione

 istruzioni di ingresso/uscita

 istruzioni condizionali

 istruzioni di loop o di ciclo

Informatica Andrea Frosini 17


Istruzioni operative

Istruzioni che producono un risultato se eseguite

Ne fanno parte le operazioni aritmetiche e le assegnazioni

Es:
 l'istruzione: 5+3
 l'istruzione: x  2
 l'istruzione: 3 mod 2 (mod sta per modulo ovvero resto della
divisione intera)

Informatica Andrea Frosini 18


Istruzioni di salto

Istruzioni che alterano il normale ordine di esecuzione delle


istruzioni di un algoritmo, specificando esplicitamente quale sia la
successiva istruzione da eseguire

Si distinguono in istruzioni di salto condizionato e incondizionato


a seconda che debba essere verificata una condizione per poter
attuare il salto oppure no

Nei linguaggi di programmazione “strutturati” (vedremo poi) non


sono usate

Informatica Andrea Frosini 19


Istruzioni di inizio/fine
Indicano quale istruzione dell’algoritmo debba essere eseguita
inizialmente e quale determini la fine dell’esecuzione

Istruzioni di ingresso/uscita
Istruzioni che indicano una trasmissione di dati o messaggi fra
l’algoritmo e tutto ciò che è esterno all’algoritmo

Tali istruzioni

 si dicono di ingresso o lettura quando l’algoritmo riceve dati dall’esterno


 si dicono di uscita o scrittura quando i dati sono comunicati
dall’algoritmo all’esterno

Informatica Andrea Frosini 20


Istruzioni condizionali

Istruzioni che controllano il verificarsi di condizioni specificate e che in


base al risultato determinano quale istruzione eseguire

Nota: si altera il flusso del programma in funzione della condizione (se


e' vera o falsa)

Si presentano nella forma:

se … allora … altrimenti
if … then … else

Informatica Andrea Frosini 21


Istruzioni di loop o di ciclo

Determinano il ripetersi di una stessa serie di istruzione fintanto che


una condizione rimane verificata (vera) o non verificata (falsa).

Tale condizione può essere testata sia prima che dopo l’esecuzione,
per la prima volta, della serie di istruzioni.

Si presentano nelle forme:

fintanto che … esegui …


for … do …
oppure
esegui … fintanto che …
repeat … until …

Informatica Andrea Frosini 22


I predicati nelle istruzioni di controllo

Le istruzioni di controllo devono


determinare (calcolare) la verità o falsità
di un enunciato

Tale enunciato viene chiamato


proposizione e si parla di valore di
verità di tale proposizione

Informatica Andrea Frosini 23


Proposizioni

Un proposizione è un costrutto linguistico del quale si può dire se è


vero o falso

Il valore di verità di una proposizione è l’essere vera o falsa della


proposizione

Es:
 “3 è un numero pari” è una proposizione
 “incrementa x di 10” non è una proposizione

Informatica Andrea Frosini 24


Predicati

E’ un predicato una proposizione che contiene delle variabili e in cui il


valore delle variabili determina il valore di verità del predicato

Es. la variabile età è minore di 30

La composizione di un predicato avviene tramite i seguenti operatori


relazionali

= uguale ≠ diverso
> maggiore ≥ maggiore o uguale
< minore ≤ minore o uguale

Informatica Andrea Frosini 25


Predicati semplici e composti

Un predicato che contiene un solo operatore relazionale è detto


predicato semplice

Gli operatori relazionali possono essere combinati con i seguenti


operatori logici:
NOT AND OR

Un predicato che contiene più operatori relazionali combinati tramite


uno o più operatori logici è detto composto

Informatica Andrea Frosini 26


Operatori logici
NOT ():
dato un predicato p, NOT p è vero quando p è falso e viceversa
AND ():
dati due predicati p e q, p AND q è vero solo quando entrambi p e q
sono veri e falso altrimenti
OR ():
dati due predicati p e q, p OR q è falso solo quando entrambi p e q
sono falsi e vero altrimenti

  V F p  V F p

V F V V F V V V
F V F F F F V F
q q q
Informatica Andrea Frosini 27
Esercizi

1. Come esprimere il concetto:

 eta' compresa fra 18 e 60 anni

 altezza superiore a 1.90m oppure peso superiore a 100Kg

 un anno multiplo di 4 ma non multiplo di 100

 costo compreso tra 12 e 15 euro oppure costo maggiore di 20 euro oppure


costo minore di 5 euro e spesa diversa da 4 euro

Informatica Andrea Frosini 28


Esercizi

2. Scrivere due formule che coinvolgano ciascuna la variabili età, altezza e peso
e tutti e tre i connettivi logici AND, OR NOT.
Per ciascuna di esse indicare una valutazione delle variabili ed il corrispondente
valore di verità della formula Esempio:

formula:
((età=10 AND altezza=età-3) OR (peso < 20) ) AND NOT (peso=età)
 
età = 20 altezza = 167 peso = 50 valore di verità = F

formula:
NOT (peso>altezza – 8 OR NOT età=peso) OR (peso < 20 AND peso=45) 

età = 78 altezza = 74 peso = 78 valore di verità = F

Informatica Andrea Frosini 29


Esercizi

3. Per ciascuna delle seguenti formule fornire un insieme di valori per le


variabili che le rendano vere
 
((età = 20) AND (età >15)) OR (peso <50)

età = peso = colore =


 
((peso > 0) AND (colore = 15)) OR (NOT (peso = 70))

età = peso = colore =


 
NOT ( NOT ( età > 31) ) OR (colore = giallo)

età = peso = colore =

Informatica Andrea Frosini 30


Esercizi

4. Date le variabili età = 20, colore= rosso e y = 24, scrivere due formule, una
vera ed una falsa, contenenti ciascuna tutte e tre le variabili e tutti e tre i
connettivi AND OR e NOT.

Informatica Andrea Frosini 31

Potrebbero piacerti anche