13 ottobre 20021 Decisioni F. Bombi 13 ottobre 2002.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Selezione A. Ferrari.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità G1 Dati strutturati.
Ripasso R1 Dati strutturati.
3TC – 5/11/2010 Cicli while e do.. While Contatori e Totalizzatori.
PHP.
Istruzioni condizionali e blocco
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Algoritmi e Programmazione
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
INFORMATICA Strutture iterative
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Iterazione enumerativa (for)
Linguaggio MATLAB: costrutti tipici (IF,WHILE…)
Algebra di Boole ed elementi di logica
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
1 Corso di Informatica (Programmazione) Lezione 11 (19 novembre 2008) Programmazione in Java: controllo del flusso (iterazione)
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Indipendenza lineare,
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Il linguaggio Fortran 90: 2. Istruzioni di Controllo
Introduzione alla programmazione lll
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Fondamentidi Programmazione Corso: Fondamenti di Programmazione Classe: PARI-DISPARI Docente: Prof. Luisa Gargano Testo: Aho, Ulman, Foundations of Computer.
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
Programmazione Corso di laurea in Informatica
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Unità Didattica 1 Algoritmi
Strutture di controllo in C -- Flow Chart --
CAPITOLO 7.
Il Linguaggio C.
Programmazione in Java Claudia Raibulet
PROGRAMMAZIONE: linguaggi
CODIFICA Da flow-chart a C++.
Lezione 6 Strutture di controllo Il condizionale
PROBLEMA ALGORITMO PROGRAMMA LINGUAGGI di PROGRAMMAZIONE
Parte 4 Elementi di Informatica di base
Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.
BIOINFO3 - Lezione 211 INPUT La lettura di un input dallo standard input (tastiera) si effettua utilizzando lespressione. Quando il programma incontra.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Programmazione Strutturata
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
Corso JAVA Lezione n° 03 Istituto Statale di Istruzione Superiore “F. Enriques”
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algebra di Boole ed elementi di logica Marco D. Santambrogio – Ver. aggiornata.
1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.
Introduzione a Javascript
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting.
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
Strutture di controllo Esercizi!. Utilizzare i metodi: I modi per poter richiamare un metodo, di una classe (ad esempio SavitchIn) sono due. 1) E’ sempre.
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Terza giornata: principali classi di complessità computazionale dei problemi Guido Proietti.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
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
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
Diagrammi a blocchi.
Eprogram informatica V anno. Introduzione a PHP Introduzione La diffusione di PHP ha avuto un notevole incremento dalla fine degli anni Novanta a oggi,
Strutture di controllo
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
Cicli e Array. 2 Costrutto while while(espressione) { … } Il codice dentro le parentesi graffe viene eseguito finché la condizione è vera Potrebbe non.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Transcript della presentazione:

13 ottobre Decisioni F. Bombi 13 ottobre 2002

2 Istruzioni di salto Le istruzioni che compongono un programma vengono eseguite in sequenza Istruzioni di salto (JUMP o goto ) consentono di alterare l’ordine di esecuzione Le istruzioni di salto possono essere condizionate dal valore di un dato o di un’espressione Le istruzioni di salto condizionato consentono di scrivere programmi il cui comportamento dipende dai dati Un uso sconsiderato delle istruzioni di salto produce programmi di cui è difficile verificare la correttezza (detti programmi spaghettata)

13 ottobre Programmi e grafi Se associamo ad ogni istruzione un vertice di un grafo e colleghiamo ogni istruzione alla istruzione che la segue con un arco orientato otteniamo il grafo di flusso associato al programma Le istruzioni di salto condizionato sono caratterizzate da due archi in uscita che verranno percorsi in alternativa in funzione del verificarsi o meno della condizione di salto

13 ottobre Programmi e grafi istruzioni in sequenza saltosalto condizionato

13 ottobre La programmazione strutturata Negli anni ’60 fu dimostrato che qualsiasi grafo poteva essere trasformato in un grafo strutturato equivalente (dal punto di vista del risultato) composto solo da sequenze di istruzioni combinate con le due strutture fondamentali la scelta (if-then- else) e il ciclo (do-while)

