INFORMATICAB Ingegneria+Elettrica+ · 2.02.2013 ·...

79
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA INFORMATICA B Ingegneria Elettrica Introduzione agli algoritmi

Transcript of INFORMATICAB Ingegneria+Elettrica+ · 2.02.2013 ·...

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

INFORMATICA  B  Ingegneria  Elettrica  

Introduzione  agli  algoritmi  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Che  cos’è  l’Informatica?  

•  È  una  scienza,  ovvero  una  conoscenza  sistematica  di  tecniche/metodi  per:  §  Rappresentare  dell’informazione  §  Elaborare  l’informazione  

•  L’informazione  è  costituita  da  una  collezione  di  dati  (osservazioni,  fatti,  entità  fisiche  o  concettuali)  strutturata  ed  elaborata  automaticamente    

2

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Che  cos’è  l’Informatica?  

•  Scienza:  approccio  rigoroso  e  sistematico  •  Informazione:  è  parte  di  ogni  attività  umana  •  Rappresentazione:  astrarre  i  concetti  importanti  da  quelli  

trascurabili,  per  modellare  opportunamente  la  realtà  di  interesse:  §  Occorre  studiare  metodi  di  rappresentazione  appropriati  

all’elaborazione  da  parte  di  un  calcolatore  digitale  

•  Elaborazione  e  Gestione:  uso  e  trasformazione  dell’informazione  in  modo  funzionale  agli  obiettivi  

3

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Che  cos’è  un  calcolatore?  

•  Nell’epoca  moderna  il  calcolatore  è  uno  strumento  elettronico  che  elabora  informazione  

•  Il  calcolatore  esegue  un  algoritmo  (o  un  insieme  di  algoritmi)  ed  utilizza  elementi  di  memoria  per  immagazzinare  le  informazioni  che  sta  elaborando  

4

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Alcuni  calcolatori  del  passato  

5

http://en.wikipedia.org/wiki/Enigma_machine

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Alcuni  calcolatori  del  passato  

6

30/11/14 11:21Ancient Computer Even More Ancient Than We Thought | IFLScience

Page 1 of 4http://www.iflscience.com/technology/ancient-computer-even-more-ancient

TECHNOLOGY

Ancient Computer Even More Ancient Than WeThoughtNovember 28, 2014 | by Stephen Luntz

photo credit: The ultimate steampunk device may be older than was previously thought. TilemahosEfthimiadis via Wikimedia Commons.

The astonishing Antikythera mechanism is even older than previously suspected, newresearch suggests. Instead of being "1500 years ahead of its time," it may have been closerto 1800.

The mechanism was found in 1901 in the wreck of a ship that sank in the Aegean Seaaround 60 BC. Though its origins are unknown, it could be used to calculate astronomicalmotion, making it a sort of forerunner to computers.

The sheer sophistication of the device makes it mysterious, being more advanced than anyknown instrument of its day – or for centuries thereafter. Even with parts missing afterspending such a long time in the briny deep, it was examined to have at least 30 gears. Thisis perhaps why for many, it represents the pinnacle of technology of the ancient world andwhat was lost during the Dark Ages.

If devices such as this had survived, Kepler might have found the task of explaining theorbits of the planets far easier to achieve. Although the makers likely would not haveunderstood why the moon slowed down and sped up in its orbit, they were sufficientlyaware of the phenomenon. In fact, the mechanism mimics it precisely.

One of the mechanism's functions was to predict eclipses, and a study of these dialsindicates it was operating on a calender starting from 205 BC.

plants and animals

the brain

Choose your poison

Editor's Blog

Environment

Technology

Space

Health and Medicine

The Brain

Plants and Animals

Physics

Chemistry

POPULAR POSTS

Meet The Owl With Eyes LikeThe Night Sky

Watch A NeurosurgeonPerform A SubduralHematoma Operation

Search by keyword find FollowFollow 130K followers Follow 219k19mLikeLike

52.2K 416

http://www.iflscience.com/technology/ancient-computer-even-more-ancient

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Che  cos’è  un  calcolatore?  

Ingresso informazione

Uscita informazione

Calcolatore

7

•  Il  calcolatore  è  una  macchina:  §  È  veloce  §  Ha  un’ampia  memoria  §  È  programmabile  MA  §  Non  è  intelligente  §  Non    è  in  grado  di  ragionare  §  Non  è  in  grado  di  capire  un  problema  e  

capire/dare  una  soluzione  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Che  cos’è  un  algoritmo?  

•  Un  algoritmo  è  una  sequenza  finita  di  passi  (operazioni  elementari)  tali  che  §  Permettano  di  risolvere  uno  specifico  compito  o  problema  §  Siano  comprensibili  ad  uno  specifico  esecutore  (cioè  il  calcolatore)  §  Siano  definiti  con  precisione  (cioè  possano  essere  eseguiti  senza  

ambiguità)  

