Esercitazione n. 6. Gestione dei file e ricorsione

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Esercitazione n. 6. Gestione dei file e ricorsione"

Transcript

1 Esercitazione n. 6 Gestione dei file e ricorsione dott. Carlo Todeschini tode@cremona.polimi.it Politecnico di Milano A.A. 2010/2011 Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non commerciale-condividi allo stesso modo 2.5 Italia

2 Problema: Che cosa succede se... (es. errori_array.c) #include <stdio.h> #define MAX_D 10 int j = 1; void pr_fun (int a[]) int i=0; for (i=0 ; i<max_d+2 ; i++) a[i] = i*j; j++; void pr (int a[max_d]) int i=0; for (i=0 ; i<max_d+2 ; i++) printf ("%d ", a[i]); main () int b[max_d]; pr_fun (b); pr (b); printf ("\n\n"); pr_fun (b); pr (b); printf ("\n"); 2

3 Problema: Che cosa succede se... (es. errori_array.c) gcc -o es_01_prova_con_array es_01_prova_con_array.c Segmentation fault tode@benfuter:~/esempi$ 3

4 Gestione dei file: ripasso/1... Per accedere a un file (sequenza lineare di byte) è necessario definire una variabile che punti al file: FILE *fp; Nota: si utilizza la libreria standard stdio.h. fp è definito un file pointer E' possibile gestire un file in tre fasi: apertura gestione/modifica chiusura 4

5 Gestione dei file: ripasso/1... Apertura di un flusso di comunicazione: FILE *fopen (nomefile, modalità) modalità: r, w, a, rb, wb, ab, r+, w+, a+, rb+, wb+, ab+ r : sola lettura (errore se non esiste) w : sola scrittura (creazione se non esiste) r+ : lettura e scrittura (errore se non esiste) w+ : scrittura e lettura (creazione se non esiste) a : append a+ : lettura e append Chiusura di un flusso di comunicazione int fclose (FILE *fp) 5

6 Gestione dei file: ripasso/2... Verifica se nelle precedenti operazioni di lettura/scrittura è stato riscontrato un errore: int ferror (FILE *fp) Nota: se restituisce 0 non ci sono stati errori Controlla se è stata raggiunta la fine del file: int feof (FILE *fp) Nota: se restituisce 0 non è stata ancora raggiunta la fine 6

7 Gestione dei file: ripasso/3... Per eseguire una operazione di scrittura formattata: int fprintf (FILE *fp, stringa di controllo, elementi) Per eseguire una operazione di lettura formattata: int fscanf (FILE *fp, stringa di controllo, indirizzo elementi) 7

8 Gestione dei file: ripasso/4... Per eseguire una operazione di lettura di un carattere: int fgetc (FILE *fp) Per eseguire una operazione di scrittura di un carattere: int fputc (int c, FILE *fp) Per eseguire una operazione di lettura di una stringa: char *fgets (char *s, int n, FILE *fp) Per eseguire una operazione di scrittura di una stringa: int fputs (char *s, FILE *fp) 8

9 Gestione dei file: ripasso/5... Per eseguire una operazione di lettura di uno o più blocchi di dati: int fread (void *ptr, dim_elemento, num_elementi, FILE *fp) Per eseguire una operazione di scrittura di uno o più blocchi di dati: int fwrite (void *ptr, dim_elemento, num_elementi, FILE *fp) 9

10 Gestione dei file: ripasso/6... Per eseguire un accesso diretto a un file che sposta l'indicatore di posizione di un numero offset di byte, in base alla direzione stabilita da ref_point : int fseek (FILE *fp, long offset, int ref_point) Per recuperare il valore corrente dell'indicatore di posizione del file: int ftell (FILE *fp) Per riportare all'inizio del file l'indicatore di posizione: rewind (FILE *fp) 10

11 Attenzione: formato dei file... Tipi di file: Testo... Binari... 11

12 C/1: Merge di file Problema Si vuole realizzare un programma in linguaggio C in grado di: leggere due file che contengono rispettivamente il titolo e gli attori principali (anche più di uno) di una serie di film creare un file unico con, per ogni film, titolo e attori principali. Formato file titoli : Il Signore degli Anelli Guerre stellari Frankenstein Jr. Formato file attori : Viggo Mortensen Ian McKellen Elijah Wood # Mark Hamill Harrison Ford # Marty Feldman Gene Wilder # 12

13 C/1: Merge di file Codice sorgente/1 /* Questo file contiene la definizione di una funzione, 'mergebibliodata', che prende in input il nome di due file che contengono rispettivamente il titolo e gli attori principali (anche più di uno) di una serie di film, e creano un file unico con, per ogni film, titolo e attori principali. Nel file con i titoli, ad ogni riga corrisponde un film diverso (non ci devono essere righe vuote alla fine). Nel file con gli attori, le sequenze di attori sono separate da una riga che contiene il solo carattere '#' (non sono ammesse righe vuote alla fine). 13

14 C/1: Merge di file Codice sorgente/2 Per esempio un file di attori può essere: Viggo Mortensen Ian McKellen Elijah Wood # Mark Hamill Harrison Ford # Marty Feldman Gene Wilder # */ La funzione 'mergebibliodata' ritorna un valore intero, che può assumere diversi valori a seconda del risultato della funzione: - 0 la funzione ha avuto successo - 1 non è stato possibile aprire il file di input con i titoli dei film - 2 non è stato possibile aprire il file di input con gli attori - 3 non è stato possibile aprire il file di destinazione - 4 il formato dei file di input non è corretto (per esempio se i due file contengono dati di un numero diverso di film) 14

