Programmazione Procedurale in Linguaggio C++

Documenti analoghi
Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Tecnologie di Sviluppo per il Web

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Informatica Applicata

Programmazione Procedurale in Linguaggio C++

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Il problema dello zaino

Esempi di programmi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E01. A. Miola Settembre 2007

Introduzione ai Calcolatori Elettronici

Programmazione Orientata agli Oggetti in Linguaggio Java

Algoritmi e Strutture di Dati

Programmazione Procedurale in Linguaggio C++

Algoritmi e Strutture di Dati

PROGRAMMAZIONE: I sottoprogrammi

Fasi di creazione di un programma

Esercizi di Algoritmi e Strutture Dati

Programmazione Orientata agli Oggetti in Linguaggio Java

Corso sul linguaggio Java

Assegnazione di una variabile

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

cout << "Inserisci un numero:" << endl; cin >> n; ris = n*2; cout << "Il doppio di " << n << " e " << ris << endl;

Informatica (A-K) 12. Linguaggio C -3

Capitolo IV. La struttura dei Programmi

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Il primo programma C++

Transcript:

Programmazione Procedurale in Linguaggio C++ Sottoprogrammi Parte 1 Introduzione versione 2.0 Questolavoroè concessoin uso secondoi termini di unalicenzacreative Commons (vedi ultima pagina) G. Mecca Università della Basilicata mecca@unibas.it Sottoprogrammi: Introduzione >> Sommario Sommario Panoramica Alcuni Esempi Radici delle Equazioni di II Grado La Morra Cinese Programmazione Modulare Metodologia per Raffinamenti 2

Sottoprogrammi: Introduzione >> Panoramica Panoramica Istruzioni viste finora Istruzioni di base dichiarazioni (costanti e variabili, tipi) assegnazioni (espressioni) lettura e stampa (console e file) Strutture di controllo istruzioni condizionali (if-then-else, if-then) istruzioni iterative o cicli (while, for) 3 Sottoprogrammi: Introduzione >> Panoramica Panoramica In effetti con queste istruzioni è possibile risolvere problemi arbitrariamente complessi Però la programmazione è macchinosa e complessa è difficile manutenere il codice Nel seguito del corso tecniche per migliorare la qualità dei progr. 4

Sottoprogrammi: Introduzione >> Panoramica Panoramica In questa parte del corso come dividere un programma in più moduli, detti sottoprogrammi tecnica fondamentale della programmazione per gestire la complessità dei programmi alla base delle metodologie di programmazione (cioè del metodo per affrontare la soluzione di problemi complessi) 5 Alcuni Esempi Radici delle equazioni di II grado un problema relativamente semplice (utilizzato a scopo didattico) risolvibile anche senza sottoprogrammi La Morra Cinese problema decisamente più complesso di fatto non risolvibile senza utilizzare i sottoprogrammi 6

Radici di Equazioni di II Grado Specifica date due equazioni di secondo grado della forma ax 2 +bx+c=0 calcolare le eventuali radici reali verificare se le due equazioni hanno radici reali comuni Il problema è risolvibile anche senza sottoprogrammi equazioni0.cpp >> 7 Radici di Equazioni di II Grado Difetti della soluzione il codice è spesso ripetuto se dovessi passare da 2 a 3 equazioni, sarebbe necessario triplicare il codice Problema questo rende il programma difficile da verificare e manutenere se ci sono errori, devono essere corretti in punti diversi del programma (es: radici) 8

Radici di Equazioni di II Grado Idealmente vorrei scrivere una volta sola il codice per le varie operazioni da ripetere e poterlo eseguire di volta in volta su argomenti diversi (ovvero equazioni diverse) Esempio n.1 calcolo del discriminante vorrei calcolarlo come se ci fosse una funzione predef. apposita ( discriminante ) 9 Radici di Equazioni di II Grado Esempio n.2 lettura dei coefficienti di un equazione esiste un istruzione per leggere dalla tastiera numeri e lettere (cin >> ) ed una per leggere dalla tastiera stringhe (getline) vorrei poter effettuare la lettura dei coefficienti come se esistesse un istruzione predefinita apposita ( leggiequazione ) A questo servono i sottoprogrammi equazioni1.cpp >> 10