8

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Esempi  intuitivi  di  algoritmi  

•  Libretto  delle  istruzioni  di  montaggio  di  un  gioco  LEGO  

9

•  Libretto  delle  istruzioni  di  montaggio  di  un  mobile    IKEA  

L’esecutore  di  questi  algoritmi  è  una  persona  e  non  un  calcolatore  (sarebbe  molto  complesso  far  comprendere  tale  linguaggio  grafico  ad  un  calcolatore)  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Esempi  intuitivi  di  algoritmi  

Ricetta  di  cucina:  cuocere  un  uovo  in  padella  1.  Metti  un  cucchiaio  colmo  d’olio  in  una  padella  2.  Metti  la  padella  sul  fuoco  3.  Aspetta  un  minuto  4.  Rompi  un    uovo  5.  Versa  il  tuorlo  e  l’albume  nella  padella  6.  Aggiungi  un  pizzico  di  sale  7.  Togli  dal  fuoco  quando  l’albume  è  cotto    

L’esecutore  è  una  persona  che  conosce  la  lingua  italiana!  I  passi  sono  spesso  non  precisi  ed  ambigui,  richiedendo  quindi  il  buonsenso  dell’esecutore.  Per  esempio:  •  Il  punto  2  assume  che  il  fornello  sia  acceso  •  Al  passo  6  quant’è  un  pizzico  di  sale?  •  Al  passo  7,  come  faccio  a  capire  che  l’albume  è  cotto?  

10

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Esempi  intuitivi  di  algoritmi  

Prodotto  di  due  numeri  interi  positivi  tramite  somme  ripetute  1.  Leggi  A  2.  Leggi  B  3.  Somma  A  a  se  stesso  B  volte  4.  Scrivi  il  risultato  

L’esecutore  è  ancora  una  persona  che  conosce  la  lingua  italiana!    

11

Questa  non  è  un’operazione  elementare  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Dal  problema  alla  soluzione  automatica  

•  Ci  occuperemo  di  problemi  che  riguardano  la  gestione  e  l’elaborazione  dell’informazione  

•  Vedremo  come  passare  dalla  specifica  di  un  problema  alla  sua  soluzione  automatica  attraverso  l’uso  di  un  calcolatore  §  La  specifica  è  una  descrizione  semi-­‐formale  del  problema  §  È  necessario  passare  dalla  specifica  ad  un  algoritmo  che  risolve  il  

problema  dato  §  Infine  affinché  l’algoritmo  trovato  sia  eseguibile  dal  calcolatore  dovrà  

essere  definito  in  un  linguaggio  comprensibile  al  calcolatore  stesso    

12

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Il  flusso  di  sviluppo  di  un  programma  

Analisi Del problema

Definizione dell’algoritmo

Codifica del programma

(linguaggio C)

Esecuzione sul calcolatore

Compilazione del programma

(linguaggio macchina) 13

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Elementi  degli  Algoritmi  

•  Dati:  gli  oggetti  su  cui  opera  l’algoritmo  §  Dati  iniziali  del  problema,  informazioni  ausiliarie,  risultati  parziali  e  

finali  §  I  dati  possono  essere  variabili  o  costanti  

•  Operazioni:  elaborazioni  da  effettuare  sui  dati  §  Calcoli,  confronti,  assegnamenti,  acquisizioni,  emissioni,  ecc.  

•  Flusso  di  controllo:  specifica  delle  possibili  successioni  dei  passi  dell’algoritmo  §  La  correttezza  dei  risultati  dipende  non  solo  dalla  corretta  esecuzione  

delle  singole  operazioni,  ma  anche  dalla  corretta  sequenza  con  cui  sono  eseguite  

14

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Flusso  di  controllo  e  di  esecuzione  

•  Flusso  di  controllo:  la  descrizione  a  priori  di  tutte  le  possibili  sequenze  nell’esecuzione  dei  passi  dell’algoritmo,  in  particolare  di  operazioni  in  alternativa  e  di  operazioni  da  ripetere  più  volte  ciclicamente  

•  Flusso  di  esecuzione:  la  sequenza  di  operazioni  effettivamente  seguita  durante  una  particolare  esecuzione  dell’algoritmo  e  che  dipende  dagli  specifici  valori  che  i  dati  assumono  in  quell’esecuzione  

15

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Rappresentazione  di  un  algoritmo  destinato  all’esecuzione  automatica  

•  Rappresentazione  di  un  algoritmo    §  Descrizione  di  tutte  le  possibili  sequenze  di  operazioni  da  eseguire  

per  risolvere  il  problema  dato  §  Descrizione  del  flusso  di  controllo,  delle  operazioni  eseguibili,  e  degli  