15 C/1: Merge di file Codice sorgente/3 #include <stdio.h> #include <string.h> #include "usertypes.h" /* Si definisce il significato del codice ritornato dalla funzione 'mergebibliodata' */ #define SUCCESSO 0 #define FILE_TITOLI_NON_APERTO 1 #define FILE_ATTORI_NON_APERTO 2 #define OUTPUT_NON_APERTO 3 #define FORMATO_FILE_INPUT_ERRATO 4 /* Al massimo i file di input possono avere linee lunghe MAX_LUNGH_LINEA elementi */ #define MAX_LUNGH_LINEA 80 15

16 C/1: Merge di file Codice sorgente/4 /* Il tipo corrispondente di stringa ha 2 caratteri in più: uno per il carattere '\000' di fine stringa, e uno per il carattere di 'a capo' ('\n') */ typedef char riga_input [MAX_LUNGH_LINEA+2]; int mergebibliodata (char *nome_file_titoli, char *nome_file_attori, char *nome_file_output) FILE *titoli, *attori, *output; riga_input titolo, attore; bool prossimo_titolo; int lstr; 16

17 C/1: Merge di file Codice sorgente/5 /* Si aprono i file di input in modalità "sola lettura, file di testo"; se l'operazione di apertura del file non ha successo si ritorna un errore */ titoli = fopen (nome_file_titoli, "r"); if (titoli == NULL) return FILE_TITOLI_NON_APERTO; /* Nel caso si ritorni un errore, ci si deve prima ricordare di chiudere il file precedentemente aperto (stessa cosa quando si cerca di aprire il file di output) */ attori = fopen (nome_file_attori, "r"); if (attori == NULL) fclose (titoli); return FILE_ATTORI_NON_APERTO; 17

18 C/1: Merge di file Codice sorgente/6 /* Si apre il file di output in modalità "scrittura, file di testo"; se l'operazione di apertura del file non ha successo si ritorna un errore */ output = fopen (nome_file_output, "w"); if (output == NULL) fclose (attori); fclose (titoli); return OUTPUT_NON_APERTO; 18

19 C/1: Merge di file Codice sorgente/7 while (!feof(titoli)) /* Se non si è ancora arrivati in fondo al file dei titoli, ma non ci sono più attori, si segnala un errore, perchè ci sono più titoli che gruppi di attori */ if (feof (attori)) fclose (titoli); fclose (attori); fclose (output); return FORMATO_FILE_INPUT_ERRATO; 19

20 C/1: Merge di file Codice sorgente/8 fgets (titolo, MAX_LUNGH_LINEA+1, titoli); /* Si controlla l'ultimo carattere inserito nella stringa: se non è 'newline', si inserisce il carattere di '\n' in fondo alla stringa */ lstr = strlen (titolo); if (titolo[lstr-1]!= '\n') titolo[lstr] = '\n'; titolo[lstr+1] = '\000'; /* Si scrive il titolo ('newline' compreso!) nel file di output */ fputs (titolo, output); 20

21 C/1: Merge di file Codice sorgente/9 /* Si recuperano i nomi degli attori; se non ci sono più attori nel file vuol dire che ci sono più titoli di gruppi di attori, e si segnala un errore */ prossimo_titolo = false; while (!feof(attori) &&!prossimo_titolo) fgets (attore, MAX_LUNGH_LINEA+1, attori); /* Se il primo carattere della riga è '#' si passa al prossimo titolo, cioè sono finiti gli attori per il film corrente */ if (attore[0] == '#') prossimo_titolo = true; 21

22 C/1: Merge di file Codice sorgente/10 else /* Se serve, si aggiunge un '\n' in fondo alla riga letta */ lstr = strlen (attore); if (attore[lstr-1]!= '\n') attore[lstr] = '\n'; attore[lstr+1] = '\000'; fputs (attore, output); fprintf (output, "#\n"); fclose (titoli); fclose (output); 22

23 C/1: Merge di file Codice sorgente/11 /* Se si è giunti in fondo al file dei titoli, ma ci sono ancora attori, si segnala un errore, perchè ci sono più gruppi di attori che titoli di film */ if (!feof(attori)) fclose (attori); return FORMATO_FILE_INPUT_ERRATO; fclose (attori); return SUCCESSO; 23

24 C/1: Merge di file Codice sorgente/12 main () int ris; ris = mergebibliodata ("es_02_mergefile_titolifilm", "es_02_mergefile_attorifilm", "es_02_mergefile_datifilm"); 24

25 C/1: Merge di file Codice sorgente/13 switch (ris) case SUCCESSO: printf ("Operazione avvenuta con successo\n"); break; case FILE_TITOLI_NON_APERTO: printf ("Errore nell'apertura del file con i titoli\n"); break; case FILE_ATTORI_NON_APERTO: printf ("Errore nell'apertura del file con gli attori\n"); break; case OUTPUT_NON_APERTO: printf ("Errore nell'apertura del file di output\n"); break; case FORMATO_FILE_INPUT_ERRATO: printf ("I file di input hanno un formato errato\n"); break; default: printf ("Codice ritornato non riconosciuto!\n"); 25

