Breve panoramica sulle librerie standard: assert.h, stdio.h

Slides:



Advertisements
Presentazioni simili
Il linguaggio C++.
Advertisements

Puntatori Linguaggio C.
C++ Di Marco Cozzani.
LINGUAGGIO DI PROGRAMMAZIONE C
Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
Laboratorio di Linguaggi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica.
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A2 Java: le basi del linguaggio.
Code::Blocks Ambiente di sviluppo.
Code::Blocks Ambiente di sviluppo.
Stringhe di caratteri In linguaggio C.
Array multidimensionali
Algoritmi notevoli In linguaggio C.
Array (vettori) In linguaggio C / C++.
Procedure e funzioni In linguaggio C.
5. Codifica degli algoritmi in un linguaggio di alto livello
Differenze tra C e C++ Commenti: Adesso puoi inserire dei commenti tra // e la fine della linea. Usare le librerie C: In C++ puoi anche chiamare una funzione.
Alcuni approcci allanalisi dati (tra CMSSW e ROOT) Riunione mensile di software e analisi, 15/12/2008 Massimo Nespolo 1.
Concetti di base: header file, funzione main(),set caratteri C++, token, operatori, espressioni etc. Flusso di controllo, cicli, costrutti.
Calcolatori Elettronici III
Laboratorio di Linguaggi note sull'uso dell' IDE DevC++ Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IX: Dentro le Librerie Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Introduzione al linguaggio C++ 5 lezioni
1 Corso di Informatica (Programmazione) Esercitazione 1 (26 novembre 2008)
1 Corso di Informatica (Programmazione) Esercitazione 3 (5 dicembre 2008)
Algoritmi di ordinamento
Selezione (=scelta) con “if-else”
Capitolo 1: Introduzione ai computer e a Java
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Le funzioni.
Lezione VIII Laboratorio di Programmazione. Streams formattati In C è sfruttata linformazione riguardo al tipo di un certo dato per impostare la formattazione.
Argomenti della lezione
GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persi-stenza dei dati) è necessario poterli archi-viare.
Programmazione in Java
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010
Crivello Di Eratostene (fonte wikipedia
ISTITUTO COMPRENSIVO STATALE SAN FILI
void binario(int n); …………………
Creazione progetto in C++/DEV
Un esempio: Calcolo della potenza n-esima di un numero reale
Java come linguaggio di programmazione
C. Gaibisso Programmazione di Calcolatori Lezione XVI Allocazione dinamica della memoria Programmazione di Calcolatori: allocazione dinamica della memoria.
Unità Didattica 1 Linguaggio C
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Ricerca sequenziale in un array di interi
Algoritmo che viene utilizzato per elencare gli elementi di un insieme secondo una sequenza stabilita da una relazione d'ordine, in modo che ogni elemento.
Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile mediante un algoritmo.
ARDUINO Duemilanove Parte_4 Arduino e Processing
Tools di analisi di programmi sviluppati in ANSI C Studio dei tre tools di analisi CFlow, Fjalar e Metre. Verranno messi a confronto per i loro requisiti.
Linguaggio Arduino: Struttura di un programma
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
La multimedialità A cura dell’ins.te A. Darbisi nell’ambito del corso PON ‘una LIM per tutti’ 2014.
Dato un vettore di reali di dimensione DIM, si inseriscano N elementi presi da tastiera, si utilizzi 0 per terminare l’inserimento. Ordinare gli elementi.
Esercizi 1)Si scriva in Caml un’espressione che introduce una variabile x con valore 3, quindi introduce una variabile y con valore x+2, quindi una variabile.
Definizione di algoritmo: Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile.
1 Il linguaggio C Puntatori e dintorni. 2 Puntatori : idea di base In C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata.
CORSO DI PROGRAMMAZIONE II
Array (visita e ricerca) CORDA – Informatica A. Ferrari.
Il linguaggio C Puntatori e dintorni.
Sistemi di elaborazione dell’informazione Modulo 4 -Tecniche di programmazione distribuita Unità didattica 1 -Socket library Ernesto Damiani Lezione 1.
Copyright © Istituto Italiano Edizioni Atlas
ISTITUTO COMPRENSIVO TRENTO 5 a.s. 2012/2013 Scuola Secondaria di Primo Grado “G. BRESADOLA”
Laboratorio di Linguaggi lezione XI Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
1° lavoro di gruppo Laboratorio sulla costruzione di un clima efficace.
XVRC2 Emanuele Ruffaldi Giugno Tre esperimenti con S3D ► Estensioni del Linguaggio ► Pre-Compilatore ► Esecuzione dentro il Java L C J.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
APPUNTI SUL LINGUAGGIO C
Transcript della presentazione:

Breve panoramica sulle librerie standard: assert.h, stdio.h Il linguaggio C Breve panoramica sulle librerie standard: assert.h, stdio.h

La diagnostica: assert.h void assert(int expr) Permette di fare controlli di consistenza a tempo di esecuzione prevenire meglio che curare … es. un indice i è davvero dentro i limiti dell’array? int x, a[N], i; …… assert(i<N); x = a[i];

La diagnostica: assert.h (2) #include <assert.h> … assert(expr); se expr è falsa il sistema stampa un messaggio di errore e termina se expr è vera non ha alcun effetto!

La diagnostica: assert.h (3) Le assert costano! Quando usarle per effettuare controlli di consistenza dopo chiamate a codice complesso tipicamente non abbiamo i sorgenti (se è scritto da altri) … e comunque anche se li abbiamo non è mai garantita la correttezza! si controlla se i valori risultanti sono rispondenti alle specifiche fornite si controllano invarianti noti dell’applicazione che stiamo scrivendo

Input/Output: stdio.h Contiene definizioni di costanti legate all’ I/O es. EOF (end of file) #define EOF (-1) valore restituito alla fine di un file Contiene la definizione della struttura che descrive un file generico (FILE) il formato dipende dal sistema e contiene: posizione corrente, indicatori di errore l/s, indicatori di fine file raggiunta etc

Input/Output: stdio.h (2) Come avviene la lettura di un file: prima il file viene ‘aperto’, cioè si crea una struttura FILE f per esso generalmente c’è un limite al numero di file aperti poi si accede al file usando la funzioni di libreria passando f come parametro infine il file viene ‘chiuso’ (f viene deallocata) il contenuto del file non è più accessibile da programma

#include <stdio.h> int main (void){ int a, sum = 0; FILE * ifp, *ofp; ifp = fopen (”inputfile”,”r”); ofp = fopen (”outputfile”,”w”); /* finchè il numero di conversioni operate con successo è uguale a 1 */ while (fscanf(ifp, ”%d”, &a)==1) sum+=a; fprintf(ofp, ”la somma è %d”, &sum); fclose(ifp); fclose(ofp); return 0; }

Input/Output: stdio.h (3) ifp = fopen(”inputfile”,”r”); Modo: ”r” - read ”w” - write ”a” - append ”rb” ”wb” ”ab” File binari Nome del file

Input/Output: stdio.h (4) ifp = fopen(”inputfile”,”r”); interagisce con SO per reperire informazioni sul file e controllare che l’accesso sia consentito in lettura (chiama la SC open() che vedremo nella seconda parte del corso) se OK alloca una struttura FILE (inizializzandola) e restituisce il puntatore se fallisce restituisce NULL

Input/Output: stdio.h (5) while(fscanf(ifp, ”%d”, &a)==1) funziona come scanf() il primo parametro fornisce il file da cui leggere restituisce il numero di conversioni operate con successo, oppure EOF se il file era terminato e non si è letto niente fprintf(ofp, ”la somma è %d”, &sum); funziona come printf() il primo parametro fornisce il file su cui scrivere

Input/Output: stdio.h (6) fclose(ifp) interagisce con SO per segnalare che il file non è più in uso (SC close()) scrive su disco eventuali caratteri bufferizzati dealloca la struttura FILE ritorna 0 se ha successo EOF se fallisce

Input/Output: stdio.h (6) Ancora sulla bufferizzazione … tipicamente tutto l’output viene bufferizzato solo quando il buffer è pieno viene svuotato questo è il motivo per cui alcune volte i caratteri stampati con printf() non appaiono subito int fflush(FILE * ifp) svuota immediatamente i buffer relativi al file ifp fflush(NULL) svuota tutti i buffer è chiamata dalla fclose() restituisce 0 se è andato tutto bene e EOF altrimenti