oggetti  su  cui  agiscono  le  singole  operazioni  §  Deve  essere  comprensibile  in  modo  univoco  sia  da  parte  del  

programmatore  che  dell’esecutore    

•  Utilizzeremo  qui  i  Diagrammi  di  flusso  §  Elementi  grafici  per  indicare  il  flusso  di  controllo  e  i  tipi  di  operazioni  §  Elementi  testuali  per  descrivere  le  operazioni  ed  i  dati  

16

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

L’architettura  dell’esecutore  

17

Standard Output

Visualizza  i  risultati  tramite  il  monitor  

CPU Standard Input

BUS

MEM.

Acquisisce  i  dati  

tramite  la  tastiera  

La  memoria  permette  di  immagazzinare  i  dati  che  si  

stanno  elaborando  

La  CPU  esegue  l’algoritmo  

seguendo  il  flusso  di  controllo.  

La  CPU  è  in  grado  di  eseguire  operazioni  aritmetiche,  logiche  

e  relazionali  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Le  variabili  

•  La  variabile  è  un  “contenitore”  di  valori  §  Ad  una  variabile  è  sempre  associato  un  valore  alla  volta  §  La  variabile  non  può  essere  vuota  (al  massimo  non  è  inizializzata  e  quindi  

contiene  un  valore  “a  caso”)    •  La  variabile  è  identificata  tramite  un  nome  simbolico  

§  Le  operazioni  descritte  nell’algoritmo  possono  essere  eseguite  di  volta  in  volta  sui  diversi  valori  assegnati  alle  variabili  (formulazione  generale  dell’algoritmo)  

 

x

Nome della variabile

Valore della variabile

La variabile x contiene il valore 5

18

5  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Gli  elementi  grafici  

•  Blocco  di  inizio  

•  Blocco  di  terminazione    

•  Blocco  esecutivo  

•  Blocco  condizionale  

•  Blocco  di  ingresso  dati  

•  Blocco  di  uscita  dati  

Inizio  

Fine  

Operazione  

Leggi(dato)  

Scrivi(dato)  

Vero   Falso  Condizione  

19

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Esercizio  

•  Si  disegni  il  diagramma  di  flusso  di  un  algoritmo  che  chiede  all’utente  un  valore  in  virgola  mobile  che  rappresenta  una  temperatura  in  gradi  celsius,  converte  il  valore  in  gradi  Fahrenheit  e  visualizza  il  risultato    

•  NOTA:  la  formula  per  la  conversione  è        gradi  F  =  gradi  C  ×  1.8  +  32  

20

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Esercizio  

•  Si  disegni  il  diagramma  di  flusso  di  un  algoritmo  che  chiede  all’utente  un  lunghezza  del  raggio  di  un  cerchio,  calcola  l’area  del  cerchio  e  visualizza  il  risultato  

21

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Esercizio  

•  Si  disegni  il  diagramma  di  flusso  di  un  algoritmo  che  calcola  quanti  soldi  ha  nel  portafogli  l’utente.  In  particolare,  l’algoritmo  chiede  all’utente  il  numero  di  banconote  da  50,  da  20,  da  10  e  da  5  euro,  calcola  la  somma  complessiva  e  la  visualizza  

22

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Gli  elementi  testuali  

•  Negli  schemi  a  blocchi  operazioni  e  condizioni  sono  rappresentate  in  modo  testuale  e  tramite  simboli  che  rappresentano  gli  operatori  aritmetici,  di  confronto,  ecc.  

•  Assegnamento:  =  §  Il  valore  dell’espressione  a  destra  dell’operatore  di  assegnamento  è  

copiato  nella  variabile  a  sinistra,  §  Es:  x  =  6,  y  =  x,    z  =  x+6,  ...  

•  Operatori  aritmetici:  +,  -­‐,  *  ,  /,  %  §  Eseguono  l’operazione  sui  due  operandi  specificati  §  Gli  operandi  possono  essere  variabili  o  costanti  §  Producono  un  valore  numerico  §  Es:  a  +  5,  3  +  6,  w  +  x,  …  §  Con  operandi  interi  sono  definite  le  operazioni  /  “divisione  intera”  e  %  

“resto  della  divisione  intera”  

 23

Operazione  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Gli  elementi  testuali  

•  Operatori  di  confronto:  >,  <,  ==,  >=,  …  §  Eseguono  l’operazione  sui  due  operandi  specificati  §  Gli  operandi  possono  essere  variabili  o  costanti  §  Producono  un  valore  logico  (vero  o  falso)  §  Es:  x  >  5,  y  <=  x,  …  

•  Operatori  logici:  and,  or,  not    §  Eseguono  l’operazione  sui  due  operandi  specificati  §  Gli  operandi  possono  essere  variabili  o  costanti  §  Producono  un  valore  logico  (vero  o  falso)  §  Sono  utilizzanti  principalmente  per  esprimere  condizioni  complesse  