26 C/2: Controllo parentesi Problema Si vuole realizzare un programma in linguaggio C in grado di leggere un file di testo in codice C, e di controllare che per ogni parentesi graffa e tonda aperta ce ne sia una chiusa corrispondente (vengono verificate anche le parentesi all'interno dei commenti). Una parentesi graffa non può apparire mentre ci sono parentesi tonde aperte. Esercizio da svolgere in autonomia: modificare il programma in modo tale che le parentesi all'interno dei commenti vengano saltate (per questo occorre riconoscere le sequenze di caratteri che marcano l'inizio e la fine di un commento...) 26

27 C/2: Controllo parentesi Codice sorgente/1 /* Questo file contiene la definizione di una funzione, 'controllaparentesi', che prende in input il nome di un file che contiene codice C, e controlla che per ogni parentesi graffa e tonda aperta ce ne sia una chiusa corrispondente (vengono verificate anche le parentesi all'interno dei commenti). Una parentesi graffa non può apparire mentre ci sono parentesi tonde aperte. */ La funzione ritorna un intero, che può assumere i seguenti significati: - 0 tutto OK - 1 sono presenti delle parentesi graffe aperte - 2 sono presenti delle parentesi tonde aperte - 3 sono presenti delle parentesi graffe chiuse e mai aperte - 4 sono presenti delle parentesi tonde chiuse e mai aperte - 5 sono presenti graffe aperte o chiuse ma ci sono ancora delle tonde da chiudere - 6 impossibile aprire il file 27

28 C/2: Controllo parentesi Codice sorgente/2 #include <stdio.h> #define OK 0 #define GRAFFE_APERTE 1 #define TONDE_APERTE 2 #define GRAFFE_NON_APERTE 3 #define TONDE_NON_APERTE 4 #define GRAFFE_CON_TONDE 5 #define FILE_NON_APERTO 6 28

29 C/2: Controllo parentesi Codice sorgente/3 int controllaparentesi (char *nome_file_c) FILE *file; char curr; int graffe_aperte = 0, tonde_aperte = 0, ris = OK; /* Si apre il file di input in modalità sola lettura, file di testo; se l'operazione di apertura del file non ha successo si ritorna un errore. */ file = fopen (nome_file_c, "r"); if (file == NULL) return FILE_NON_APERTO; 29

30 C/2: Controllo parentesi Codice sorgente/4 while (ris == OK &&!feof(file)) curr = fgetc (file); if (curr == '') if (tonde_aperte > 0) ris = GRAFFE_CON_TONDE; else graffe_aperte++; else if (curr == '(') tonde_aperte++; else if (curr == '') 30

31 C/2: Controllo parentesi Codice sorgente/5 if (graffe_aperte > 0) if (tonde_aperte > 0) ris = GRAFFE_CON_TONDE; else graffe_aperte--; else ris = GRAFFE_NON_APERTE; 31

32 C/2: Controllo parentesi Codice sorgente/6 else if (curr == ')') if (tonde_aperte > 0) tonde_aperte--; else ris = TONDE_NON_APERTE; if (ris == OK && graffe_aperte > 0) ris = GRAFFE_APERTE; else if (ris == OK && tonde_aperte > 0) ris = TONDE_APERTE; fclose (file); return ris; 32

33 C/2: Controllo parentesi Codice sorgente/7 main () int ris; ris = controllaparentesi ("es_03_controlloparentesitest.c"); switch (ris) case OK: printf ("Operazione avvenuta con successo\n"); break; case GRAFFE_APERTE: printf ("Ci sono delle parentesi graffe aperte\n"); break; case TONDE_APERTE: printf ("Ci sono delle parentesi tonde aperte\n"); break; 33

34 C/2: Controllo parentesi Codice sorgente/8 case GRAFFE_NON_APERTE: printf ("Ci sono delle parentesi graffe chiuse e mai aperte\n"); break; case TONDE_NON_APERTE: printf ("Ci sono delle parentesi tonde chiuse e mai aperte\n"); break; case GRAFFE_CON_TONDE: printf ("Ci sono delle parentesi graffe aperte o chiuse con parentesi tonde da chiudere\n"); break; case FILE_NON_APERTO: printf ("Non è stato possibile aprire il file\n"); break; default: printf ("Codice ritornato incomprensibile!\n"); 34

35 Programmazione ricorsiva: ripasso/1... Dal libro di testo: Si parte dal presupposto che per moltissimi problemi la soluzione per un caso generico può essere ricavata sulla base della soluzione di un altro caso, generalmente più semplice, dello stesso problema 35

36 Programmazione ricorsiva: ripasso/2... Un sottoprogramma può dunque richiamare se stesso! Il classico esempio: la successione dei numeri di Fibonacci f 0 = 0 f 1 = 1 Per n>1, f n = f n-1 + f n-2 String reversal 36

37 Programmazione ricorsiva: ripasso/3... #include <stdio.h> int calcolafibonacci (int numero); main () int numerodacalcolare; printf ("Inserire numero: "); scanf ("%d", &numerodacalcolare); printf ("Numero di Fibonacci f(%d) = %d\n", numerodacalcolare, calcolafibonacci (numerodacalcolare)); int calcolafibonacci (int numero) if (numero == 0) return 0; else if (numero == 1) return 1; else return (calcolafibonacci (numero-1) + calcolafibonacci (numero-2)); 37

38 C/4: Palindrome Problema Si vuole realizzare un programma in linguaggio C in grado di verificare se una parola inserita dall'utente è o meno palindroma. Es: ama anna effe ereggere Il palindromo è una serie di simboli leggibile, senza cambiamento di significato, in ordine invertito. 38

39 C/4: Palindrome Codice sorgente/1 /* Questo programma prende una stringa e determina se è palindroma, cioè se è uguale sia che la si legga a partire dall'inizio, sia che la si legga a partire dal fondo. Per esempio, la parola RADAR è palindroma. Per verificare se una stringa è palindroma si usa tipicamente un algoritmo ricorsivo, che funziona nel modo che segue: 1. se la stringa da verificare è di lunghezza 1 o 0, STOP: è palindroma 2. confrontare il primo carattere con l'ultimo nella stringa: se sono diversi STOP, la stringa NON E' palindroma 3. se il primo e l'ultimo carattere sono uguali, ripetere l'algoritmo sulla stringa ottenuta eliminando il primo e l'ultimo carattere */ 39

40 C/4: Palindrome Codice sorgente/2 #include <stdio.h> #include <string.h> #include "usertypes.h" #define MAX_EL

41 C/4: Palindrome Codice sorgente/3 bool palindroma (char *s, int n_el) /* Caso di base: se la stringa ha solo 1 elemento o se è la stringa vuota, è palindroma */ if (n_el < 2) return true; /* Passo ricorsivo */ if (s[0] == s[n_el-1]) return palindroma(s+1, n_el-2); else return false; 41

42 C/4: Palindrome Codice sorgente/4 main () char parola[max_el+1]; bool palindroma (char *s, int n_el); printf ("Inserire la parola da controllare: "); scanf ("%s", parola); if (palindroma (parola, strlen(parola))) printf ("La parola \"%s\" è palindroma\n", parola); else printf ("La parola \"%s\" NON è palindroma\n", parola); 42

43 C/4: Palindrome Compito Il programma realizzato è in grado di riconoscere solo parole palindrome come ad esempio ama, anna, effe, ereggere. Da svolgere autonomamente: Modificare tale programma in modo che sia in grado leggere frasi palindrome come ad esempio Alle carte t'alleni nella tetra cella, E' corta e atroce (nota: non devono essere considerati segni di punteggiatura, accenti e spazi; cercare in rete frasi palindrome da verificare...) 43

44 C/5: Binary search Problema Si vuole realizzare un programma in linguaggio C che acquisisca una sequenza di interi, e li inserisca in modo ordinato (in ordine crescente) in un array di elementi. Viene data poi la possibilità all'utente di inserire un valore da cercare nell'array. La ricerca viene fatta con l'algoritmo di ricerca binaria (quello dell'elenco telefonico...). 44

45 C/5: Binary search Codice sorgente/1 /* Questo programma prende una sequenza di interi, e li inserisce in modo ordinato (in ordine crescente) in un array di elementi. Viene chiesto all'utente di inserire un valore da cercare nell'array. La ricerca viene fatta con l'algoritmo di ricerca binaria (quello dell'elenco telefonico...). */ Gli scopi della funzione definita in questo programma sono di mostrare come in realtà gli array siano SEMPRE passati per indirizzo (funzione inser_ord), e fare un esempio di funzione ricorsiva (binary_search) #include <stdio.h> #include "usertypes.h" #define MAX_EL

46 C/5: Binary search Codice sorgente/2 /* la funzione prende un array di interi a (il quale ha le prime n_el caselle occupate) e inserisce in modo ordinato un nuovo intero v, se v ancora non esiste nell'array. Se l'operazione va a buon fine viene restituito l'indice in cui viene inserito il nuovo elemento e il numero di elementi nell'array viene incrementato di 1, altrimenti viene restituito -1 (una variante rispetto all'uso di un tipo bool apposito). Si tratta l'array con la sintassi degli array, quindi si riferiscono gli elementi con le parentesi quadre. */ 46

47 C/5: Binary search Codice sorgente/3 int inser_ord (int v, int a[max_el], int *n_el) /* possibile intestazione anche per la funzione: int inser_ord (int v, int a[], int *n_el) int inser_ord (int v, int *a, int *n_el) */ int j, i=0; while (i<*n_el && a[i] < v) i++; /* Se il valore esiste già si ritorna -1 senza modificare l'array */ if (i<*n_el && a[i] == v) return -1; 47

48 C/5: Binary search Codice sorgente/4 else /* Prima di tutto si spostano tutti gli elementi nell'array in avanti di un posto */ for (j=*n_el; j>i ; j--) a[j] = a[j-1]; a[i] = v; *n_el = *n_el+1; /* Attenzione perchè se si scrive *n_el++ non è corretto perchè viene incrementato l'indirizzo contenuto in n_el, invece che il contenuto della cella in cui indirizzo è in n_el */ return i; 48

49 C/5: Binary search Codice sorgente/5 /* Notare come in realtà in questo programma non si faccia per niente uso della costante 'MAX_EL'. In effetti, per il C, scrivere che un parametro in ingresso è "int a[max_el]", oppure è "int a[]", oppure ancora (ed è la scrittura più comune) è "int *a" non cambia niente, le tre scritture sono del tutto equivalenti. Non è quindi possibile verificare che l'array passato sia effettivamente della lunghezza MAX_EL (si potrebbe tranquillamente chiamare la funzione passando un array di MAX_EL*2 elementi, e il compilatore non segnalerebbe nessun errore), ne è possibile verificare che nell'array ci sia ancora spazio: è la funzione chiamante che deve preoccuparsi di passare un array che abbia ancora delle caselle libere per inserire l'elemento nuovo */ 49

50 C/5: Binary search Codice sorgente/6 /* In questa procedura, che stampa i primi n_el elementi di un array a di interi, si tratta l'array come un puntatore (perchè un array in realtà è un puntatore). Invece di fare riferimento agli elementi con la notazione con le parentesi quadre, si utilizza la notazione dei puntatori (con gli '*') */ void stampa_array (int *a, int n_el) int i; for (i=0 ; i<n_el ; i++) printf ("%d ", *(a+i)); printf ("\n"); 50

51 C/5: Binary search Codice sorgente/7 /* Questa funzione prende in ingresso un array ordinato di interi (insieme al numero di caselle occupate dell'array), e un valore, e ritorna true o false a seconda che il valore passato sia presente nell'array o no. */ L'algoritmo che viene usato è tipicamente ricorsivo: 1. Passo di base: se l'insieme in cui cercare è vuoto STOP, l'elemento NON esiste; 2. Passo ricorsivo: si prende l'elemento di mezzo dell'insieme; se l'elemento è uguale a quello cercato STOP, l'elemento è stato trovato; se l'elemento di mezzo è MAGGIORE di quello cercato, applicare la ricerca binaria alla prima metà dell'insieme, altrimenti applicare la ricerca binaria alla seconda metà dell'insieme. 51

52 C/5: Binary search Codice sorgente/8 bool binary_search (int v, int *a, int n_el) /* Caso di base: se l'insieme è vuoto, l'elemento cercato non esiste */ if (n_el == 0) return false; /* Passo ricorsivo */ if (a[n_el/2] == v) return true; else if (a[n_el/2] > v) return binary_search (v, a, n_el/2); else return binary_search (v, a+n_el/2+1, n_el/2-1+n_el%2); 52

53 C/5: Binary search Codice sorgente/9 /* La parte più complessa è definire correttamente in C la forma delle due metà dell'insieme di partenza. Nel caso in cui si debba applicare la ricerca binaria alla SECONDA metà dell'insieme di partenza, si deve passare (ricorsivamente) alla funzione "binary_search" la seconda metà dell'array a. Per fare questo si passa l'indirizzo della casella dell'array successiva a quella che si trova a metà array (inizio della seconda metà dell'array a), e si specifica che la lunghezza di questa parte dell'array è n_el/2-1+n_el%2 Infatti, supponendo che n_el sia 8, e quindi che gli indici delle caselle nell'array a vadano da 0 a 7: a[n_el/2] (ovvero l'elemento di indice 4, che è il quinto) è l'elemento di mezzo che viene confrontato con v. Se v è maggiore di a[n_el/2] (quindi si trova nella seconda metà), si effettua la ricerca binaria sull'insieme [5 6 7], che è in effetti la parte di array che inizia dall'indice n_el/2+1, ed è lunga n_el/2-1+n_el%2, cioe' = 3 */ 53

54 C/5: Binary search Codice sorgente/10 main() int dati[max_el], dato_corr; int num_el=0; int inser_ord (int v, int a[max_el], int *n_el); bool binary_search (int v, int *a, int n_el); void stampa_array (int *a, int n_el); do printf ("Inserire elemento (0 per terminare, max %d elementi): ", MAX_EL); scanf ("%d", &dato_corr); 54

55 C/5: Binary search Codice sorgente/11 /* Qui si inserisce anche lo 0! */ inser_ord (dato_corr, dati, &num_el); /* num_el viene passato per indirizzo, viene incrementato solo se l'elemento non esiste già nell'array. */ Notare come sia possibile non assegnare il valore ritornato da una funzione, il quale in questo caso viene ignorato printf ("Nuova situazione dell'array:\n"); stampa_array (dati, num_el); while (dato_corr!= 0 && num_el<max_el); 55

56 C/5: Binary search Codice sorgente/12 do printf ("\ninserire elemento da cercare (0 per terminare): "); scanf ("%d", &dato_corr); if (binary_search (dato_corr, dati, num_el) == true) printf ("\nil numero %d è presente nell'array\n", dato_corr); else printf ("\nil numero %d NON è presente nell'array\n", dato_corr); while (dato_corr!= 0); 56

57 C/compito: La torre di Hanoi Problema Si vuole realizzare un programma in linguaggio C in grado di giocare al gioco della torre di Hanoi (v. libro di testo). Da Wikipedia: La Torre di Hanoi è un rompicapo matematico composto da tre paletti e un certo numero di dischi di grandezza decrescente, che possono essere infilati in uno qualsiasi dei paletti. Il gioco inizia con tutti i dischi incolonnati su un paletto in ordine decrescente, in modo da formare un cono. Lo scopo del gioco è portare tutti dischi sull'ultimo paletto, potendo spostare solo un disco alla volta e potendo mettere un disco solo su un altro disco più grande, mai su uno più piccolo. Tower of Hanoi 57

58 C/compito: La torre di Hanoi Buone vacanze Buon lavoro ;-) 58

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Input/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

