1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti (2004-2007) Laboratorio di programmazione per la sicurezza Valentina Ciriani (2005-2007)

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

INFORMATICA Strutture condizionali
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Iterazione A. Ferrari.
3TC – 5/11/2010 Cicli while e do.. While Contatori e Totalizzatori.
Sviluppo di programmi strutturati
PHP.
Universita di Camerino
Algoritmi e Programmazione
Anno accademico Gli operatori e le espressioni in C.
Il linguaggio C Gli operatori e le espressioni C Language
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.
Iterazione enumerativa (for)
Tipi di dato e controllo del flusso Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA.
Linguaggio MATLAB: costrutti tipici (IF,WHILE…)
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Algebra di Boole ed elementi di logica
Introduzione alla programmazione
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) Assegnamento di valore a una variabile Anno Accademico 2009/2010.
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)
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Introduzione alla programmazione lll
DAL PROBLEMA ALL'ALGORITMO Problemi e Programmi Paolo Amico
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.
Il Linguaggio Macchina
Istruzioni di ripetizione in Java
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Unità Didattica 1 Algoritmi
Strutture di controllo nel C
Strutture di controllo in C -- Flow Chart --
Dichiarazioni e tipi predefiniti nel linguaggio C
Il Linguaggio C.
Java base I: Sintassi e tipi di dati
Programmazione in Java Claudia Raibulet
2000 Prentice Hall, Inc. All rights reserved. Capitolo 3 (Deitel) Lo sviluppo di programmi strutturati Indice degli argomenti Introduzione 3.2 -
CODIFICA Da flow-chart a C++.
Lezione 6 Strutture di controllo Il condizionale
Architettura degli Elaboratori II (canale P-Z) Istruzioni di controllo Dott. Franco Liberati.
Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.
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.
BIOINFO3 - Lezione 211 INPUT La lettura di un input dallo standard input (tastiera) si effettua utilizzando lespressione. Quando il programma incontra.
Capitolo 4 (Deitel) Le strutture di controllo in C
Anno accademico Le istruzioni di controllo in C.
JavaScript Generalità Cos'è JavaScript?
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
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.
La ricorsione.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
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.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
13 ottobre Decisioni F. Bombi 13 ottobre 2002.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Architettura di un calcolatore e linguaggio macchina.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Diagrammi a blocchi.
Strutture di controllo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 24 Agosto 2015.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Transcript della presentazione:

1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 5 e 6 - Concetto di blocco - Controllo del flusso di un programma - Costrutti per la scelta if e switch - Costrutti while e for - Operatori in C

2 Fabio Scotti – Università degli Studi di Milano Controllo del flusso del programma Obiettivi : Capire come controllare il flusso di un programma mediante la sequenza, la scelta e l'iterazione in C Scrivere i primi semplici programmi in C Lezione 5 e 6 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione

Fabio Scotti – Università degli Studi di Milano 3 Concetto di blocco in C In C i blocchi sono realizzati con delle parentesi graffe dentro le quali vi è una sequenza di istruzioni E' possibile dichiarare delle variabili locali all'interno di in blocco di istruzioni C I blocchi possono essere annidati Le dichiarazioni delle variabili locali sono nella parte iniziale del blocco

Fabio Scotti – Università degli Studi di Milano 4 Esempio di blocco Variabili locali al main (visibili anche nel blocco): - a, b Variabile locale al blocco (non visibile fuori): - temp

Fabio Scotti – Università degli Studi di Milano 5 Regole di scopo e di visibilità Le variabili locali: – sono visibili dalla dichiarazione fino alla fine del blocco cui appartengono – rendono non accessibili le variabili omonime globali, cioè dichiarate in blocchi più esterni. (dettagli nella lezione sulle funzioni) Ciò che è contenuto fra le graffe del main risponde alla definizione di blocco? Sì ! Durante il corso non useremo i blocchi contenenti delle dichiarazioni se non per il main

Fabio Scotti – Università degli Studi di Milano 6 Il costrutto if con una istruzione if con un’unica istruzione if (espressione) istruzione1 se espressione –è vera allora esegui istruzione1 –altrimenti saltala Esempio if (x==3) k=4;

Fabio Scotti – Università degli Studi di Milano 7 Il costrutto if con un blocco if (espressione) { istruzioni } se espressione –è vera allora esegui le istruzioni nel blocco –altrimenti saltale Esempio if (x==3) { k = 4; c = k; temp = 3; }

