Sei sulla pagina 1di 27

#2 – Computer, Algoritmo, ..

concetti di base
( 2022/10/03 )
Informatica

informat(ion) (automat)ique Computer Science

- Philippe Dreyfus, 1962 - Louis Fein, 1956


(wikipedia) (wikipedia)
Algoritmi, linguaggi
Algoritmo – definizione (1/2)

Definizione
informale
(per capire di cosa
stiamo parlando)

Algoritmo

INPU OUTPUT
“ l'insieme di passi che
T
specificano come
eseguire un dato
compito “ Prende in ingresso (INPUT) un insieme di oggetti,
item e li trasforma in un nuovo set di oggetti/item
(OUTPUT).
Algoritmo & Linguaggi

Per SCRIVERE un algoritmo abbiamo bisogno di un LINGUAGGIO

Ci sono a disposizione tanti possibili linguaggi, progettati per essere interpretato da


UMANI o da COMPUTER.

Quelli per gli UMANI hanno il vantaggio di esser facili da capire (per noi, by-design) ma
sono spesso imprecisi; quelli progettati per essere interpretati da COMPUTER sono più
criptici, sono disambigui, formali, ma hanno il vantaggio di poter essere interpretati in
maniera automatica.
Algoritmo & Linguaggi

Per capire le caratteristiche di un linguaggio, nell’ottica della linguistica computazionale è


importante distinguere fra :

LESSICO = l’insieme di regole che definiscono la composizione di parole

SINTASSI = L’insieme di regole che definiscono la composizione di frasi

SEMANTICA = Il dominio in cui si associa un significato a parole, frasi e testi.


Due linguaggi: PSEUDOCODICE e DIAGRAMMA DI FLUSSO

Vedremo due semplice linguaggi, per descrivere algoritmi:

•PSEUDODOCODICE: un linguaggio testuale

•DIAGRAMMA DI FLUSSO: un linguaggio grafico

Sono linguaggi particolarmente comodi quando vogliamo comunicare con degli esseri
umani (attività MOLTO frequente in informatica)
PSEUDOCODICE

Algoritmo per l’esecuzione di somme:

1- acquisisci il primo addendo (a)


2- acquisisci il secondo addendo (b)
3- a = a + 1
4- b = b -1
5- se b > 0 torna a 3-
6- mostra il contenuto di a Pseudocodice

Algoritmo

A,B B
Pseudocodice

(1) acquisisci il primo addendo (a)


(2) acquisisci il secondo addendo (b)
(3) a = a + 1
(4) b = b -1
(5) se b > 0 torna a (3), altrimenti vai a (6)
(6) mostra il contenuto di a

Pseudocodice : linguaggio testuale. E’ un linguaggio utile per esprimere algoritmi che


debbano essere letti da UMANI; cerca tuttavia di fare uso di costrutti (SE, ALLORA,
SALTA alla riga, etc.. ) che si trovano anche nei linguaggi per computer (per facilitarne
la traduzione in questi)
PSEUDOCODICE

Non esiste una vera e univoca definizione del linguaggio:


genericamente potremmo dire che il suo lessico è composto
da numeri, che numerano delle righe e dei testi, associate a
delle righe.

Se dovessimo definirne una sintassi, potremmo ad esempio 1- acquisisci il primo addendo (a)
elencare delle regole del tipo: 2-
3-
acquisisci il secondo addendo (b)
a = a + 1
4- b = b -1
5- se b > 0 torna a 3-
•Una riga è composta come <numero di riga> - <testo> 6- mostra il contenuto di a

•Non esistono due righe con lo stesso numero di riga


•Le righe vengono scritte in ordine di riga crescente
•Etc..
PSEUDOCODICE

Possiamo identificare quindi alcuni elementi LESSICALI del linguaggio ed alcuni elementi
SINTATTICI (che dicono come costruire ‘testi’, in questo linguaggio) ma la SEMANTICA, il
significato di quanto contenuto in ogni riga è per lo piu’ relegato al’interpretazione umana.

La maggior parte degli PSEUDOCODICI, per tale motivo, nonostante siano strutturati in
maniera ordinata, ereditano l’AMBIGUITA’ tipica del LINGUAGGIO NATURALE e non si prestano
ad essere eseguiti as-they-are da un COMPUTER.

Questo perchè i COMPUTER non sono (ad ora) in grado di risolvere la complessità/ambiguità
del linguaggio naturale e pertanto è necessario utilizzare, se ci rivolgiamo a loro, dei linguaggi
meno ambigui (piu’ complessi)
DIAGRAMMA DI FLUSSO

Il Diagramma di Flusso è un linguaggio grafico che consta dei


seguenti elementi grafici (LESSICO) :
•nodo START (cerchio)
•nodo END (cerchio)
•nodo azione, contenente delle azioni da svolgere (rettangoli)
•nodo condizione, contente delle condizioni da verificare (rombi)
•Arco, orientato (con freccia) che esce da un nodo e giunge ad un altro nodo. Se l’arco esce da un nodo
Condizione deve necessariamente recare un’etichetta

E le seguenti regole di composizione (SINTASSI)


•In un grafo vi possono essere:[0,n] nodi END,1! Nodo START, [0,n] nodi Azione, [0,n] nodi Condizione;
•Ogni nodo azione ha [1,n] archi in ingresso ed 1! Arco in uscita;
•Il nodo START ha 0 archi in ingresso ed 1! arco in uscita; I nodi END hanno [1,n] archi in ingresso e 0
archi in uscita;
•I nodi condizione hanno[1,n] archi in ingresso e tanti archi in uscita quanti I possibili valori della
condizione
DIAGRAMMA DI FLUSSO

(1) acquisisci il primo addendo (a)