Sottoprogrammi Esistono due categorie di sottoprogrammi Funzioni servono a definire nuove funzioni per effettuare calcoli non previsti dalle funzioni predefinite Procedure servono a definire nuove istruzioni per eseguire operazioni non previste dalle istruzioni predefinite 11 Sottoprogrammi Struttura di un applicazione fatta di vari moduli Modulo un sottoprogramma (funzione o procedura) oppure il programma principale (un particolare sottoprogramma da cui comincia l esecuzione dell applicazione) 12

Sottoprogrammi Per usare i sottoprogrammi bisogna per cominciare definirli e poi utilizzarli Definizione di un sottoprogramma descrive il comportamento del sottoprogramma Utilizzo di un sottoprogramma chiamata del sottoprogramma in un altro modulo dell applicazione 13 Parametri e Argomenti Idea fondamentale un sottoprogramma è un blocco di istruzioni prevede una serie di parametri su cui eseguire le operazioni specificate (i parametri rappresentano dati generici del sottoprogramma) ai parametri possono essere associati in ogni esecuzione argomenti diversi (ovvero dati specifici su cui effettuare concretamente le operazioni) 14

Parametri e Argomenti Dati nel programma principale finora i dati erano esclusivamente costanti e variabili Dati nei sottoprogrammi costanti variabili parametri: dati speciali che hanno un legame con argomenti esterni 15 Def. della Funzione discriminante tipo del risultato nome della funzione parametri float discriminante (float a, float b, float c) { } float d; d = b*b-4*a*c; return d; istruzione di ritorno La definizione è fatta di: -un intestazione -un corpo il sottoprogramma lavora su 4 dati: - una variabile di tipo float d - tre dati di tipo float chiamati a,b,c 16

