INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA

Slides:



Advertisements
Presentazioni simili
Fondamenti di Informatica
Advertisements

Introduzione al linguaggio C++
INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
Uso avanzato di C.
Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Procedure e funzioni ricorsive
Sviluppo di programmi strutturati
Informatica Generale Marzia Buscemi
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Informatica Generale Susanna Pelagatti
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
Introduzione agli algoritmi. Definizione Sistema di regole e procedure di calcolo ben definite che portano alla soluzione di un problema con un numero.
Iterazione enumerativa (for)
Tail recursion: esempio
Alberi binari Definizione della struttura dati: struct tree { };
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
1 INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA. 2 PROCESSO INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA INIZIO FINE.
CORSO DI PROGRAMMAZIONE II
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente) ITERAZIONE: ripetere piu volte una sequenza di operazioni istruzioni: for, while, do.
DAL PROBLEMA ALL'ALGORITMO Problemi e Programmi Paolo Amico
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su alberi binari
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Algoritmi su Tipi Semplici
Strutture di controllo nel C
Strutture di controllo in C -- Flow Chart --
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Le liste dinamiche La ricorsione
La Programmazione Ricorsiva
Fondamenti di Informatica Algoritmi
I File.
Java base II: Strutture di Controllo
ESERCIZIO: la Torre di Hanoi
Programmazione in Java Claudia Raibulet
Calcolo del Massimo Comun Divisore
Lezione 6 Strutture di controllo Il condizionale
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
void binario(int n); …………………
Massimo Comun Divisore
Radice quadrata di un numero
14 marzo 2002 Avvisi:.
Ricorsione Strumento potente per definizioni matematiche
Soluzioni e commenti esercizi 1 e 2
Corso di Programmazione in Java – Esercizio n° 001
Alberi binari Definizione della struttura dati: struct tree { };
Complessità di un algoritmo
Anno accademico Le istruzioni di controllo in C.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 2 La ricorsione Corso di Informatica 2 a.a. 2003/04 Lezione 2.
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 29 Maggio 2014.
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
ALGORITMO Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un formalismo che permette di rappresentare.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Allievi Elettrici - AA Le funzioni ricorsive in C
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
MASSIMO COMUNE DENOMINATORE (M.C.D)
Iterazioni con controllo in testa:
10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
Transcript della presentazione:

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA ESEMPIO INIZIO PREPARA-CAFFE Un esempio di programma: la preparazione del caffè. Il simbolo grafico aiuta a capire che ci si trova davanti ad un processo composto da più sottoprocessi, sia semplici azioni elementari che ulteriori processi. FINE

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SCOMPOSIZIONE: processo “prepara caffè” INIZIO PREPARA-CAFFE PREPARA-MACCHINETTA METTI-MACCHINETTA-SU-FUOCO CUCINA-CAFFE Ecco scomposto il processo “Prepara-caffè”. Come si vede, la routine è composta da tre ulteriori sub-routine e da un’azione elementare. Si vedrà come scomporre ulteriormente tutto il processo, sino ad arrivare ad un insieme di azioni elementari. SERVI-CAFFE FINE PREPARA-CAFFE

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SCOMPOSIZIONE: processo “prepara macchinetta” INIZIO PREPARA-MACCHINETTA PRENDI-MACCHINETTA-DA-CREDENZA 1 PRENDI-CAFFE-DA-DISPENSA 2 METTI-ACQUA-IN-MACCHINETTA Come si vede in questa slide, la routine “Prepara-macchinetta” è stata scomposta in una serie di azioni elementari, le quali descrivono tutte le fasi della preparazione della caffettiera. La routine è stata scomposta al livello più semplice. METTI-CAFFE-IN-MACCHINETTA FINE PREPARA-MACCHINETTA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA INIZIO PREPARA-MACCHINETTA V F Macchinetta in credenza 1 PRENDI-MACCHINETTA-DA-CREDENZA In questa slide viene introdotto il concetto di test. Durante l’elaborazione ci si può trovare di fronte ad una alternativa. La rappresentazione grafica è un rombo nel quale si avranno un ingresso e due uscite che convoglieranno sempre ad un nodo connettore. All’interno del rombo verrà inserita la condizione da testare. L’ alternativa conduce sempre ad una scelta: vero o falso. A seconda della risposta il programma seguirà un percorso anziché un altro. PRENDI-CAFFE-DA-DISPENSA 2

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA NODO CONNETTORE q TEST/VERIFICA/DECISIONE q CONDIZIONE

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA ENTRATA TEST F V q A B Se la condizione testata è vera, verrà eseguita la routine B, mentre se la condizione è falsa verrà eseguita la routine A. Le uscite delle due routine conducono al nodo connettore, per poi proseguire nell’elaborazione. USCITA

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA F V Macchinetta in credenza 1 PRENDI-MACCHINETTA F V Naturalmente i test possono essere eseguiti in cascata, uno dopo l’altro, testando una dopo l’altra più condizioni. 2 Caffè non in dispensa COMPRA-CAFFE

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA TESTS IN CASCATA F V p 1 A B F V q 2 C D

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA TESTS NIDIFICATI F V p C F V q B A

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SCOMPOSIZIONE: processo “servi caffè” INIZIO SERVI-CAFFE TOGLI-CAFFE-DA-FUOCO ZUCCHERA-CAFFE VERSA-CAFFE PORGI-CAFFE FINE SERVI-CAFFE

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SCOMPOSIZIONE: processo “zucchera caffè” INIZIO ZUCCHERA-CAFFE V Caffè amaro AGGIUNGI-ZUCCHERO F Questo esempio introduce le strutture iterative. La prima analizzata è l’iterazione per vero. Si controlla se il caffè è amaro: se ciò è vero si aggiunge lo zucchero e si assaggia il caffè. Si ripete il test e si continua ad aggiungere zucchero e ad assaggiare il caffè. Si “esce” dal ciclo quando la condizione “caffè amaro” non risulta più verificata. ASSAGGIA-CAFFE FINE ZUCCHERA-CAFFE

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA ITERAZIONE PER VERO V p A F

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SIMBOLI INIZIO/FINE PROCESSO TEST NODO CONNETTORE PROCESSO FLUSSO AZIONE

INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA SOFTLAB DUE INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA STRUTTURE SEQUENZA ITERAZIONE PER VERO V p A F TEST ITERAZIONE PER FALSO F V p A B A F p V

Progetto: Calcolo del resto Capitolo1

Calcolo del resto 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.

resto = resto - divisore Calcolo del resto inizio Lettura dividendo Lettura divisore resto = divisore resto >= divisore F resto = resto - divisore V Stampa “resto”

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;

Progetto: Calcolo numero primo Capitolo1

Calcolo del numero primo Definizione Un 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

Calcolo del numero primo Esempio N = 5

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 quoziente resto = n-(quoz*divisore); //calcolo del resto if (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);

Calcolo del numero primo inizio Lettura n primo = true divisore = 2 resto == 0 F V divisore = divisore +1 Primo = false È stato trovato un divisore Divisore < n AND primo = true F resto = n – (quoz*divisore) resto V quoziente quoz = n/divisore stampa

Progetto: Torri di Hanoi http://it.wikipedia.org/wiki/Torre_di_Hanoi http://www.frasi.net/giochionline/torre-di-hanoi/ Capitolo1

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

Torri di Hanoi: regole Situazione iniziale Situazione finale

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

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

La “Torre di Hanoi”

A B C

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'); }

Torre di Hanoi: algoritmo void 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); 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);

Torre di Hanoi: output

Torre di Hanoi: sequenza di trasferimenti 1 2 3 A B C 2 3 A B C 1 Mossa 1 3 A B C 1 2 Mossa 2 3 A B C 1 2 Mossa 3 A B C 1 2 3 Mossa 7 A B C 3 1 2 1 A B C 3 2 Mossa 5 1 A B C 2 3 Mossa 6 Mossa 4