Dettagli

Operazioni su file di caratteri

Operazioni 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

Dettagli

I files in C. A cura del prof. Ghezzi

I 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

Dettagli

Gestione dei File in C

Gestione dei File in C Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte

Dettagli

Gestione dei file. File di testo e binari

Gestione dei file. File di testo e binari Gestione dei file Un file e definito come un oggetto, presente nel file system, costituito da una sequenza continua di bytes Un file, per poter essere utilizzato, deve essere aperto Successivamente e possibile

Dettagli

Linguaggio C: i file

Linguaggio 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

Dettagli

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

GESTIONE 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

Dettagli

Esercizi. I File ed il C

Esercizi. 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

Dettagli

file fisico file logico

file 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

Dettagli

Scrittura formattata - printf

Scrittura formattata - printf Esercizi su Input/Output con formato FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( , ) La funzione restituisce un valore intero uguale ai caratteri

Dettagli

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

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi lisi@di.uniba.it Sommario Generalità sui file in C I file ad accesso sequenziale I file di testo Riferimenti

Dettagli

Gestione dei File. dischi nastri cd

Gestione dei File. dischi nastri cd Gestione dei File Per mantenere disponibili i dati tra le diverse esecuzioni di un programma, questi si devono archiviare in file su memoria di massa (dati persistenti): dischi nastri cd Un file è un astrazione

