Introduzione alla programmazione in C

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

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

La codifica. dell informazione

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Introduzione al Linguaggio C

Introduzione a Visual Basic Lezione 2 Cicli e anomalie

La programmazione nel linguaggio C

Input/output in C e in C++

Gestione di files Motivazioni

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

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

Il calcolatore. Architettura di un calcolatore (Hardware)

Primi programmi in C

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

Linguaggio C: introduzione

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Il Modello di von Neumann (2) Prevede 3 entità logiche:

Il comando provoca il salvataggio dello stato e la terminazione dell esecuzione.

Fondamenti di Informatica Ingegneria Clinica Lezione 19/11/2009. Prof. Raffaele Nicolussi

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

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C

Gestione dei File. dischi nastri cd

MANUALE UTENTE PROCEDURA PLANET WEB INTERPRISE (II edizione)

CARATTERI E STRINGHE Caratteri e stringhe Funzioni della libreria standard I/O Funzioni della libreria di gestione delle stringhe

Alfabeto ed elementi lessicali del linguaggio C

Metodo alternativo per il calcolo delle divisioni.

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Programmazione Orientata agli Oggetti in Linguaggio Java

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

Esercizi di programmazione in C

Esercitazioni di Reti Logiche. Lezione 1 Rappresentazione dell'informazione. Zeynep KIZILTAN zkiziltan@deis.unibo.it

AE RZT QSO RKPT SQZC

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Procedura operativa per la gestione della funzione di formazione classi prime

DOTT. ING. LEONARDO RIGUTINI DIPARTIMENTO INGEGNERIA DELL INFORMAZIONE UNIVERSITÀ DI SIENA VIA ROMA SIENA UFF

Alcune regole di base per scrivere un programma in linguaggio C

1 Multipli di un numero

Introduzione al linguaggio C

Tipi di dato-prima parte

Sistemi Web per il turismo - lezione 3 -

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Le variabili. Olga Scotti

Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero

Introduzione alla programmazione in C

SQL Server Architettura Client-Server. SQL Server Introduzione all uso di SQL Server Dutto Riccardo.

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

FIRMA DIGITALE E CIFRATURA

Navigare in Internet Laboratorio di approfondimento la creazione di siti web e/o blog. Marco Torciani. (Seconda lezione) Unitre Pavia a.a.

Appunti di Informatica 1. Gianluca Rossi

PSC Doc Manuale d uso

CONTROLLO PRESTITI E INVIO SOLLECITI TRAMITE SOL

DESCRIZIONE CREAZIONE APP Si suddivide in 4 fasi di lavoro: 1. PIANIFICAZIONE; 2. PROGETTAZIONE; 3. SVILUPPO; 4. DISTRIBUZIONE.

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

SPORTELLO DIPENDENTE. - Personale amministrativo tecnico ausiliario (A.T.A.);

Linguaggio C. Fondamenti. Struttura di un programma.

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

puntatori Lab. Calc. AA 2007/08 1

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp KP Cap. 6 pp

Gestione dei file. Linguaggio ANSI C Input/Output - 13

IL LINGUAGGIO C++ Configurazione di Dev-C++

Caratteri e stringhe Esercizi risolti

Le quattro operazioni fondamentali

Esercitazione 7. Procedure e Funzioni

Il programma OCTAVE per l insegnamento dell algebra lineare nella Scuola Secondaria p. 1

PROCEDIMENTO DI COMPILAZIONE DELLA SCIA E DELL EVENTUALE INTERCALARE REQUISITI PER L AVVIO DELL ATTIVITA DI AGENTE E/O RAPPRESENTANTE DI COMMERCIO

1 Automi Cellulari (Rev )

Programmare. La programmazione. Linguaggi. Algoritmo

Laurea triennale - Comunicazione&DAMS - UNICAL. Dr. Marco Manna 1

PSICOMETRIA. Esercitazione n.1. C.d.L. Comunicazione e Psicologia a.a. 2012/13

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

Lab. di Sistemi Operativi - Esercitazione n 2 - a.a. 2012/2013