•  Espressioni  §  È  possibile  comporre  gli  operatori  sopra  specificati  per  ottenere  

espressione  e  condizioni  complesse  che  restituiscono  un  risultato  §  Es.:  x  +  y  >  10  and  y  <  3  

24

Vero   Falso  Condizione  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Gli  elementi  testuali  

•  Procedure  di  input/output:  Leggi(X),  Scrivi(N)  §  Permettono  di  acquisire  dati  dall’utente  e  visualizzare  risultati  §  Agiscono  sul  parametro  specificato  che  può  essere  una  variabile  o  una  

costante  •  Leggi(x)  legge  un  dato  da  tastiera  e  lo  salva  nella  variabile  x  •  Scrivi(y)  mostra  a  video  il  valore  contenuto  nella  variabile  y  

§  Tali  procedure  possono  essere  usate  solo  negli  appositi  blocchi    

 

25

Leggi(dato)   Scrivi(dato)  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Gli  elementi  testuali  

•  Funzioni:  cos(x),  log(x),  …  §  Nelle  espressioni  e  condizioni  si  possono  specificare  anche  operazioni  

più  complesse  dette  funzioni  §  Come  le  funzioni  matematiche    

•  Ricevono  una  serie  di  valori  detti  parametri  specificati  tra  parentesi  (variabili  oppure  costanti)  

•  Producono  un  valore  §  Es:  cos(pi),  log(10),  …  

26

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

•  Il  flusso  di  controllo  di  un  diagramma  di  flusso  viene  costruito  mediante  specifiche  regole:  § Un  solo  blocco  di  inizio  § Almeno  un  blocco  di  terminazione  (preferibilmente  uno)  

•  Il  flusso  di  controllo  di  un  algoritmo  viene  costruito  in  base  a  tre  strutture  di  controllo  dette:    §  sequenza,    §  selezione  ed    §  iterazione  

Specifica  del  flusso  di  controllo  

27

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

La  sequenza  

•  Dal  blocco  di  inizio,  esecutivo,  di  ingresso    dati  e  di  uscita  dati  deve  uscire  una  sola  freccia  

•  Dal  blocco  di  fine  non  esce  alcuna  freccia  •  Il  flusso  di  controllo  è  sequenziale  

Inizio  

Operazione  

Leggi(dato)  

Fine  

Scrivi(dato)  

28

sequenza  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

La  selezione  

•  Il  blocco  condizionale  modifica  il  flusso  di    controllo  rendendolo  non  più  sequenziale  

•  Dal  blocco  condizionale  escono  due  frecce    una  etichettata  con  il  valore  vero  ed  una  con  il  valore  falso  

•  Il  successivo  blocco  da  eseguire  dipende  dal  valore  logico  risultate  dalla  valutazione  della  condizione  §  Ecco  la  differenza  tra  flusso  di  controllo  e  flusso  di  esecuzione!  

•  Durante  l’esecuzione,  la  scelta  del  blocco  da  eseguire  è  sempre  univoco  

Operazione  

Vero   Falso  Condizione  

Operazione  

29

selezione  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Esercizio  

•  Si  disegni  il  diagramma  di  flusso  di  un  algoritmo  che  chiede  all’utente  un  valore  intero  e  visualizza  il  suo  valore  assoluto  

30

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Selezione  –  un  esempio  introduttivo  

•  Si  disegni  il  diagramma  di  flusso  di  un  algoritmo  che  chiede  all’utente  un  valore  intero  e  visualizza  il  suo  valore  assoluto  

31

Inizio  

Leggi(valore)  

Fine  

Scrivi(ass)  

ass  =  -­‐  valore  

Vero   Falso  valore  <  0  

ass  =  valore  

Selezione  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Esercizio  

•  Si  disegni  il  diagramma  di  flusso  di  un  algoritmo  che  acquisisce  i  punteggi  ottenuti  da  uno  studente  nei  due  compitini  dell’esame  di  informatica  B  e  valuta  se  lo  studente  è  stato  promosso  o  bocciato  

32

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

L’iterazione  

•  Una  delle  due  frecce  uscenti  da  un  blocco    condizionale  può  essere  diretta  verso  un    precedente  blocco  nel  flusso  di  controllo  

•  In  questo  modo  è  possibile  esprimere  l’iterazione  di  un  insieme  di  istruzioni  (corpo  del  ciclo)  

•  Il  corpo  del  ciclo  è  ripetuto  un  numero  finito  di  volte  •  La  ripetizione  è  controllata  dalla  valutazione  della  condizione  

di  permanenza  del  ciclo  

Operazione  

Vero   Falso  Condizione  

Operazione  

33

iterazione  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Esercizio  

