Fondamenti di Informatica 1 - uniroma2.it · interrompere la valutazione di tutti i case successivi...

40
Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011

Transcript of Fondamenti di Informatica 1 - uniroma2.it · interrompere la valutazione di tutti i case successivi...

Fondamenti di Informatica 1

Prof. B.ButtarazziA.A. 2010/2011

Sommario

• Istruzione condizionale switch• Istruzioni di salto break e continue• Uso di variabili di tipo boolean

• Variabili di tipo array (monodimensionali)• Esercizi

Istruzioni

• Istruzione condizionale– switch

• Istruzioni di salto– break– continue

Istruzione condizionale switch– Utile nei casi in cui occorre testare una

espressione (o variable ) in modo multiplo– Contiene una serie di etichette case per

ciascun caso ed un caso opzionale default

switch (espressione){case espr_costante1: System.out.println("Il valore dell’espressione è:

espr_costante1");break;

case espr_costante2:System.out.println("Il valore dell’espressione è: espr_costante2");

break;……………break;

default: System.out.println(" Il valore dell’espressione non è corretto"););

break; }

Dopo che viene valutata l’espressione scritta dopo la parola chiave switch, il controllo passa al primo case tale che espressione == espr_costante ed esegue il relativo blocco di codice. Nel caso in cui il blocco sia terminato con una istruzione break, viene abbandona l’esecuzione del blocco switch saltando alla prima istruzione successiva al blocco, altrimenti il controllo viene eseguito sui blocchi case a seguire. Se nessun blocco case soddisfa la condizione viene controllata l’esistenza della parola chiave default ed eseguito, se presente, solo il blocco di codice relativo e si esce da switch.

switch (i) {case v1: <istruzione 1>;break;case v2: <istruzione 2>;break;case v3: <istruzione 3>;break;……………..break;case vn: <istruzione n>;break;default:: <istruzione di default>; break;}

i è la variabile su cui avvengono tutti i confronti, mentre V1, V2,.. Vn sono variabili o costanti utilizzate per eseguire il confronto. Quando un'operazione di confronto risulta soddisfatta verrà eseguita l'istruzione corrispondente. Se nessuno dei confronti risulta verificato, viene eseguita l'istruzione presente nel ramo default.

Semantica switchtrue

false

.

.

.

case v1 case v1 istruzione 1

break

case v2 case v2 istruzione 2

break

false

false

case vn case vnistruzione n

break

true

true

default ….istrdefault

Istruzione di salto break

• L’istruzione di salto break abbinata all’istruzione switch serve per interrompere la valutazione di tutti i casesuccessivi a quello in cui si è verificato espressione == espr_costante

Semantica switch senza break

true

false

.

.

.

case v1 case v1 istruzione 1

case v2 case v2 istruzione 2

false

false

case vn case vnistruzione n

true

true

default ….istrdefault

true

switch (i) {case 1:System.out.println("lunedi'");break;case 2:System.out.println("martedi'");break;case 3:System.out.println("mercoledi'");break;case 4:System.out.println("giovedi'");break;case 5:System.out.println("venerdi'");break;case 6:System.out.println("sabato");break;case 7:System.out.println("domenica");break;default:System.out.println("valore errato");break;}

Supponendo di voler confrontare il valore di una variabile i di tipo intero con una serie di costanti da 1 a 7 (i giorni della settimana) possiamo scrivere:

switch (i){case 1: System.out.println("Il valore di i è: 1");break;case 2: System.out.println(" Il valore di i è: 2");break;case 3: System.out.println(" Il valore di i è: 3");break;default: System.out.println(" Il valore di i è non è 1, ne' 2, ne' 3, ma " +i);break; }

Lo stesso risultato si sarebbe ottenuto con una serie di if...else if ..else come segue:

if (i==1)System.out.println("Il valore di i è: 1");else if(i==2)

System.out.println("Il valore di i è: 2");else if (i==3)

System.out.println("Il valore di i è: 3");elseSystem.out.println("Il valore di i non è 1, ne' 2, ne' 3, ma " +i);

switch (i){case 1: System.out.println("Il valore di i è: 1");break;case 2: System.out.println(" Il valore di i è: 2");break;case 3: System.out.println(" Il valore di i è: 3");break;default: System.out.println(" Il valore di i è non è 1, ne' 2, ne' 3, ma " +i);break; }

Lo stesso risultato si sarebbe ottenuto con una serie di if...else if ..else come segue:

if (i==1)System.out.println("Il valore di i è: 1");else if(i==2)

System.out.println("Il valore di i è: 2");else if (i==3)

System.out.println("Il valore di i è: 3");elseSystem.out.println("Il valore di i non è 1, ne' 2, ne' 3, ma " +i);

L’istruzione switch ha una limitazione: il tipo di espressione deve restituire un valore intero od una costante di tipo enum (ancora da studiare)Non è quindi possibile utilizzarla con valori diversi es. String o boolean.

switch (car){case ’a’: System.out.println("Il valore di car è: a");break;case ’b’: System.out.println(" Il valore di car è : b");break;case ’c’: System.out.println(" Il valore di car è : c");break;default: System.out.println(" Il valore di i è non è a, ne' b, ne' c, ma " +car);break; }

Fa eccezione il tipo char, in quanto viene valutato il valore intero del carattere

int b=6;

switch (a+b) { case 11: a = 5;

break; case 15: a = 9; break;

default: b = 0; a = 0;break;

}

l’espressione scritta dopo la parola chiave switch, può essere di tipo qualsiasia….

Istruzione di salto break

• L’istruzione break serve per interrompere un ciclo– Nell’istruzione switch interrompe

