Scope (visibilità) Scope di un identificatore
|
|
- Cesare Molinari
- 5 anni fa
- Visualizzazioni
Transcript
1 Scope (visibilità) Scope di un identificatore Lo scope (visibilità) di un identificatore è la porzione di codice in cui quell identificatore è definito e ha senso Se l identificatore si riferisce a una variabile, lo scope è la porzione di codice che inizia dal punto in cui viene definita la variabile e termina alla fine del blocco che la contiene (chiusura della parentesi graffa) Non è possibile utilizzare una variabile al di fuori del suo scope Si può pensare che la variabile, raggiunto il termine dello scope, venga distrutta 1
2 Scope di un identificatore int b = 4; if (b == 3) { int a = 5; Scope di a nel ramo-if printf("b è uguale a 3\n e a è uguale a %d", a); else { int a = 1; Scope di b Scope di a nel ramo-else printf("b non è uguale a 3 e a è uguale a %d\n", a); Il codice è corretto, però bisogna prestare attenzione: La variabile a del ramo-if non corrisponde alla variabile a del ramo-else Entrambe le variabili a vengono distrutte al termine del blocco, quindi qualsiasi riferimento a queste variabili dopo questo blocco di istruzioni sarebbe un errore Scope di un identificatore Se l identificatore si riferisce a una funzione, lo scope è la porzione di codice che inizia dal punto in cui viene definita e termina alla fine del file sorgente, cioè la zona in cui il compilatore è in grado di recuperare la definizione della funzione (il body) e il tipo e il numero di argomenti che la funzione stessa richiede, nonché il tipo del valore di ritorno 2
3 Esempio Non si può invocare una funzione non dichiarata (è fuori dallo scope) Invocazione senza dichiarazione int main(void) { int a=f(3,5); printf("%d",a); return 0; int f(int x, int y){ return 2*x + 3*y; ERRORE! Anche le funzioni di libreria (printf, strlen, ) sottostanno a questa regola: i file header (stdio.h, string.h, ) contengono le dichiarazioni delle funzioni Esempio La definizione di una funzione è implicitamente una dichiarazione: Dichiarazione, invocazione, definizione Definizione (con dichiarazione implicita) e invocazione int f(int x, int y); int main(void) { int a = f(3,5); printf("%d", a); return 0; int f(int x, int y) { return 2*x + 3*y; int f(int x, int y) { return 2*x + 3*y; int main(void) { int a = f(3,5); printf("%d", a); return 0; 3
4 Tipi derivati: struct Strutture Gli array sono utili quando dobbiamo aggregare informazione omogenea Quando invece dobbiamo gestire informazione eterogenea è necessario utilizzare una struttura: una collezione finita di variabili (chiamati membri) non necessariamente dello stesso tipo, ognuna identificata da un nome Sintassi struct <etichetta> { ; <definizione-di-variabili> L etichetta è opzionale e rappresenta il nome della struttura 4
5 Dichiarazione di Strutture Esempio di dichiarazione di una struttura struct studente { char nome[20]; int eta; char sesso; float media; ; studente è il nome della struttura composta da tre membri: nome, eta, sesso e media N.B.: La definizione della struttura non provoca allocazione di memoria, ma introduce un nuovo tipo di dato La memoria viene allocata solo al momento della dichiarazione di una variabile del tipo struct studente Definizione di variabili di tipo struttura Dichiarazione di due variabili di tipo struct studente: struct studente p1, p2; Dichiarazione di un array di 50 elementi ciascuno dei quali è di tipo struct studente: struct studente elenco[50]; 5
6 Definizione di variabili di tipo struttura In memoria i membri di una struttura vengono allocati nello stesso ordine di dichiarazione Tra un membro e l altro, a seconda dell architettura, possono esserci spazi intermedi di allineamento di memoria inutilizzabili e di contenuto indefinito (sono utili per rendere più efficiente la copia dei dati) Es. su una macchina a 64 bit con char da 1 byte, int da 4 byte e float da 4 byte, sizeof(struct studente) == 32 invece di 29 Regole per nominare i membri I membri devono avere nomi univoci all interno di una struttura, ma strutture diverse possono avere membri con lo stesso nome I nomi dei membri possono coincidere con nomi di variabili o funzioni int x; struct a { char x; int y; ; //corretto struct b { int w; float x; ; //corretto 6
7 Accesso ai membri di una struttura Si accede ai membri mediante la notazione con punto: <nome-variabile>.<nome-mebro> struct carta { int valore; char seme; ; struct carta c1, c2; c1.valore = 5; c1.seme = 'Q'; struct punto { int x, y; ; struct punto p1, p2; p1.x = 10; p1.y = -2; p2.x = 5; p2.y = 7; Ogni membro si usa come una normale variabile del tipo corrispondente a quello del membro Puntatori a strutture Se ho un puntatore a una struct, per accedere ai suoi membri posso usare l operatore -> (freccia, scritta con meno e maggiore) struct data { int giorno, mese, anno; ; struct data d; struct data *pd = &d; //pd è un puntatore alla struttura d pd->giorno = 7; //equivalente a (*p).giorno pd->mese = 1; //equivalente a (*p).mese pd->anno = 2009; //equivalente a (*p).anno 7
8 Operazioni su Strutture Si possono assegnare variabili di un tipo struttura a variabili dello stesso tipo struttura. struct data d1, d2; d1 = d2; Non è possibile effettuare il confronto tra due variabili di tipo struttura. struct data d1, d2; if(d1 == d2) //Errore! ma è necessario confrontare ogni singolo membro: if(d1.giorno==d2.giorno && d1.mese==d2.mese && d1.anno==d2.anno) Il motivo è legato all allineamento in memoria (dato che lo spazio intermedio tra i membri ha contenuto indefinito e il C non può confrontare efficientemente le due zone di memoria, delega il compito all utente) Esempio #include <stdio.h> struct complesso { float im; float re; ; int main(void) { struct complesso c1,c2,somma; c1.re = 3.; c1.im = 4.; c2.re = 2.; c2.im = 3.; somma.im = c1.im + c2.im; somma.re = c1.re + c2.re; printf("la somma di %f+i%f e %f+i%f è %f+i%f\n", c1.re,c1.im,c2.re,c2.im,somma.re,somma.im); return 0; 8
9 Attenzione struct pippo { struct pippo { int codice; int codice; char nome[20]; char nome[20]; float dato; float dato; ; ; struct pluto { int codice; struct pippo vrb1, vrb2; char nome[20];... float dato; vrb2 = vrb1; ; struct pippo vrb1; CORRETTO struct pluto vrb2;... vrb2 = vrb1; ERRATO Perché sia ammesso l assegnamento, non è sufficiente che le due strutture abbiano gli stessi campi, ma devono essere dichiarate con lo stesso tipo (il motivo è ancora legato al fatto che l allineamento dei dati in memoria potrebbe essere diverso) Definizione di nuovi tipi 9
10 Definizione nuovo tipo Con la parola chiave typedef si definisce un nuovo tipo (in realtà un abbreviazione per un tipo esistente): typedef <tipo_esistente> <nuovo_tipo>; Ad esempio typedef int votoesame; definisce un nuovo tipo, votoesame, che corrisponde al tipo int Quando dichiarerò una variabile potrò scrivere votoesame esame1, esame2; Definizione nuovo tipo Definire un nuovo tipo è utile per rendere più leggibile il codice o per nascondere al programmatore che usa un nostro modulo come realizziamo internamente al modulo una certa funzionalità 10
11 Definizione nuovo tipo Posso usare typedef anche sulle strutture: typedef struct { int codice; char nome[20]; float dato; nuovotipo; nuovotipo var1, var2; nuovotipo var3; Abbiamo definito un nuovo tipo derivato nuovotipo Grazie a typedef possiamo evitare di scrivere la parola chiave struct quando dichiariamo le variabili Esempio: Vettori parzialmente riempiti 11
12 Vettori parzialmente riempiti Definiamo una struttura dati in cui usiamo un vettore a cui aggiungiamo via via degli interi fino a riempire interamente il vettore Vettori parzialmente riempiti 0 ff N-1 Il vettore occupa in memoria N celle (es. N interi) Ma contiene dati solo per una parte ff (first free) è l indice della prima posizione libera, dove si dovrà eventualmente inserire il prossimo elemento del vettore 12
13 Vettori parzialmente riempiti #define N 20 typedef struct { int vettore[n]; int ff; vpr_int; int main(void) { vpr_int miovettore; Vettori parzialmente riempiti Devo però preoccuparmi di inizializzare la struttura Quanto vale all inizio ff? Se non la inizializzassi, potrebbe avere casualmente qualsiasi valore, anche negativo È necessario, quindi, definire una funzione di inizializzazione da invocare prima di utilizzare un vettore parzialmente riempito 13
14 Vettori parzialmente riempiti Inizializzazione: vpr_int init(vpr_int vpr) { vpr.ff = 0; return vpr; La funzione verrà invocata in questo modo: int main(void) { vpr_int miovettore; miovettore = init(miovettore); Vettori parzialmente riempiti Stampa del vettore: void print(vpr_int vpr) { int i; for(i=0; i<vpr.ff; i++) printf("elemento %d: %d\n", i, vpr.vettore[i]); 14
15 Vettori parzialmente riempiti Funzione che determina se il vettore è pieno o se c è ancora spazio per inserire elementi: int pieno(vpr_int vpr) { if (vpr.ff >= N) return 1; else return 0; Vettori parzialmente riempiti Inserimento di un elemento: vpr_int inserisci(vpr_int vpr, int n) { if (pieno(vpr)) return vpr; vpr.vettore[vpr.ff] = n; vpr.ff++; return vpr; 15
16 Vettori parzialmente riempiti Ricerca dell indice in cui è memorizzato un elemento: int cerca(vpr_int vpr, int n) { int i; for (i = 0; i < vpr.ff; i++) if (vpr.vettore[i] == n) return i; return -1; Vettori parzialmente riempiti Esempio di un main in cui testiamo il codice int main(void) { vpr_int miovettore; miovettore = init(miovettore); int i; for (i = 0; i <= N; i++) { printf("inserisco %d.\n", i); miovettore = inserisci(miovettore, i); 16
17 Vettori parzialmente riempiti i = cerca(miovettore, N); if (i == -1) printf("%d non trovato.\n", N); else printf("%d trovato all'indice %d.\n", N, i); i = cerca(miovettore, 0); if (i == -1) printf("%d non trovato.\n", 0); else printf("%d trovato all'indice %d.\n", 0, i); return 0; Strutture come parametri Attenzione, quando si passa come parametro una struttura, questa viene copiata interamente anche quando un membro della struttura è un array Passare come parametro una struttura può quindi risultare inefficiente Usando i puntatori, si possono passare i parametri in modo più efficiente: per riferimento 17
18 Strutture come parametri Esempio di funzione stampa modificata con il passaggio per riferimento: void stampa(vpr_int *pv) { int i; for(i=0; i < pv->ff; i++) printf("elemento %d: %d\n", i, pv->vettore[i]); int main(void) { vpr_int miovettore; stampa(&miovettore); Conversione stringhe 18
19 Conversione degli argomenti Per convertire gli argomenti da stringa in tipi primitivi si possono usare le funzioni di stdlib.h: int atoi(char *s): da stringa a intero long atol(char *s): da stringa a long double atof(char *s): da stringa a double Esempio: int ivalue = atoi(argv[1]); Conversione degli argomenti Purtroppo atoi, atol e atod non effettuano controlli: se il parametro s non può essere convertito, viene comunque restituito un valore senza segnalare errori Quindi sono da usare solo quando si è certi che l argomento sia una stringa convertibile in intero In generale bisognerebbe invece usare le più complesse strtol e strtod (consultare il man per il loro uso) 19
20 Argomenti dalla linea di comando Argomenti dalla linea di comando Permettono di passare a un programma parametri da linea di comando. Ad esempio: $myprog par1 par2 Bisogna definire il main in questo modo: int main(int argc, char *argv[]) Il C mette a disposizione del programma un vettore di stringhe (cioè un vettore di vettori di char); ogni stringa corrisponde a un parametro 20
21 Argomenti dalla linea di comando Più in dettaglio: argc è il numero di parametri, incluso l eseguibile stesso (quindi argc >= 1) argv è un vettore di stringhe: ogni suo elemento argv[i] è una stringa che corrisponde a un parametro (casi particolari: n argv[0] è il nome dell eseguibile stesso, n argv[argc] è NULL) Argomenti dalla linea di comando Ad esempio, con $myprog par1 par2 il C crea le seguenti variabili: argc 3 argv NULL m y p r o g \0 p a r 1 \0 p a r 2 \0 21
22 Argomenti dalla linea di comando Esempio di un programma che stampa gli argomenti dalla linea di comando: #include <stdio.h> int main(int argc, char *argv[]) { int i; printf("argc = %d\n", argc); for(i=0; i<argc; i++) printf("argv[%d] = %s\n", i, argv[i]); return 0; Controllo degli argomenti Esempio di programma che calcola la somma dei suoi argomenti interi #include <stdio.h> #include <stdlib.h> int main (int argc, char* argv[]) { int sum = 0, i; if (argc < 3) { //controllo della cardinalità degli argomenti printf("sono richiesti almeno due parametri.\nuso: %s num1 num2... numn\n", argv[0]); exit(exit_failure); for (i=0; i<argc; i++) sum += atoi(argv[i]); printf("la somma totale è %d.\n", sum); return EXIT_SUCCESS; 22
23 I/O v I/O su canali standard v I/O su file v I/O su stringhe Funzioni di I/O Abbiamo già visto l uso di scanf e printf per fare input/output sui canali standard Esistono altre funzioni che permettono di fare I/O Scrittura: con uso implicito di file (stdout) int putchar(int c); int puts(char *s); int printf(const char *format,...); con uso esplicito di file int fputc(int c, FILE *stream); int fputs(char *s, FILE *stream); int putc(int c, FILE *stream); Lettura: con uso implicito di file (stdin) char* gets(char* s); int getchar(void); int scanf(const char *format, ); con uso esplicito di file int fgetc(file *stream); char *fgets(char *s, int size, FILE *stream); int ungetc(int c, FILE *stream); 23
24 Scrivere sullo standard output Oltre alla printf ci sono: int putchar(int c); scrive un carattere sullo standard output (file speciale corrispondente al terminale) restituisce un numero intero corrispondente alla codifica ASCII del carattere scritto, EOF in caso di errore int puts(char *s); scrive una stringa sullo standard output restituisce un numero non negativo in caso di successo, EOF in caso di errore Leggere dallo standard input Oltre alla scanf ci sono: int getchar(void); legge un carattere dallo standard input (tastiera) e lo restituisce come carattere, EOF in caso di errore. 24
25 Esempi d uso #include <stdio.h> int main(void) { char c = getchar(); //legge un carattere da terminale (anche "a capo" è un carattere: è '\n') putchar(c); //stampa a video il carattere in c return 0; Molto spesso getchar è usata per sospendere l esecuzione di un programma in modo che l utente possa visionare risultati intermedi I/O su FILE Ogni funzione che opera su file utilizza una struttura chiamata FILE definita in stdio.h Senza entrare nei dettagli, è sufficiente sapere che FILE contiene informazioni riguardanti un file e che ci permette di operare su di esso. Per esempio, tiene traccia dell offset, cioè il punto del file a cui si è arrivati a leggere o scrivere. FILE viene allocata quando si apre un file e deallocata quando il file viene chiuso Prima di operare su un file, occorre aprirlo con la funzione fopen Si ottiene un puntatore alla struttura FILE che bisognerà poi passare come parametro alle funzioni di lettura/scrittura Quando si termina, occorre chiudere il file con fclose 25
26 Apertura di FILE FILE *fopen(const char *path, const char *mode); argomenti: n il percorso (nome compreso) del file che si vuole aprire n il modo: n "r" à lettura (il file deve esistere) [esistono anche "rb", "r+", "rb+"] n "w" à scrittura (crea un file vuoto ed elimina un eventuale file già esistente) [esistono anche "wb", "w+", "wb+"] n "a" à accoda (append; se il file esiste, scrive in coda al file; se non esiste lo crea vuoto) [esistono anche "ab", "a+", "ab+"] n Consultare il man per saperne di più restituisce un puntatore a una struttura di tipo FILE se l istruzione va a buon fine. Lo stream è posizionato: n al primo byte del file (read/write) n all ultimo byte del file (append) n NULL se si verifica qualche errore (ad es. non si hanno i diritti per leggere o scrivere il file o il file da leggere non esiste) I/O su FILE fscanf e fprintf sono le versioni relative ai file di scanf e printf int fscanf(file *fp, formato, argomenti) int fprintf(file *fp, formato, argomenti) I parametri e il funzionamento sono identici a quelli delle funzioni scanf e printf tranne per la presenza del parametro di tipo FILE* che identifica il file su cui le funzioni devono operare Abbiamo già visto fgets: char* fgets(char *str, int size, FILE *stream); Ricordate: In UNIX un file è un flusso (stream) di caratteri terminato dal carattere speciale EOF 26
27 Chiusura di FILE int fclose(file *fp); Richiede un puntatore a un file (aperto) Restituisce 0 se la chiusura avviene con successo, EOF se con fallimento. In entrambi i casi, successivi tentativi di accedere al file chiuso falliranno È molto importante usare sempre fclose quando si è terminato di usare un file: l'accesso a un file (qualunque linguaggio di programmazione si usi) è gestito dal sistema operativo, che deve allocare apposite strutture per lo specifico processo richiedente fopen effettua una richiesta di allocazione al sistema operativo fclose rilascia al sistema operativo le strutture usate fino a quel momento; poiché le risorse di un computer sono sempre limitate, se non si dealloca mai si rischia di terminare le risorse Accesso ai FILE fscanf/fprintf successive fanno avanzare lo stream legato al file #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp = fopen("dati.txt", "r"); if(fp == NULL) { perror("errore nell apertura del file"); exit(exit_failure); int x; while(fscanf(fp, "%d", &x)!= EOF) printf("\n x= %d", x); fclose(fp); return EXIT_SUCCESS; void perror(char* s) è una funzione il cui prototipo è in stdio.h che, invocata dopo un errore in una system call, stampa la stringa passata come argomento seguita da un messaggio sulle cause dell errore EXIT_FAILURE e EXIT_SUCCESSS sono costanti simboliche definite in stdlib.h In questo esempio si suppone che dati.txt sia un file di interi separati da spazi 27
28 Esempio alternativo #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp = fopen("dati.txt", "r"); if (fp == NULL){ //come nella slide precedente int x; while(!feof(fp)) { fscanf(fp, "%d", &x); printf("\n x=%d", x); fclose(fp); return EXIT_SUCCESS; int feof(file *f) è una funzione il cui prototipo è in stdio.h. Restituisce un numero diverso da zero (e quindi corrispondente a vero per il C) quando siamo arrivati alla fine del file *f Flussi standard Ogni processo in esecuzione è associato a tre FILE* speciali, che risultano già aperti quando si lancia il programma: FILE *stdin //standard input, di solito la tastiera FILE *stdout //standard output, di solito lo schermo FILE *stderr //standard error, di solito lo schermo scanf è quindi un caso particolare di fscanf, in cui si usa stdin come parametro FILE * scanf(" ", ) equivale a fscanf(stdin, " ", ) Analogamente printf è un caso particolare di fprintf: printf(" ", ) equivale a fprintf(stdout, " ", ) 28
29 I/O su stringa Tramite le funzioni sscanf e sprintf è possibile operare (cioè leggere e scrivere dati) su una stringa anziché su file int sscanf(char *str, formato, argomenti); lettura da stringa; utile per parsificare dati con formato int sprintf(char *str, formato, argomenti); scrittura su stringa; utile per creare stringhe concatenando dati con formato I/O su stringa: sprintf char linea[128]; int x, y; float val; x = 25; y=7; val = 7.5F; sprintf(linea, "%d %d :: %f", x, y, val); Per effetto della sprintf linea corrisponde alla stringa "25 7 :: 7.5" che può essere mandata a video o scritta su file 29
30 I/O su stringa: sscanf char linea[128] = "25 7 :: 7.5"; int x,y; float val; sscanf(linea, "%d %d :: %f", &x, &y, &val); Per effetto della sscanf le variabili x, y e val saranno inizializzate come: X ß 25, y ß 7, val ß 7.5F Attenzione: affinché la sscanf abbia successo la sottostringa " :: " indicata nella stringa formato deve essere presente in linea Se i dati rispettano un certo formato in ingresso la sscanf è in grado di parsificare linea e compiere la conversione da stringa a tipo primitivo 30
Scope (visibilità) Scope di un identificatore
Scope (visibilità) Scope di un identificatore Lo scope (visibilità) di un identificatore è la porzione di codice in cui quell identificatore è definito e ha senso Se l identificatore si riferisce a una
DettagliGESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
DettagliOperazioni su file di caratteri
Operazioni su file di caratteri Apertura fopen Chiusura fclose Scrittura fprintf Lettura fscanf Controllo fine file feof Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Apertura di un file: Si
DettagliFile binari e file di testo
I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file
DettagliGestione dei file in C
Gestione dei file in C Fondamenti di Informatica Che cos è un file e a cosa serve? Memoria di massa vs memoria centrale q La memoria di massa (disco fisso) è un dispositivo di memorizzazione generalmente
DettagliGestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico
Gestione dei file Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Gli stream Si dice stream qualsiasi sorgente di dati in ingresso e qualsiasi
DettagliLe strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.
Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura
DettagliCorso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 9 File
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 9 File D. Bloisi, A. Pennisi, S. Peluso, S. Salza, C. Ciccotelli Sommario Input/Output
DettagliC: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
DettagliLaboratorio di Informatica
Record Laboratorio di Informatica Ingegneria Meccanica Lezione 9, 6 dicembre 2007 versione 18 dicembre 2007 Renato Menicocci Array: collezione di dati omogenei
DettagliInput/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE
Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente
DettagliIl linguaggio C. Breve panoramica su stdio.h
Il linguaggio C Breve panoramica su stdio.h 1 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
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 26 Sommario: Gestione dei file in C. File ad accesso sequenziale: apertura, chiusura, lettura e scrittura. File binari. Gestione files
DettagliGestione dei file in C
Gestione dei file in C Fondamenti di Informatica Che cos è un file e a cosa serve? Memoria di massa vs memoria centrale q La memoria di massa (disco fisso) è un dispositivo di memorizzazione generalmente
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 13 Corso di Informatica 2009-2010 Lezione 13 1 Input/output da file Stream Si definisce stream una sequenza di bytes di dati che può essere in ingresso (input
DettagliELEMENTI DI INFORMATICA. Linguaggio C
Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica ELEMENTI DI INFORMATICA http://agile.diee.unica.it A.A. 2015/2016 Ing. Marco Ortu Diee, secondo piano Tel. 070-6755774 mail:
DettagliL accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.
I file L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione. I canali, sono delle strutture dati che contengono informazioni sul dispositivo fisico,
DettagliI files (archivi) Il C definisce in stdio.h tre file aperti automaticamente: stdin, stdout e stderr.! Sono ad accesso sequenziale diretto
C I files di dati I files (archivi) Files di programmi sono solo gestiti dal compilatore C Files di dati Possono essere creati, aggiornati, letti, scritti da programmi C Servono per conservare dati su
DettagliLezione 7: Funzioni e gestione dei File
Lezione 7: Funzioni e gestione dei File Laboratorio di Elementi di Architettura e Sistemi Operativi 18 Aprile 2012 Le funzioni Funzioni Un programma C consiste di una o più funzioni Almeno main() Funzionamento
DettagliStreams e disk files
Streams e disk files Streams Un canale è una sequenza di byte di dati Sorgente o destinazione di dati che possono essere associati ad un disco o ad altre periferiche Due tipi di stream: Testo: sequenza
DettagliFile. Molto astratta: file ha un nome (ex. Pippo.c), ed altre caratteristiche (dimensione, tipo, etc). Operazioni: copiare, cancellare, eseguire..
File I file sono una illusione creata dal Sistema Operativo(SO) Il SO usa opportune strutture dati per implementare tale astrazione (ad esempio: File Control Block, FCB) Sono usati per memorizzare in modo
DettagliLezione 11: Liste a Puntatori e Input/Output
Lezione 11: Liste a Puntatori e Input/Output Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Richiamo: strutture (struct)
DettagliIntroduzione al C. Unità 9 File. D. Bloisi, S. Peluso, A. Pennisi, S. Salza
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 9 File D. Bloisi, S. Peluso, A. Pennisi, S. Salza Sommario Input/Output Stream
DettagliInput / Output. Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard
Stdio.h Input / Output Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard Sia i file che i dispositivi (tastiera, schermo...) sono visti come
DettagliIntroduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2017
DettagliSettimana n.12. Obiettivi File!di!testo. Contenuti Concetto!di!file!e!funzioni! fopen/fclose Funzioni!fgets+sscanf Approfondimenti!su!printf! e!
Settimana n.12 Obiettivi File!di!testo Contenuti Concetto!di!file!e!funzioni! fopen/fclose Funzioni!fgets+sscanf Approfondimenti!su!printf! e!scanf 437 Files Vista d insieme dei formati di file File File
DettagliGestione dei File. Credits Prof. Campi
Gestione dei File Credits Prof. Campi 1 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi Si usano dall'interno dei programmi Realizzano la persistenza dei dati cioè
DettagliCaratteri e stringhe
Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un
DettagliLe strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.
Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura
DettagliLezione 22: Input/Output e Files
Lezione 22: Input/Output e Files Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università di Salerno Struttura della lezione Esami: date e modalità Funzioni di libreria standard
DettagliI file possono essere manipolati (aperti, letti, scritti ) all interno di programmi C. dischi nastri cd
Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persistenza dei dati) è necessario poterli archiviare su memoria di massa. dischi nastri cd GESTIONE DEI FILE I file possono
DettagliSuggerimenti, note utili ed errori comuni. Fondamenti di informatica T
Suggerimenti, note utili ed errori comuni Fondamenti di informatica T printf, scanf e stringhe di formato La lettura e scrittura di variabili in formato testo sono realizzate tramite printf e scanf sfruttando
DettagliI puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore
I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p
DettagliLinguaggio C: i file
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: i file La presente dispensa e da utilizzarsi ai soli fini didattici previa
Dettaglifile fisico file logico
I files Un file è una struttura di dati residente su una memoria di massa (file fisico) Un programma vede un file come una sequenza di bytes (file logico) Generalizzando, un file può comprendere qualsiasi
DettagliGestione dei File C. Generalità
Gestione dei File C 1 Generalità Il linguaggio C non contiene alcuna istruzione di Input/Output. Tali operazioni vengono svolte mediante chiamate a funzioni definite nella libreria standard contenute nel
DettagliFILE: tipo operazione Istruì. prototipo esempi lettura di un carattere fgetc Int fgetc(file *flusso) Vedi sotto
FILE: tipo operazione Istruì. prototipo esempi lettura di un carattere fgetc Int fgetc(file *flusso) Vedi sotto alla volta Scrittura di un fputc Int fputc(int ch, FILE *flusso); carattere alla volta Lettura
DettagliInput / Output. Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard
Stdio.h Input / Output Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard Sia i file che i dispositivi (tastiera, schermo...) sono visti come
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliInput / Output. Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard
Stdio.h Input / Output Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard Sia i file che i dispositivi (tastiera, schermo...) sono visti come
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliDati due punti sul piano calcolare la loro distanza
Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12
DettagliLaboratorio di Algoritmi
Laboratorio di Algoritmi Corso di Laurea in Matematica Roberto Cordone DI - Università degli Studi di Milano Lezioni: Martedì 8.30-10.30 in aula 3 Mercoledì 10.30-12.30 in Aula 2 Giovedì 8.30-10.30 in
DettagliLibrerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h
Corso di Linguaggi e Traduttori 1 AA 2004-05 1 Corso di Linguaggi e Traduttori 1 AA 2004-05 stdio.h 2 Funzioni comuni di I/O? Le piu' comuni funzioni che permettono I/O sono getchar() e putchar():? int
DettagliLe librerie standard. ! La libreria standard del C è in realtà un insieme di librerie
! La libreria standard del C è in realtà un insieme di librerie! Per usare una libreria, non occorre inse -rirla esplicitamente nel progetto: ogni ambiente di sviluppo sa già dove cercarle! Ogni file sorgente
DettagliSommario FONDAMENTI DI INFORMATICA 1. Il tipo FILE. Passaggio da standard I/O. LINGUAGGIO C Gestione dei file
Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011
DettagliLaboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Funzioni standard del C: Funzioni di I/O Allocazione dinamica della memoria Funzioni su stringhe di caratteri Testo di riferimento B.W. Kernighan & D.M. Ritchie
DettagliLa funzione main() La funzione main(), presente in tutti i programmi C, è una funzione come tutte le altre
La funzione main() La funzione main(), presente in tutti i programmi C, è una funzione come tutte le altre Unica particolarità: viene chiamata dal Sistema Operativo, appena il programma viene avviato Non
DettagliInput/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari
Input/Output Lettura e scrittura Caratteri e Stringhe: Terminale e file Input/output console file caratteri stringhe formattato ascii binari Linguaggio ANSI C Input/Output - 1 La libreria standard del
DettagliFile e puntatori a file
File e puntatori a file Vitoantonio Bevilacqua vitoantonio.bevilacqua@poliba.it La libreria stdio.h mette a disposizione delle funzioni che hanno la peculiarità di trattare con questa nuova tipologia di
DettagliLezione integrativa: Dal C++ al C
Lezione integrativa: Dal C++ al C Mario Sabbatelli smario@ce.unipr.it Palazzina 3 - int. 5792 www.ce.unipr.it/people/smario Contenuto della lezione Nel corso si utilizza l'ansi C Storia e standard panoramica
DettagliPerchè i files? Realizzano la persistenza dei dati. Sono delle strutture di dati sequenziali. dati che sopravvivono all esecuzione del programma
Perchè i files? Realizzano la persistenza dei dati dati che sopravvivono all esecuzione del programma Sono delle strutture di dati sequenziali Files e S.O. I files sono gestiti dal S.O. e resi visibili
DettagliLinguaggio C. Vettori, Puntatori e Funzioni Stringhe. Università degli Studi di Brescia. Prof. Massimiliano Giacomin
Linguaggio C Vettori, Puntatori e Funzioni Stringhe Università degli Studi di Brescia Prof. Massimiliano Giacomin SCHEMA DELLA LEZIONE RELAZIONE TRA VETTORI E PUNTATORI (e le stringhe letterali come caso
DettagliCaratteri e stringhe
Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un
DettagliPrecedenza e associatività. Complementi sul C - 2. Esempi. Esempi
Complementi sul C - 2 Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Precedenza e associatività () [] ->. S D! ~ ++ + * & (cast ) sizeof S D * / % S D + - (somma e sottrazione) S D >
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,
DettagliFondamenti di Informatica L-A
Fondamenti di Informatica L-A Esercitazione del 23/11/07 Ing. Giorgio Villani Ripasso Teoria Funzioni ricorsive 2 fatt(2) 1 2*fatt(1) fatt(1) 1 2*1 1*fatt(0) fatt(0) 1*1 caso base fatt(0)=1 Esercizio 1
DettagliDIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 6 Marzo 2016
File Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 6 Marzo 2016 Obiettivi Il salvataggio dei dati File File e OS File in C 2 3 I programmi che abbiamo considerato finora. Perdono
DettagliTipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C
Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che
DettagliFiles in C endofile
Files in C Il C vede i file semplicemente come un flusso (stream) sequenziale di bytes terminati da un marcatore speciale che determina la fine del file (end-of-file). 0 1 2 3 4... endofile A differenza
DettagliLibrerie C. Corso di Linguaggi e Traduttori 1 AA
Corso di Linguaggi e Traduttori 1 AA 2004-05 1 Corso di Linguaggi e Traduttori 1 AA 2004-05 stdio.h 2 Funzioni comunidi I/O? Le piu' comuni funzioni che permettono I/O sono getchar() e putchar():? int
DettagliCorso di Fondamenti di Programmazione canale E-O. Strutture. Strutture. Definizione di strutture (2) Definizione di strutture (1)
Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Strutture e Unioni DD Cap. 10, pp. 379-391, 405-406 KP Cap. 9, pp. 361-379 Strutture Strutture Collezioni di variabili correlate (aggregati)
DettagliIntroduzione al C. Stream e disk file
Introduzione al C Stream e disk file Stream Un canale è una sequenza di byte di dati Sorgente o destinazione di dati che possono essere associati ad un disco o ad altre periferiche Due tipi di stream:
DettagliIntroduzione. L elaborazione dei files in C. Elaborazione dei files (1) Elaborazione dei files (2) D.D. cap. 11+ pp K.P. pp.
Introduzione L elaborazione dei files in C D.D. cap. 11+ pp. 569-572 K.P. pp. 581-583 La memorizzazione dei dati nelle variabili e nei vettori è temporanea: tutti quei dati andranno persi quando il programma
DettagliEsercitazioni Fondamenti di Informatica
Esercitazioni Fondamenti di Informatica Marco Biagi Esercitazione 10 Email: marco.biagi@unifi.it Stringhe in C Una stringa è una sequenza di caratteri con un ordine prestabilito char c = p ; char stringa[]
DettagliDichiarazioni e tipi predefiniti nel linguaggio C
Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo. Premessa Programmi provati sul compilatore Borland C++ 1.0 Altri compilatori:
DettagliLIBRERIE STANDARD in C. LIBRERIE STANDARD in C
LIBRERIE STANDARD in C La libreria standard del C è in realtà un insieme di librerie Per usare una libreria, non occorre inserirla esplicitamente nel progetto: ogni ambiente di sviluppo sa già dove cercarle
DettagliLIBRERIE STANDARD in C
LIBRERIE STANDARD in C La libreria standard del C è in realtà un insieme di librerie Per usare una libreria, non occorre inserirla esplicitamente nel progetto: ogni ambiente di sviluppo sa già dove cercarle
DettagliC: primi elementi. Lezione 4
C: primi elementi Lezione 4 Evoluzione del BCPL (1967) e B (1970), entrambi typeless Sviluppato da Dennis Ritchie nel 1972 ed implementato per il PDP-11 Usato per lo sviluppo del sistema operativo UNIX
DettagliDIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 21 Maggio 2014
File Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 21 Maggio 2014 Obiettivi Il salvataggio dei dati File File e OS File in C 2 3 I programmi che abbiamo considerato finora. Perdono
DettagliEsercizi. Filtraggio
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia Filtraggio L utente inserisce un array di numeri reali non negativi (un numero negativo indica la fine della fase di inserimento)
DettagliTitolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 4 Ing. Gian Enrico Conti Dott.
Titolo presentazione INFORMATICA A sottotitolo A.A. 2017-18 Milano, XX mese 20XX Laboratorio n 4 Ing. Gian Enrico Conti Dott. Michele Zanella Info Logistiche (cont d) Calendario laboratori Data Orario
DettagliLIBRERIE STANDARD in C Le librerie standard
LIBRERIE STANDARD in C La libreria standard del C è in realtà un insieme di librerie Per usare una libreria, non occorre inserirla esplicitamente nel progetto: ogni ambiente di sviluppo sa già dove cercarle
DettagliStrutture. Una dichiarazione struct definisce un nuovo tipo. - Può essere seguita da una lista di variabili.
Strutture Una stuttura permette di aggregare variabili di tipo differente (a differenza degli array che rappresentano sequenze di variabili dello stesso tipo). Una dichiarazione di struttura ha la forma:
DettagliI files in C. A cura del prof. Ghezzi
I files in C A cura del prof. Ghezzi 1 Perchè i files? Realizzano la persistenza dei dati dati che sopravvivono all esecuzione del programma Sono delle strutture di dati sequenziali 2 Files e S.O. I files
DettagliGestione dei files. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Via Leopardi 132
Gestione dei files Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Via Leopardi 132 Struttura del disco fisso Un disco fisso è composto da una serie di piatti sovrapposti Ogni piatto è
DettagliIntroduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016
DettagliInput/Output su File
Input/Output su File Premessa importante Queste dispense si intendono unicamente come riferimento rapido per consultare il significato e I prototipi delle funzioni per l'accesso ai file. Per avere esempi
DettagliDIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 15 Maggio 2015
File Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 15 Maggio 2015 2nda prova in itinere Era il 21 Maggio 2 2nda prova in itinere Era il 21 Maggio Spostata (da 3 settimane) al 22
DettagliCorso di Fondamenti di Programmazione canale E-O. Introduzione. Elaborazione dei files (2)
Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri L elaborazione dei files in C DD, Cap. 11 + pp. 569-572 KP, pp. 581-583 Introduzione La memorizzazione dei dati nelle variabili e nei
DettagliIntroduzione alla programmazione in linguaggio C
Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008
Dettaglipuntatori Lab. Calc. AA 2006/07 1
puntatori Lab. Calc. AA 2006/07 1 Attributi di un oggetto nome o identificatore; tipo; valore (o valori); indirizzo; Lab. Calc. AA 2006/07 2 Indirizzo Consideriamo la dichiarazione con inizializzazione:
DettagliLezione 8: Stringhe ed array multidimensionali
Lezione 8: Stringhe ed array multidimensionali Vittorio Scarano Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione AVVISO: la lezione di laboratorio di 28/5 non si
DettagliEsercizi. I File ed il C
Politecnico di Milano Esercizi File di testo,, file binari I File ed il C Insieme omogeneo di dati, memorizzato su disco e caratterizzato da un nome La lunghezza di un file non è fissata a priori Astrazione
DettagliIntroduzione al C. Esercitazione 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria Clinica
Corso di Fondamenti di Informatica Ingegneria Clinica Domenico Daniele Bloisi Informazioni Generali ing. Domenico Daniele Bloisi Dipartimento di Informatica e Sistemistica Stanza B213, secondo piano Via
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Una funzione per i numeri di Fibonacci
DettagliLe stringhe. Le stringhe sono sequenze di caratteri,
Stringhe Le stringhe Le stringhe sono sequenze di caratteri, in C le stringhe costanti vengono denotate da una successione di caratteri racchiusa fra apici Es: "ciccio" "n = %d" "Ciao Mondo" La rappresentazione
DettagliDati strutturati in C
Dati strutturati in C Fondamenti di Informatica Array Perchè usare gli array? float venditegennaio, venditefebbraio, venditemarzo, venditeaprile, venditemaggio, venditegiugno, venditeluglio, venditeagosto,
DettagliLezione 19 e Allocazione dinamica della memoria - Direttive al preprocessore - Libreria standard - Gestione delle stringhe
Lezione 19 e 20 - Allocazione dinamica della memoria - Direttive al preprocessore - Libreria standard - Gestione delle stringhe Valentina Ciriani (2005-2008) Laboratorio di programmazione Valentina Ciriani
Dettagliprogrammazione distribuita Introduzione Introduzione alla programmazione distribuita
Reti Informatiche Introduzione alla programmazione distribuita Introduzione Richiami di Programmazione C Differenze principali C/C++ 2 1 Definizioni di variabili Le variabili possono essere definite solo
DettagliLezione 6: Array e puntatori
Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Una funzione per i numeri di Fibonacci
DettagliCompendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)
Compendio sottoinsieme del C++ a comune col C (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Librerie 1/2 Il solo insieme di istruzioni di un linguaggio di programmazione
Dettagli