•  Disegnare  il  diagramma  di  flusso  di  un  algoritmo  che  acquisisce  un  numero  intero  positivo  o  nullo,  e  calcola  e  visualizza  il  suo  fattoriale  

34

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Iterazione  –  un  esempio  introduttivo  

•  Disegnare  il  diagramma  di  flusso  di  un  algoritmo  che  acquisisce  un  numero  intero  positivo  o  nullo,  e  calcola  e  visualizza  il  suo  fattoriale  

35

Inizio  

Leggi(n)  

Vero  Falso  

n  >  0  

f  =  f  *  n  Iterazione  

f  =  1  

Scrivi(f)  

Fine  n  =  n  -­‐  1  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

L’iterazione  

•  Variabile  di  controllo  del  ciclo  §  Inizializzata  prima  di  entrare  nel  ciclo  

•  Condizione  di  permanenza  §  Valutata  in  funzione  della  variabile  di  controllo  

•  Corpo  del  ciclo  §  Contiene  il  blocco  di  codice  da  ripetere  più  volte  §  Contiene  l’istruzione  per  l’aggiornamento  della  variabile  di  controllo    

•  È  possibile  specificare  anche  cicli  con  condizioni  più  complesse  

36

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

L’iterazione  

•  Ciclo  a  condizione  finale:    §  eseguo  almeno  una  volta  il  

corpo  del  ciclo  

•  Ciclo  a  condizione  iniziale  §  eseguo  zero  o  più  volte  il  corpo  

del  ciclo  

37

Operazione  

Vero   Falso  Condizione  

Operazione  

Vero   Falso  Condizione  

Operazione  Operazione  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Esercizio  

•  Disegnare  il  diagramma  di  flusso  di  un  algoritmo  che  acquisisce  un  numero  intero  e  verifica  se  questo  è  positivo;  in  caso  la  condizione  non  sia  verificata  stampa  un  messaggio  di  errore  e  ripete  l’acquisizione.  Una  volta  letto  un  valore  valido,  l’algoritmo  lo  visualizza  

38

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Teorema  di  Jacopini  e  Böhm  

•  Qualunque  algoritmo  può  essere  implementato  utilizzando  le  tre  sole  strutture  di  controllo:    §  la  sequenza,    §  la  selezione,  e    §  l’iterazione  da  applicare  ricorsivamente  alla  composizione  di  istruzioni  elementari  

•  NOTA:  Applicare  ricorsivamente,  nella  pratica,  vuol  dire  che  istanze  delle  tre  strutture  possono  essere  concatenate  o  annidate  (ma  NON  intrecciate)  

39

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Teorema  di  Jacopini  e  Böhm  

40

•  Sbagliato!  I  due  cicli  si  «intersecano»  

•  Corretto  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Un  esempio  più  complesso  

•  Realizzare  un  algoritmo  che  acquisisce  due  numeri  interi,  e  calcola  e  visualizza  il  loro  prodotto  mediante  somme  ripetute  

•  Suggerimento:  se  vengono  acquisiti  due  numeri  X  e  W,  il  prodotto  è  calcolato  sommando  W  volte  X  a  se  stesso  

41

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Acquisizione dei dati in ingresso e attribuzione dei loro valori a W e Y

Inizializzazione delle variabili ausiliarie SP=somme parziali NS=numero somme da eseguire

Corpo del ciclo

Valutazione della condizione di permanenza nel ciclo

Visualizzazione del risultato

Una  prima  soluzione  

42

Leggi(W)

Leggi(Y)

Scrivi(SP)

Viene  utilizzato  un  ciclo  a  condizione  finale  -­‐>  L’algoritmo  è  corretto  se  Y>0  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

43

W   #  

Y   #  

SP   #  

NS   #  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

44

W   5  

Y   #  

SP   #  

NS   #  

L’utente  inserisce  5  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

45

W   5  

Y   3  

SP   #  

NS   #  

L’utente  inserisce  3  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

46

W   5  

Y   3  

SP   0  

NS   #  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

47

W   5  

Y   3  

SP   0  

NS   3  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

48

W   5  

Y   3  

SP   5  

NS   3  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

49

W   5  

Y   3  

SP   5  

NS   2  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

50

W   5  

Y   3  

SP   5  

NS   2  

È  vero  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

51

W   5  

Y   3  

SP   10  

NS   2  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

52

W   5  

Y   3  

SP   10  

NS   1  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

53

W   5  

Y   3  

SP   10  

NS   1  

È  vero  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

54

W   5  

Y   3  

SP   15  

NS   1  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

55

W   5  

Y   3  

SP   15  

NS   0  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

56

W   5  

Y   3  

SP   15  

NS   0  

È  falso  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tracing  

57

W   5  

Y   3  

SP   15  

NS   0  

Viene  visualizzato  15  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Leggi(W)

Leggi(Y)