l’esecuzione del blocco switch limitandola all’istruzioni del blocco corrispondente all’etichetta che eguaglia l’espressione che controlla il ciclo

Uso di break in forfor ( cont=1; cont<=10;cont++){if (cont == 5) break;// resto del blocco del for}

si

no

Contatore= 1

Contatore<=10 ? Contatore++Contatore=5 ?

Istruzione break

si

noResto del blocco for

Esce quando i = 5

int i,j;for( i=1;i<50;i++) {

for(j=2;j<i;j++)if(i%j==0) break;if(i==j) System.out.print(" "+i); }

si

no

j= 2

j<i j++i%j==0 ?

Istruzione break

si

noResto del blocco for

Esce quando (i%j==0)

..esempio determinare i numeri primi compresi tra 1 e 50…

Uso di break in whilewhile ( cont<=10){if (cont == 5) break;// resto del blocco del while}

si

no

Cont= 1

Cont<=10 ? Cont=5 ?

Istruzione break

si

noResto del blocco while

Esce quando cont = 5

Istruzione di salto continue

• L’istruzione continue interrompe il passo corrente del ciclo e continua ovvero riprende ad eseguire il passo successivo

Istruzione di salto continue

Uso di continue in forfor ( cont=1; cont<10;cont++){if (cont == 5) continue;

// resto del blocco del for}

si

no

Contatore= 1

Contatore<10 ? Contatore++Contatore=5 ?

Istruzione continue

si

noResto del blocco for

Salta il caso i=5

Uso di continue in whilewhile ( cont<10){if (cont == 5) continue;

// resto del blocco del while}

si

no

Cont= 1

Cont<10 ? Cont=5 ?

Istruzione continue

si

noResto del blocco while

Salta il caso cont=5

Uso di break e continue in do ..while

Analogo al while..

Esercizio

Scrivere un programma che letta in input una stringa (nome della variabile mioTesto ) verifica se è palindroma (utilizzare break).

L’istruzione breakbreak: termina l’esecuzione del blocco break: termina l’esecuzione del blocco

dell’iterazione in cui compare.

InputStreamReader In = new InputStreamReader(System.in);BufferedReader Tastiera = new BufferedReader(In);

String mioTesto; boolean palindroma = true;System.out.println("inserire il teso : " );mioTesto= Tastiera.readLine();int sx,dx;for(sx=0, dx = mioTesto.length()-1; sx<dx; sx++,dx--)

{if(mioTesto.charAt(sx)!=mioTesto.charAt(dx)){palindroma = false;break;} }

System.out.println("Risultato : " + palindroma);

Variabili in Java Esempi di assegnazione:

Variabili di tipo array Un array di dati è un insieme di dati omogenei,memorizzati in locazioni adiacenti e accessibili mediante unindice.

L’array implementa una corrispondenza (mapping) tra isuoi elementi e le locazioni di memoria che li contengono.

Variabili di tipo array Sintassi Java della fase di dichiarazione di un array di <dimensione intera>

locazioni in cui vengono inseriti dati del tipo specificato nel campo <tipo di dato>.

<tipo di dato> <variabile array> [ ] =

new <tipo di dato> [ <dimensione intera> ] ;

oppure

<tipo di dato> [ ]<variabile array> =

new <tipo di dato> [ <dimensione intera> ] ;

int [ ] I= new int[3] ;

int I[ ]= new int[3] ;

Variabili di tipo array Esempiint I[ ]= new int[3] ;// I è un array di 3 valori interi

char C[ ]= new char[4] ; // C è un array di 4 caratteri

boolean B[ ]= new boolean[3]; // B è un array di 3 valori logici

Dichiarazione e inizializzazione di array

Inizializzazione di un array nella fase dichiarativa:<tipo di dato> <variabile array> [ ] = { <elenco dei valori> };

Esempiint I[ ] = { 5,1,2}; // I è un array di 3 valori interichar C[ ] = { 'a', 'b','c','d' };// C è un array di 4 caratteriboolean B[ ] = { true,true,false }; // vb è un array di 3 valori logici

Array monodimensionali

Array multidimensionali

Esercizio

Scrivere un programma che memorizzi 10 intin un array e successivamente calcoli e stampi la somma degli elementi memorizzati.

import java.io.*;public class EsempioArray{

public static void main(String args[]) throws NumberFormatException, IOException{

int i=0;int v[]=new int[10];InputStreamReader In = new InputStreamReader(System.in);BufferedReader Tastiera = new BufferedReader(In);

for (i=0; i<10; i++){

System.out.print("Valore: v["+i+"]= “);v[i]=Integer.parseInt(Tastiera.readLine());

} for(i=0; i<10;i++){

System.out.println("v["+i+"]="+v[i]);}int S=0;for(i=0; i<x;i++){

S=S+v[i];}System.out.println("somma="+S);

}}

Esercizio

Scrivere un programma che memorizzi X (valore >0 letto da tastiera) int in un array v e successivamente calcoli e stampi la somma S degli elementi memorizzati.

int x; do{System.out.print("Immettere un numero: ");x=Integer.parseInt(Tastiera.readLine()); }while (x<=0); System.out.println("numero inserito: " + x);

int i=0;int v[]=new int[x];

for (i=0; i<x; i++){

System.out.print("Valore: ");v[i]=Integer.parseInt(Tastiera.readLine());

}

for(i=0; i<x;i++){

System.out.println("v["+i+"]="+v[i]);}

int S=0;for(i=0; i<x;i++){

S=S+v[i];}System.out.println("somma="+S);

Scrivere un programma che memorizzi un array A di K elementi di tipo double, e che successivamente calcoli e stampi il numero di elementi di A minori di zero.

Esercizio

Esercizio

Scrivere un programma che trova il massimo elemento di un array a.