Fabio Scotti – Università degli Studi di Milano 8 Il costrutto if con il ramo else (1) if (espressione) istruzione1 else istruzione2 se espressione –è vera allora esegui istruzione1 –altrimenti esegui istruzione2 anche in questo caso al posto di una istruzione (k=4;) è possibile inserire un blocco di codice ( {k=4; c=k; …} ).

Fabio Scotti – Università degli Studi di Milano 9 Il costrutto if con il ramo else (2) Esempi: if (x==3) k = 4; else k=0; if (x==7) { k = 4; temp = 3; } else { k = 5; c = v; }

Fabio Scotti – Università degli Studi di Milano 10 Il costrutto if con 3 o più istruzioni if (espr1) istruzione1 else if (espr2) istruzione2 else if (espr3) istruzione3 else if (espr4) istruzione4 Le istruzioni terminano sempre con un ;

Fabio Scotti – Università degli Studi di Milano 11 Il costrutto switch Il costrutto switch è solitamente impiegato quando si devono controllare molti casi. Il codice infatti risulta essere più ordinato. E’ composto da delle etichette ( case ) un caso generale ( default ). Si noti che le etichette del case devono essere delle costanti.

Fabio Scotti – Università degli Studi di Milano 12 Esempio di costrutto switch c =....; // sia c il carattere da esaminare switch (c) { case '0': n_cifre = n_cifre + 1; break; case '1': n_cifre = n_cifre + 1; break;..... default: n_altri = n_altri + 1; }

Fabio Scotti – Università degli Studi di Milano 13 Comportamento di switch 1.valuta l’espressione di switch 2.entra nel blocco e 1.salta all’etichetta case a cui è associata una costante uguale al valore calcolato, se è presente, ed esegue le istruzioni corrispondenti 2.altrimenti salta all’etichetta default, se presente, ed esegue le istruzioni corrispondenti, altrimenti termina l’esecuzione dello switch. 3.quando raggiunge l’istruzione break o la fine dell’istruzione switch termina l’esecuzione di switch.

Fabio Scotti – Università degli Studi di Milano 14 Il costrutto while (1) È il costrutto più generale da cui si possono ottenere tutti gli altri costrutti per l’iterazione È quello che viene consigliato per il nostro corso. Il codice infatti risulta essere più ordinato. Strutture del costrutto while while (espressione) istruzione1 oppure while (espressione) { istruzioni }

Fabio Scotti – Università degli Studi di Milano 15 Il costrutto while (2) while (espressione) { istruzioni } 1.L‘ espressione viene valutata – se ha valore diverso da 0 (vero) viene eseguita l' istruzione (o il blocco di istruzioni ) 2.Una volta che l’esecuzione è terminata, l' espressione viene valutata nuovamente –se è nuovamente vera, si ripete l'istruzione. 3.Ciò si ripete fino a quando l'espressione ha valore 0 (falso), nel qual caso il controllo si trasferisce all'istruzione successiva al while.