Scrivi(SP)

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Un  miglioramento  all’algoritmo  

Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

SP=SP+W

NS=NS-1

NS>0 falso

vero

58

Leggi(W)

Leggi(Y)

Scrivi(SP)

Viene  utilizzato  un  ciclo  a  condizione  iniziale  -­‐>  L’algoritmo  è  corretto  se  Y>=0  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Commento  sull’esempio  precedente  

•  Nell’esempio  la  verifica  della  condizione  è  stata  spostata  dalla  fine  all’inizio  del  ciclo  

•  Nell’esempio  abbiamo  migliorato  l’algoritmo;  in  realtà  i  due  algoritmi  NON  sono  funzionalmente  equivalenti:  §  Il  primo  è  corretto  per  y  >  0  §  Il  secondo  è  corretto  per  y  >=  0  

59

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Raffinamenti  Successivi  

•  Nelle  prime  fasi  di  progetto  si  trascurano  i  dettagli  •  Man  mano  che  il  progetto  evolve  si  conosce  meglio  il  

problema  •  Uno  dei  raffinamenti  tipici:      VERIFICA  DEI  DATI  IN  INGRESSO  §  L’utente  può  commettere  errori  nell’immissione  dei  dati    §  Si  verifica  che  i  dati  immessi  siano  accettabili  rispetto  alle  ipotesi  di  

correttezza  dell’algoritmo  §  Esempio  precedente:  l’algoritmo  non  fornisce  valori  corretti  per  valori  

negativi  di  Y  (Y  >=  0  ?)  

60

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Verifica  dei  dati  in  ingresso  Inizio

SP=0

Fine

NS=Y

SP=SP+W

NS=NS-1

NS>0 falso

vero

Y>=0 falso vero

61

Leggi(W)

Leggi(Y)

Scrivi(SP)

Scrivi: “Secondo fattore negativo”

Ipotesi:  l’algoritmo  non  calcola  il  prodotto  nel  caso  in  cui  Y  è  <  0  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Verifica  dei  dati  in  ingresso  Inizio

NS=Y

Fine

CS=1

Z=SP

SP=SP+W

NS=NS-1

NS>0? falso vero

falso vero Y>=0 ?

NS=-Y CS=-1

CS=1? falso vero

Z=-SP

SP=0

62

Leggi(W)

Leggi(Y)

Scrivi(Z)

Ipotesi:  gli  operandi  possono  essere  positivi,  negativi  o  nulli  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Proprietà  degli  algoritmi  

•  L’algoritmo  è  un  procedimento  sequenziale:  un  passo  dopo  l’altro  secondo  un  ordine  specificato  (flusso  di  esecuzione)  

•  A  ogni  passo,  il  successivo  deve  essere  uno  e  uno  solo,  ben  determinato  (determinismo)  

•  I  passi  elementari  devono  essere  eseguiti  in  modo  univoco  dall’esecutore  (non  ambiguità)  §  Cioè  i  passi  elementari  devono  essere  descritti  in  una  forma  eseguibile  

e  comprensibile  dall’esecutore  

•  L’algoritmo  deve  essere  composto  da  un  numero  finito  di  passi  e  richiedere  una  quantità  finita  di  dati  in  ingresso    

•  L’esecutore  deve  terminare  in  tempo  finito  per  ogni  insieme  di  valori  in  ingresso  (terminazione)    

63

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Proprietà  degli  algoritmi  

•  Ogni  operazione  deve:  §  Essere  elementare  cioè  non  ulteriormente  scomponibile  (atomicità)  §  Terminare  entro  un  intervallo  finito  di  tempo  

•  Es.:  calcolare  le  cifre  decimale  di  π,  NO!  §  Produrre  un  effetto  osservabile  

•  Stato  prima  dell’esecuzione  -­‐>  stato  dopo  l’esecuzione  §  Produrre  lo  stesso  effetto  ogni  volta  che  viene  eseguita  a    partire  dalle  

stesse  condizioni  iniziali  Es.  la  somma  di  due  numeri  dati  deve  restituire  sempre  lo  stesso  risultato  

•  Le  operazioni  elementari  sono  definite  in  base  all’esecutore  dell’algoritmo    §  L’esecutore  deve  essere  in  grado  interpretarle  ed  eseguirle  

64

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Proprietà  degli  algoritmi  

•  La  descrizione  di  un  algoritmo  per  un  esecutore  deve  avere  una  formulazione  generale:  §  La  soluzione  individuata  non  deve  dipendere  solo  da  valori  predefiniti  

dei  dati  §  Gli  algoritmi  prevedono  particolari  passi  destinati  ad  acquisire  i  valori  

dei  dati  da  utilizzare  ed  elaborare  in  ogni  specifica  esecuzione  §  In  altre  parole  l’algoritmo  risolve  una  classe  di  problemi  

