34
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA INIZIO PREPARA-CAFFE FINE ESEMPIO

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

  • Upload
    argyle

  • View
    58

  • Download
    5

Embed Size (px)

DESCRIPTION

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA. ESEMPIO. INIZIO. PREPARA-CAFFE. FINE. INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA. SCOMPOSIZIONE: processo “prepara caffè”. INIZIO PREPARA-CAFFE. PREPARA-MACCHINETTA. METTI-MACCHINETTA-SU-FUOCO. CUCINA-CAFFE. SERVI-CAFFE. - PowerPoint PPT Presentation

Citation preview

Page 1: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INIZIO

PREPARA-CAFFE

FINE

ESEMPIO

Page 2: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INIZIO PREPARA-CAFFE

PREPARA-MACCHINETTA

METTI-MACCHINETTA-SU-FUOCO

CUCINA-CAFFE

FINE PREPARA-CAFFE

SERVI-CAFFE

SCOMPOSIZIONE: processo “prepara caffè”

Page 3: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INIZIO PREPARA-MACCHINETTA

PRENDI-MACCHINETTA-DA-CREDENZA

PRENDI-CAFFE-DA-DISPENSA

METTI-ACQUA-IN-MACCHINETTA

METTI-CAFFE-IN-MACCHINETTA

FINE PREPARA-MACCHINETTA

2

1

SCOMPOSIZIONE: processo “prepara macchinetta”

Page 4: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INIZIO PREPARA-MACCHINETTA

PRENDI-MACCHINETTA-DA-CREDENZA

PRENDI-CAFFE-DA-DISPENSA

Macchinetta in credenza

VF1

2

Page 5: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

NODO CONNETTORE

TEST/VERIFICA/DECISIONE

CONDIZIONE

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

q

q

Page 6: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

VF

ENTRATA

USCITA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

q

BA

TEST

Page 7: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

1

2

PRENDI-MACCHINETTA

Macchinetta in credenza

Caffè non in dispensa

COMPRA-CAFFE

V

VF

F

Page 8: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

A B

C D

p

q

1

2

V

V

F

F

TESTS IN CASCATA

Page 9: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

p VF

VFCq

AB

TESTS NIDIFICATI

Page 10: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INIZIO SERVI-CAFFE

TOGLI-CAFFE-DA-FUOCO

ZUCCHERA-CAFFE

VERSA-CAFFE

FINE SERVI-CAFFE

PORGI-CAFFE

SCOMPOSIZIONE: processo “servi caffè”

Page 11: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INIZIO ZUCCHERA-CAFFE

FINE ZUCCHERA-CAFFE

Caffè amaro

F

V

ASSAGGIA-CAFFE

AGGIUNGI-ZUCCHERO

SCOMPOSIZIONE: processo “zucchera caffè”

Page 12: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

p

F

V

A

ITERAZIONE PER VERO

Page 13: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INIZIO/FINE PROCESSO

PROCESSO

AZIONE

TEST

NODO CONNETTORE

FLUSSO

SIMBOLI

Page 14: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

pVF

pA

V

F

ABp

A

VF

SEQUENZA

TEST

ITERAZIONE PER VERO

ITERAZIONE PER FALSO

STRUTTURE

Page 15: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Progetto: Calcolo del resto

Page 16: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

La divisione di due numeri positivi, può essere espressa attraverso la sottrazione:n:m equivale a sottrarre m da n fino a quando n diventa inferiore di m. Il numero di volte in cui tale sottrazione ha luogo, è il risultato della divisione.

Calcolo del resto

Page 17: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Calcolo del restoinizio

Lettura dividendo

Lettura divisore

resto >= divisore

resto = divisore

V

resto = resto - divisore

Stampa “resto”

F

Page 18: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Calcolo del resto#include <stdio.h>

int main(){ int dividendo, divisore, resto; printf("Inserire dividendo:\n"); scanf("%d", &dividendo); //lettura dividendo printf("Inserire divisore:\n"); scanf("%d", &divisore); //lettura divisore

resto = dividendo; while (resto >= divisore){

resto = resto - divisore; } printf("\nresto della divisione %d/%d e' %d", dividendo, divisore, resto); return 0;}

Page 19: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Progetto: Calcolo numero primo

Page 20: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Calcolo del numero primo