Dettagli

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 15 Maggio 2013

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. File. Marco D. Santambrogio Ver. aggiornata al 15 Maggio 2013 File Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 15 Maggio 2013 Obiettivi Alcuni problemi aperti Il main() Allocazione dinamica della memoria Il salvataggio dei dati File File

Dettagli

Esercizi C su array e matrici

Esercizi C su array e matrici Politecnico di Milano Esercizi C su array e matrici Massimo, media e varianza,, ordinamento, ricerca e merge, matrice simmetrica, puntatori Array Array o vettore Composto da una serie di celle int vett[4]

Dettagli

File binari e file di testo

File 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

Dettagli

Gestione dei File. Indice. Il file system in C. Principali operazioni sui file (dalla Standard Library) Esempi. Corso di Informatica A.

Gestione dei File. Indice. Il file system in C. Principali operazioni sui file (dalla Standard Library) Esempi. Corso di Informatica A. Gestione dei File Corso di Informatica A Vito Perrone 1 Il file system in C Indice Principali operazioni sui file (dalla Standard Library) Esempi 2 Il file system in C Flusso di comunicazione: binario

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Quicksort e qsort() Alessio Orlandi. 28 marzo 2010

Quicksort e qsort() Alessio Orlandi. 28 marzo 2010 Quicksort e qsort() Alessio Orlandi 28 marzo 2010 Intro Quicksort è l algoritmo di ordinamento più implementato, insieme con Mergesort. Tutte le librerie standard UNIX ne prevedono una implementazione.

