Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1

Documenti analoghi
Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1

Esercizio 1" input tre numeri interi e stampi a video la loro somma e la media. n Realizzare un programma che legga da. Lab03 2

Lab 04 Programmazione Strutturata"

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media.

Lab 03 Istruzioni Prima Parte"

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T1. Lab 03 Istruzioni. Lab03 1

Fondamenti di Informatica e Laboratorio T-AB e Fondamenti di Informatica T1 Ingegneria Elettronica e Telecomunicazioni e Ingegneria dell Automazione

Esercizio 1. Esercizio 2

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 04 Input/Output

scanf: STRINGA DI FORMATO

Esercizio 1. Esercizio 1 - Soluzione

Lab 04 Istruzioni, cicli e array"

Alcuni esercizi. 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli

Lab 03 Scanf e tempo di vita delle variabili

INPUT/OUTPUT. L'immissione dei dati di un programma e l uscita dei suoi risultati avvengono attraverso operazioni di lettura e scrittura

do { printf("inserisci due numeri reali:"); scanf("%f %f", &a, &b);

do { printf("inserisci due numeri reali:"); scanf("%f %f", &a, &b); while(b!=0 && a/b<0);

L'immissione dei dati di un programma e l uscita dei suoi risultati avvengono attraverso operazioni di lettura e scrittura

Lab 04 (parte A) Programmazione Strutturata

Lab 04 Programmazione Strutturata

Alcuni esercizi. 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1 Modulo 2

VT = { +, -, *, /, (, ), 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 } VN = {<E>, <T>, <F>, <num>, <cifra>, <cifra-non-nulla> }

Parte Input e output in linguaggio i C. 3. Programmazione strutturata 1 (if, switch, comunque segnalare dei warning

ESERCIZI CICLI. Σ Σ j

Espressioni semplici e condizionali

2 Operatori matematici e costrutto if

LABORATORIO di INFORMATICA

Laboratorio di Informatica I

Lab 04 Istruzioni, cicli e array"

Esempi comparati while, do...while

Strutture di Controllo Iterative: Istruzioni While e Do

Informatica A (per gestionali) A.A. 2004/2005. Esercizi C. Strutture di controllo

ESEMPIO: le variabili LETTURA/SCRITTURA DI VARIABILI. Specifica Leggere da tastiera un intero, un carattere, un float e un double. Stamparli a video.

Laboratorio 26/09/2000

Fondamenti di informatica T-1 (A K) Esercitazione 6: Eclipse

Laboratorio di informatica Ingegneria meccanica

Fondamenti di Informatica L-A

Ingresso ed Uscita in C. Informatica 1 / 15

del Linguaggio C Istruzioni di iterazione

Input/Output di numeri

Introduzione alla programmazione in C

Esercitazione 2. Espressioni booleane Il comando if-else

Strutture di Controllo Iterative: Istruzione FOR

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

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

Strutture di Controllo Iterative: Istruzione FOR

SECONDA ESPERIENZA DI LABORATORIO. Programmazione con controllo di flusso IF e WHILE

1 Operatori matematici e costrutto if

2 Operatori matematici e costrutto if

Fondamenti di Informatica T-1

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

2 Operatori matematici e costrutto if

Nuovi tipi di dato e. Alessandra Giordani Lunedì 26 marzo

Fondamenti di Informatica T-1 Modulo 2

Ingresso ed Uscita in C. Luca Abeni

Laboratorio di informatica Ingegneria meccanica

Esempio: quanto mi piace questo corso! qufuafantofo mifi pifiafacefe qufuefestofo coforsofo!

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

INFORMATICA. Strutture iterative

Esercizi in Python. Docente: Domenico Daniele Bloisi

Esercitazione. Esercizio 1 Scrivere un programma che calcoli e visualizzi la somma degli interi pari da 2 a 1000 (estremi compresi)

Espressioni booleane. Esempio: temperatura <= 0 velocita > velocita max

PROGRAMMAZIONE: Le strutture di controllo

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while)

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

HOMEWORKS. in modo che il programma stampi N ripetizioni della stringa HelloWorld (su righe diverse), con N inserito dall utente.

Esercizi Programmazione I

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

Input/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari

Come va usato il codice dei caratteri

Esercizio 1 - cicli. Esercizio 1 cicli - Soluzione

L AMBIENTE CODE BLOCKS E L IO

Struttura dei programmi C

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

ESERCIZI DI PROGRAMMAZIONE DA SVOLGERE INDIVIDUALMENTE - parte 1 -

Espressione di chiamata di funzione

Input / Output, Espressioni Condizionali e Cicli

Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab 06 Array" Lab06 1

PROGRAMMAZIONE: La selezione

PROGRAMMAZIONE: ESERCITAZIONE N. 6

IL COSTRUTTO ITERAZIONE

Istruzioni di Controllo

Università degli Studi di Verona. Esercizi. Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie

Università degli Studi di Milano

Fondamenti di Informatica. Ingegneria elettronica

Tutorato Elementi di Informatica 2018

IL COSTRUTTO ITERAZIONE 2

Alcuni Soluzioni. Fornire la specifica di un algoritmo risolutivo utilizzando lo pseudocodice visto a lezione.

Transcript:

Fondamenti di Informatica T1 Lab 03 Istruzioni Lab03 1

Esercizio 1 Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media. Lab03 2

scanf: STRINGA DI FORMATO #include <stdio.h> main() { int intero1, intero2; float reale1; char car1, car2; } scanf("%d%d",&intero1,&intero2); printf("%d,%d",intero1,intero2); Lab03 3

scanf: STRINGA DI FORMATO scanf("%d%d",&intero1,&intero2); Inserire due interi separati da uno o più spazi: 12 35 12 35 Lab03 4

scanf: STRINGA DI FORMATO scanf("%d,%d",&intero1,&intero2); Inserire due interi separati da una (e una sola) virgola (eventuali spazi sono scartati): 12,35 12 35 12, 35 Lab03 5

Regole: scanf: STRINGA DI FORMATO la stringa di formato descrive esattamente quello che deve esserci in input lo spazio bianco viene considerato un separatore e viene scartato Lab03 6

Però... Lo spazio bianco e a tutti gli effetti un carattere quindi nella lettura di caratteri scanf("%d%c%c",&intero1,&car1,&car2); printf("%d,%c,%c",intero1, car1,car2); 12 A B 12,,A La scanf ha preso lo spazio come se fosse il carattere inserito! Lab03 7

Usare un separatore (anche lo spazio stesso) spazio Una soluzione scanf("%d %c %c",&intero1,&car1,&car2); printf("%d,%c,%c",intero1, car1,car2); 12 A B 12,A,B Lab03 8

Un altra trappola printf("inserire un numero reale: "); scanf("%f",&reale1); printf("\ninserire un carattere: "); scanf("%c",&car1); printf("\nletti: %f,%c",reale1, car1); Questo frammento di programma sembra corretto... Lab03 9

...ma il risultato e questo: Un altra trappola Inserire un numero reale: 12.4 Inserire un carattere: Letti: 12.400000, Lab03 10

Motivo L' I/O e bufferizzato: i caratteri letti da tastiera sono memorizzati in un buffer. In architetture Windows, il tasto di INVIO corrisponde a 2 (DUE!) caratteri (CR LF): il primo (codice ASCII 13) è interpretato come separatore, ma il secondo (codice ASCII 10) rimane nel buffer ed è preso come carattere inserito dall utente. Lab03 11

Una soluzione Leggere il carattere "spurio" printf("inserire un numero reale: "); scanf("%f",&reale1); scanf("%*c"); /* letto e buttato via */ printf("\ninserire un carattere: "); scanf("%c",&car1); printf("\nletti: %f,%c",reale1, car1); Lab03 12

Vuotare il buffer: Una Seconda Soluzione printf("inserire un numero reale: "); scanf("%f",&reale1); fflush(stdin); /* Si vuota il buffer */ printf("\ninserire un carattere: "); scanf("%c",&car1); printf("\nletti: %f,%c",reale1, car1); Lab03 13

Precisazione Questo problema si verifica solo con la lettura di caratteri. Negli altri casi il doppio carattere nel buffer e considerato come sequenza di separatori e scartato. Lab03 14

Esercizio 2 Realizzare un programma che legga da input tre caratteri consecutivi e ne stampi il valore a video (echo) Lab03 15

Valutazione in cortocircuito (1) In C, le espressioni booleane sono valutate in cortocircuito (shortcut evaluation) Appena è possibile determinare il valore logico dell espressione, si salta la valutazione degli altri operandi Esempio: lettura ciclica di due numeri reali si esce dal ciclo quando è impossibile effettuare la divisione di essi, oppure il risultato della divisione è negativo Lab03 16

Valutazione in cortocircuito (2) float a, b; do { printf("inserisci due numeri reali:"); scanf("%f %f", &a, &b); } while((b!= 0) && (a/b < 0)); Senza la valutazione in cortocircuito, in caso di divisore==0 si effettuerebbe comunque la divisione (errore concettuale) Lab03 17

Esercizio 3 Scrivere, compilare ed eseguire il seguente programma: int main() { int a=5, b=5, c=5; if ((a>0) (a=a+1)) printf( %d, a); if ((b>0) && (b=b+1)) printf( %d, b); if ((c>0) && (c=c-5)) printf( %d, c); } Cosa viene stampato a video? Quanto valgono le variabili? Lab03 18

Esercizio 3 - Soluzione int main() { int a=5, b=5, c=5; if ((a>0) (a=a+1)) printf( %d, a); if ((b>0) && (b=b+1)) printf( %d, b); if ((c>0) && (c=c-5)) printf( %d, c); } 5 6 Nulla Lab03 19

Esercizio 3B Provate a modificare il programma precedente in questo modo: int main() { int a=5, b=5, c=5; if ((a>0) (a=a+1)) printf( %d, a); if ((b>0) && (b=b+1)) printf( %d, b); if ((c>0) && (c=c-6)) printf( %d, c); } Come cambiano le variabili stampate a video? Lab03 20

Esercizio 3B - Soluzione int main() { int a=5, b=5, c=5; if ((a>0) (a=a+1)) printf( %d, a); if ((b>0) && (b=b+1)) printf( %d, b); if ((c>0) && (c=c-6)) printf( %d, c); } 5 6 1 Lab03 21

Stampa di voti Esercizio 4 - switch Realizzare un programma che legge da input un voto (carattere tra A ed E ) e ne stampa il significato A Ottimo B Buono C Sufficiente D Insufficiente E Gravemente Insufficiente Lab03 22

Esercizio 5a Realizzare un programma che legga da input un carattere dell alfabeto e stampi a video il carattere stesso ed il suo valore ASCII Il programma deve controllare che il carattere inserito sia compreso tra a e z o tra A e Z (in caso contrario si stampi un messaggio di errore) Lab03 23

Esercizio 5b Realizzare un programma che legga da input un carattere dell alfabeto e stampi a video il carattere stesso ed il suo valore ASCII Il programma deve controllare che il carattere inserito sia compreso tra a e z o tra A e Z (in caso contrario si stampi un messaggio di errore) Dopo la stampa, il programma deve continuare a chiedere nuovi caratteri, finché l utente non inserisce il carattere corrispondente al numero zero ( 0 ): in tal caso il programma termina. Lab03 24

Si realizzi un programma che, partendo da una base a ed un limite n, calcoli la seguente funzione: n Σ a i i=0 Esercizio 6 Cicli a = 4, n = 5 somma = 1365 a = 5, n = 3 somma = 156 a = 3, n = 8 somma = 9841 a = 12, n = 2 somma = 157 Realizzare il programma in due modi diversi: 1.Utilizzando due cicli (uno per la sommatoria, ed uno per la potenza) 2.Utilizzando un ciclo solo Lab03 25

Esercizio 7 Si realizzi un programma che legga un intero N da tastiera, e stampi a video il risultato della seguente sommatoria: N ( ) i 1 i = 0 2 * i + 1 4 N = 0 somma = 4 N = 1 somma = 2,666 N = 2 somma = 3,4666 N = 3 somma = 2,8952 Una volta calcolato e stampato il valore a video, il programma deve chiedere un nuovo numero all utente e ripetere il calcolo. Il programma deve terminare solo qualora l utente inserisca un valore negativo. Lab03 26

Esercizio 8 Stabilire il valore assoluto e la parte intera di un numero reale Realizzare un programma che legga da input un numero reale, e stampi a video: 1. Il valore assoluto 2. Il valore assoluto della sua parte intera Lab03 27

Esercizio 9 - Cicli Dato un numero intero a, definito tramite una variabile, scrivere un programma che calcoli il valore della seguente espressione: a i Σ Σ j i=1 j=1 a = 1 somma = 1 a = 2 somma = 1 + 1 + 2 = 4 a = 3 somma = 1 + 1 + 2 + 1 + 2 + 3 = 10 a = 4 somma = 1 + 1 + 2 + 1 + 2 + 3 + 1 + 2 + 3 + 4 = 20 Lab03 28

Esercizio 10 if innestati Stampa di caratteri in ordine alfabetico Realizzare un programma che legge da input tre caratteri, e li stampa in ordine alfabetico Utilizzando l istruzione if Per determinare il secondo carattere, devo per forza utilizzare degli if innestati Lab03 29

Triangoli Esercizio 11 if innestati Si scriva un programma, in linguaggio C, che legga da input le lunghezze dei lati di un triangolo e determini se il triangolo è equilatero, isoscele o scaleno Lab03 30

Esercizio 12 - switch Operazioni aritmetiche Realizzare un programma che, presi in input 2 operandi reali e un operatore (+, -, *, /), esegue l operazione stampandone il risultato Nel caso in cui l operatore sia errato o l operazione non eseguibile, si stampi undefined Lab03 31

Sequenze di 0 e 1 Esercizio 13 - cicli Realizzare un programma che prende in input una sequenza di caratteri 0 e 1 e conta la lunghezza della più lunga sotto-sequenza di 0 di fila L inserimento della sequenza termina quando si inserisce un carattere diverso da 0 e 1 A quel punto, si stampa a video il valore trovato Lab03 32

Sequenze di cifre Esercizio 14 - cicli Realizzare un programma che prende in input una sequenza di cifre (tra 1 e 9) e calcola la somma massima fra le sottosequenze di cifre non decrescente Il programma termina quando viene inserito lo 0 Esempio: 2 2 4 5 3 9 3 1 5 0 13 12 3 6 Lab03 33

Esercizio 14 - cicli Ci mettiamo nell ipotesi di non dover controllare la correttezza del carattere letto Come effettuo il passaggio carattere-cifra numerica? Quanto fa 8-0 (considerato come intero)? Di che valori devo tenere traccia? Devo accorgermi di quando il valore appena letto è più piccolo del precedente In tal caso, devo confrontare la somma corrente con quella massima, e ripartire con una nuova somma Lab03 34

Esercizio 15 Progettare un algoritmo che legga da terminale una sequenza di interi positivi e negativi terminati dal valore 0 (uno su ogni linea) e stampi il prodotto degli interi positivi e la somma dei negativi. Codificare il programma in C Procedere alle operazioni di Compile, Link e correggere eventuali errori. Seguire l'esecuzione del programma con l'uso del debugger. Lab03 35

Esercizio 16 Progettare e Codificare in C un programma che permetta di Chiedere all utente quanti numeri vuole inserire Leggere i numeri inseriti dall utente e calcolare la somma dei fattoriali Esempio: L utente vuole inserire 3 numeri: 4, 3, 6 Il programma deve calcolare 4! + 3! + 6! = 750 Lab03 36

Esercizio 17 Progettare un algoritmo che legga da terminale una sequenza di interi positivi e negativi terminati dal valore 0 (uno su ogni linea) e stampi la media degli interi positivi. Codificare il programma in C e scriverlo in voto.c Procedere alle operazioni di Compile, Link e correggere eventuali errori. Seguire l'esecuzione del programma con l'uso del debugger. Lab03 37

Esercizio 18 Progettare e Codificare in C un programma che permetta di controllare i dati di input immessi dall utente. In particolare se l utente inserisce un intero N compreso tra 1 e 10, il programma deve stampare a video il valore N N Se l intero N e compreso tra 11 e 20, il programma deve stampare a video la somma 1 + 2 + 3 + + N N Σ j j=1 Altrimenti deve dare un segnale di errore. Lab03 38

Esercizio 19 Progettare e Codificare in C un programma che permetta di stabilire la stagione corrispondente al mese inserito come intero dall utente. Esempio: se l utente digita 1 (Gennaio) il programma deve stampare Inverno. Qualora il mese sia Marzo, Giugno, Settembre e Dicembre, tutti mesi a cavallo di due stagioni, si richieda all utente di specificare anche il giorno. Se il giorno e compreso tra 1 e 20 si considera la stagione precedente altrimenti quella successiva. Lab03 39

Esercizio 20 Calcolo degli Interessi Bancari Si progetti in C un programma che legge un intero, rappresentante un ammontare di euro; di seguito il programma deve leggere un tasso d interesse (in percentuale), ed un numero di anni. Il programma deve stampare, in uscita, per ogni anno, come l ammontare cresce con gli interessi. Si ricordi che l interesse si calcola con la seguente formula: r Cfin Cin = * 1 + 100 Dove Cfin è il capitale finale, Cin è quello iniziale, r è l interesse, e N rappresenta il numero di anni in cui si applicano gli interessi. N Continua > Lab03 40

Esercizio 20 Supponiamo che il capitale iniziale sia di 1000, con un tasso del 3%, per un periodo di 3 anni. L output stampato deve avere all incirca questo aspetto: Capitale iniziale: 1000 Dopo 1 anno: 1030 Dopo 2 anni: 1060.90 Dopo 3 anni: 1092.72 Lab03 41