13 ottobre Linguaggi strutturati Negli anni ’70 sono stati sviluppati linguaggi che non dispongono di istruzioni di salto e quindi consentono di scrivere solo programmi strutturati Il linguaggio di programmazione Java segue questa tendenza e dispone dei costrutti di scelta e ciclo (con qualche utile variante) Java dispone anche di alcune istruzione di salto ( return, continue, break ) che possono essere usate solo in particolari contesti Java non dispone dell’istruzione goto

13 ottobre L’istruzione if-then-else Esistono due formati possibili – if (espressione booleana) istruzione1 – if (espressione booleana) istruzione1 else istruzione2 In ogni caso un’istruzione può essere sostituita da un blocco cioè da una sequenza di istruzione racchiusa fra parentesi graffe {istruzioni}

13 ottobre Semantica Nel primo caso l’esecuzione dell’istruzione avviene solo se l’espressione booleana è vera, viene saltata se l’espressione è falsa Nel secondo caso viene eseguita l’istruzione1 se l’espressione booleana è vera, l’istruzione2 se l’espressione è falsa In ogni caso il programma continua con l’istruzione che segue l’istruzione composta if- then o if-then-else

13 ottobre Espressioni booleane Le espressioni booleane sono espressioni che hanno come risultato un valore di tipo boolean, sono in genere il risultato di operazione di confronto oppure il risultato di operazioni logiche fra espresioni e variabili booleane Parlando dei tipi di dati primitivi abbiamo visto quali sono le operazioni di confronto possibili

13 ottobre Operatori fra interi Confronto (il risultato è un boolean ) >= == != Operatori unari (il risultato è un int ) (prefissi e postifissi) ~ Operatori binari (il risultato è un int ) + - * / % > >>> & | ^ Ternari ? : Conversione ( cast )

13 ottobre Operatori fra dati in virgola mobile Confronto (il risultato è un boolean ) >= == != Operatori unari (il risultato è un double ) (prefissi e postifissi) Operatori binari (il risultato è un double ) + - * / % Ternari ? : Conversione ( cast )

13 ottobre Operatori fra dati boolean Operatori di confronto == != Operatori logici ! & ^ | Operatori di and e or condizionali && || Ternari ? :

13 ottobre Gli operatori booleani ! && || Il risultato di un espressione boolean è data dalla seguente tabella ab!aa && ba || b vero falsovero falso vero falsovero falsovero falso verofalso

13 ottobre La legge di De Morgan La legge di De Morgan dice che: – la negazione di una espressione and è pari all’ or della negazione dei due operandi: !(a && b) è uguale a: !a || !b Oppure in modo duale che: – la negazione di una espressione or è pari all’ and della negazione dei due operandi: !(a || b) è uguale a : ! a && !b

13 ottobre Il confronto fra riferimenti I riferimenti a oggetti possono essere confrontati solo con gli operatori == e !=, notare che il confronto viene fatto fra il valore dei riferimenti, non si confrontano gli oggetti cui i riferimenti puntano È un errore frequente dimenticarsi di questo fatto e confrontare ad esempio due riferimenti a stringhe di caratteri pensando di confrontare le stringhe

13 ottobre Un esercizio Scrivere un programma che chieda all’utente tre numeri interi che si assume siano la lunghezza dei lati di un triangolo e stabilisca se il triangolo è: – Scaleno – Isoscele – Rettangolo – Equilatero – Impossibile – Ecc.

13 ottobre I cicli while, do e for In Java esistono tre costrutti per realizzare cicli: – while (espressione booleana) istruzione – do istruzione while (espressione booleana) – for (iniziale; condizione; passo) istruzione Come per l’ if l’istruzione può essere sostituito da un blocco (sequenza) di istruzione racchiuse fra parentesi graffe

13 ottobre Semantica del ciclo while All’esecuzione viene valutata l’ espressione booleana, se è vera viene eseguita l’ istruzione e si valuta di nuovo l’ espressione booleana ; se l’espressione è falsa si procede con l’esecuzione dell’istruzione che segue il ciclo Se l’ istruzione non altera il valore dell’ espressione booleana il ciclo non terminerà mai

13 ottobre Semantica del ciclo do Viene eseguita l’ istruzione, si valuta quindi l’ espressione booleana ; se l’espressione è falsa si procede con l’esecuzione dell’istruzione che segue il ciclo se è vara si ritorna ad eseguire l’ istruzione Se l’ istruzione non altera il valore dell’ espressione booleana il ciclo non terminerà mai In un ciclo do a differenza di quanto avviene in un ciclo while l’ istruzione viene eseguita sempre almeno una volta

