Tipi di dato e controllo del flusso Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – 53100 – SIENA.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Ambiente Java.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A2 Java: le basi del linguaggio.
PHP.
Universita di Camerino
Algoritmi e Programmazione
INFORMATICA Strutture iterative
Programmazione in Java (3)
Eccezioni Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
Programma Dott. Ing. Leonardo Rigutini
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 7 (5 novembre 2008) Programmazione in Java: lessico, variabili, tipi primitivi, assegnamento a variabile.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Assegnamento di valore a una variabile Anno Accademico 2009/2010.
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)
Corso di Laurea in Biotecnologie Informatica (Programmazione)
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Soluzione Esercizio - Classe Vettore
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,
Oggetti e dati primitivi
Istruzioni di ripetizione in Java
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Selezione (=scelta) con “if-else”
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
Strutture di controllo nel C
Dichiarazioni e tipi predefiniti nel linguaggio C
Il Linguaggio C.
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Java base I: Sintassi e tipi di dati
Argomenti della lezione
LA DOCUMENTAZIONE È noto che un buon programma dovrebbe essere ben documentato.. ma lesperienza insegna che quasi mai ciò viene fatto! –non cè tempo, ci.
Programmazione in Java
Programmazione in Java Claudia Raibulet
JAVA Franco Bombi 8 ottobre FB Introduzione Java è un linguaggio di impiego generale, basato su classi e orientato agli oggetti Java.
CODIFICA Da flow-chart a C++.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
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 221 Listruzione IF-ELSE prevede un secondo blocco di istruzioni da eseguire in alternativa al primo nel caso la condizione sia falsa.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Corso di Programmazione in Java – Esercizio n° 001
1 Numeri interi e numeri in virgola mobile F. Bombi 2 6 novembre 2003.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Anno accademico Le istruzioni di controllo in C.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Lezioni 1-2.
Corso JAVA Lezione n° 02 Istituto Statale di Istruzione Superiore “F. Enriques”
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Corso JAVA Lezione n° 03 Istituto Statale di Istruzione Superiore “F. Enriques”
1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.
Introduzione a Javascript
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
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.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Programmazione in Java
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
13 ottobre Decisioni F. Bombi 13 ottobre 2002.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Cloud informatica V anno. Introduzione a PHP Lo scripting PHP PHP è un linguaggio di scripting lato server. Le caratteristiche di un linguaggio di scripting.
Lezione 2 : Basi del linguaggio Variabili. Come visto nella lezione 1 le classi registrano il proprio stato nelle variabili  int cadenza = 0;  int velocita.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Transcript della presentazione:

Tipi di dato e controllo del flusso Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff

Tipi di dato

Tipi di dato semplici (primitivi) Il JAVA fornisce tutti i tipi di dato semplici. Per ognuno di essi inoltre la Sun ha sviluppato una versione ad oggetti: i wrapper Per i tipi di dato primitivi il JAVA non utilizza la memorizzazione per riferimento, bensì per valore: Questo significa che tutte le operazioni di assegnamento, passaggio di parametri ecc… creano una variabile distinta

Tipi di dato semplici TipoDimensioneMinMaxWrapper boolea n 1 bit--Boolean char16 bit Char byte8 bit Byte short16 bit Short int32 bit Integer long64 bit Long float32 bitIEEE 754Float double64 bitIEEE 754Double void---Void

Tipi di dato numerici Quando utilizziamo un tipo di dato semplice numerico è importante ricordarsi del range limitato di numeri rappresentabile in hardware Piccoli errori di arrotondamento possono portare ad un risultato scorretto anche di quantità significative a seguito di numerose operazioni aritmetiche Il caso più eclatante fu lerrore scoperto sul processore Pentium nel 1994 pochi mesi dopo la sua uscita

Operatori

