La copia di un file. contare di quanti caratteri sia composto il file (e quindi determinare la dimensione del file di origine)
|
|
- Eduardo Cappelletti
- 5 anni fa
- Visualizzazioni
Transcript
1 La copia di un file Nell'esercizio di oggi cerchiamo di implementare un programma che permetta di effettuare la copia di un file di testo. L'operazione di copia, oltre a permettere di creare un nuovo file il cui contenuto sia identico a quello del file di origine, ci dovrà anche permettere di: 1. contare di quanti caratteri sia composto il file (e quindi determinare la dimensione del file di origine) 2. determinare il numero di occorrenze di ciascuno dei caratteri della tabella standard all'interno del file, il numero di lettere maiuscole presenti ed il numero di lettere minuscole 3. determinare se, all'interno del file di origine, siano presenti dei numeri interi e, nel caso, visualizzarne il valore Tutte queste operazioni dovranno essere implementate in modalità ricorsiva. Una volta raccolte tali informazioni, esse andranno memorizzate all'interno di un'opportuna struttura. Prima di definire tale struttura, è importante considerare che: a. l'informazione relativa alla dimensione del file (punto (1)) è un'informazione che, assieme al nome del file, fa riferimento ad una proprietà del file nel suo complesso b. le informazioni raccolte ai punti (2) e (3) fanno riferimento al contenuto del file Per rendere evidente questa separazione, possiamo collocare le informazioni raccolte all'interno di due distinte strutture; una contenente informazioni sul file e l'altra sul suo contenuto. La definizione della prima potrebbe essere: typedef struct {char nome_file[100]; int dimensione; info_file; Quella della seconda, invece: typedef struct {int conteggi[128]; int maiusc; int minusc; int numeri; info_contenuto; Essendo entrambe strutture che contengono informazioni sul file, possiamo da queste due costruire una terza struttura che raggruppa le due precedenti: typedef struct {info_file *generale; info_contenuto *lettere; my_file;
2 Quest'ultima struttura contiene due puntatori, ciascuno dei quali fa riferimento ad una variabile di tipo info_file o di tipo info_contenuto. Vediamo ora un breve esempio di utilizzo della struttura my_file. /* inizio codice */ #include <stdio.h> #include <stdlib.h> typedef struct {char nome_file_orig[100]; char nome_file_dest[100]; int dimensione; info_file; typedef struct {int conteggi[128]; int maiusc; int minusc; int numeri; info_contenuto; typedef struct {info_file *generale; info_contenuto *lettere; my_file; int main() {my_file nuovo; /* dichiaro una variabile di tipo my_file */ /* ora alloco memoria per i due puntatori */ my_file.generale = (info_file*) malloc(sizeof(info_file)); my_file.lettere = (info_contenuto*) malloc(sizeof(info_contenuto)); /* ora è possibile accedere ai membri delle due strutture */ printf("\ninserisci il nome del file"); scanf("%s",my_file.generale->nome_file); /* my_file.generale è un puntatore a struttura */ printf("\nquante sono le lettere minuscole?"); scanf("%d", & (my_file.lettere->minusc)); /* my_file.lettere è un puntatore a struttura */ return 0; /* fine codice */ Procediamo ora con l'implementazione delle funzioni. Oltre alla copia del file di origine all'interno del file di destinazione, se la lettura del file di origine avviene carattere per carattere durante la copia è possibile ottenere anche le informazioni relative al numero di caratteri presenti nel file e alla loro altezza. La funzione che si occupa di effettuare la copia, può perciò servire anche a rispondere alle richieste presentate ai punti (1) e (2). Tali valori vanno inseriti all'interno delle due sottostrutture che compongono una struttura di tipo my_file; tali sottostrutture sono rappresentate, all'interno della struttura my_file, mediante puntatori. Sarà quindi sufficiente passare alla funzione una variabile di tipo my_file per copia. La funzione avrà perciò il seguente prototipo:
3 void copia_conta(file* origine,file* destinazione,my_file dati); Nello scrivere l'implementazione in modalità ricorsiva bisogna considerare che: 1. la funzione deve leggere UN SOLO CARATTERE dal file; la lettura del successivo avviene richiamando la funzione stessa letto il carattere, il contatore che rappresenta il numero totale di caratteri deve essere incrementato se il carattere è una minuscola bisogna incrementare il corrispondente contatore se il carattere è una maiuscola bisogna incrementare il corrispondente contatore se il carattere non è EOF, la funzione deve richiamare se stessa se il carattere è EOF, la funzione non deve richiamare se stessa Domanda: supponendo che un algoritmo si possa implementare sia in modalità iterativa che in modalità ricorsiva, in base a cosa scegliamo una modalità piuttosto che l'altra? /* inizio implementazione; nello scrivere il codice supponiamo che il file di origine e quello di destinazione siano già stati aperti e che la memoria per le sottostrutture della struttura di tipo my_file, dati, sia già stata allocata e che i contatori siano già stati inizializzati */ void copia_conta(file* origine,file* destinazione,my_file dati) (dati.generale->dimensione) ++; /* conteggio il carattere */ if(isupper(c)) (dati.lettere->maiusc) ++; /* incremento il contatore relativo alle lettere maiuscole */ if(islower(c)) (dati.lettere->minusc) ++; /* incremento il contatore relativo alle lettere minuscole */ if(c!=eof) {fputc(c,destinazione); /* non copio EOF, quello lo inserisce la funzione fclose() */ copia_conta(origine,destinazione,dati); /* fine implementazione */ Procediamo ora con la funzione che serve a determinare se nel file vi siano o meno dei numeri interi. La funzione, non sapendo a priori se vi siano o meno dei numeri, deve leggere dal file un carattere per volta; tale funzione non copia caratteri da un file all'altro quindi, tra i parametri, è sufficiente inserire il solo puntatore al file di origine. Nel caso la funzione individuasse la presenza di eventuali numeri, essa deve incrementare il valore del campo numeri della sottostruttura lettere della struttura di tipo my_file. Seguendo il ragionamento fatto prima, per poter effettuare tale operazione sarà sufficiente passare alla funzione la struttura di tipo my_file per valore e non per riferimento. La funzione avrà perciò il seguente prototipo: void cerca_interi(file* origine,my_file dati);
4 Nello scrivere l'implementazione in modalità ricorsiva bisogna considerare che: 1. la funzione deve leggere UN SOLO CARATTERE dal file; la lettura del successivo avviene richiamando la funzione stessa 2. letto il carattere, la funzione deve determinare se tale carattere sia o meno un carattere numerico 3. se il carattere è numerico, essa deve continuare a leggere fino ad incontrare il primo carattere non numerico; tutti i caratteri numerici letti vanno inseriti in una stringa di appoggio 4. riempita la stringa d'appoggio con i caratteri numerici, la funzione deve visualizzare il valore contenuto nella stringa /* inizio implementazione; nello scrivere il codice supponiamo che il file di origine sia già stato aperto e che la memoria per le sottostrutture della struttura di tipo my_file, dati, sia già stata allocata e che il contatore siano già stato inizializzato. Nell'implementare la funzione, serviamoci di una stringa d'appoggio dichiarata come variabile esterna */ char appoggio[30]; void cerca_interi(file* origine,my_file dati) int i=0; if(isdigit(c)) {appoggio[i]=c; /* inserisco il primo valore */ i++; while(isdigit(c=fgetc(origine))) {appoggio[i]=c; i++; appoggio[i]=0; printf("\n ho trovato il numero %s",appoggio); printf("\n ora lo visualizzo come un intero: %d",atoi(appoggio)); (dati.lettere->numeri)++; /* incremento il contatore */ if(c!=eof) cerca_interi(origine,dati) ; /* fine implementazione */ Prepariamo ora il programma che, basandosi sulle funzioni appena implementate, crea una copia del file di origine e raccoglie le informazioni richieste. /* inizio codice*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stype.h> typedef struct {char nome_file_orig[100]; char nome_file_dest[100]; int dimensione; info_file; typedef struct {int conteggi[128];
5 int maiusc; int minusc; int numeri; info_contenuto; typedef struct {info_file *generale; info_contenuto *lettere; my_file; char appoggio[30]; void cerca_interi(file*,my_file); void copia_conta(file*,file*,my_file); int main() {FILE *input,*output; char stringa_info[120]; my_file informazioni; informazioni.generale = (info_file*) malloc(sizeof(info_file)); informazioni.lettere = (info_contenuto*) malloc(sizeof(info_contenuto)); if(informazioni.generale==null) exit(0); if(informazioni.lettere==null) exit(0); /* lettura dei nomi dei file */ printf("inserisci il nome del file di origine"); scanf("%s", informazioni.generale->nome_file_orig); printf("inserisci il nome del file di destinazione "); scanf("%s", informazioni.generale->nome_file_dest); /* apertura dei file */ input= fopen ( informazioni.generale->nome_file_orig, "r" ); output= fopen ( informazioni.generale->nome_file_dest, "w" ); if(input==null) exit(0); if(output==null) exit(0); /* inizializzo i contatori */ informazioni.generale->dimensione = 0; informazioni.lettere->maiusc = 0; informazioni.lettere->minusc = 0; informazioni.lettere->numeri = 0; copia_conta(input,output,informazioni); fclose(output); /* chiudo il canale di collegamento al file; i dati vengono memorizzati su disco */ rewind(input); /* ritorno all'inizio del file perché devo ripetere la lettura */ cerca_interi(input,informazioni); /* ora salvo le informazioni raccolte */ strcpy(stringa_info, informazioni.generale->nome_file_orig); strcat(stringa_info,"_info"); output = fopen(stringa_info,"w"); fprintf(output,"ecco il nome del file di origine: %s", informazioni.generale->nome_file_orig); fprintf(output,"\nla dimensione del file di origine e\': %d", informazioni.generale->dimensione); fprintf(output,"\necco il nome del file di destinazione: %s", informazioni.generale->nome_file_dest); fprintf(output,"\nnel file di origine ci sono %d lettere maiuscole", informazioni.lettere->maiusc); fprintf(output,"\nnel file di origine ci sono %d lettere minuscole", informazioni.lettere->minusc); fprintf(output,"\nnel file di origine ci sono %d numeri interi ", informazioni.lettere->numeri); fclose(output); return 0;
6 void copia_conta(file* origine,file* destinazione,my_file dati) (dati.generale->dimensione) ++; /* conteggio il carattere */ if(isupper(c)) (dati.lettere->maiusc) ++; /* incremento il contatore relativo alle lettere maiuscole */ if(islower(c)) (dati.lettere->minusc) ++; /* incremento il contatore relativo alle lettere minuscole */ if(c!=eof) {fputc(c,destinazione); /* non copio EOF, quello lo inserisce la funzione fclose() */ copia_conta(origine,destinazione,dati); void cerca_interi(file* origine,my_file dati) int i=0; if(isdigit(c)) {appoggio[i]=c; /* inserisco il primo valore */ i++; while(isdigit(c=fgetc(origine))) {appoggio[i]=c; i++; appoggio[i]=0; printf("\n ho trovato il numero %s",appoggio); printf("\n ora lo visualizzo come un intero: %d",atoi(appoggio)); (dati.lettere->numeri)++; /* incremento il contatore */ if(c!=eof) cerca_interi(origine,dati) ; /* fine codice*/ Esercizio: sia data la seguente struttura typedef struct { int *array; char * stringa;; coppia; Si scriva un programma che richiama le funzioni qui di seguito descritte. Alla fine del programma, TUTTE le aree di memoria allocate dinamicamente DEVONO ESSERE disallocate. 1. dichiarare ed implementare una funzione che accetta come parametro un intero e che restituisce un puntatore a
7 variabile di tipo coppia. la funzione deve allocare un'area di memoria sufficiente a contenere un numero di strutture pari al valore del parametro di tipo intero. Allocata l'area di memoria, la funzione deve controllare che la chiamata a malloc() sia avvenuta in modo corretto e deve restituire il puntatore a tale area di memoria dichiarare ed implementare una funzione che accetta come parametro un puntatore a struttura di tipo coppia ed una variabile di tipo intero. Il primo parametro rappresenta l'indirizzo di un'area di memoria contenente delle strutture di tipo coppia mentre il secondo indica quale sia il numero di strutture presenti nell'area di memoria. La funzione deve allocare memoria per entrambi i puntatori di ciascuna delle strutture di tipo coppia presenti nell'array. In particolare, al puntatore a int deve essere assegnato l'indirizzo di un'area contenente 10 elementi di tipo int, mentre al puntatore a char va assegnato l'indirizzo di un'area contenente 11 char. Nell'implementare la funzione VERIFICARE che le chiamate alla funzione malloc() vadano a buon fine. dichiarare ed implementare una funzione che accetta come parametro un puntatore a struttura di tipo coppia ed una variabile di tipo intero. Il primo parametro rappresenta l'indirizzo di un'area di memoria contenente delle strutture di tipo coppia mentre il secondo indica quale sia il numero di strutture presenti nell'area di memoria. La funzione deve inizializzare ciascuna struttura dell'array in questo modo: ad ogni elemento dell'array di int cui fa riferimento il puntatore ad intero contenuto in ogni struttura va inizializzato con numeri casuali compresi tra 300 e 1000 mentre ogni elemento dell'array di char cui fa riferimento il puntatore a carattere contenuto in ogni struttura va inizializzato con lettere causali minuscole. dichiarare ed implementare una funzione che visualizzi il contenuto di tutte le strutture contenute nell'array di char. la funzione deve anche poter permettere di salvare su file il contenuto dell'array.
Le strutture /3. Riprendiamo ora la struttura definita alcune lezioni fa e completiamo il set di funzioni che servono per gestire un elenco di libri.
Le strutture /3 Riprendiamo ora la struttura definita alcune lezioni fa e completiamo il set di funzioni che servono per gestire un elenco di libri. typedef struct {char titolo[200]; char autore[100];
DettagliLe strutture /2. Iniziamo ora a progettare il codice per la gestione del database. Quali sono le funzionalità da implementare?
Le strutture /2 Iniziamo ora a progettare il codice per la gestione del database. Quali sono le funzionalità da implementare? Per ora è possibile gestire l'elenco dei libri (e quindi delle strutture) mediante
DettagliGli array. impone al programma, in fase di esecuzione, di riservare dello spazio in memoria per 10 variabili di tipo int
Gli array Gli array rappresentano una modalità molto compatta per accedere ad un gruppo di variabili; tale gruppo è identificato dal nome dell'array; i tipi delle variabili appartenenti al gruppo devono
DettagliI puntatori /2. Ad esempio. // inizio codice. #include <stdio.h> void mostra(int); int main() {int a = 10; mostra(a); return 0;}
I puntatori /2 In C, il passaggio dei parametri alle funzioni avviene sempre per copia, ovvero il valore del parametro viene copiato all'interno della variabile che rappresenta il parametro stesso nel
DettagliERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }
ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il
Dettaglida_costruire = da_costruire ^ 1; /* inserisco un bit nella prima posizione a destra */
Precisazione: int da_costruire = 0; da_costruire = da_costruire ^ 1; /* inserisco un bit nella prima posizione a destra -> 0000000000000001 (da_costruire vale 1) da_costruire = 0; da_costruire = da_costruire
DettagliCostruiamo 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,
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 puntatori. Il C ci permette di conoscere tale indirizzo, ovvero di determinare dove la variabile sia stata effettivamente memorizzata.
I puntatori La memoria RAM del calcolatore è formata da un insieme di celle di memoria; per poter localizzare ciascuna cella, ad ognuna di esse è associato un numero, ovvero il suo indirizzo, che viene
Dettagli#include <stdio.h> #include <stdlib.h> //necessaria per la malloc #include <string.h> // costante #define MAX_L 30
/* Dopo aver definito una lista in grado di contenere i dati di alcune persone (nome, genere e altezza in metri), scrivere un programma che consenta di verificare che inizialmente la lista sia vuota e
DettagliInput/Output su disco
Input/Output su disco In C, la gestione dei dispositivi di lettura (tastiera, file su disco,...) e scrittura (monitor, file su disco, stampante,...) viene effettuata mediante canali di comunicazione. Tali
DettagliStrutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami.
Consideriamo l esercizio assegnato la scorsa lezione per rappresentare il libretto di uno studente. Per memorizzare i dati si sono utilizzati tre array: char* nomiesami[max ESAMI] Array dei nomi degli
DettagliEsercitazione 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
DettagliNOTA SULLA CORREZIONE: Per ottenere un esito positivo è necessario svolgere un elaborato sufficiente in entrambe le parti.
Parte 1 Tempo a disposizione: 40 min., Totale punti: 16 Materiale di ausilio utilizzabile durante l appello: Parte 1: Non è possibile consultare alcun materiale, né accedere al calcolatore. Parte 2: Tutto
DettagliESERCIZIO: SHIFT ARRAY (1)
ARRAY E STRINGHE ARRAY ESERCIZIO: SHIFT ARRAY (1) Utilizzando le funzioni scrivere un programma che: genera una sequenza di N = 20 numeri interi e li memorizza in un array ( riempi_array( )) visualizza
DettagliLaboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Prof. Aniello Murano Implementazioni di Liste Puntate Semplici Corso di Laurea Codice insegnamento Email docente Anno accademico Informatica 13917 murano@na.infn.it
DettagliRiepilogo della puntata precedente
Riepilogo della puntata precedente Da quanto detto la volta scorsa, la scelta di passare un array mediante un puntatore è giustificata solo dal risparmio, in termini di memoria, che tale scelta comporta.
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018
Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018 Esercizi sull allocazione dinamica della memoria in C Il codice di questi esercizi é contenuto nella cartella parte1 1. Implementare una lista
DettagliPuntatori. Grazie ai puntatori:
Puntatori Grazie ai puntatori: 1) è possibile permettere ad una funzione di modificare il contenuto di un area di memoria; 2) invece di passare ad una funzione tutto un blocco di memoria, si passa alla
DettagliStringhe 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
DettagliImplementazione di Liste puntate
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Implementazione di Liste puntate 2 1 Indice Liste puntate semplici: Gli elementi sono logicamente
DettagliCostruiamo un'immagine o qualcosa di simile.
Costruiamo un'immagine...... o qualcosa di simile. Se consideriamo la C che si trova in fondo a destra, ci accorgiamo che un'immagine non è altro che una tabella di valori. Nel caso in cui si consideri
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
DettagliIndovina la lettera...
Indovina la lettera... La lezione di oggi consiste nel preparare un programma che chiede all'utente di indovinare quale sia il carattere generato dal programma stesso in modo casuale. Il numero totale
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018
Esercitazioni di Fondamenti di Informatica - Lez. 7 0/11/018 Esercizi sull allocazione dinamica della memoria in C 1. Cosa stampa il seguente programma? 1 #d e f i n e MAXLENGTH 0 4 typedef struct { char
DettagliIntroduzione al C Lez. 5. Stringhe
Introduzione al C Lez. 5 Una stringa è una sequenza di caratteri. Ad esempio una parola, una frase, un testo... In C non è previsto un tipo per le stringhe. Una stringa è vista come un array di caratteri
DettagliNella propria home directory creare una sottodirectory chiamata es08, in cui metteremo tutti i file C di oggi.
Laboratorio 8 Nella propria home directory creare una sottodirectory chiamata es08, in cui metteremo tutti i file C di oggi. Note Quando dovete usare o ritornare dei valori booleani, usate la seguente
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
DettagliTitolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott.
Titolo presentazione INFORMATICA A sottotitolo A.A. 2017-18 Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Michele Zanella Info Logistiche (cont d) Calendario laboratori Data Orario
DettagliScrittura 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
DettagliFondamenti di Programmazione
A.A. 08/09 Fondamenti di Programmazione (canale E-O) Docente: Prof.ssa Tiziana Calamoneri calamo@di.uniroma1.it Esercitatore: Dott. Roberto Petroccia petroccia@di.uniroma1.it Pagina del corso: http://twiki.di.uniroma1.it/twiki/view/programmazione1/eo/webhome
DettagliOpinione calcolamedia( ) Opinione inverti( )
Materiale di ausilio utilizzabile durante l appello: tutto il materiale è a disposizione, inclusi libri, lucidi, appunti, esercizi svolti e siti Web ad accesso consentito in Lab06. L utilizzo di memorie
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
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 11 Corso di Informatica 2009-2010 Lezione 11 1 Utilizzo dei puntatori Funzioni Perche i Puntatori? I puntatori hanno tre importanti applicazioni: 1. Passaggio
DettagliAllocazione dinamica memoria
Allocazione dinamica memoria Marco Casazza 11/12/2017 1 Esercizio 1 1 /* 2 Creare una lista bidirezionale di interi, ovvero una lista 3 che permette lo scorrimento in entrambe le direzioni ( dal primo
DettagliFUNZIONI che operano su LISTE e TEMI d ESAME
D O D I C E S I M A ESERCITAZIONE 2006/ L. MANDELLI FUNZIONI che operano su LISTE e TEMI d ESAME ------------------calcola la somma degli elementi in posizione pari di una lista Si assuma che il primo
DettagliIl compito del 11 novembre 2004
Alcuni errori frequenti riscontrati durante la correzione del compito: 1. In alcuni elaborati il typedef/struct non è stato utilizzato correttamente 2. Molti hanno confuso la dichiarazione di un array,
Dettagligiapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL
Materiale di ausilio utilizzabile durante l appello: tutto il materiale è a disposizione, inclusi libri, lucidi, appunti, esercizi svolti e siti Web ad accesso consentito in Lab06. L utilizzo di meorie
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)
DettagliFondamenti di Informatica 1 - Compito A
Fondamenti di Informatica 1 - Compito A Prof. Marco Gavanelli 18 Giugno 2007 Esercizio (16 punti) Un programma in linguaggio C deve accedere ad un database di studenti, memorizzato in un file binario studenti.bin.
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori
DettagliEsercizio 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
DettagliStringhe in C. Luca Abeni. Informatica Luca Abeni 1 / 10
Stringhe in C Luca Abeni Informatica Luca Abeni 1 / 10 Stringhe in C Stringhe: tipo di dato strutturato Sequenze di caratteri Linguaggio C: progettato per la semplicità No supporto nativo per le stringhe
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 6 Aprile 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,8,-4; int N = 7; int x = -1; Scrivere la porzione di codice che inserisce
DettagliFondamenti di Informatica T-1 Modulo 2
Fondamenti di Informatica T-1 Modulo 2 Obiettivo di questa esercitazione Allocazione dinamica della memoria ed esempi di problemi tipici d esame 2 Esercizio 1 Una ditta utilizza un sistema informatico
DettagliInformatica 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
DettagliIl processo di compilazione
Il processo di compilazione Il processo che porta dal codice scritto in linguaggio C alla creazione del corrispondente file eseguibile può essere schematizzato in questo modo: 0. Scrittura del codice C
DettagliELEMENTI DI INFORMATICA LB ESERCITAZIONE (del 09/03/2007) Files, Strutture e Liste
ELEMENTI DI INFORMATICA LB ESERCITAZIONE (del 09/03/2007) Files, Strutture e Liste ESERCIZIO n.1 È dato un file di testo che contiene l'elenco dei vestiti presenti in un negozio. Il file contiene al massimo
DettagliIntroduzione al C Lez. 4
Introduzione al C Lez. 4 Allocazione Dinamica della memoria http://www.di.unipi.it/~rossano/algo1/lez4.pdf Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso
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
DettagliFondamenti di Informatica e Laboratorio T-AB Prova Pratica - 16 Giugno 2009 Compito A
Prima di cominciare: si scarichi il file StartKit4A.zip contenente i file di esempio. Avvertenze per la consegna: nominare i file sorgenti come richiesto nel testo del compito, apporre all inizio di ogni
DettagliInformatica C CHI/MAT
Informatica C CHI/MAT Giovanni Agosta Informatica C CHI/MAT p.1/76 Gestione dei File 1. L input da file 2. Cos è un file 3. Dichiarare una variabile file 4. Funzioni di apertura e chiusura dei file 5.
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 25 Marzo 2005 Esercizio 1 (2 punti) Convertire in formato binario, ed esadecimale il numero 372. Mostrare il procedimento usato per ottenere il risultato.
DettagliPuntatori e array. Violetta Lonati
Puntatori e array Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Puntatori e array
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 9 4/12/2018
Esercitazioni di Fondamenti di Informatica - Lez. 9 /1/018 Esercizi sulla gestione dei file in C Il codice degli esercizi e contenuto nella cartella parte1 1. Creare una funzione C che legga tutto cio
DettagliLezione di Laboratorio di Prgrammazione: /04/2019 a.a. 2018/2019 R.Prevete
Lezione di Laboratorio di Prgrammazione: 15 09/04/2019 a.a. 2018/2019 R.Prevete Dati aggregati: struct Dicharazione di struttura con identificatore: struct { ;
DettagliUna stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0
STRINGHE: ARRAY DI CARATTERI Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' s a p e \0 0 1 2 3 Un vettore di N caratteri può dunque ospitare stringhe lunghe al più N-1
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)
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
DettagliIntroduzione al C Lez. 4. Allocazione Dinamica della memoria
Introduzione al C Lez. 4 Allocazione Dinamica della memoria Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso l allocazione esplicita di blocchi di memoria
DettagliLinguaggio C: PUNTATORI
Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori
DettagliGli Array. Dichiarazione di un array
Gli Array Un array rappresenta una variabile indicizzata (ovvero contenente un indice) che viene utilizzata per contenere più elementi dello stesso tipo. Ogni array ha un nome al quale viene associato
DettagliFondamenti di Programmazione
Fondamenti di Programmazione Ingegneria dell Automazione Industriale Ingegneria Elettronica e delle Comunicazioni Alessandro Saetti Marco Sechi e Andrea Bonisoli (email: alessandro.saetti,marco.sechi,andrea.bonisoli@unibs.it)
DettagliEsercizi di programmazione in linguaggio C English Dictionary
Esercizi di programmazione in linguaggio C English Dictionary Il file di testo wordnet.txt contiene un certo numero di parole (word) e il corrispondente significato (meaning) secondo il seguente formato:
Dettagliin alternativa Quanto spazio occupa in memoria una variabile di tipo struct? dipende...
Strutture Mentre un array consente di raggruppare, sotto un unico nome, vari elementi tutti dello stesso tipo, una struttura permette di gestire, mediante un unico nome, elementi di QUASI tutti i tipi.
DettagliLab 12 Allocazione dinamica della memoria
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 12 Allocazione dinamica della memoria Lab17 1 Esercizio 0 Un file di testo di nome bambini.txt, contiene informazioni
DettagliLettura da tastiera e scrittura su monitor
Lettura da tastiera e scrittura su monitor Per poter leggere UN SINGOLO CARATTERE dalla tastiera e visualizzare UN SINGOLO CARATTERE sul monitor si possono utilizzare le funzioni: int getchar (void) (per
DettagliEsercizio 1: media di numeri reali (uso funzioni e struct)
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 5 Esercitazione: 2 novembre 2005 Esercizi sulle funzioni Esercizio 1: media di numeri reali (uso funzioni e struct) Le
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[]
DettagliIl buffer di input. In questo modo, tutte le chiamate alla funzione permetteranno all'utente di inserire caratteri.
Il buffer di input In C, l'input fornito dall'utente viene gestito mediante un buffer; nel buffer vengono inseriti i caratteri premuti dall'utente sulla tastiera e, a chiusura del buffer, viene aggiunto
DettagliINFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti
INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti Ricorsione La ricorsione è un approccio per la risoluzione
DettagliEsercizio 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
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
DettagliLa direttiva #include
La direttiva #include La definizione di una funzione-utente comporta alcuni passaggi: scelta e indicazione del prototipo della funzione implementazione della funzione Le funzioni della libreria standard
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
Dettaglii Vettori Alessandra Giordani Lunedì 15 aprile
i Vettori Alessandra Giordani agiordani@disi.unitn.it Lunedì 15 aprile 2013 http://disi.unitn.it/~agiordani/ Dichiarazione di un Array La dichiarazione di un array di n elementi di tipo T causa l'allocazione
DettagliStringhe in C. Nicu Sebe. Informatica Nicu Sebe 1 / 14
Stringhe in C Nicu Sebe Informatica Nicu Sebe 1 / 14 Stringhe in C Stringhe: tipo di dato strutturato Sequenze di caratteri Linguaggio C: progettato per la semplicità No supporto nativo per le stringhe
DettagliEsercitazione Matrici e Struct
Esercitazione Matrici e Struct Informatica B, AA 2017/2018 Luca Cassano 19 Ottobre 2017 luca.cassano@polimi.it Breve riassunto della puntata precedente Breve riassunto della puntata precedente Matrici
Dettaglinow is the for men all good come aid
Alberi binari Supponiamo di volere gestire il problema di contare le occorrenze di tutte le parole presenti in un particolare input. Poichè la lista delle parole non è nota a priori, non siamo in grado
DettagliProva Scritta del 20/09/10
Avvertenze Usare ESCLUSIVAMENTE penne ad inchiostro nero o blu (NO MATITE). Consegnare solo fogli formato A4 scritti da solo da un lato se si vogliono avere le fotocopie del compito. In testa a ciascun
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
DettagliLab 11 Allocazione dinamica della memoria
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 11 Allocazione dinamica della memoria Lab17 1 STACK L'area di memoria stack é quella in cui viene allocato un
DettagliINFORMATICA. Esercizi. Esempio: giorni nell anno. Esempio: giorni nell anno. Esempio: giorni nell anno
INFORMATICA Esercizi Realizzare un programma che legga da tastiera l anno di riferimento e la sigla del primo giorno di quell anno (1 gennaio) composta dai primi tre caratteri del nome (ad esempio: 2003
Dettagliaccesso * leggiaccessi(char * nomefile, int * dim);
Fondamenti di Informatica L-A (A.A. precedenti al 2008/2009) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista Prova d Esame di Martedì 22 Dicembre 2009 durata 2h ESERCIZIO 1 (10 punti) Un'azienda
DettagliPuntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
DettagliUnità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.
Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;
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
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 27 Giugno 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,8,-4; int N = 7; int i; Scrivere la porzione di codice che sostituisca
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;
DettagliINFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 4 Dott. Michele Zanella Ing. Gian Enrico Conti
INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 4 Dott. Michele Zanella Ing. Gian Enrico Conti Puntatori I puntatori sono delle variabili che contengono l
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
DettagliEsercitazione 6. Array
Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione
DettagliEsercizio 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
DettagliEsercitazione di Reti degli elaboratori
Esercitazione di Prof.ssa Chiara Petrioli Christian Cardia, Gabriele Saturni Cosa vedremo in questa lezione? Gli Array Gli array multidimensionali Le stringhe I puntatori Esercizi Pagina 1 Gli Array Definizione
Dettagli