Java Native Interface Appunti

Gestione delle eccezioni in Java

CAPITOLO V. DATABASE: Il modello relazionale

Lettura e scrittura di file di dati input/output

RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di

COSTRUZIONE DI UN APPLICAZIONE

Breve riepilogo della puntata precedente:

L integrazione attraverso la conoscenza. La Repubblica, la Costituzione e l organizzazione dello Stato

Selezione per messaggio Sedex e Movpop

4 GLI ARRAY E LE STRINGHE

ESAME SCRITTO DI ELEMENTI DI INFORMATICA E PROGRAMMAZIONE. 27 Gennaio 2015

ESAME SCRITTO DI ELEMENTI DI INFORMATICA E PROGRAMMAZIONE. 9 Settembre 2015

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni

Ma cominciamo a vedere questo programma un pò più da vicino:

Modulo 2 Data Base - Modello Relazionale

Aggiorna. La Funzione Aggiorna Listino Aggiornare Listino Pr7 / Le connessioni / Listino METEL. Aggiorna Lis no. Aggiornamento del listino

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

Sistemi Operativi Esercizi Gestione Memoria

APRS CON KENWOOD TMD 710

La selezione binaria

Sistema Gestionale Avviso Maplab

EXCEL. Alfabetizzazione Informatica Prof. GIUSEPPE PATTI

Procedura tecnica di accreditamento dei Registrar

Liceo scientifico Pascal Manerbio Esercizi di matematica per le vacanze estive

La funzione Hash. Garanzia dell integrità dei dati e autenticazione dei messaggi

Transcript:

Introduzione alla programmazione in C Dipartimento di Informatica Università di Pisa Corso Informatica I - 2012/2013

Outline Introduzione alla compilazione C 1 Introduzione alla compilazione C 2

Ricapitolando... Errori/warning a tempo di compilazione Ma è giusto pensare che tutto vada bene solamente perché un programma compila senza errori? Approfondimento su printf ed esempi d uso

Problemi di esecuzione Eventuali errori durante l esecuzione del programma sono chiamati errori di esecuzione non necessariamente terminano l esecuzione del programma. sono quasi sempre molto più subdoli e difficili da individuare di quelli sintattici. Alcuni errori saranno palesi durante l esecuzione. Altri saranno errori logici, in cui tutto funziona anche se non come dovrebbe.

Errori a tempo di esecuzione (1) #include <stdio.h> int main(void) { int dividendo = 42; int divisore = 0; int risultato; risultato = dividendo / divisore; printf("il risultato e %d\n", risultato); return 0; } programma divisione.c cosa c è che non va?

Errori a tempo di esecuzione (2) -> gcc -Wall -pedantic divisione.c -o divisione ->./divisione Floating exception gli errori come la divisione per zero avvengono durante l esecuzione del programma e sono errori fatali, ovvero, provocano la terminazione immediata del programma

Errori a tempo di esecuzione (3) #include <stdio.h> int main(void) { int addendo1 = 44; int addendo2 = 2; int risultato; risultato = addendo1 - addendo2; printf("gli addendi sono %d e %d\n", addendo1, addendo2); printf("il risultato della somma e %d\n", risultato); return 0; } il programma si chiama somma.c E corretto?

Errori a tempo di esecuzione (4) ->./somma Gli addendi sono 44 e 2 Il risultato della somma e 42 Sembra ovvio vedere cosa c è di sbagliato. Ma questo tipo di errori è il più difficile da trovare e correggere. Spesso non ci accorgiamo nemmeno che c è un errore. Notate come scegliere nomi di variabili SIGNIFICATIVI aiuti a trovare il problema!

Errori a tempo di esecuzione (5) Vediamo uno dei classici errori con gli interi (errori di overflow/underflow): #include <stdio.h> #include <limits.h> int main(void) { int a; a=int_max; printf("int a (INT_MAX) =%d, int a (INT_MAX) + 1 =%d\n", a,a+1); return 0; } -> int a (INT_MAX) =2147483647, int a (INT_MAX) + 1 =-2147483648

