Teoria dei linguaggi formali
Significato o Semantica di un programma
«C'è modifica approfitto l'esecuzione del programma nel calcolatore???»
Secondo la teoria della calcolabilità non tutti i problemi si possono risolvere con l'informatica
es: Non esiste un programma che dato in input un codice e relativi dati, mi restituisca se dal codice termina l'esecuzione o meno. Problema non calcolabile.
Paradigmi di programmazione
- Modi diversi per risolvere lo stesso problema.
- I modi hanno la stessa potenza formale possono risolvere le stesse classi di problemi.
Paradigma ricorsivo → I problemi vengono risolti attraverso la definizione e calcolo di funzioni ricorsive, ovvero definite in termini di se stesse.
es funzione fattoriale ! : N -> N
n = n · (n - 1) · ... · 2n ∈ N ovvero N - {0}Paradigma iterativo → I programmi vengono risolti attraverso trasformazione di stato.
Lo Stato iniziale → programma → Stato finale
Il programma prende lo Stato iniziale, opera su un insieme di problemi e produce lo Stato finale.
Teoria dei linguaggi formali
Significato o Semantica di un programma
Che modifca apporta l'esecuzione del programma nel calcolatore???
Secondo la teoria della calcolabilità non tutti i problemi si possono risolvere con l'informatica.
es: Non esiste un programma che dato in input un codice mi restituisca output, mi restituisca se il codice termina l'esecuzione o meno. Problema non calcolabile.
Paradigmi di programmazione
- Modi diversi per risolvere lo stesso problema.
- Due modi molto spesso per uno stesso problema possono risolverlo.
Paradigma ricorsivo ➔ i problemi vengono risolti attraverso la definizione e calcolo con funzioni ricorsive, ovvero definite in termini di se stesse.
Es. funzione fattoriale : ->
Es. () = 2 + () NB: (2 scritto dentro insieme)
Definizione (come si comporta)
- 0! = 1
- n! = n·(n-1)!
- ∈ N ovvero N - {0}
Nella def. funzione uso la definizione stessa.
Uso (calcolo il valore) di 5!
- 0! = 1
- 1! = 1
- 3! = 3·2·1 = 6
- 4! = 4·3·2·1 = 24
5! = 5·4! per n ∈ N+
- 4·(3!) =
- 4·3·2·1 = 4·3·2·1!
- Stato iniziale ➔ Programma ➔ Stato finale
- 1000... Sequenza di parole di memoria (celle) che vengono indirizzate
- 1000...0000 Tradurre le parole compreso anche basso lunghezza cost.
- y 30
- x 20
- z 15
- Associazione, nome-locazione
- Associazione, locazione-valore
Paradigma iterativo ➔ I programmi vengono risolti attraverso trasformazione di stato.
Il programma prende lo stato iniziale, opera su cui svolgere il problema il procedimento stato finale.
Il linguaggio C
...è un linguaggio ad alto livello cioè i costrutti del linguaggio sono comprensibili per il programmatore. Il calcolatore non esegue direttamente i programmi che noi scriviamo in linguaggio macchina, tra il linguaggio e il calcolatore, c'è un programma particolare, traduce le istruzioni o istruzioni in linguaggio macchina.
Concetto di stato
Per spiegare il significato dei programmi, è necessario astrarre dal loro effetto sulla loro esecuzione su quel livello di astrazione. L'esecuzione consiste su una memoria astratta che si può definire mediante un multimi. di valori binari in notazione decimale.
Memoria Fisica
Stato composto da associazioni nome-valore
Con questo tipo di stato numeroso è veloce la reevaluazione del programma quindi mi sito di uno stato composto da ambiente e memoria.
Il valore della variabile al valore x lo trovi in memoria sull'indirizzo associato solo x nell'ambiente.
Ambiente
Memoria
Come si crea lo stato? Nei linguaggi di programmazione esistono dei costrutti (strutture) delle dichiarazioni che hanno la funzione di creare lo stato
Effetto: Crea una nuova associazione sull'ambiente e sulla memoria.
Esempio: int x = 12;
Come si modifica lo stato?
Attraverso costrutto della Comando
Assegnamento
Nome ← espressione
Esempio: x ← 10+5
Situato l'espressione ed il valore risultante viene assegnato in memoria alla variabile.
Esempi: int x = 10 y ← 5 x = 3 i = 0, j=0, ← y+le
x = x+y
Altri comandi sono comprensioni o assegnamenti:
COMANDO CONDIZIONALE
If (condizione) comando1 ; else comando2 ;
Vero → Comando1Falso → Comando2
If annidato (NB: parentesi graffe!)
if (x > 0) { if (y > 0) x = x - 1; else y = y - 1;} else x = x + 2;if (x > 0) { x = x + 1; y = y + 1;}Uguaglianza: ==Assegnamento: =
COMANDO ITERATIVO (iterazione indeterminata)
while (condizione) comando ;
int x = 3;int y = 0;while (x > 0) { x = x - 1; y = y + 2;}Finché la condizione è vera, si esegue il comando; si rivaluta la condizione ad ogni "giro" di loop.
Il comando permette di avere computazioni a infinito.
COMANDO ITERATIVO (iterazione determinata)
for (int i = 0; i < 10; i++) comando ;NB: la dichiarazione va deve avvenire fuori dal for e dentro al ciclo i non deve essere modificata.
Perché non definire un linguaggio con solamente iterazione determinata?
Perché altrimenti si volerebbe la potenza di calcolo del linguaggio, quindi la possibilità di risolvere problemi.
int x = 24;int y = 9;while (x > y) { if (x > y) x = x - y; else y = y - x;}es. - MCD (m, n) nel ciclo while;
es. - MCD (n - m, m) nel ciclo for;
int x = 6; int fact = 1;for (int i = 1; i-
Nozioni fondamentali
-
Nozioni fondamentali, Semiotica
-
Nozioni di Chimica organica
-
Nozioni, Microbiologia clinica