(2) acquisisci il secondo addendo (b)
(3) a = a + 1
(4) b = b -1
(5) se b > 0 torna a (3), altrimenti vai a (6)
(6) mostra il contenuto di a

PSEUDOCODICE

DIAGRAMMA
DI FLUSSO
DIAGRAMMA DI FLUSSO

•nodo START (cerchio)


•nodo END (cerchio)
•nodo azione, contenente delle azioni da svolgere (rettangoli)
•nodo condizione, contente delle condizioni da verificare (rombi)
•Arco, orientato (con freccia) che esce da un nodo e giunge ad un altro nodo. Se l’arco esce
da un nodo Condizione deve necessariamente recare un’etichetta

•In un grafo vi possono essere:[0,n] nodi END,1! Nodo START, [0,n] nodi Azione,
[0,n] nodi Condizione;
•Ogni nodo azione ha [1,n] archi in ingresso ed 1! Arco in uscita;
•Il nodo START ha 0 archi in ingresso ed 1! arco in uscita; I nodi END hanno
[1,n] archi in ingresso e 0 archi in uscita;
•I nodi condizione hanno[1,n] archi in ingresso e tanti archi in uscita quanti I
possibili valori della condizione

Queste regole definiscono la SINTASSI del linguaggio


DIAGRAMMA DI FLUSSO
Algoritmi – rappresentazione (2/2)

Pseudocodice e Diagrammi di flusso : sono linguaggi di “alto livello” (astratto,


prossimo all'uomo piu' che alla macchina) nati per rappresentare un algoritmo e
comunicarlo efficacemente a degli umani.

Possono pero’ essere AMBIGUI perchè il testo


contenuto negli elementi puo’ liberamente ereditare
tutta l’ambiguità del LINGUAGGIO NATURALE
Esempi vari di linguaggi per Umani
Diagramma di Flusso: linguaggio estensibile..

Esempio di
Diagramma di
flusso per farsi
una limonata

Costrutti del
linguaggio:

Pseudocode

1. Prendi il limone
2. Taglialo con il coltello
3. Se il limone non è buono, torna a 1.
4. Spremilo
5. Versa il succo in un bicchiere
Algoritmi – Diagramma di Flusso: graphical enrichments

Anche a livello grafico è


possibile “arricchire” il
linguaggio con ulteriori
costrutti linguistici (Es:
colonne di domino)
Algoritmi – AIOM, linee guida trattamento ca mammario (2016)
DALLA MACCHINA ALL’UOMO

Quanto visto finora è funzionale ad una rappresentazione di algoritmi interpretabile da


umani.

Tuttavia:

Solo l’uomo puo’ interpretarli => solo l’uomo puo’ eseguirli

Noi vorremmo usare I COMPUTER come ROBOT (schiavo, servitore, dall’antico slavo
ecclesiastico), ma perchè siano loro ad eseguire gli algoritmi è quindi necessario che
vengano tradotti in un linguaggio per loro comprensibile.

Abbiamo quindi bisogno di LINGUAGGI DI PROGRAMMAZIONE tramite i quali


possiamo descrivere gli algoritmi che vorremmo veder eseguiti
Algoritmi – Linguaggi di Programmazione

#include <stdio.h>

int main() {
1- acquisisci il primo addendo (a) int a,b;
2- acquisisci il secondo addendo (b) printf("Inserisci il valore di a: ");
3- a = a + 1 scanf("%d", &a);
printf("Inserisci il valore di b: ");
4- b = b -1 scanf("%d", &b);
5- se b > 0 torna a 3-
6- mostra il contenuto di a label:
a = a + 1;
b = b - 1;
if( b > 0) goto label;

printf("\n La somma di %d",a);


}

PSEUDOCODICE C
Algoritmi – Linguaggi di Programmazione

#include <stdio.h>

int main() {
int a,b;
printf("Inserisci il valore di a: ");
scanf("%d", &a); 1- acquisisci il primo addendo (a)
printf("Inserisci il valore di b: "); 2- acquisisci il secondo addendo (b)
scanf("%d", &b);

label:

a = a + 1; 3- a = a + 1
b = b - 1; 4- b = b -1

if( b > 0) goto label; 5- se b > 0 torna a 3-

printf("\n La somma di %d",a); 6- mostra il contenuto di a

https://www.onlinegdb.com/online_c_compiler
Algoritmi – Linguaggi di Programmazione

a = int(input("Inserisci A : "))
1- acquisisci il primo addendo (a)
b = int(input("Inserisci B : "))
2- acquisisci il secondo addendo (b)
3- a = a + 1
for i in range(1,b):
4- b = b -1
a = a + 1
5- se b > 0 torna a 3-
6- mostra il contenuto di a
print("Il risultato e' ",a)

PSEUDOCODICE PYTHON

https://www.programiz.com/python-programming/online-compiler/
Saper programmare

Un linguaggio di programmazione è a tutti gli effetti un linguaggio. Per imparare a


padroneggiare bene un linguaggio di programmazione si stima(va) necessario
applicarsi per 8 ore al giorno per un 1,5 – 2 anni:

Saper buttar giu' 100 righe di


codice non significa essere
“programmatori” :)
Programming Languages (trends)
Quick recap : cosa vi si potrebbe chiedere?

Di saper commentare, in generale:

•Algoritmo (cos’è e a cosa serve)

•Descrivere cosa è un linguaggio, le sue necessità rispetto al destinatario cosa sono


lessico/sintassi/semantica;

•Pseudocodice e Diagramma di Flusso (saper scrivere piccolo algoritmi in entrambi I


linguaggi)

•Linguaggio di Programmazione (saper commentare la differenza fra I linguaggi di


programmazione ed i due linguaggi precedentemente citati)

Potrebbero piacerti anche