Input/Output: stdio.h (7) stdio.h contiene definizioni di strutture FILE per i file ‘speciali’ usati per leggere e scrivere sui terminali collegati a tastiera e schermo es. ogni finestra corrisponde a un terminale FILE * stdin : standard input, la tastiera FILE * stdout : standard output, lo schermo FILE * stderr : standard error,

Input/Output: stdio.h (8) Esempi: fprintf(stdout, ”la somma è %d”, &sum); scrive sullo standard output equivale a printf(”la somma è %d”, &sum); fscanf(stdin, ”%d”, &a) legge dallo standard input equivale a scanf(”%d”, &a)

Input/Output: stdio.h (9) Modificare la posizione corrente di un file: int fseek(FILE *fp, long offset, int place) SEEK_SET - inizio file SEEK_CUR - posizione corrente SEEK_END - fine file Posizione di partenza

Input/Output: stdio.h (10) Modificare la posizione corrente di un file: ritorna all’inizio void rewind(FILE *fp); rewind (fp); equivale a lseek(fp, 0, SEEK_SET);

Input/Output: stdio.h (11) Leggere la posizione corrente di un file: int ftell(FILE *fp) Posizione corrente: numero di byte dall’inizio del file

Input/Output: stdio.h (12) Gestione degli errori. Es. int feof(FILE *fp) 0 se l’indicatore di fine file è attivo e diverso da 0 altrimenti void perror (const char * s) la maggior parte delle funzioni di libreria (e tutte le SC) se in errore settano la variabile globale predefinita errno con un codice che dipende dall’errore la perror()invocata immediatamente dopo la funzione che ha dato errore converte un valore numerico in un messaggio su stderr (schermo) attenzione!!!! chiamate successive sovrascrivono errno!

Input/Output: stdio.h (13) Esempio apertura di un file inesistente: …… if ((fp = fopen(”pippo”,”r”)) == NULL) { perror (”Aprendo pippo”); return -1; }

Input/Output: stdio.h (14) All’esecuzione : $$ prova Aprendo pippo: No such file or directory $$

Input/Output: stdio.h (15) Input ed output di caratteri e stringhe moltissime funzioni, ne citeremo alcune alcune funzioni sono pericolose, perché possono generare buffer overrun (scrittura caratteri oltre la dimensione del buffer) solitamente per ogni funzione pericolosa ne esiste una che funziona crorrettamente (magari con più parametri) controllare sempre il man e utilizzare le versioni innocue!

Input/Output: stdio.h (16) Esempio: gets ed fgets char* gets (char* s); legge una linea dello stdin nel buffer puntato da s continua a leggere fino a primo ‘\n’ o all’EOF, che vengono rimpazzati da un terminatore di stringa (‘\0’ ) pericolosa non permette il check del buffer overrun restutuisce s in caso di successo e NULL in caso di fallimento o se viene letto EOF prima di un qualsiasi carattere valido

Input/Output: stdio.h (17) Esempio: gets ed fgets char* fgets(char*s, int n, FILE*fp); legge al più n-1 caratteri dal file fp e li copia nel buffer s continua a leggere fino a primo ‘\n’ o all’EOF, il ‘\n’ viene copiato nel buffer dopo il quale viene inserito un ‘\0’ diverso da gets() basta passare la lunghezza del buffer -1 per essere sicuri restutuisce s in caso di successo e NULL in caso di fallimento o se viene letto EOF prima di un qualsiasi carattere valido

#include <stdio.h> /* max lung stringa */ #define N 20 int main (void){ char s[N+2]; FILE * ifp; ifp = fopen (”inputfile”,”r”); /* finchè il numero di conversioni operate con successo è uguale a 1 */ while ( (fgets(s,N+2,fip))!=NULL) /* …. Elaborazione …*/ fclose(ifp); return 0; }

Input/Output: stdio.h (18) Leggere e scrivere stringhe: int sscanf(const char *s, const char *format, …); funziona come scanf(), fscanf() s è la stringa da cui leggere int sprintf(const char *s, funziona come printf(), fprintf()

Input/Output: stdio.h (19) Ci sono molte più funzioni lettura di byte non formattati (file binari) fread(), fwrite() rimozione e ridenominazione di file l’appendice A del testo fornisce una panoramica delle principali funzioni nelle librerie standard per la documentazione però è meglio consultare sempre il man più aggiornato e preciso