•  Esempio:    §  Un  algoritmo  per  calcola  il  prodotto  di  due  numeri  per  somme  

ripetute  non  eseguirà  tale  calcolo  solo  per  due  valori  predefiniti  MA  sarà  in  grado  di  eseguire  il  calcolo  per  una  qualsivoglia  coppia  di  numeri  acquisiti  dall’utente  

65

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Proprietà  degli  algoritmi  

•  Correttezza  §  L’algoritmo  ottiene  la  soluzione  del  compito  cui  è  

preposto  §  L’esecutore  eseguirà  l’algoritmo  a  prescindere  che  sia  

giusto  o  sbagliato;  è  compito  del  programmatore  garantire  che  l’algoritmo  sia  corretto  

•  Efficienza  §  L’algoritmo  perviene  alla  soluzione  del  problema  nel  

modo  più  veloce  possibile  e/o  usando  la  minima  quantità  di  risorse  fisiche  

66

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Cenni  sull’Algebra  di  Boole  

•  Facciamo  un  passo  indietro…  

•  Per  imparare  a  definire  in  modo  corretto  condizioni  complesse  in  un  algoritmo  è  necessario  introdurre  qualche  nozione  di  base  sull’algebra  di  Boole  

•  Esempi:    §  “La  variabile  x  contiene  un  valore  compreso  nell’intervallo  [2;5]?”  cioè  

“x  >=  2  and  x  <=  5”  §  “Entrambe  i  voti  parziali  sono  maggiori  o  uguali  a  8  e  la  loro  somma  

maggiore  di  18?”  cioè  “voto1  >=  8  and  voto2  >=  8  and  voto1  +  voto2  >=  18”  

§  “Almeno  uno  dei  due  voti    è  maggiore  o  uguale  a  8?”  cioè  “voto1  >=  8  or  voto2  >=  8”  

- 67 -

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Cenni  sull’Algebra  di  Boole  

•  L’algebra  di  Boole  (inventata  da  G.  Boole,  britannico,  seconda  metà  ’800),  o  algebra  della  logica,  è  un’algebra  astratta  che  opera  su  due  soli  valori  di  verità,  falso  e  vero,  mediante  operatori  logici  

•  In  un  calcolatore  vero  è  in  genere  rappresentato  con  il  valore  1  e  falso  con  il  valore  0  

68

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Letterale  

•  Il  letterale  è  una  variabile  logica  §  Il  letterale  può  assumere  valore  0  o  1  §  Il  letterale  può  rappresentare  (il  risultato  di)  una  condizione  semplice  

•  Esempi:  §  A  =  “5  >  2”  cioè  “è  vero  che  5  è  maggiore  di  2?  ”  -­‐>  quindi  A  =  1  §  A  =  “x  >  2”    cioè  “è  vero  che  x  contiene  un  valore  maggiore  di  2?  ”  -­‐>  

quindi  A  =  1  se  il  valore  contenuto  in  x  è  maggiore  di  2  

69

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Operazioni  logiche  fondamentali  

•  È  possibile  esprimere  condizioni  più  complesse  mediante  gli  operatori  logici  

•  Operatori  logici  binari  (con  2  operandi  logici)  §  Operatore  OR,  o  somma  logica  §  Operatore  AND,  o  prodotto  logico  

•  Operatore  logico  unario  (con  1  operando)  §  Operatore  NOT,  o  negazione,  o  inversione  

   

•  Esempi:  §  “x  <  5  AND  x  >  2”  è  vera  se  il  valore  di  x  è  compreso  nell’intervallo  (2,5)  §  “x  >  5  OR  x  <  2”  è  vera  se  il  valore  di  x  è  fuori  dall’intervallo  [2,5]  

 

       70

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Operatori  logici  di  base  e  loro  tabelle  di  verità  

•  Le  tabelle  delle  verità  elencano  tutte  le  possibili  combinazioni  in  ingresso  e  il  risultato  associato  a  ciascuna  combinazione  

•  OR,  AND  e  NOT  vengono  anche  chiamati  connettivi  logici,  perché  funzionano  come  le  congiunzioni  coordinanti  “o”  ed  “e”,  e  come  la  negazione  “non”,  del  linguaggio  naturale  

A  B            A  and  B  0  0  0  0  1    0  1  0  0  1  1  1    

A  B              A  or  B  0  0  0    0  1  1  1  0  1  1  1  1  

A              not  A  0    1    1    0  

71

Somma  logica   Prodotto  logico   Negazione  

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Espressioni  logiche  (o  Booleane)  

•  Come  le  espressioni  algebriche,  le  espressioni  logiche  sono  costruite  con:  §  Variabili  logiche  (letterali),  che  possono  assumere  valore  0  o  1  §  Operatori  logici:  and,  or,  not  

