PIANO NAZIONALE FORTIC/UMTS
PERCORSO FORMATIVO A
TAAA1043
SCUOLA ELEMENTARE G.MARCONI- MARTINA FRANCA
MODULO 8
DAL PROBLEMA AL PROGRAMMA
TUTOR INS. GIUSEPPE CAMPANELLA
MAPPA DEL MODULO
PROBLEMI E ALGORITMI
CONOSCERE IL CONCETTO
DI PROBLEMA
CONOSCERE LE PRINCIPALI
STRATEGIE RISOLUTIVE
CONOSCERE QUANTI TIPI
DI
PROBLEMI ESISTONO
SAPER ANALIZZARE
UN PROBLEMA
AUTOMI ESECUTORI
STRUTTURA E CARATTERI
DELL’AUTOMA
La macchina di
Touring
CONCETTO INTUITIVO
DI ALGORITMO
LE STRUTTURE DI
CONTROLLO
RAPPRESENTAZIONI
DELL’ALGORITMO
LINGUAGGI
PRINCIPI LOGICI DEI
LINGUAGGI FORMALI
SINTASSI E SEMANTICA
DEI LINGUAGGI
LINGUAGGI NATURALI
E FORMALI
LA COMUNICAZIONE
TRA UOMO E MACCHINA
EVOLUZIONE DEI
LINGUAGGI DI PROG.
DALL’ALGORITMO AL
PROGRAMMA
PRIMA GENERAZIONE
DI LINGUAGGI
I MODERNI LINGUAGGI
DI PROGRAMMAZIONE
OBIETTIVI DEL MODULO
•Conoscere alcuni concetti fondamentali
dell'informatica: algoritmo, automa, linguaggio
formale;
•Essere in grado di cogliere l'intreccio tra alcuni
risultati della matematica e della logica dei primi
decenni del secolo scorso ed i successivi sviluppi
e applicazioni che questi hanno avuto in campo
informatico.
Macrotematiche del modulo
Automi Esecutori
Problemi ed algoritmi
Linguaggi
Problemi ed 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.
Un problema consta dei seguenti elementi:
I dati, ossia ciò che è noto, l’istanza che si deve affrontare e che
possiamo indicare col termine input.
I risultati, ossia ciò che si deve determinare, gli elementi incogniti
la cui determinazione fornisce l’output.
Le condizioni, che sono in generale le limitazioni cui devono
soggiacere i risultati.
TIPOLOGIE DI PROBLEMI
Per cogliere il collegamento tra la struttura di un problema ed
i metodi risolutivi per esso adottati, è opportuno tenere conto
della seguente ripartizione dei vari tipi di problemi in classi:
Problemi di decisione, in cui l’output è fornito dal valore vero o falso
a seconda che l’input soddisfi o meno una determinata proprietà.
Problemi di ricerca, in cui, nello spazio delle soluzioni possibili (spazio di ricerca),
si vuole determinare quella soluzione che soddisfa le condizioni poste dal problema,
che viene detta soluzione ammissibile.
Problemi di ottimizzazione, in cui alle soluzioni ammissibili è associata
una misura e si deve determinare la soluzione ammissibile la cui misura è massima o
minima.
TIPOLOGIA LOGICA DEI PROBLEMI
Si ha anche una suddivisione “logica” dei problemi in 3 classi:
Impossibili: non esiste una soluzione
Indecidibili: non è possibile decidere se
la soluzione esiste
Intrattabili: le risorse necessarie per la
soluzione, in termini di tempo e spazio,
sono proibitive.
Improponibili: nessuno è disposto a
perderci tempo
Esiste un meccanismo “dedicato” allo scopo
L’ANALISI DI UN PROBLEMA
Per compiere l’analisi di un problema il risolutore deve:
La prima fase dell’analisi di un problema, ossia la definizione dell’obiettivo
da raggiungere, può essere realizzata attraverso processi di affinamento
sempre più dettagliati. Si tratta di scomporre un problema complesso in
sottoproblemi più semplici, utilizzando la tecnica del top-down
TECNICA DEL TOP-DOWN
STRATEGIE PER LA SOLUZIONE DI UN PROBLEMA
Le strategie per la soluzione di un problema sono dette euristiche,
in quanto non passano in rassegna tutte le possibilità, ma si affidano
ad ipotesi che restringono i percorsi selezionando quelli che potrebbero
con più probabilità portare alla soluzione.
La definizione di una FUNZIONE EURISTICA permette di attivare
differenti strategie:
STRATEGIA MEZZO-FINE che mira a ridurre la differenza tra lo stato iniziale e
quello finale del problema.
STRATEGIA MINI-MAX che mira non tanto a massimizzare i vantaggi ma a minimizzare le contromosse dell’avversario.
STRATEGIA di SCOMPOSIZIONE DEI PROBLEMI nel caso di problemi
complessi occorre partire dalla soluzione di tutti i sottoproblemi
Soluzione di un problema
Non esistono metodi precisi che possano essere indicati per risolvere un problema,
in quanto ogni problema va affrontato nella propria specificità e la sua soluzione
dipende dalle conoscenze che si possiedono intorno a quel problema ed alle tecniche
per risolverlo.
Compiuto il primo passo, quello dell’analisi del problema,
si può far scaturire da essa una descrizione discorsiva
del problema e delle varie fasi del processo risolutivo.
Per la descrizione discorsiva spesso si usano
i diagrammi a blocchi
ESEMPI DI PROBLEMI
PROBLEMA 1. Trovare le chiavi di casa.
Prerequisiti: occorre saperle riconoscere dalle altre chiavi e occorre delimitare il posto in cui
cercarle.
Soluzione bruta: passare scrupolosamente in rassegna ogni centimetro dello spazio in cui dovrebbero
trovarsi, finché non le troviamo.
Solitamente però ci lasciamo guidare da informazioni
o ipotesi sui posti in cui conviene cercarle,
anche se così facendo non c’è la garanzia di risolvere il problema.
Gli algoritmi
Il concetto intuitivo di ALGORITMO:
Una procedura meccanica, seguendo la quale si può calcolare,
dopo un numero finito di passi, la soluzione di un problema.
La sequenza di azioni che compone l’ALGORITMO è valida
per un insieme di dati iniziali ben definito, e può essere eseguita
da un opportuno ESECUTORE.
CARATTERISTICHE DELL’ALGORITMO
Le caratteristiche fondamentali di un algoritmo sono:
1- precisione: assenza di ambiguità di interpretazione da parte dell'esecutore;
2- dettagliatezza: composto da istruzioni fondamentali;
3- comprensibilità: scritto in un linguaggio comprensibile all'esecutore;
4- composto da un numero finito di istruzioni: deve terminare in un punto del procedimento;
5- completezza: per tutti i casi che si possono verificare durante l'esecuzione deve indicare la strada da seguire;
6- eseguibilità: composto da istruzioni che l'esecutore è effettivamente in grado di compiere;
7- determinatezza: ogni istruzione deve provocare l'attivazione di un azione precisa;
8- riproducibilità: ogni successiva esecuzione dello stesso algoritmo con gli stessi dati di input,
deve produrre gli stessi dati di output;
9- correttezza: esso deve pervenire alla soluzione del compito cui è preposto, senza difettare di alcun passo fondamentale;
10- efficenza: deve pervenire alla soluzione del problema nel modo più veloce possibile;
- concludendo:
- dal punto di vista del problema: l'algoritmo è la sequenza di istruzioni da dare all'esecutore per ricevere i dati iniziali elaborati in
risultati finali;
- dal punto di vista dell'esecutore: l'algoritmo è la sequenza delle operazioni da compiere per risolvere il problema assegnato.
Le strutture di controllo
Spesso è necessario poter intervenire sull’ordine d’esecuzione
delle istruzioni. Per far ciò in ogni algoritmo bisogna disporre
di strutture di controllo, quali...
• Sequenza
• Iterazione
• Condizione
RAPPRESENTAZIONE DEGLI
ALGORITMI
Automi Esecutori
Un AUTOMA è un sistema, o meccanismo, che esegue da sé un
tipo prestabilito di compiti.
Gli automi possono differire notevolmente in base al tipo di compito
che sono chiamati a svolgere.
Classici tipi di automa sono il termostato, l’ ascensore, la calcolatrice tascabile.
Più tipi di compiti esegue, più tipi di dati sa
interpretare, più è complesso l’automa.
Gli automi e l’informatica
Le attività cui si dà luogo per risolvere un problema possono essere:
•attività intelligenti di elaborazione;
•attività routinarie di esecuzione
Mentre il primo ruolo è riservato alla MENTE UMANA, il secondo
viene delegato a strumenti capaci di svolgere in modo rapido ed esatto
le operazioni logico-matematiche.
Questi strumenti sono macchine, dette AUTOMI, e possono essere
programmate per svolgere diverse mansioni e per modificare le
proprie azioni in relazione ai mutamenti ambientali.
Struttura dell’automa
Inteso non come macchina fisica (hardware), ma come macchina
astratta (software) che automatizza la procedura risolutiva di un
problema, l’automa corrisponde a:
•Un linguaggio formale in cui esprimere il problema e la sua soluzione;
•Un insieme di istruzioni algoritmiche generali, codificate nel linguaggio formale;
•Un insieme di procedure per eseguire le istruzioni in ciascun caso particolare.
Caratteri degli automi
Un automa è un dispositivo in grado di eseguire solo una sequenza
di azioni stabilite in precedenza; dotato di meccanismi per acquisire
elementi dall'esterno e produrre elementi verso l'esterno passando
attraverso stati diversi tra loro.
Dal punto di vista formale l'automa viene definito come
"un insieme di cinque elementi":
1- l'alfabeto dei simboli di input: insieme di simboli che l'automa è in grado di ricevere
dall'esterno riconoscendoli;
2- l'alfabeto dei simboli di output: insieme di simboli che l'automa comunica verso l'esterno;
3- l'insieme dei possibili stati che l'a. può assumere: le situazioni più importanti dell'automa
durante il suo funzionamento;
4- la funzione degli stati successivi: la relazione che indica lo stato assunto dall'automa,
quando trovandosi in un determinato stato accetta dall'esterno un determinato simbolo
di input;
5- la funzione delle uscite: la relazione che indica il simbolo che viene emesso verso l'esterno
in corrispondenza di un determinato stato e di un determinato simbolo di input.
Il funzionamento dell'automa consiste quindi nell'accettare
un simbolo dall'esterno ed emettere un simbolo in uscita
producendo un cambiamento di stato.
L’automa si dice a stati finiti quando l’insieme dei possibili stati
e dei simboli è un numero finito.
L’automa si dice deterministico in quanto lo stato successivo è sempre
determinato dallo stato precedente.
L’automa si dice discreto in quanto le variabili d’ingresso, di stato e
d’uscita non variano con continuità nel tempo.
Concretamente, per automatizzare la procedura risolutiva di un
problema, bisogna prima di tutto aver ricondotto la formulazione
del problema ad un MODELLO MATEMATICO
Poi bisogna definire un ALGORITMO che faccia al caso
Infine bisogna implementare questo ALGORITMO su un sistema
fisico che lo esegua
In tutte queste fasi vi possono essere errori umani (oltre che
malfunzionamenti hardware), di tipo filosofico, matematico o bug
di programmazione, a seconda della fase in cui si rivelano.
La macchina di Touring
La macchina di Touring: è un dispositivo di elaborazione ideale estremamente semplice che
risponde ad alcune regole basilari di funzionamento
(prende il nome dal suo ideatore A. M. Touring).
La macchina di Touring è dotata dei seguenti elementi:
una testina di lettura/scrittura: in grado di leggere e modificare valori contenuti
in una serie di celle (queste possono contenere dei simboli che appartengono ad un alfabeto
finito);
una unità di controllo: in grado di assumere degli stati distinti e definiti;
una memoria: in grado di conservare lo stato dell'unità di controllo tra una lettura e la
successiva;
Essa funziona in base a due semplici presupposti:
•ogni algoritmo può essere espresso da una macchina la quale si limita a manipolare simboli
senza preoccuparsi di ciò che significano;
•ogni modo di manipolare i simboli in base a regole di calcolo si riduce ad una opportuna
combinazione di azioni elementari
I computer sono automi
Invece che in un singolo nastro la memoria può essere organizzata su più registri;
esattamente così avviene in un computer ove è presente:
•UN’UNITA’ LOGICO-ARITMETICA che legge/scrive ed
esegue operazioni sui simboli in base alle istruzioni ricevute.
•UN REGISTRO di INPUT OUTPUT
•UN REGISTRO DI CODIFICA (o contatore di programma) che
associa dei numeri alle istruzioni da eseguire.
Una macchina di Touring che non modifica la sua memoria è
un AUTOMA A STATI FINITI
Un computer invece è dotato di memoria,
di più dispositivi di input/output,
di una unità centrale di elaborazione,
comprendente registri, unità logica aritmetica e
unità di controllo che eseguono ciclicamente le
istruzioni.
La durata di questi cicli è scandita dalla velocità
di clock del processore, misurata in megahertz.
Il processore può anche utilizzare elaborazione
parallela per velocizzare il ciclo.
I LINGUAGGI
SONO UTILIZZATI NELLA COMUNICAZIONE
QUOTIDIANA TRA GLI ESSERI UMANI; SONO
PRIVI DI UNA DEFINIZIONE RIGOROSA ED IN
CONTINUA EVOLUZIONE, SPESSO PRESENTANO AMBIGUITA’, MA HANNO UNA ENORME
POTENZA ESPRESSIVA.
CREATI DALL’UOMO PER SCOPI PRECISI, SECONDO
REGOLE CONVENZIONALI ESPLICITE CHE NON
AMMETTONO ECCEZIONI,LE LORO FRASI HANNO
SEMPRE UN SIGNIFICATO NON AMBIGUO E
PIENAMENTE CONTROLLABILE. HANNO UN POTERE
ESPRESSIVO LIMITATO.
È l’insieme delle regole che specificano
in quale modo le parole possono
combinarsi fra loro per generare frasi
e in quali modi le frasi semplici
possano combinarsi per generare
frasi complesse.
LA FORMULAZIONE RIGOROSA DI UN
PROBLEMA E LA DEFINIZIONE DI UN AUTOMA
PER RISOLVERLO HANNO BISOGNO DI UN
LINGUAGGIO PIU’ PRECISO DI QUELLO DITUTTI I GIORNI
È l’insieme delle regole che governano
l’interpretazione delle parole e delle
frasi, stabilendo quale ne sia il significato.
Semantica di un linguaggio formale
Mentre un linguaggio naturale ha già una semantica implicita,
anche se imprecisa, per un linguaggio formale occorre anzitutto
definire un a FUNZIONE DI INTERPRETAZIONE, che associ
un significato alle parole ed ai modi di combinarle in proposizioni.
A tale scopo occorre specificare un dominio U di interpretazione,
costituito da un insieme di entità (oggetti concreti o astratti) e dalle
loro mutue relazioni.
Fissato il dominio U, un’interpretazione è una procedura che associa:
• a ciascuna costante individuale un elemento di U
•a ogni simbolo di operazione una particolare azione che, eseguita su
elementi di U, produce di nuovo elementi di U
•a ogni simbolo di predicato una proprietà o relazione tra elementi di U
Principi logici di un linguaggio formale
Esiste un sistema di principi logici in base ai quali si “ragiona” sui
dati codificati nel linguaggio formale.
Questi principi si possono formulare come istruzioni del tipo:
…per inferire una conclusione a partire da certe premesse o condizioni
L’UTILIZZO DI UN LINGUAGGIO FORMALE CONSENTE DI
PASSARE DA UN ALGORITMO AL CORRISPONDENTE
PROGRAMMA
I linguaggi nella comunicazione
uomo/macchina
Tra algoritmo e programma vi è una fondamentale differenza
che consiste nella MODALITÀ IN CUI LE ISTRUZIONI SONO
CODIFICATE.
Una prima essenziale differenza è quella tra:
Linguaggio macchina
Linguaggi assemblativi
Linguaggi algoritmici
Linguaggi orientati ad
oggetti
Dall’algoritmo al programma
Il passaggio dall’algoritmo risolutore di un problema al corrispondente
programma avviene mediante la codifica dell’algoritmo attraverso un
LINGUAGGIO DI PROGRAMMAZIONE
Per consentire la comunicazione tra uomo e macchina ogni computer
ha bisogno di un particolare programma, scritto in un linguaggio appena
superiore a quello macchina: il SISTEMA OPERATIVO.
Esso gestisce le funzioni di base, come l’accesso alle risorse e la gestione
degli applicativi.
Tutti i linguaggi riproducono una stessa serie di operazioni e processi effettivamente
eseguibili dell’elaboratore elettronico, ossia utilizzano una stessa tipologia di istruzioni.
Istruzioni di dichiarazione, descrivono dati e variabili utilizzati dal programma,
definendone tipo e struttura. Quanto più è evoluto il linguaggio, tanto più sono
semplici le istruzioni per definire strutture complesse.
Istruzioni di assegnazione, consentono di assegnare ad una variabile un valore
dello stesso tipo della variabile.
Istruzioni di controllo sono istruzioni che richiedono salti di sequenza nell’esecuzione
del programma.
Rientrano in questa categoria le istruzioni di selezione e di iterazione e i salti
incondizionati.
Istruzioni di input/output, richiedono l’ingresso di informazione da una periferica
alla memoria centrale oppure l’uscita di una informazione dalla memoria centrale ad
una periferica.
I principali linguaggi di programmazione
TRADUTTORE DI FORMULE
INVENTATO NEI PRIMI ANNI 50
PER RISOLVERE PROBLEMI IN
AMBITO MATEMATICO
LINGUAGGIO ORIENTATO AD
APPLICAZIONI COMMERCIALI
E’ IL PRIMO LINGUAGGIO UTILIZZATO
PER LO SVILUPPO DEI PROGRAMMI
GESTIONALI AZIENDALI
LINGUAGGIO ALGORITMICO
ELABORATORE DI LISTE
RISALE AGLI ANNI 50 ED ERA
APPLICATO NELLA PRODUZIONE
DI PROGRAMMI TRADUTTORI
PROGRAMMA STRUTTURATO IN BLOCCHI,
DELIMITATI DA UN BEGIN E DA UN END
E’ L’ANTESIGNANO DELLA
PROGRAMMAZIONE STRUTTURATA
E DEL PASCAL
Sviluppati tra gli anni ‘60 e ‘70
sono tutti linguaggi per così dire
“didattici”, cioè relativamente
facili da apprendere e
funzionali allo sviluppo
di altri linguaggi più elevati e di
programmi.
Dal BASIC sono derivati i linguaggi VISUALI ed ORIENTATI AGLI
OGGETTI come il VISUAL BASIC, JAVA e ACTION SCRIPT,
con interfaccia grafica di facile utilizzo (pulsanti e finestre).
I MODERNI LINGUAGGI DI PROGRAMMAZIONE
Oggi sono ormai centinaia i linguaggi esistenti.
Per praticità vengono classificati in famiglie,
accomunati da uno stesso
MODELLO COMPUTAZIONALE
STILI E METODOLOGIA DI
PROGRAMMAZIONE
BASATO SU SEQUENZE DI
ISTRUZIONI
PREVEDE LA SCOMPOSIZIONE DI UN SISTEMA
COMPLESSO IN PIU’ MODULI, IN ANALOGIA
ALLA SCOMPOSIZIONE DI UN PROBLEMA IN
SOTTOPROBLEMI
BASATO SU FUNZIONI
RICORSIVE
AL CONTRARIO PREVEDE LA COSTRUZIONE DI UN
SISTEMA ATTRAVERSO L’AGGREGAZIONE DI PIU’
MODULI. QUESTO APPROCCIO PREVEDE IL
RIUTILIZZO DEL SOFTWARE GIA’ DISPONIBILE ED
E’ ALLA BASE DELLA
PROGRAMMAZIONE AD OGGETTI
LA PROGRAMMAZIONE AD OGGETTI
E’ una tecnica di costruzione del software tesa a favorirne al
massimo la GENERALITA’ e quindi la RIUTILIZZABILITA’
I moduli od oggetti, di cui è composto il programma sono
chiamate CLASSI.
Esse possono essere manipolate con operazioni comuni.
Possono essere aggregate in classi più complesse.
Possono essere organizzate gerarchicamente attraverso il
meccanismo dell’ereditarietà
TRE LINGUAGGI PER PROGRAMMARE NELLA SCUOLA
DI BASE
LEGGI
APRI
LEGGI
Scarica

MODULO 8 DAL PROBLEMA AL PROGRAMMA