Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
13 ottobre 20021 Decisioni F. Bombi 13 ottobre 2002
2
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)
3
13 ottobre 20023 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
4
13 ottobre 20024 Programmi e grafi istruzioni in sequenza saltosalto condizionato
5
13 ottobre 20025 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)
6
13 ottobre 20026 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
7
13 ottobre 20027 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}
8
13 ottobre 20028 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
9
13 ottobre 20029 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
10
13 ottobre 200210 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 )
11
13 ottobre 200211 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 )
12
13 ottobre 200212 Operatori fra dati boolean Operatori di confronto == != Operatori logici ! & ^ | Operatori di and e or condizionali && || Ternari ? :
13
13 ottobre 200213 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
14
13 ottobre 200214 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
15
13 ottobre 200215 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
16
13 ottobre 200216 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.
17
13 ottobre 200217 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
18
13 ottobre 200218 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
19
13 ottobre 200219 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
20
13 ottobre 200220 Semantica del ciclo for for (iniziale; condizione; passo) istruzione; Ha lo stesso effetto del ciclo while seguente iniziale; While (condizione) { istruzione; passo; }
21
13 ottobre 200221 Un esempio Calcolo della media di n dati
22
13 ottobre 200222 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
23
13 ottobre 200223 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
24
13 ottobre 200224 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
25
13 ottobre 200225 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
26
13 ottobre 200226 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
27
13 ottobre 200227 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
28
13 ottobre 200228 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)
29
13 ottobre 200229 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]
30
13 ottobre 200230 Gli array int v[]; ? v v = new int[5]; 0 1 2 3 4
31
13 ottobre 200231 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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.