Assegnamento Lassegnamento permette di definire il valore memorizzato in una variabile: il valore assegnato deve essere compatibile col tipo della variabile, altrimenti si genera un errore int a, b; float v1, v2; char c = M; a = 4; b = a; v1 = 3.2 v2 = a; b = v1; b assume il valore di a (cioè 4) ammesso: v2 assume il valore di a (4) convertito in float variabile espressione non ammesso

Cast cast (forzatura) indica loperazione di forzare la trasformazione di un tipo di dato ad un altro: La sintassi consiste nellinserire il nome_tipo tra parentesi, prima della variabile o della espressione che vuole essere castata int a=(int) (3,14*4); a contiene 12 invece che !!! double A=3,14; int f=(int) A; f contiene il valore 3 !!! Il cast può essere esplicito o implicito: cast esplicito - lutente specifica il tipo di dato finale in cui desidera lavorare (tra parentesi tonde) cast implicito - il compilatore automaticamente decide il tipo di dato finale in base al tipo di dato della variabile in cui il valore va ad essere memorizzato. Le conversioni ammesse implicitamente sono: byte short int long float double

Operatori Operatori unari: permettono di effettuare operazioni di inversione di segno e autoincremento positivo +, negativo – pre-incremento ++a, pre-decremento --a post-incremento a++, post-decremento a-- class Prova { public static void main(String[] args) { int A = 10; System.out.println(A); // Stampa 10 System.out.println(A++); // Stampa 10 System.out.println(++A); // Stampa 12 }

Operatori Operatori aritmetici: moltiplicazione *, divisione / modulo % addizione +, sottrazione – Operatori relazionali: permettono di costruire espressioni logiche uguale ==, diverso != maggiore >, maggiore e uguale >= minore <, minore e uguale <= (c != 23) è true se c è diverso da 23 (b == s) è true se b è il carattere s

Operatori Operatori booleani Permettono di costruire espressioni logiche: And && Or || Not ! Non vengono mai valutate tutte i termini della condizione, ma solo fino a quando il risultato è univocamente determinato: v1 && v2 && v3 && v4 v4 non viene valutata ( !((c == 23) || (c ==24)) ) c non è uguale a 23 nè a 24 ( (b == s) || (b ==S) ) è true se b è il carattere s o S ( !((a >= 0) && (a < 0.5)) ) è false se a è compreso tra 0 (compreso) e 0.5 (escluso) T T F T

Operatori Operatori bit-a-bit And & Or | Xor ^ Not ~ class ProvaXor { public static void main(String[] args) { boolean A = 0x80; // ( ) 2 boolean B = 0xAB; // ( ) 2 System.out.println(A ^ B); // Stampa 0x2B ( ) 2 }

Operatori Operatori di shift Permettono di traslare a destra o a sinistra sequenze di bit: shift a destra >> shift a sinistra << >> <<

Varianti di operatori Per quasi tutti gli operatori è possibile sostituire una espressione del tipo variabile = variabile valore con una forma abbreviata: variabile = valore double A = 0.0D; // Invece di scrivere A = A + 2D // abbiamo scritto A += 2.0D System.out.println(A += 2.0D); // Stampa 2.0 System.out.println(A /= 2.0D); // Stampa 1.0

Confronto di oggetti Quando utilizziamo loperatore == per confrontare due oggetti, in realtà confrontiamo lindirizzo memorizzato nelle due variabili: Tale confronto quindi ritorna true nel caso che entrambe le variabili si riferiscano allo stesso oggetto Quindi in questo caso luguaglianza non si riferisce al contenuto della variabile ma controlla se le due variabili indicano lo stesso oggetto Normalmente ogni oggetto mette a disposizione un metodo per controllare luguaglianza tra due oggetti: String.equals() ecc…

Confronto di oggetti Solamente per i tipi di dato primitivi il confronto si comporta effettivamente come un operatore matematico di uguaglianza: Es. due variabili intere diverse che contengono lo stesso valore sono considerate uguali Un riferimento ad oggetto può avere valore null Tale valore può essere utilizzato per verificare su un oggetto è stato inizializzato tramite confronto: Rectangle R; if (R==null) … // loggetto R non è stato inizializzato

Array

Un array è un handle ad un vettore (o una matrice) di elementi che possono essere di tipo primitivo oppure oggetti: Se vogliamo allocare memoria: int[] A1; int A2[]; int[] B = {1, 2, 3, 4, 5, 6}; in entrambi i casi viene generato un handle ad un vettore in questo caso viene anche allocata la zona di memoria necessaria a contenere gli elementi indicati int[] A1; int A2[]; int[] B = {1, 2, 3, 4, 5, 6}; A1 = new int[6]; A2 = A1; A1.length indica quanti elementi sono stati allocati

Array di oggetti È anche possibile creare un array di oggetti, cioè un vettore di handle tutti inizializzati a null E anche possibile inizializzare direttamente un vettore di oggetti: ma è poco utile Segmento[] Spezzata; Spezzata = new Segmento[6]; for ( int i = 0; i < Spezzata.length; i++) { Spezzata[i] = new Segmento(); } NULL 3: 4: 5: 2: 1: 0: Segmento[] Spezzata = { new Segmento(); };

Array multidimensionali Il JAVA non pone limiti al numero di dimensioni degli array int[][] A = { {1, 2, 3, 4, 5 }, {6, 7, 8, 9, 10} }; int[][] B = new int[5][2]; A[0][3] A[i].length A.length int[][][] A = new [2][2][3]; for (int x = 0; x < A.length; x++) for (int y = 0; y < A[x].length; y++) for (int z = 0; z < A[x][y].length; z++) A[x][y][z] = 1;

Controllo del flusso

if … else … cond blocco 1blocco 2 false true if (boolean-cond) { blocco 1 } else { blocco 2 } if (vendite > media) { bonus = 0.1; guadagno = quota * bonus; } else { guadagno = 0; }

Operatore ? Il costrutto if … else … può essere condensato in una istruzione singola utilizzando loperatore ? condizione ? valore1 : valore2 y = x>=0 ? x : -x ; if (x >=0) y=x; else y=-x; y = if (x>=0) x; else -x; errore

if … else if … else … cond1 blocco 1 blocco 3 false true cond2 blocco 2 true false if (cond1) { blocco 1 } else { if (cond2) { blocco 2; } else { blocco3; } if (cond1) { blocco 1 } else if (cond2) { blocco 2; } else { blocco3; }

switch … case … char C = n; switch (C) { case n: System.out.println(Sconto); break; case s: System.out.println(Sconto no); break; default: System.out.println(Boh!); } switch (variabile) { case Valore1: blocco1 break; case Valore2: { blocco2 ; break; } default: blocco default; }

while () cond blocco false true while (boolean-cond) { blocco } while (true) { System.out.println(Infinito); } Ciclo infinito:

do … while() La condizione viene valutata dopo aver eseguito il blocco almeno una volta do { blocco } while (boolean-cond) cond blocco false true

Cicli determinati: for Ciclo di 5 iterazioni: Ciclo infinito: cond blocco false true inizializzazione incremento for (inizializzazione; boolean-cond; incremento) { blocco } for (int i = 0; i < 5; i++) { System.out.println(i); } for (;;) { System.out.println(Infinito); }

for multivariabile È possibile specificare nel ciclo for condizioni per più variabili. Lesecuzione dei due cicli avviene eseguendo prima il più interno e poi avanzando quello superiore: for (int i = 0, j = 5; i < 5; i++, j--) { System.out.println(i); System.out.println(j); }

break e continue Queste istruzioni modificano lesecuzione del ciclo: break interrompe lattuale istruzione di iterazione while, do while, for... ed esce definitivamente dalla iterazione continue interrompe la corrente iterazione e ritorna allinizio del ciclo, iniziandone unaltra for (int i = 0, j = 10; i < 15; i++, j--) { System.out.println(i); if (i % 2 == 0) continue; if (j < 0) break; System.out.println(j); }