Uso della Funzione discriminante float discriminante (float a, float b, float c) { } float d; d = b*b-4*a*c; return d; void main() { float a1, b1, c1; float a2, b2, c2;... if ( discriminante(a1, b1, c1) >= 0 && discriminante(a2, b2, c2) >= 0) {... prima chiamata seconda chiamata argomenti della I chiamata argomenti della II chiamata 17 Def. della Procedura leggiequazione non c è risultato nome della procedura parametri per modifiche void leggiequazione (float &a, float &b, float &c) { } cout << "Inserisci i coefficienti dell'equazione \n"; cin >> a; cin >> b; cin >> c; return; istruzione di ritorno il sottoprogramma lavora su tre dati di tipo float chiamati a,b,c attraverso cui è possibile modificare i corrispondenti argomenti 18

Uso della Procedura leggiequazione void leggiequazione (float &a, float &b, float &c) { cout << "Inserisci i coefficienti dell'equazione \n"; cin >> a; cin >> b; cin >> c; return; prima chiamata } seconda chiamata void main() { float a1, b1, c1; float a2, b2, c2; leggiequazione(a1, b1, c1); leggiequazione(a2, b2, c2);... argomenti della I chiamata argomenti della II chiamata 19 Parametri e Argomenti Attenzione oltre ai parametri, ogni sottoprogramma ha i suoi dati locali costanti locali variabili locali Dati Locali di un Modulo dati dichiarati all interno del modulo i dati sono privati e non utilizzabili dagli altri moduli del programma 20

Esecuzione di un Sottoprogramma Intuizione sulla semantica quando viene incontrata una chiamata del sottoprogramma, si interrompe l esecuzione del programma avviene il passaggio dei parametri (>) si avvia l esecuzione del sottoprogramma al termine dell esecuzione del sottoprogramma riprende l esecuzione del programma 21 Passaggio dei Parametri Passaggio dei parametri: intuizione prima di iniziare l esecuzione del sottoprogramma, viene creata una identificazione tra parametri e argomenti l esecuzione del sottoprogramma avviene sulla base dell identificazione creata (operazioni fatte coi parametri diventano operazioni fatte con i corrispond. argomenti) l identificazione termina al termine dell esecuzione del sottoprogramma 22

Esempio: leggiequazione le1. void leggiequazione (float &a, float &b, float &c) { le2. cout << "Inserisci i coefficienti dell'equazione \n"; le3. cin >> a; le4. cin >> b; le5. cin >> c; le6. return; le7. } m1. void main() { m2. float a1, b1, c1; m3. float a2, b2, c2; m4. float x1, y1, x2, y2; m5. leggiequazione(a1, b1, c1); m6. leggiequazione(a2, b2, c2); m7. if ( discriminante(a1, b1, c1) >= 0 &&... { m8.... 23 Esempio: discriminante d1. float discriminante (float a, float b, float c) { d2. float d; d3. d = b*b-4*a*c; d4. return d; d5. } m1. void main() { m2. float a1, b1, c1; m3. float a2, b2, c2; m4. float x1, y1, x2, y2; m5. leggiequazione(a1, b1, c1); m6. leggiequazione(a2, b2, c2); m7. if ( discriminante(a1, b1, c1) >= 0 &&... { m8.... 24

Passaggio dei Parametri Una visione astratta della chiamata main discriminante(a1, b1, c1) a1 2 b1 5 c1 2 discriminante d 9 a 2 b 5 c 2 modulo chiamante modulo chiamato contiene la chiamata contiene il codice del sottoprogramma da eseguire (richiesta di elaborazione) (servizio di elaborazione) 25 Passaggio dei Parametri Questo processo ha delle sottigliezze che approfondiremo nel seguito es: come modificare il valore di un argomento nel sottoprogramma? Parametro per riferimento parametro attraverso il quale è possibile modificare il valore dell argomento in questi casi, prima del parametro, è necessario specificare la & 26

Radici di Equazioni di II Grado Vantaggi dei sottoprogrammi il codice viene scritto una sola volta e utilizzato tutte le volte che serve semplificano la lettura e la manutenzione del programma Ma c è anche un vantaggio metodologico suggeriscono un metodo per affrontare la scrittura di programmi complessi 27 La Morra Cinese Specifica e necessario scrivere un programma per consentire ad un giocatore di giocare partite di Morra Cinese contro il computer ogni partita è fatta di varie mani. Vince la partita chi vince per primo 3 mani in ciascuna mano i due giocatori giocano scegliendo un oggetto tra carta, forbici, sasso ; la carta batte il sasso ; le forbici battono la carta ; il sasso batte le forbici ; se i due giocatori giocano lo stesso oggetto si verifica un pareggio durante una partita, il programma visualizza il punteggio il giocatore deve poter interrompere la partita in qualsiasi momento il programma deve tenere traccia delle partite vinte dal computer e di quelle vinte dal giocatore e visualizzare la situazione su richiesta 28

La Morra Cinese Soluzione è il primo programma che interagisce con l utente proponendo varie opzioni e attendendo che vengano fatte scelte (es: operazione da effettuare, oggetto da giocare) nel caso di programmi con interfaccia basata sulla console (non grafica) si usa una tecnica standard: il menu con comandi numerici morracinese1.cpp 29 La Morra Cinese Il programma è abbastanza complesso più di 200 righe di codice 15 sottoprogrammi (10 procedure e 5 funzioni) i sottoprogrammi sono usati per lo più una sola volta ma sono stati fondamentali per la scelta dell algoritmo e la scrittura del codice ( guidate dalla scelta dei sottoprogrammi) 30

La Morra Cinese Tecnicamente però il problema è risolvibile anche senza utilizzare sottoprogrammi un unico programma di circa 160 istruzioni strutture di controllo estremamente nidificate (7 livelli di nidificazione) In pratica difficilissimo da scrivere impossibile da manutenere morracinese0.cpp 31 La Morra Cinese Infatti i programmi richiedono continue modifiche le specifiche cambiano continuamente Esempio: la morra cinese l interazione con l utente nella prima versione è macchinosa (troppe scelte inutili) inoltre sarebbe utile una forma di visualizzazione grafica degli oggetti giocati morracinese4.cpp 32

La Morra Cinese In sintesi quindi i sottoprogrammi sono un elemento fondamentale della programmazione da questo momento in poi programmeremo solo con i sottoprogrammi (anche per problemi semplici) In particolare approfondiremo le tecniche della programmazione modulare 33 Sottoprogrammi: Introduzione >> Programmazione Modulare Programmazione Modulare Idea un programma è fatto di moduli che si chiamano a vicenda il programma principale è uno dei moduli (un particolare sottoprogramma da cui comincia l esecuzione) La metodologia associata basata sull uso di sottoprogrammi scomposizione del problema in sottoproblemi 34

Sottoprogrammi: Introduzione >> Programmazione Modulare Metodologia per Raffinamenti Metodo per scegliere l algoritmo l algoritmo viene concepito per raffinamenti successivi si parte dividendo il problema complessivo in sottoproblemi più semplici e immediatamente identificabili poi si applica lo stesso metodo successivamente a ciascun sottoproblema 35 Sottoprogrammi: Introduzione >> Programmazione Modulare Esempio: La Morra Cinese Programma principale passo n.1: inizia il gioco e acquisisci il nome passo n.2: gioca le partite passo n.3: fine gioco e stampa il saluto Per ognuno dei passi (sottoproblemi) un sottoprogramma in alcuni casi è necessario ripetere il procedimento 36

Sottoprogrammi: Introduzione >> Programmazione Modulare Esempio: La Morra Cinese void main() { string nome; } iniziogioco(nome); // per il passo 1 gioca(nome); // per il passo 2 schermofinale(nome); // per il passo 3 37 Sottoprogrammi: Introduzione >> Programmazione Modulare Esempio: La Morra Cinese Passo n.2: procedura gioca finchè l utente vuole andare avanti passo n.2.1: Visualizza il menu delle scelte se l utente sceglie una nuova partita passo 2.2: nuova partita altrimenti se l utente vuole i punteggi passo 2.3: visualizza i punteggi altrimenti se l utente vuole uscire interrompi il ciclo 38

Sottoprogrammi: Introduzione >> Programmazione Modulare Esempio: La Morra Cinese void gioca(string nome) { int vittoriecomputer=0, vittoriegiocatore=0; int scelta; bool continua=true; } while (continua) { scelta = schermomenuprincipale(nome); if (scelta==1) nuovapartita(nome, vittoriecomputer,vittoriegiocatore); else if (scelta==2) schermovittorie(nome, vittoriecomputer,vittoriegiocatore); else if (scelta==3) continua=false; } return; 39 Sottoprogrammi: Introduzione >> Programmazione Modulare Programmazione Modulare Cosa bisogna sapere sui sottoprogrammi come si definiscono (come si creano): sintassi e semantica della definizione di sottoprogrammi come si utilizzano: sintassi e semantica delle chiamate In particolare la parte delicata è il meccanismo attraverso cui i sottoprogrammi comunicano tra di loro 40

Sottoprogrammi: Introduzione >> Sommario Riassumendo Sottoprogrammi elemento fondamentale della programmazione Funzioni blocchi di istruzioni per il calcolo di un valore Procedure blocchi di istruzioni per realizzare operazioni varie Meccanismo Fondamentale passaggio dei parametri Programmazione Modulare 41 Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Questo lavoro viene concesso in uso secondo i termini della licenza Attribution-ShareAlike di Creative Commons. Per ottenere una copiadella licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 42