Dettagli

File e puntatori a file

File 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

Dettagli

La gestione dei file in C

La gestione dei file in C Gestione dei file La gestione dei file in C Il file è un astrazione molto ampia nella descrizione di un sistema informatico nastro di I/O supporto di comunicazione macchina/ambiente di ogni tipo (sensori,

Dettagli

int ninv; /* numero di inventario */

int ninv; /* numero di inventario */ 1) Scrivere il programma C che legga da un file di testo ("dati.dat") i record con dati relativi ad un archivio di dischi (utilizzando la struttura data) e scriva il file dati1.dat con i nomi degli artisti

Dettagli

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Gestione 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

Dettagli

C: panoramica. Violetta Lonati

C: 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

Dettagli

I File. Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa.

I File. Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa. I File Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa. Consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centrale. Generalmente un

Dettagli

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

Gestione dei file. Linguaggio ANSI C Input/Output - 13 Gestione dei file Necessità di persistenza dei file archiviare i file su memoria di massa. Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni

Dettagli

Programmazione I - Laboratorio

Programmazione I - Laboratorio Programmazione I - Laboratorio Esercitazione 4 - Puntatori, vettori e stringhe Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti

Dettagli

I file. un file è una sorgente/destinazione di dati per diversi attori

I file. un file è una sorgente/destinazione di dati per diversi attori I file Il file è un astrazione molto ampia nella descrizione di un sistema informatico: Il concetto di file è uno snodo fondamentale di flussi di informazione anche tra applicazioni diverse un file è una

Dettagli

I file possono essere manipolati (aperti, letti, scritti ) all interno di programmi C. dischi nastri cd

I 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

Dettagli

Suggerimenti, note utili ed errori comuni. Fondamenti di informatica T

Suggerimenti, 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

Dettagli

Sommario FONDAMENTI DI INFORMATICA 1. Il tipo FILE. Passaggio da standard I/O. LINGUAGGIO C Gestione dei file

Sommario 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

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli

Gestione dei File C. Generalità

Gestione 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

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Gestione dei file in PHP

Gestione dei file in PHP Gestione di File Gestione dei file in PHP Per aprire un file è sufficiente utilizzare la funzione resource fopen(string filename, string mode) filename rappresenta il file da aprire mode rappresenta la

Dettagli

Esercizi. Stringhe. Stringhe Ricerca binaria