Input e Output in C Input con formato: scanf( stringa formato, lista variabili), legge dal dispositivo di ingresso (stdio) un valore e lo memorizza in una variabile; Output con formato: printf( stringa formato, lista variabili), scrive sul dispositivo standard di uscita (stdout); Tramite la stringa di formato, si specifica come Tramite i parametri successivi, si specifica che cosa

Nuova istruzione:scanf La funzione scanf : legge da standard input (stdin, tastiera) dati complessi è quasi duale a printf (prende un formato e una lista di parametri) ma non del tutto è facilmente fonte di errori e incongruenze

scanf: il formato int scanf(const char *format,...); Il formato è una stringa costante che descrive esattamente quello che deve esserci in input e (non può essere una variabile stringa) che può contenere : whitespaces: spazi,tabulazioni, invii a capo (\n) caratteri standard (qualunque sequenza di caratteri non bianchi che non inizi per %) specificatori di formato (che iniziano per %)

scanf: specificatori di formato Gli specificatori di formato sono così fatti : %[*][width][modifiers]type * Un asterisco fa si che i dati corrispondenti a questo argomento vengano letti dallo stdin ma ignorati (non salvati in un argomento) width Specifica il numero massimo di caratteri da leggere per questo argomento modifiers Modifica le dimensioni: h : short int (per d, i and n), o unsigned short int (per o, u and x) l : (è una elle minuscola) long int (per d, i and n), o unsigned long int (per o, u and x), o double (per e, f and g) L : long double (per e, f e g) type Un carattere che specifica il tipo di dato da leggere (vedi sotto)

Problemi leggendo sulla stessa riga Supponiamo di voler leggere sulla stessa riga più parametri. Lo spazio è considerato un separatore e viene scartato Però lo spazio è un carattere: La scanf ha preso lo spazio come fosse il carattere che si intendeva leggere.

Soluzione: usare un separatore Usare un separatore (anche lo spazio stesso)

scanf: la logica L input da tastiera è bufferizzato e resta nel buffer finchè qualcuno non lo rimuove. i caratteri letti/scritti sono memorizzati in un buffer (un area di memoria che funge da contenitore temporaneo dei byte in attesa che questi vengano letti (in input) o scritti (in output)) scanf cerca nel buffer i pattern (numeri decimali, floating poing, caratteri, ecc...) e mangia" (cioè toglie dal buffer) quelli che riconosce I sistemi operativi rappresentano a capo con 1 o 2 caratteri di controllo: Windows usa \r\n (carriage return + linefeed). Il primo è interpretato (correttamente) come separatore Il secondo rimane nel buffer ed è (erroneamente) interpretato come carattere inserito dall utente

Possibili soluzioni Prima soluzione: printf("inserire un numero: "); scanf("%f",&num1); fflush(stdin); // si vuota il buffer Seconda soluzione (equivalente alla prima): printf("inserire un numero reale: "); scanf("%f",&num2); printf("inserire un carattere: "); scanf("\n%c",&carattere); printf("letti: %f,%c",num2, carattere);

scanf: esempi d uso Leggere una data (gg/mm/aaaa): scanf("%2d/%2d/%4d", &giorno, &mese, &anno); Leggere un operazione aritmetica (su una riga): scanf("%lf %c %lf", &num1, &simb, &num2); Trasformare un esadecimale in decimale: scanf("%x", &numero); Leggere un singolo carattere: scanf(" %c", &carattere);

Particolari da tenere a mente Ci sono alcuni punti che è bene tenere a mente e ricordare. 1 La funzione scanf ritorna il numero di elementi correttamente letti: se leggete più di un elemento per volta, dovreste controllare il valore ritornato per assicurare che tutte le variabili siano inizializzate. 2 Per leggere un singolo carattere DOVETE premettere il %c (nel formato) con uno spazio bianco: come spiegato prima, il %c non elimina gli spazi bianchi rimasti sul buffer ed in particolare ogni invio a capo residuo da scanf precedenti!