DefinizioneUn numero n>=2 è un numero PRIMO se è divisibile per 1 e per se stesso.

L’ algoritmo consiste nel dividere il numero n per tutti i numeri interi minori di n.Se il numero n risulta divisibile per uno di questi interi (ovvero il resto della divisione è zero) allora n è un numero non PRIMO; in caso contrario n è un numero PRIMO

Page 21: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Calcolo del numero primoEsempioN = 5

Page 22: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

int main(){ int n, divisore, quoz, resto; int primo; printf("Insrire Numero:"); scanf("%d", &n);

primo = true; divisore = 2; while (divisore < n && primo==true){

quoz = n/divisore; //calcolo del quozienteresto = n-(quoz*divisore); //calcolo del restoif (resto == 0){ //se il resto è nullo primo = false; //il numero in esame non è primo} else{ //altrimenti divisore = divisore + 1; //incremento il divisore}

} if (primo==true){ printf ("\n\n%d e` un numero primo",n); }else{ printf ("\n\n%d non e` un numero primo",n); }}

Page 23: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Calcolo del numero primoinizio

Lettura n

primo = truedivisore = 2

Divisore < n AND

primo = true

V

quoz = n/divisore

F

stampa

resto = n – (quoz*divisore)

resto == 0 Primo = falseVdivisore = divisore +1 F

quoziente

resto

È stato trovato un divisore

Page 24: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Progetto: Torri di Hanoihttp://it.wikipedia.org/wiki/Torre_di_Hanoihttp://www.frasi.net/giochionline/torre-di-hanoi/

Page 25: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Torri di Hanoi: regole• Il rompicapo è costituito da tre pile di dischi

(“torri”) allineate– all’inizio tutti i dischi si trovano sulla pila di sinistra– alla fine tutti i dischi si devono trovare sulla pila di

destra o centrale• I dischi sono tutti di dimensioni diverse e

quando si trovano su una pila devono rispettare la seguente regola– nessun disco può avere sopra di sé dischi più grandi

Page 26: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Torri di Hanoi: regole Situazione iniziale Situazione finale

Page 27: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Torri di Hanoi: regole

• Per risolvere il rompicapo bisogna spostare un disco alla volta– un disco può essere rimosso dalla cima della

torre ed inserito in cima ad un’altra torre• non può essere “parcheggiato” all’esterno…

– in ogni momento deve essere rispettata la regola vista in precedenza• nessun disco può avere sopra di sé dischi

più grandi

Page 28: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Algoritmo di soluzione• Il problema generale consiste nello spostare n dischi da

una torre ad un’altra, usando la terza torre come deposito temporaneo

• Per spostare n dischi da una torre all’altra si suppone di saper spostare n-1 dischi da una torre all’altra, come sempre si fa nella ricorsione

Ricorsione

Una funzione ricorsiva è una funzione che richiama se stessa

Page 29: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

La “Torre di Hanoi”

Page 30: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

A B C

Page 31: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Torre di Hanoi: algoritmo

int mossa = 0;void hanoi(int, char, char, char);void muovi(int, char, char);

int main(){ int DISCHI; printf("\nInserire il numero di DISCHI:"); scanf("%d",&DISCHI); printf("\nMosse da eseguire per spostare %d dischi\n", DISCHI); hanoi(DISCHI, 'A', 'B', 'C');}

Page 32: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Torre di Hanoi: algoritmovoid hanoi(int n, char piolo_b, char piolo_a, char aus){ if(n == 1) { muovi(n, piolo_b, piolo_a); }else { hanoi(n-1, piolo_b, aus, piolo_a); muovi(n, piolo_b, piolo_a); hanoi(n-1, aus, piolo_a, piolo_b); }}

void muovi(int n, char piolo_b, char piolo_a){ char invio; printf("\nMossa %3d: ", ++mossa); printf("disco %d da %c a %c\n",n, piolo_b, piolo_a); scanf("%c", &invio);}

Page 33: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Torre di Hanoi: output

Page 34: INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Torre di Hanoi: sequenza di trasferimenti

123

A B C

23

A B C

1

Mossa 1

3

A B C

1 2

Mossa 2

3

A B C

12

Mossa 3

A B C

312

Mossa 4

1

A B C

3 2

Mossa 5

1

A B C

23

Mossa 6

A B C

123

Mossa 7