Esercizi. Stringhe. Stringhe Ricerca binaria Politecnico di Milano Esercizi Stringhe Stringhe Array di caratteri Funzioni: strcpy() strcmp() strlen() char stringaa[10], stringab[10]; strcpy(stringaa, stringab); Copia if (strcmp(stringaa, stringab)

Dettagli

C espressioni condizionali

C espressioni condizionali C espressioni condizionali Esiste un particolare operatore, detto operatore condizionale, che rappresenta un istruzione if else. estremamente compattata?: Supponiamo di voler inserire nella variabile intera

Dettagli

Esercizio 1 (15 punti)

Esercizio 1 (15 punti) Esercizio 1 (15 punti) Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 16 giugno 2017 Il noto gioco MasterMind

Dettagli

Introduzione alla programmazione in linguaggio C

Introduzione 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

Dettagli

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Esercizio 1: funzione con valore di ritorno di tipo puntatore Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 7 Esercitazione: 14 dicembre 2005 Esercizi su ricorsione, manipolazione stringhe, strutture dinamiche Problema: Esercizio

Dettagli

Programmazione di base

Programmazione di base Fondamenti di Informatica Testo A Secondo Appello 016-17 febbraio 017 Rispondi alle domande negli appositi spazi. I punti assegnati per ogni domanda sono indicati nel riquadro a lato. L'esame contiene

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Cosa sono i file? Un file è un archivio di dati che puo essere registrato su un supporto di massa (testo, lettera, programma, archivio di dati, ecc.) Fondamenti di Informatica 12. Linguaggio C - Gestione

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

File binari, Operazioni sui File binari, Allocazione dinamica della memoria

File binari, Operazioni sui File binari, Allocazione dinamica della memoria File binari, Operazioni sui File binari, Allocazione dinamica della memoria Vitoantonio Bevilacqua bevilacqua@poliba.it Parole chiave: File binari, Funzioni principali file binari, Funzione malloc, Allocazione

Dettagli

Indice. La gestione dei file in C e gli stream. Apertura e chiusura di un file. Operazioni sui file. Accesso sequenziale e non sequenziale

Indice. La gestione dei file in C e gli stream. Apertura e chiusura di un file. Operazioni sui file. Accesso sequenziale e non sequenziale File in C Indice La gestione dei file in C e gli stream Apertura e chiusura di un file Operazioni sui file Accesso sequenziale e non sequenziale Gestione dei file in C In C all interno della standard library

Dettagli

Introduzione al C. Stream e disk file

Introduzione 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:

Dettagli

Capitolo 11 Elaborazione di file

Capitolo 11 Elaborazione di file 1 Capitolo 11 Elaborazione di file 11.1 Introduzione 2 I file Possono essere creati, modificati, ed elaborati da programmi scritti in C Sono utilizzati per la memorizzazione permanente dei dati La memorizzazione

Dettagli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del

Dettagli

Esercizio 1: calcolo insieme intersezione

Esercizio 1: calcolo insieme intersezione Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 3 Esercitazione: 19 ottobre 2005 Esercizi su array e matrici Esercizio 1: calcolo insieme intersezione Problema: *******************************************************************

Dettagli

Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011

Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011 Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I/O in C Il sistema di I/O del C è una interfaccia uniforme

Dettagli

Algoritmi di ordinamento: Array e ricorsione

Algoritmi di ordinamento: Array e ricorsione Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Indice Algoritmi di ordinamento: Insertion

Dettagli

Le 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. 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

Dettagli

- int nbrani = 0; //numero di brani presenti in archivio. int creaplaylist(tipobrano[] playlist, int n, TipoGenere g, TipoFile t);

- int nbrani = 0; //numero di brani presenti in archivio. int creaplaylist(tipobrano[] playlist, int n, TipoGenere g, TipoFile t); Appello 12.09.2007-1- punti 15 (4+6+5) a) ctunes è un programma per la gestione di archivi musicali; serve per raccogliere informazioni riguardanti tutti i file musicali presenti su un computer e per creare

Dettagli

Informatica 1. Prova di recupero 21 Settembre 2001

Informatica 1. Prova di recupero 21 Settembre 2001 Informatica 1 Prova di recupero 21 Settembre 2001 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo

Dettagli

Un file è un astrazione di memorizzazione di dimensione potenzialmente illimitata (ma non infinita), ad accesso sequenziale.

Un file è un astrazione di memorizzazione di dimensione potenzialmente illimitata (ma non infinita), ad accesso sequenziale. IL CONCETTO DI FILE Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa. Concettualmente, un file è una sequenza di registrazioni

Dettagli

Sono file di caratteri, organizzati in linee. Ogni linea e` terminata da una marca di fine linea (newline, cara ttere '\n').

Sono file di caratteri, organizzati in linee. Ogni linea e` terminata da una marca di fine linea (newline, cara ttere '\n'). I File Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa. Consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centrale. Generalmente un

Dettagli

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Fondamenti di Informatica 6. Algoritmi e pseudocodifica Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie

Dettagli

Linguaggio C Gestione File

Linguaggio C Gestione File Gestione File: Il file è l'unità logica di memorizzazione dei dati su memoria di massa, che consente una memorizzazione persistente dei dati non limitata dalle dimensioni della memoria centrale. Nel linguaggio

Dettagli

Lab 10 Gestione file di testo

Lab 10 Gestione file di testo Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 10 Gestione file di testo Lab15 1 Esercizio 1 n Realizzare un programma che, aperto un file di testo di nome

Dettagli

Programmazione di base

Programmazione di base Fondamenti di Informatica Primo Appello 01-17 8 febbraio 017 Rispondi alle domande negli appositi spazi. I punti assegnati per ogni domanda sono indicati nel riquadro a lato. L'esame contiene 10 domande,

Dettagli

LA RICORSIONE IN C. CdL Ingegneria Informatica n.o. Anno Accademico 2006/07 Fondamenti di Informatica I corso A Giacomo Piscitelli pag.

LA RICORSIONE IN C. CdL Ingegneria Informatica n.o. Anno Accademico 2006/07 Fondamenti di Informatica I corso A Giacomo Piscitelli pag. I lucidi sono una rielaborazione e integrazione di quelli messi a disposizione dei docenti nel sito relativo al testo: Informatica: arte e mestiere 2/ed Stefano Ceri, Dino Mandrioli, Licia Sbattella Copyright

Dettagli

Relativamente agli esempi sopra riportati, al termine dell esecuzione della funzione il file di uscita dovrà contenere quanto riportato a lato.

Relativamente agli esempi sopra riportati, al termine dell esecuzione della funzione il file di uscita dovrà contenere quanto riportato a lato. Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 2 febbraio 2016 Esercizio 1 (16 punti) Un file di testo contiene

Dettagli

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 13/03/07 Nota Questi lucidi sono tratti

Dettagli

Caratteri e stringhe

Caratteri 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

Dettagli

ESERCIZIO: Lettura/Scrittura Array

ESERCIZIO: Lettura/Scrittura Array ESERCIZIO: Lettura/Scrittura Array Non è possibile leggere/scrivere un intero vettore con un unica operazione (a parte il caso particolare delle stringhe); occorre leggere/scrivere ognuno dei suoi componenti

Dettagli

FILE: 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 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

Dettagli

IL PRIMO PROGRAMMA IN C

IL PRIMO PROGRAMMA IN C IL PRIMO PROGRAMMA IN C LO SCOPO Si vuole scrivere un programma in linguaggio C che chieda all utente di introdurre da tastiera due numeri interi e visualizzi il valore della loro somma sul video SOLUZIONE

Dettagli

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 07/02/07 Nota Questi lucidi sono tratti

Dettagli

Il linguaggio C. Puntatori e dintorni

Il 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;

Dettagli

Informatica A (per gestionali) A.A. 2004/2005. Esercizi di riepilogo

Informatica A (per gestionali) A.A. 2004/2005. Esercizi di riepilogo Informatica A (per gestionali) A.A. 2004/2005 Esercizi di riepilogo Indice 1 File... 3 1.1 Codifica file di testo...3 1.2 Elimina tag HTML...4 1.3 File binario ordinato...6 1.4 Archivio film...7 1.5 Archivio

Dettagli

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali MASTER Information Technology Excellence Road (I.T.E.R.) Array Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Tipi di dato stutturati In C si possono

Dettagli

Input/output in C e in C++

Input/output in C e in C++ FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Input/output in C e in C++ 2001 Pier Luca Montessoro - Davide Pierattoni

Dettagli

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system - Complementi - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system - Università degli Studi di Brescia Prof. Massimiliano Giacomin

Dettagli

Input robusto. I/O Avanzato e File. Lettura da file. Input robusto. Esempio. Errori di formato

Input robusto. I/O Avanzato e File. Lettura da file. Input robusto. Esempio. Errori di formato Problemi nella lettura da file Soluzione basata su fgetc Funzione sscanf Soluzione basata su fgets I/O Avanzato e File 2 Lettura da file I file di testo contengono dati secondo un certo formato È semplice

Dettagli

INTRODUZIONE. ALLA PROGRAMMAZIONEColonna 1. in linguaggio C

INTRODUZIONE. ALLA PROGRAMMAZIONEColonna 1. in linguaggio C 12 10 8 INTRODUZIONE 6 4 ALLA PROGRAMMAZIONEColonna 1 Colonna 2 Colonna 3 in linguaggio C 2 0 Riga 1 Riga 2 Riga 3 Riga 4 di Mauro Casula { Scopi del seminario Essere chiaro ed esauriente; Spiegare nei

Dettagli

Gestione di files Motivazioni

Gestione di files Motivazioni Gestione di files Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera) il programma in esecuzione scrive (sequenzialmente)

Dettagli

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi Obiettivi Unità F1 Primi programmi Conoscere il significato di dichiarazione e definizione di variabili Conoscere i tipi di dato numerici Essere in grado di realizzare semplici algoritmi in pseudolinguaggio

Dettagli

Linguaggio C. Esercizio 1

Linguaggio C. Esercizio 1 Linguaggio C Esercizi su puntatori e liste Walter Didimo (e-mail:didimo@dia.uniroma3.it) supplemento al Corso di Calcolatori Elettronici (Riccardo Torlone) 1 Esercizio 1 Siano p e q due puntatori a variabili

Dettagli

Lezione 8 Struct e qsort

Lezione 8 Struct e qsort Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort

Dettagli

Informatica 1. Prova di recupero 15 Febbraio 2005

Informatica 1. Prova di recupero 15 Febbraio 2005 Informatica 1 Prova di recupero 15 Febbraio 2005 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo

Dettagli

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length); Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di

