Esercizi su. Istruzioni di scelta multipla. Overflow

Documenti analoghi
Riprendiamo l esercizio calcolatrice

Mini-dispensa sui puntatori in C

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di informatica Ingegneria meccanica

Struttura dei programmi C

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

IL PRIMO PROGRAMMA IN C

Lettura da tastiera e scrittura su monitor

Rappresentazione binaria delle variabili (int e char)

Lezione 2. Introduzione al linguaggio C/C++ Tipi di dato e numeri interi Variabili e costanti con nome Struttura di un programma

prova.c #include <stdio.h> char funzione(char); codice oggetto del main()

Programmazione I Paolo Valente /2017. Lezione 6. Notazione posizionale

Esercitazione 6. Array

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

Primi passi col linguaggio C

Esercizi Programmazione I

Indovina la lettera...

Esercitazione 3. Espressioni booleane I comandi if-else e while

Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Fondamenti di Informatica

Lezione 2. Introduzione al linguaggio C/C++ Tipi di dato e numeri interi Variabili e costanti con nome Struttura di un programma

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

Funzioni, Stack e Visibilità delle Variabili in C

Corso di Fondamenti di Informatica Linguaggi di Programmazione

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011

Laboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011. Prof. Raffaele Nicolussi

Caratteri e stringhe

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Linguaggio C - sezione dichiarativa: costanti e variabili

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Introduzione a. Funzioni di Ingresso e Uscita. Compilazione

I vettori in C. Vettori. Definizione di vettori in C. int dato[10] ; int. Numero di elementi. Tipo di dato base. Nome del vettore.

Definizione di metodi in Java

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Debug di un programma

Dati aggregati. Violetta Lonati

Introduzione ai puntatori in C Definizione

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 21 Gennaio 1998

Elementi di C++ di base

Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

TIPI PRIMITIVI: LIMITI

La scrittura di un programma Modellizzazione del programma Scrittura del codice Esercizi. Sperimentazioni I. Alberto Garfagnini, Marco Mazzocco

Classificazione Tipi semplici predefiniti Definizione di nuovi tipi Tipi strutturati

Il linguaggio C. Notate che...

4 GLI ARRAY E LE STRINGHE

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

Informatica 1. Prova di recupero 21 Settembre 2001

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.

Files in C++ Fondamenti di Informatica. R. Basili. a.a

L Allocazione Dinamica della Memoria

Lab 02 Tipi semplici in C

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Esempio di prova scritta di Fondamenti di Informatica

Laboratorio di programmazione

Programmazione in Java (I modulo)

LA CODIFICA DELL INFORMAZIONE. Introduzione ai sistemi informatici D. Sciuto, G. Buonanno, L. Mari, McGraw-Hill Cap.2

Cap. 2 - Rappresentazione in base 2 dei numeri interi

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 10 Novembre 2009 COGNOME E NOME RIGA COLONNA MATRICOLA

Programmazione orientata agli oggetti: le classi

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente

Tipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.

Sintassi: Per la dichiarazione di variabili dei tipi fondamentali:

Spazio riservato ai docenti

Linguaggio C: introduzione

Puntatori in C Lucidi della Pof.ssa Pazienza

FILE BINARI FILE BINARI

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Linguaggio C I puntatori

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Introduzione alla programmazione. Walter Didimo

Introduzione al C. Esercitazione 6. Raffaele Nicolussi. Corso di Fondamenti di Informatica Ingegneria Clinica

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Esiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Esercitazione 4. Comandi iterativi for, while, do-while

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Lezione 11. Tipo derivato riferimento Passaggio per riferimento Parametri di ingresso e/o uscita

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Proprietà delle Classi e degli Oggetti in Java

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 10 Novembre 2009 COGNOME E NOME RIGA COLONNA MATRICOLA

FILE BINARI FILE BINARI

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

LINGUAGGI DI ALTO LIVELLO

Laboratorio di Informatica

Architettura dei computer

Esercizi per il recupero del debito formativo:

Programmazione I - Laboratorio

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin

Linguaggi di Programmazione

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Introduzione alla programmazione in C(++)

Lezione 6. Visibilità degli identificatori e tempo di vita degli oggetti

Calcolatori Elettronici Lezione A4 Programmazione a Moduli

Transcript:

Esercizi su Istruzioni di scelta multipla Overflow

2 Scelta multipla

3 Esercizio 1/2 Scrivere un programma che chieda all'utente di scegliere tra varie opzioni e stampi il nome dell'opzione scelta Esempio 1: 1 Opzione A 2 Opzione B 3 Opzione C 4 Opzione D Scegli un'opzione: 2 Hai scelto l'opzione B

4 Esercizio 2/2 Esempio 2: 1 Opzione A 2 Opzione B 3 Opzione C 4 Opzione D Scegli un opzione: -1 Scelta non valida Soluzione in: primo_menu.cc

Esercizio 1/3 Scrivere un programma che chieda all'utente di scegliere tra le seguenti opzioni (di cui una ripetuta due volte) e stampi il nome dell'opzione scelta 1 Opzione A 3 Opzione B 4 Opzione C 5 Opzione C 6 Opzione D Scegli un'opzione: 4 Hai scelto l'opzione C 5

6 Esercizio 2/3 Esempio 2: 1 Opzione A 3 Opzione B 4 Opzione C 5 Opzione C 6 Opzione D Scegli un'opzione: 2 Scelta non valida

7 Esercizio 3/3 Non replicate il codice per la stampa del messaggi nei casi 4 e 5 Soluzione in: menu_multiplo.cc

8 Esercizio per casa: calcolatrice Testo e soluzione in calcolatrice.cc

9 Fasi di sviluppo