13 ottobre Semantica del ciclo for for (iniziale; condizione; passo) istruzione; Ha lo stesso effetto del ciclo while seguente iniziale; While (condizione) { istruzione; passo; }

13 ottobre Un esempio Calcolo della media di n dati

13 ottobre Il problema Sono dati n numeri interi (a priori non sappiamo quanti sono) Si vuole calcolare la media dei dati Chiamando x i con i=1,…n i dati sappiamo che la media m è data dalla formula m = 1/n  i=1,n x i Ora si tratta di ideare un algoritmo che risolva il problema utilizzando solo operazioni elementari note ed eventualmente decisioni e iterazioni

13 ottobre Trasformare la formula in un algoritmo s n =  i=1,n x i s n = s n-1 + x n S n-1 = s n-2 + x n-1 ………… S 2 = s 1 + x 2 S 1 = x 1

13 ottobre Se guardiamo le espressioni ricorrenti vediamo che la sommatoria di un dato è pari al dato stesso, la sommatoria di due dati è la sommatoria di un dato aumentata dal secondo, la sommatoria di tre quella di due più il terzo fino all’n-esimo Ad ogni passo dobbiamo sommare al risultato parziale il dato corrente Dobbiamo concludere il calcolo quando abbiamo considerato tutti gli n dati Possiamo utilizzare come valore iniziale della sommatoria 0 (zero) assumendo che al primo passo si sommi al valore iniziale il primo dato

13 ottobre Le operazioni elementari Supponiamo di saper fare le seguenti operazioni elementari – Chiedere all’utente di inserire un dato – Convertire una stringa di caratteri in un numero intero – Sommare, moltiplicare, dividere numeri interi – Ripetere operazioni se una condizione è vera – Convertire un numero in una stringa di caratteri – Scrivere sulla console una stringa

13 ottobre La soluzione Dobbiamo chiedere all’utente i dati uno alla volta e contare quanti dati vengono inseriti L’utente segnalerà la fine dei dati con il pulsante “annulla” Dobbiamo contare quanti dati vengono inseriti Per calcolare la sommatoria usiamo la formula ricorrente vista Nota la sommatoria sappiamo calcolare la media dividendo per il numero di dati ricevuti

13 ottobre Un’osservazione Il programma non gestisce correttamente il caso in cui non ci sono dati ( n pari a zero) Se si inseriscono dati sbagliati il programma fallisce senza dare modo all’utente di correggere l’errore Come esercizio modificare il programma in modo che gestisca correttamente il caso n pari a zero Studieremo in una prossima lezione come gestire un eventuale errore catturando l’eccezione generata dal tentativo di conversione errato

13 ottobre Soluzione alternativa Si potrebbe adottare una soluzione diversa leggendo e contando i dati in una prima fase e procedendo successivamente al calcolo della sommatoria Per poter fare questo abbiamo bisogno di un contenitore per i dati: Java (come quasi tutti i linguaggi ad alto livello) consente di costruire vettori (array) partendo da dati di qualsiasi tipo (è possibile costruire array di dati primitivi e array di oggetti di qualsiasi tipo)

13 ottobre Gli array Un array è un contenitore di dati tutti dello stesso tipo, di dimensioni fissate al momento della sua creazione, nel quale gli elementi sono individuati dal loro rango o posizione Il rango è un numero intero compreso fra 0 e la dimensione dell’array meno uno Un array è un oggetto e quindi il nome di un array dichiarato con un’istruzione del tipo tipo[] nome; è un riferimento, l’array deve essere creato con una clausola del tipo nome = new tipo[max]; È possibile riferirsi ad un singolo elemento di un array conoscendo il suo rango i nome[i]

13 ottobre Gli array int v[]; ? v v = new int[5];

13 ottobre Media utilizzando un array È possibile risolvere il problema del calcolo della media in due fasi, nella prima si procede alla lettura dei dati conservandoli in un array, nella seconda si calcola la media utilizzando i dati contenuti nell’array. Un limite della soluzione deriva dal fatto che l’array deve essere allocato con dimensioni predeterminate maggiori di n È normale che l’array sia solo parzialmente utilizzato