Dettagli

Capitolo 5 -- Stevens

Capitolo 5 -- Stevens Libreria standard di I/O Capitolo 5 -- Stevens Libreria standard di I/O rientra nello standard ANSI C perché è stata implementata su molti sistemi operativi oltre che su UNIX le sue funzioni individuano

Dettagli

Introduzione. 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. 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

Dettagli

Lezione 6 Introduzione al C++ Mauro Piccolo

Lezione 6 Introduzione al C++ Mauro Piccolo Lezione 6 Introduzione al C++ Mauro Piccolo piccolo@di.unito.it Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,

Dettagli

ALGORITMI E STRUTTURE DATI

ALGORITMI E STRUTTURE DATI ALGORITMI E STRUTTURE DATI Esercitazioni AndreA Orlandini http://www.dia.uniroma3.it/~orlandin/asd/ e-mail: orlandin@dia.uniroma3.it Orario di ricevimento: Martedì 14.00-16.00 Introduzione al C + Array

Dettagli

Anche se due variabili vettore sono dello stesso tipo, NON è possibile l assegnamento diretto:

Anche se due variabili vettore sono dello stesso tipo, NON è possibile l assegnamento diretto: ESERCIZIO: Lettura/Scrittura Array Non è possibile leggere/scrivere un intero vettore con un unica operazione (a parte il caso particolare delle stringhe); occorre leggere/scrivere ognuno dei suoi componenti

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 27 novembre 2007 In C una stringa è rappresentata da una sequenza di caratteri terminante con il carattere nullo \0 il cui valore è

Dettagli

Esercizio 1 (15 punti)

Esercizio 1 (15 punti) Esercizio 1 (15 punti) Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 30 giugno 2017 In un lontano paese da

Dettagli

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

IL CONCETTO DI FILE. È illecito operare oltre la fine del file. IL CONCETTO DI FILE Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa. Concettualmente, un file è una sequenza di registrazioni

Dettagli

Corso di Informatica 1 Esercitazione n. 4

Corso di Informatica 1 Esercitazione n. 4 Corso di Informatica 1 Esercitazione n. 4 Marco Liverani Esercizio n. 1 Letti in input due numeri interi n > 0 e k > 1 costruire un array A di n numeri interi casuali minori di 100 che non siano multipli

Dettagli

Esercizi. La funzione swapint() primo tentativo

Esercizi. La funzione swapint() primo tentativo Politecnico di Milano Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio di array. #include

Dettagli

Esercizio 1: Puntatori impiegati che sono manager

Esercizio 1: Puntatori impiegati che sono manager Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 10 Esercitazione: 25 gennaio 2006 Esercizi di riepilogo Problema: Esercizio 1: Puntatori impiegati che sono manager Si

Dettagli

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

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt); Un esempio per iniziare Il controllo del programma in C DD Cap.3 pp.91-130 /* calcolo di 8!*/ #include #define C 8 int main() int i=1; int fatt=1; while (i

Dettagli

Fondamenti di Informatica T. Linguaggio C: File

Fondamenti di Informatica T. Linguaggio C: File Linguaggio C: File I File Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa, che consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centrale.

Dettagli

Esercizi su programmazione ricorsiva 1. Pericle Perazzo 23 marzo 2012

Esercizi su programmazione ricorsiva 1. Pericle Perazzo  23 marzo 2012 su programmazione ricorsiva 1 Pericle Perazzo pericle.perazzo@iet.unipi.it http://info.iet.unipi.it/~fondii/ 23 marzo 2012 Ripasso di programmazione ricorsiva Ripasso di programmazione ricorsiva Algoritmo

Dettagli

Implementazione dell albero binario in linguaggio C++

Implementazione dell albero binario in linguaggio C++ Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

Come usare la ricorsione

Come usare la ricorsione Laboratorio di Algoritmi e Strutture Dati Aniello Murano www.dia.unisa.it/dottorandi/murano 1 Come usare la ricorsione 2 1 Risolvere un problema per ricorsione 1. Pensa ad un problema piu piccolo (di taglia

Dettagli

Stringhe e allocazione dinamica della memoria

Stringhe e allocazione dinamica della memoria Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per

Dettagli

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella Corso di Informatica Tipi strutturati: Stringhe Anno Accademico 2010/2011 Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri quali

Dettagli

Costruiamo un programma per crittografare del testo

Costruiamo un programma per crittografare del testo Costruiamo un programma per crittografare del testo Per codificare un messaggio in modo tale che il suo testo non risulti leggibile a persone che non siano in possesso dell'opportuna procedura di decodifica,

Dettagli