•  Esempi:    A  or  (B  and  C)    (A  and  (not  B))  or  (B  and  C)  

•  Precedenza:  l’operatore  “not”  precede  l’operatore  “and”,  che  a  sua  volta  precede  l’operatore  “or”  

 (A  and  (not  B))  or  (B  and  C)  =  A  and  not  B  or  B  and  C  

•  Per  ricordarlo,  si  pensi  OR  come  “+”  (più),  AND  come  “×”  (per)  e  NOT  come  “-­‐”  (cambia  segno)  

72

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tabelle  di  verità  delle  espressioni  logiche  

•  La  tabella  delle  verità  di  un’espressione  generica  specifica  i  valori  di  verità  per  tutti  i  possibili  valori  delle  variabili  

•  Esempio:  

A  B              NOT  (  (  A  OR  B)  AND  (  NOT  A  )  )  0  0      1    0  1      0  1  0      1  1  1      1  

73

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Tabella  di  verità  di  un’espressione  logica  

•  Costruire  la  tabella  delle  verità  per  l’espressione  not((A  or  B)  and  (not  A))  

A B X = A or B Y = not A Z = X and Y not Z

0 0 0 or 0 = 0 not 0 = 1 0 and 1 = 0 not 0 = 1

0 1 0 or 1 = 1 not 0 = 1 1 and 1 = 1 not 1 = 0

1 0 1 or 0 = 1 not 1 = 0 1 and 0 = 0 not 0 = 1

1 1 1 or 1 = 1 not 1 = 0 1 and 0 = 0 not 0 = 1

74

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Due  esercizi  

•  Costruire  la  tabella  delle  verità  per  l’espressione  not((A  or  B)  and  (not  A))  

A B NOT ( ( A OR B) AND ( NOT A ) ) 0 0 0 1 1 0 1 1

0 1 0 0

0 0 1 1

1 0 1 1

0 0 1 1

0 1 0 1

0 1 1 1

1 1 0 0

75

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Due  esercizi  

•  Costruire  la  tabella  delle  verità  per  l’espressione  (b  or  not  c)  and  (a  or  not  c)  

A B C ( B OR NOT C ) AND ( A OR NOT C ) 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1

1 0 1 0 1 0 1 1

0 0 0 0 1 1 1 1

1 0 1 0 1 0 1 0

1 0 1 0 1 0 1 0

1 0 1 1 1 0 1 1

1 0 1 0 1 1 1 1

76

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Equivalenza  tra  espressioni  

•  Due  espressioni  logiche  si  dicono  equivalenti  (e  si  indica  con  ⇔)  se  hanno  la  medesima  tabella  di  verità.  La  verifica  è  algoritmica.  Per  esempio:  

•  Espressioni  logiche  equivalenti  modellano  gli  stessi  stati  di  verità  a  fronte  delle  medesime  variabili  

A B not A and not B ⇔ not (A or B)

0 0 1 and 1 = 1 not 0 = 1

0 1 1 and 0 = 0 not 1 = 0

1 0 0 and 1 = 0 not 1 = 0

1 1 0 and 0 = 0 not 1 = 0

77

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Proprietà  dell’algebra  di  Boole  

•  L’algebra  di  Boole  gode  di  svariate  proprietà,  formulabili  sotto  specie  di  identità  §  (cioè  formulabili  come  equivalenze  tra  espressioni  logiche,  valide  per  

qualunque  combinazione  di  valori  delle  variabili)  

•  Esempio  celebre:  le  “Leggi  di  De  Morgan”      not  (A    and    B)  =  not  A  or  not  B    (1a  legge)      not  (A    or    B)  =  not  A  and  not  B  (2a  legge)  

78

DIPARTIMENTO  DI  ELETTRONICA,  INFORMAZIONE  E  BIOINGEGNERIA  

Proprietà  dell’algebra  di  Boole  

•  Alcune  proprietà  somigliano  a  quelle  dell’algebra  numerica  tradizionale:  §  Proprietà  associativa:  A  or  (B  or  C)  =  (A  or  B)  or  C          (idem  per  AND)  §  Proprietà  commutativa:  A  or  B  =  B  or  A                                          (idem  per  AND)  §  Proprietà  distributiva  di  AND  rispetto  a  OR:  

 A  and  (B  or  C)  =  A  and  B  or  A  and  C  §  …  e  altre  ancora  

•  Ma  parecchie  altre  sono  alquanto  insolite…  §  Proprietà  distributiva  di  OR  rispetto  a  AND:  

 A  or  B  and  C  =  (A  or  B)  and  (A  or  C)  §  Proprietà  di  assorbimento  (A  assorbe  B):  

 A  or  A  and  B  =  A  §  Legge  dell’elemento  1:    not  A  or  A  =  1  §  …  e  altre  ancora  

79