DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 1 – Info B Marco D. Santambrogio – [email protected] Riccardo Cattaneo – [email protected] Ver. aggiornata al 9 Agosto 2013 Lab 1: Agenda DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Informazioni sui laboratori • Benvenuti nel fantastico mondo del C • Esercizi Lab1 2 Lab 1: Agenda DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Informazioni sui laboratori • Benvenuti nel fantastico mondo del C • Esercizi Lab1 3 Calendario dei Labs DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • 8 Ottobre 2012, 3pm-5pm, @ LM1 Installation Party: strumenti di sviluppo per il corso di Info B • 22 Ottobre 2012, 3pm-7pm, @ L13 Primi programmi in C: Strutture di controllo e cicli • 29 Ottobre 2012, 3pm-7pm, @ LM1 C: array e matrici 4 Calendario dei Labs DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • 3 Dicembre 2012, 3pm-6pm, @ L13 MATLAB: ambiente di sviluppo e primi codici • 17 Dicembre 2012, 3pm-7pm, @ LM1 MATLAB: strutture di controllo, tipi di dato strutturato, e vettori • 14 Gennaio 2013, 3pm-7pm, @ LM1 MATLAB: funzioni ricorsive, funzioni di ordine superiore, grafici 2D e 3D 5 Lab 1: Agenda DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Informazioni sui laboratori • Benvenuti nel fantastico mondo del C • Esercizi Lab1 6 Premessa: int vs. void main() DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Lo standard (ANSI C99) prevede l’uso di int main() con l’istruzione return 0; al termine del programma • L’uso di void main() è accettato da quasi tutti i compilatori, fatto salvo la segnalazione di un warning. 7 Premessa: int vs. void main() DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Solo con alcuni compilatori viene segnalato un errore, e il programma non viene compilato • In tal caso void main() va sostituito con int main(), mettendo l’istruzione return 0; al termine del programma 8 Premessa: int vs. void main() DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 9 Il primo programma: ciao mondo DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 10 Ciao Mondo: stdio.h DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Come prima cosa, dobbiamo includere le librerie necessarie al funzionamento del nostro programma. • La libreria stdio.h Standard Input Output Permette di utilizzare I comandi necessari per richiedere dati o visualizzare dei messaggi. 11 Ciao Mondo: main DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Tutti i programmi in C contengono un elemento principale: Il main • main contiene le istruzioni che verranno eseguite all’avvio del nostro programma 12 Ciao Mondo: main DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • La sequenza di istruzioni che caratterizzano il main sono racchiuse tra parentesi graffe • Tale blocco di istruzioni e’ anche noto come corpo • Ogni istruzione deve essere seguita da un punto e virgola 13 Ciao Mondo: printf DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 14 Ciao Mondo: printf DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Stampa a video il mesaggio “Ciao Mondo!” • printf e’ contenuta in stdio.h • Il messaggio da stampare e’ contenuto tra “” 15 Ciao Mondo: printf DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • return e' un comando che ci permette di comunicare con il sistema ospite • In questo caso viene utilizzato per comunicare lo stato di terminazione del programma • 0 indica una terminazione corretta del nostro programma 16 Input - Output DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • printf viene utiizzata per fornire un output del programma a video • scanf viene utilizzato per fornire degli input, e.g. da tastiera, al nostro programma 17 Tipi di dato in C DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • In C esistono diversi tipi di dato built-in, tra cui int: numeri interi float: numeri con virgola (singola precisione) double: numeri con virgola (doppia precisione) char: caratteri (sono interi che possono variare tra 0-255) • Inoltre il C fornisce anche la possibilità di definire dei nuovi tipi di dato 18 Mostra caratteri DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema Si scriva un programma che richieda l’inserimento di un carattere e lo mostri a video 19 Tipo carattere e codifica ASCII DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 20 Sommare “-32” DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 21 Un esempio di calcolo DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 22 HELP: errori sull’input DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 23 Lab 1: Agenda DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Informazioni sui laboratori • Benvenuti nel fantastico mondo del C • Esercizi Lab1 Warm Up • printf • Correggi errori Qualche cosa un pò più divertente • Inserimento di dati dall’utente • Verifica ingressi Altri exe… • MCD 24 Exe1: “printf” DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema Scrivere un programma in C che visuallizzi a video la seguente scritta: Informatica B - 2012/2013 Laboratorio 1 Studente: Nome Cognome Matricola: #mat 25 Exe1: “printf” DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Possibile soluzione 26 Exe2: Trova errori DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema 27 Debugger DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Questa è la barra del debugger. Iniziamo il debug premendo il primo tasto a sinistra (“Debug/Continue”). Per fermare l’esecuzione in certi punti, clicchiamo vicino al numero di riga con il tasto destro e scegliamo “Set breakpoint” (compare un pallino rosso, vedi riga 7 e 9) 28 Debugger DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Una volta partito il debug, possiamo scegliere varie opzioni. Noi useremo solo “Watches”, per vedere il contenuto delle variabili 29 Debugger DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE L’esecuzione si ferma alla riga 7. Nel riquadro in basso vediamo il valore della variabile “numero” prima che gli venga assegnato un valore 30 Debugger DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ora siamo fermi alla riga 9, il valore delle variabile “numero” è cambiato 31 Exe3: Inserimento dati DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema Richiedi all’utente la sua altezza in centrimentri e mostrala a video in metri • Pseudocodice 1.Scrivi “quanto sei alto?” 2.Leggi altezzacm 3.Altezzam = alteccacm/100 4.Scrivi “sei alto: altezzam” 32 Pseudocodice vs Codice C DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Pseudocodice 1. 2. 3. 4. Scrivi “quanto sei alto?” Leggi altezzacm Altezzam = alteccacm/100 Scrivi “sei alto: altezzam” 33 Un primo errore DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 34 Un secondo errore DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 35 Un terzo errore DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 36 Soluzione corretta DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 37 Vero e falso in C DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • In C non esiste un tipo di dato specifico per rappresentare i concetti vero e falso • Una condizione assume un valore intero pari a 0 se la condizione è falsa 1 se la condizione è vera • In generale, ogni valore diverso da zero è considerato vero ( 3 ) VERO ( 1 ) VERO ( a – a ) FALSO 38 Exe4: Gestione errori sull’input DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema Preso un carattere inserito da tastiera lo scrive a video in maiuscolo (e.g. a-->A) • Nota Per potervi applicare la trasformazione di nostro interesse Dobbiamo prima verificare che il dato sia coerente con quanto ci aspettiamo 39 Pseudocodice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Dati L’insieme dei caratteri ammissibili {a, b, c, …, z} 1. 2. 3. 4. Richiedere l’inserimento di un carattere Se carattere inserito corretto Allora stampa a video carattere-32 Altrimenti stampa a video un messaggio di errore 40 Maiuscolo: codice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 41 Maiuscolo: esecuzione DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 42 Gestione errori sull’input DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema Preso un dato inserito da tastiera Per potervi applicare la trasformazione di nostro interesse Dobbiamo prima verificare che il dato sia coerente con quanto ci aspettiamo • Soluzione Definire l’insieme dei caratteri validi Verificare l’appartenenza del carattere inserito, all’insieme dei caratterei validi 43 Pseudocodice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Dati L’insieme dei caratteri ammissibili {a, b, c, …, z} 1. 2. 3. 4. Richiedere l’inserimento di un carattere Se carattere inserito corretto Allora stampa a video carattere-32 Altrimenti stampa a video un messaggio di errore 44 Maiuscolo: codice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 45 Maiuscolo: esecuzione DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 46 Exe5: Massimo Comune Divisore DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Definizione Dicesi Massimo Comune Divisore (M.C.D.) il piu’ grande tra i divisori comuni a due o piu’ numeri • Esempi Dati A=12, B=15 • Divisori comuni: 1, 3 - MCD=3 Dati A=10, B=30 e C=20 • Divisori comuni: 1, 2, 5, 10 - MCD=10 47 MCD: pseudocodice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 1. 2. 3. 4. 5. Leggi A e B min= il minimo tra A e B tmp = 1 MCD = 1 Finche’ tmp < min 1. tmp = tmp + 1 2. Se tmp divide A e B 1. Allora MCD = tmp 6. Stampa MCD 48 MCD: codice DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Fonti per lo studio + Credits DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Fonti per lo studio Informatica arte e mestiere, S. Ceri, D. Mandrioli, L. Sbattella, McGrawHill • Capitolo 3 • Credits Emanuele Panigati https://sites.google.com/site/engpanigati/ 50