• Non ci sono risultati.

Algoritmi e Linguaggi Algoritmi e Linguaggi

N/A
N/A
Protected

Academic year: 2022

Condividi "Algoritmi e Linguaggi Algoritmi e Linguaggi"

Copied!
6
0
0

Testo completo

(1)

Algoritmi e Linguaggi Algoritmi e Linguaggi

Informatica - M. Falda, A. A. 2007 - 2008 2 / 21

Programmi e linguaggi Programmi e linguaggi

Un calcolatore è solo un esecutore rapidissimo di istruzioni

Un programma è un insieme di istruzioni codificate in un opportuno linguaggio

3 / 21

Linguaggi e algoritmi Linguaggi e algoritmi

Prima di scrivere un programma si deve

1. generalizzare il più possibile la procedura

2. assicurarsi che termini sempre

3. identificare tutte le possibili configurazioni iniziali

4. precisare in maniera univoca i passi da compiere

5. accertarsi che un calcolatore possa eseguirli

4 / 21

Algoritmo Algoritmo

Le precedenti caratteristiche portano agli algoritmi: un algoritmo è una procedura

1. generale

2. finita

3. completa

4. non ambigua

5. eseguibile

(2)

Informatica - M. Falda, A. A. 2007 - 2008 5 / 21

Progettare gli algoritmi Progettare gli algoritmi

Non esiste un algoritmo per progettare algoritmi!

Due approcci:

top-down: dal generale al particolare bottom-up: dal particolare al generale

Non tutti i problemi sono calcolabili e.g.: un programma si fermerà sempre?

Informatica - M. Falda, A. A. 2007 - 2008 6 / 21

Complessit

Complessità à degli algoritmi degli algoritmi

Tra i problemi calcolabili ce ne sono alcuni intrinsecamente più difficili, ad esempio

trovare un percorso minimo per visitare un insieme di città una sola volta

verificare la correttezza di un circuito logico trovare il minimo numeri di colori per una mappa

Informatica - M. Falda, A. A. 2007 - 2008

7 / 21

Diagrammi di flusso Diagrammi di flusso

Un algoritmo può essere descritto usando un diagramma di flusso

Un diagramma di flusso è costituito da blocchi di base

strutture per comporre i blocchi

Informatica - M. Falda, A. A. 2007 - 2008

8 / 21

Blocchi di base Blocchi di base

ingresso / uscita inizio e fine istruzione

Funzione Rappresentazione

(3)

Informatica - M. Falda, A. A. 2007 - 2008 9 / 21

La programmazione strutturata La programmazione strutturata

Un qualsiasi algoritmo può essere espresso combinando i blocchi di base mediante

sequenza selezione

ripetizione o iterazione

Si ottiene un diagramma di flusso strutturato

Informatica - M. Falda, A. A. 2007 - 2008 10 / 21

La sequenza La sequenza

È semplicemente un insieme di blocchi che si susseguono

E.g.: l’area di un triangolo

Inizio Inizio

FineFine a = b * h / 2 a = b * h / 2

Acquisisci la base b Acquisisci la base b

Acquisisci l’altezza h Acquisisci l’altezza h

Restituisci l’area a Restituisci

l’area a

11 / 21

La selezione La selezione

Permette di sdoppiare l’esecuzione in dipendenza di una condizione

I lati sono uguali?

I lati sono uguali?

Non equilatero Non equilatero Equilatero

Equilatero

falso vero

12 / 21

L L’ ’iterazione iterazione

Serve a ripetere una serie di istruzioni fa uso della selezione per terminare

n > 0?

n > 0?

falso vero

n = n / b

n = n / b resto(n, b)resto(n, b)

(4)

Informatica - M. Falda, A. A. 2007 - 2008 13 / 21

Linguaggi naturali e formali Linguaggi naturali e formali

Un linguaggio naturale è ambiguo

“una vecchia porta la sbarra”

Un linguaggio formale non lo è mai grammatiche formali

Informatica - M. Falda, A. A. 2007 - 2008 14 / 21

Il linguaggio macchina e l

Il linguaggio macchina e l’ ’assemblatore assemblatore

Anche le istruzioni sono codificate con sequenze di bit

Si possono associare simboli mnemonici, ma rimangono

la complessità

la mancanza di astrazione