10 Azioni ed attori Per descrivere il comportamento di un programma o quello che accade nelle fasi del suo sviluppo si fa riferimento spesso alle azioni che possono essere compiute da uno dei seguenti attori: il programmatore,, il compilatore,, il programma stesso o l'utilizzatore del programma (utente( utente)

I tempi di un programma 1/3 Inoltre tali azioni possono essere compiute in tre diversi momenti dello sviluppo del programma: 1)A tempo di scrittura del programma, da parte del programmatore Es.: il valore iniziale di una variabile o di una costante viene definito a tempo di scrittura del programma da parte del programmatore mediante una inizializzazione 11

12 I tempi di un programma 2/3 2)A tempo di compilazione del programma, da parte del compilatore Es.: un errore di sintassi viene comunicato dal compilatore appunto durante la compilazione del programma

13 I tempi di un programma 3/3 3)A tempo di esecuzione del programma, da parte dell'utente o del programma stesso Es.: (su richiesta del programma) l'utente fornisce il valore di una variabile mentre il programma stesso è in esecuzione

14 http://www.linuxday.it/ http://www.conoscerelinux.net/members/webmaster/pub/linuxday-2010/

15 Dimensioni dei tipi di dato ed Overflow

16 Operatore sizeof Restituisce la dimensione di un'espressione o di un tipo sizeof (espressione) Numero di byte (char( char) ) necessari per memorizzare i possibili valori dell'espressione sizeof (nome_tipo) Numero di byte (char( char) ) necessari per memorizzare un oggetto del tipo passato come parametro

17 Esercizio: dimensione int 1/2 Scrivere un programma che stampi sullo schermo la dimensione in byte di un oggetto di tipo int sulla macchina su cui è eseguito

18 Esercizio: dimensione int 2/2 int main() { } cout<<sizeof(int)<<endl ; return 0 ;

Valori possibili per il tipo int Tipicamente un oggetto di tipo int memorizzato su n byte, ossia 8*n bit, può contenere valori interi nell'intervallo [-2^(8*n 1), 2^(8*n 1) - 1] Quindi, per esempio su 4 byte si ha [-2^31, 2^31 1] = [-2147483648, 2147483647] Lo standard prevede la disponibilità di costanti o funzioni per conoscere i limiti per ogni tipo di dato (che vedremo) 19

Dimensioni tipiche In generale, le dimensioni dei tipi di dato dipendono dal data model utilizzato dal compilatore. I tipici data model prevedono: Su macchine a 32 bit int su 4 byte Su macchine a 64 bit int quasi sempre su 4 byte sono, per esempio, su 4 byte nel caso del gcc sotto Linux 20

Overflow 21

22 Esercizio 1/3 Scrivere un programma che definisce una variabile i di tipo int,, la inizializza ad un valore qualsiasi e stampa il valore di i incrementa i di una unita' stampa il nuovo valore di i

23 Esercizio 2/3 main() { int i = 23 ; cout<<i<<endl ; i++ ; cout<<i<<endl ; }

24 Esercizio 3/3 Modificare il programma affinché inizializzi i al seguente valore: 2147483647 Quale sarà l'output del programma? Eseguirlo per controllare

25 Overflow 1/3 Si ha quando il valore di una espressione è troppo grande (in modulo) per essere contenuto nel tipo di dato del risultato, oppure nell'oggetto a cui si vuole assegnare tale valore In tal caso, il risultato o il nuovo valore dell'oggetto sarà in generale logicamente non correlato con l'operazione effettuata E potrà variare da sistema a sistema

26 Overflow 2/3 E' stato segnalato automaticamente qualche errore durante l'esecuzione del precedente programma? Lo standard non prescrive segnalazioni d'errore di overflow a tempo di esecuzione Quello che succede è che le operazioni sono effettuate senza controllare se il risultato sarà corretto

27 Overflow 3/3 Una conoscenza approfondita della rappresentazione interna del tipo di dato permette di prevedere il valore risultante anche in caso di overflow Ma, come si è detto, tale valore può variare da sistema a sistema Non vedremo la rappresentazione dei numeri in memoria e, per semplicità, in tutti i programmi che faremo in questo corso, considereremo come casuale il risultato di una operazione in caso di overflow

Esercizio 1/3 Scrivere un programma che, letti due numeri interi in ingresso, stampi la loro somma sia se c'è stato overflow sia se non c'è stato, ma, nel caso ci sia stato, avvisi che c'è stato appunto un overflow Esempio: Inserisci i due numeri da sommare: 2147483647 78 2147483647 + 78 = -2147483571 Attenzione: il risultato non è attendibile perché c'e' stato overflow 28

Esercizio 2/3 Attenzione al fatto che l'utente può inserire anche numeri negativi!!! Magari svolgere l'esercizio prima solo per numeri positivi Dall'analisi analisi del problema ci accorgiamo che in caso di overflow, una volta effettuata la somma il risultato è casuale, per cui tale valore non si può utilizzare per nessun tipo di ragionamento Soluzione in somma_overflow.cc Guardare l'idea suggerita nella prossima slide solo dopo aver provato da soli 29

Suggerimenti Suggerimento generale: per leggibilità memorizzare in una costante MAXINT l'intero più grande rappresentabile (scoperto per esempio con l'esercizio precedente) Idea Riflettere sulle seguenti domande 1) e vero che la somma di due numeri positivi A e B di tipo int non supera MAXINT se e solo se B <= MAXINT A? 2) e vero che MAXINT A non genera mai overflow se A è un numero positivo di tipo int? 30

31 Esercizio per casa Scrivere un programma che, letti due numeri interi in ingresso, stampi il risultato del prodotto e dica se tale prodotto ha generato overflow oppure no Soluzione non fornita

32 Mini-prova d'esame traccia_mini-scritto_18ott10.pdf Soluzione in mini-scritto_18ott10.pdf