Fabio Scotti – Università degli Studi di Milano 16 Il costrutto while (3) while (espressione) { istruzioni } Un ciclo while può essere eseguito –0 volte (quando l'espr. è falsa già la prima volta) –più volte Si tratta di un ciclo a condizione iniziale: prima di eseguire il ciclo si valuta la condizione Le strutture iterative possono entrare in ciclo infinito –questo accade se per un errore di programmazione o per qualche condizione esterna l’espressione del while rimane sempre vera

Fabio Scotti – Università degli Studi di Milano 17 Esempio di costrutto while Problema: sommare i numeri forniti dall’utente tramite tastiera finché non viene immesso uno zero.

Fabio Scotti – Università degli Studi di Milano 18 Il costrutto for (1) Il costrutto for è equivalente al while, ma è da impiegarsi solo se il numero di iterazioni è noto a priori. Per scandire un struttura dati che ha sempre N elementi useremo un ciclo for. Se invece non sappiamo a priori il numero di iterazioni del ciclo allora impiegheremo un costrutto while. Un programmatore esperto non confonde mai queste due situazioni e usa sempre il costrutto più appropriato.

Fabio Scotti – Università degli Studi di Milano 19 Il costrutto for (2) for ( expr1 ; expr2 ; expr3 ) istruzione Oppure for con blocco di codice: for ( expr1 ; expr2 ; expr3 ) { istruzione1 istruzione2.... istruzionen } Dove: – expr1 è l’espressione iniziale, – expr2 è l’espressione Booleana (del ciclo) – expr3 è l’espressione incremento.

Fabio Scotti – Università degli Studi di Milano 20 Il costrutto for (3) 1.L‘espressione iniziale: –permette di inizializzare le variabili di ciclo –viene eseguita una volta sola, prima di qualsiasi altra operazione. –Esempio expr1: contatore = 0. 2.L‘espressione Booleana (o del ciclo): – viene valutata subito dopo –se questa ha valore diverso da 0 viene eseguita l'istruzione che costituisce il corpo del ciclo (o il blocco di istruzioni fra parentesi graffe). –Esempio expr2: contatore < 9.

Fabio Scotti – Università degli Studi di Milano 21 Il costrutto for (4) 3.L'espressione-incremento –viene valutata al termine dell'esecuzione del corpo del ciclo –serve, di solito, per poter aggiornare i valori delle variabili di ciclo –Esempio expr3: contatore = contatore Si valuta nuovamente l’espressione del ciclo finché questa non risulta falsa (ovvero uguale a 0) Esempio: for ( i=1 ; i<10 ; i++ ) printf(“Indice = %d”, i);

Fabio Scotti – Università degli Studi di Milano 22 Scrittura di un ciclo for con un ciclo WHILE for ( expr1 ; expr2 ; expr3 ) { istruzione1.... istruzionen } è del tutto equivalente a expr1; while (expr2) { istruzione1.... istruzionen expr3; }

Fabio Scotti – Università degli Studi di Milano 23 Esempio di costrutto for Problema: chiede all’utente un numero intero N e sommare i primi N numeri naturali.

Fabio Scotti – Università degli Studi di Milano 24 Forme compatte Il linguaggio C consente ai programmatori di usare vari stili di scrittura Le forme compatte sono delle scritture alternative dei normali istruzioni espresse con un minor numero di caratteri: var op= espressione //forma compatta di: var = var op espressione Esempi: x *= y corrisponde a x = x * y y -= z+1 corrisponde a y = y – (z + 1) Le forme compatte rendono il codice più elegante, ma non sempre di facile lettura Si sconsiglia l’uso delle forme compatte

25 Fabio Scotti – Università degli Studi di Milano Operatori in C Obiettivi : Conoscere ed iniziare ad utilizzate gli operatori principali del linguaggio C Lezione 5 e 6 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione

Fabio Scotti – Università degli Studi di Milano 26 Operatori in C Gli operatori si dividono in 4 categorie: –operatori di assegnamento; –operatori matematici; –operatori relazionali; –operatori logici. Espression i semplici Operatori Espressioni composte ISTRUZIONE Espressione ;

Fabio Scotti – Università degli Studi di Milano 27 Operatori di assegnamento E' il carattere = Scrivere x = y; –non vuol dire realizzare un confronto –ma assegnare il valore di y alla variabile x

Fabio Scotti – Università degli Studi di Milano 28 Operatori matematici (1) Consentono di effettuare le operazioni aritmetiche Operatore Tipo Azione Esempi ++ Unario Incrementa di un'unità x++; ++x; -- Unario Decrementa di un'unità y--; --y; + Binario Somma di due operandi x + y; - Binario Sottrazione di due operandi y - x; * Binario Moltiplicazione di due operandi x * y; / Binario Divisione y / x ; % Binario Resto della divisione y % x;

Fabio Scotti – Università degli Studi di Milano 29 Operatori matematici (2) Precedenza fra gli operatori: 1.Incrementi e decrementi unari (++, --); 2.Moltiplicazioni, divisioni e resti (*, /, %); 3. Somme e sottrazioni (+, -); Esempio: – x = * 3 assegna 17 (5+12) alla variabile x Nel caso di operatori di ugual livello, il compilatore procede da sinistra verso destra: – esempio: x = 5 * 6 /3 assegna 10 a x. Per alterare l'ordine di esecuzione, è necessario introdurre le parentesi Buona programmazione: usare sempre le parentesi per esplicitare le precedenze

Fabio Scotti – Università degli Studi di Milano 30 Operatori relazionali Sono utilizzati per confrontare espressioni Le espressioni relazionali possono essere false (0) o vere (1) Operatore Descrizione Esempi == Confronto di uguaglianza x == y > Maggiore di x > y < Minore di x < y >= Maggiore o uguale di x >= y <= Minore o uguale di y <= x != Diverso (x è diverso da y?) x != y L’uso tipico è nelle istruzioni condizionali come if e while, ma si possono usare anche: – x = (4==4)+(2>3) equivalente a: x =

Fabio Scotti – Università degli Studi di Milano 31 Operatori logici (1) Sono utilizzati per manipolare i valori Booleani, vero o falso Operatore Descrizione Esempi ! Not logico !x && And logico x && y || Or logico x || y Nota bene: –OR è || e non | –AND è && e non &

Fabio Scotti – Università degli Studi di Milano 32 Operatori logici (2) Operatore di negazione: !espr – ritorna 0 se espr ritorna un valore diverso da 0 – ritorna 1 se espr ritorna il valore uguale a 0 Operatore di AND: espr1 && espr2 Valuta espr1: –se espr1 e' falsa, ritorna 0 senza valutare espr2 –se espr1 e' vera, valuta espr2: Se espr2 e' falsa ritorna 0 altrimenti ritorna 1. Ovvero ritorna espr2 Operatore di OR: espr1 || espr2 Valuta espr1: –se espr1 e' vera, ritorna 1 senza valutare espr2 –se espr1 e' falsa, valuta espr2: Se espr2 e' vera ritorna 1 altrimenti ritorna 0. Ovvero ritorna espr2

Fabio Scotti – Università degli Studi di Milano 33 Operatori bit a bit Operatori che lavorano sui singoli bit delle celle di memoria: – ~ Operatore complemento ad 1 – & Operatore and bit a bit – | Operatore or (inclusivo) bit a bit – ^ Operatore or esclusivo (ex-or) bit a bit – << Operatore shift a sinistra – >> Operatore shift a destra Per semplicità di trattazione, consideriamo gli interi come costituiti da 8 bit, anziché 16 o 32 bit come avviene in realtà sugli elaboratori

Fabio Scotti – Università degli Studi di Milano 34 Operatore ~ ~espressione ritorna il complemento ad 1 del valore tornato da espressione. Il complemento ad 1 consiste nel cambio di ciascun bit con il suo complemento: –ogni bit posto ad 1 viene cambiato a 0 –ogni bit posto a 0 viene cambiato ad 1 Esempio: int a = 10; // rappresentazione binaria (8 bit): int c; c = ~a; // rappresentazione binaria di c: // in rappresentazione decimale: 235

Fabio Scotti – Università degli Studi di Milano 35 Operatore & espr1 & espr2 ritorna il valore dell‘AND effettuato bit a bit sui valori ritornati dalle 2 espressioni Esempio: int a=10; //rappresentazione binaria (8 bit): int b=12; //rappresentazione binaria (8 bit): int c; c = a&b; /* a * b * * c = a&b */ la variabile c contiene il valore 8

Fabio Scotti – Università degli Studi di Milano 36 Operatore | espr1 | espr2 ritorna il valore dell‘OR effettuato bit a bit sui valori ritornati dalle 2 espressioni Esempio: int a=10; //rappresentazione binaria (8 bit): int b=12; //rappresentazione binaria (8 bit): int c; c = a|b; /* a * b * * c = a|b */ la variabile c contiene il valore 14

Fabio Scotti – Università degli Studi di Milano 37 Operatore ^ espr1 ^ espr2 ritorna il valore dell‘EX-OR effettuato bit a bit sui valori ritornati dalle 2 espressioni Esempio: int a=10; //rappresentazione binaria (8 bit): int b=12; //rappresentazione binaria (8 bit): int c; c = a^b; /* a * b * * c = a^b */ la variabile c contiene il valore 6

Fabio Scotti – Università degli Studi di Milano 38 Operatore << espr1 << espr2 ritorna il valore della traslazione a sinistra di espr2 sui bit del valore ritornato da espr1 I nuovi bit che entrano a destra sono posti a 0 Esempio: int a=10; //rappresentazione binaria (8 bit): int b=2; int c; c = a<<b; // shift a sinistra di 2 bit // c = ovvero c = 40 Equivale a moltiplicare espr1 per 2 espr2 // c = a * 2 b = 10 * 2 2 = 40

Fabio Scotti – Università degli Studi di Milano 39 Operatore >> espr1 >> espr2 ritorna il valore della traslazione a destra di espr2 sui bit del valore ritornato da espr1 I nuovi bit che entrano a sinistra possono dipendere dall'architettura dell'elaboratore e/o dalla implementazione del compilatore. –Non e' garantito che siano sempre posti a 0 –Per evitare ciò è bene assicurarsi che il valore ritornato da espr1 sia di tipo unsigned Esempio: unsigned int a=10; //rappresentazione binaria: int b=2; int c; c = a>>b; // shift a destra di 2 bit: = 2