Informatica - M. Falda, A. A. 2007 - 2008

15 / 21

I linguaggi ad alto livello I linguaggi ad alto livello

Permettono di

astrarre le caratteristiche del calcolatore generalizzare la scrittura di procedure ricorrenti

Caratteristiche

sintassi semplice, familiare al programmatore più sono “lontani” dal calcolatore e meno sono efficienti: compromesso tra velocità e versatilità

Informatica - M. Falda, A. A. 2007 - 2008

16 / 21

Traduzione Traduzione

Ogni linguaggio deve essere ritradotto in linguaggio macchina

Tre metodi

compilazione: C++

interpretazione: Javascript pseudo-codice: Java

(5)

Informatica - M. Falda, A. A. 2007 - 2008 17 / 21

Tipologie di linguaggi ad alto livello Tipologie di linguaggi ad alto livello

Imperativi: si specificano le istruzioni da eseguire C, Pascal

Ad oggetti: si modella il problema in termini di interazioni tra oggetti

C++, Java

Funzionali: si formula il problema in termini di funzioni Lisp, ML

Dichiarativi: si descrive il problema in termini logici lasciando al calcolatore il compito di risolverlo

Prolog, XSLT

Informatica - M. Falda, A. A. 2007 - 2008 18 / 21

Determinismo Determinismo

Un algoritmo è deterministico se ad ogni configurazione di ingresso corrisponde un unico percorso di esecuzione

Algoritmi non deterministici algoritmi casuali

approcci dichiarativi

19 / 21

Compilazione Compilazione

Il codice viene tradotto una volta per tutte efficiente

deve essere ricompilato per ogni calcolatore diverso

Compilatore Compilatore Programma sorgente

(codice)

Programma oggetto (eseguibile)

20 / 21

Interpretazione Interpretazione

Il codice viene tradotto linea per linea ogni volta

lento

portabile immediatamente su calcolatori diversi permette la meta-programmazione

Interprete Interprete Linea del programma

sorgente Istruzione/i in linguaggio

macchina

(6)

Informatica - M. Falda, A. A. 2007 - 2008 21 / 21

Pseudo

Pseudo- -codice codice

Il codice viene tradotto in un linguaggio intermedio “universale”

abbastanza lento

portabile immediatamente su calcolatori diversi

Compilatore Compilatore Programma sorgente

(codice)

Programma in pseudo-codice

Virtual M.

Virtual M.

Istruzione/i in linguaggio macchina

Informatica - M. Falda, A. A. 2007 - 2008 22 / 21

Il problema della fermata Il problema della fermata

1. Sia P(x) un programma che mi dice se il programma x termina (vero o falso)

2. Aggiungo alla fine di P un programma Q(y) che termina solo se y = P(x) è falsa

3. Se ora pongo x = P ottengo una contraddizione, infatti

1. se P termina P + Q non termina

2. se P non termina P + Q termina

Riferimenti

Documenti correlati

Ovviamente, anche le variabili di tipo struttura possono essere collezionate in un array, ma questo comporta la scrittura sequenziale in memoria delle infor- mazioni nelle

Traduttore: genera il programma oggetto mediante la traduzione del programma sorgente da linguaggio simbolico a linguaggio macchina. compilatore: la traduzione è effettuata una

Traduttore: genera il programma oggetto mediante la traduzione del programma sorgente da linguaggio simbolico a linguaggio macchina. compilatore: la traduzione è effettuata una

Traduttore: genera il programma oggetto mediante la traduzione del programma sorgente da linguaggio simbolico a linguaggio macchina. compilatore: la traduzione è effettuata una

– Nell'istruzione compare l'indirizzo effettivo (fisico) di memoria dove si trova l'operando – MOV AX, [3923:2314].. Modi

• Affinchè un programma scritto in un qualsiasi linguaggio di programmazione (ad es. il C) sia comprensibile (e quindi eseguibile) da un calcolatore, è

Il concetto di variabile nel linguaggio C rappresenta una astrazione della cella di memoria.. L'istruzione di assegnamento, quindi, e` l'astrazione dell'operazione di scrittura

All'inizio del ciclo di elaborazione il registro PC (program counter) vale 1, e viene ogni volta incrementato SUBITO DOPO la fase di Fetch: in questo modo, l'esecuzione di