I puntatori e l allocazione dinamica di memoria
|
|
- Evangelista Bellucci
- 6 anni fa
- Visualizzazioni
Transcript
1 I puntatori e l allocazione dinamica di memoria
2 Allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2
3 Allocazione dinamica di memoria
4 Allocare = collocare in memoria Allocare una variabile significa associare alla variabile una porzione di memoria (in cui collocare i dati) L allocazione avviene in modo Permanente, per le variabili globali (definite, nel file C, al di fuori da funzioni) Temporaneo, per le variabili locali e I parametri formali (definiti all interno delle funzioni). Una variabile locale viene Allocata alla chiamata della funzione De-allocata all uscita dalla funzione 4
5 Programma in esecuzione e memoria #define MAX 100 struct studente ; struct studente dati[maxn]; int main(void) char nomefile[maxriga]; FILE *fp; void ordinastudenti( struct studente el[], int n) int i, j, max; ; RAM (1 GB) 5
6 Programma in memoria #define MAX 100 struct studente ; struct studente dati[maxn]; int main(void) char nomefile[maxriga]; FILE *fp; void ordinastudenti( struct studente el[], int n) int i, j, max; ; RAM (1 GB) 6
7 Programma in memoria #define MAX 100 struct studente ; struct studente dati[maxn]; int main(void) char nomefile[maxriga]; FILE *fp; void ordinastudenti( struct studente el[], int n) int i, j, max; ; Codice (istruzioni) RAM (1 GB) 7
8 Programma in memoria #define MAX 100 struct studente ; struct studente dati[maxn]; int main(void) char nomefile[maxriga]; FILE *fp; void ordinastudenti( struct studente el[], int n) int i, j, max; ; Codice (istruzioni) RAM (1 GB) 8
9 Programma in memoria #define MAX 100 struct studente ; struct studente dati[maxn]; int main(void) char nomefile[maxriga]; FILE *fp; void ordinastudenti( struct studente el[], int n) int i, j, max; ; Codice (istruzioni) Variabili globali RAM (1 GB) 9
10 Programma in memoria #define MAX 100 struct studente ; struct studente dati[maxn]; int main(void) char nomefile[maxriga]; FILE *fp; void ordinastudenti( struct studente el[], int n) int i, j, max; ; Codice (istruzioni) Variabili globali RAM (1 GB) 10
11 Programma in memoria #define MAX 100 struct studente ; struct studente dati[maxn]; int main(void) char nomefile[maxriga]; FILE *fp; void ordinastudenti( struct studente el[], int n) int i, j, max; ; Codice (istruzioni) Variabili globali Variabili locali e parametri (formali) RAM (1 GB) 11
12 Programma in memoria #define MAX 100 struct studente ; In memoria (virtualmente) struct durante studente tutta l esecuzione dati[maxn]; int main(void) del programma char nomefile[maxriga]; FILE *fp; void ordinastudenti( struct studente el[], int n) int i, j, max; ; Codice (istruzioni) Variabili globali Variabili locali e parametri (formali) RAM (1 GB) 12
13 Programma in memoria #define MAX 100 struct studente ; struct studente dati[maxn]; int main(void) char nomefile[maxriga]; FILE *fp; In memoria (virtualmente) durante l esecuzione della void ordinastudenti( struct studente el[], int n) int i, j, max; ; relativa funzione: allocate e de-allocate automaticamente Codice (istruzioni) Variabili globali Variabili locali e parametri (formali) RAM (1 GB) 13
14 Programma in memoria #define MAX 100 struct studente ; struct La quantità studente di memoria dati[maxn]; int allocare main(void) è determinata dal programmatore: char nomefile[maxriga]; - Istruzioni FILE *fp; void - Dimensione ordinastudenti( dei vettori struct studente el[], int n) int i, j, max; ; - Tipo e numero delle variabili Codice (istruzioni) Variabili globali Variabili locali e parametri (formali) RAM (1 GB) 14
15 Allocazione dinamica di memoria
16 Cosa manca? Osservazione: manca un modo per poter decidere, durante l esecuzione di un programma Creazione un dato Dimensionamento di un vettore Soluzione: istruzioni per allocare e de-allocare dati (memoria) in modo esplicito In funzione di dati forniti da chi esegue il programma Allocazioni e de-allocazioni sono (ovviamente) previste dall autore del programma 16
17 Come allocare in modo esplicito? Il C fornisce un meccanismo di allocazione e deallocazione esplicito, basato su puntatori Allocare = chiedere memoria (al Sistema Operativo) e ottenerla (se c è abbastanza memoria disponibile) De-allocare = rilasciare (restituire) la memoria precedentemente ottenuta (in modo che il S.O. possa riutilizzarla) Alla memoria allocata si accede tramite puntatore, cioè indirizzo+tipo L allocazione esplicita viene detta dinamica, per il modo (non statico) di gestione 17
18 Programma in memoria int main(void) int *p = malloc(); /* p usato come vettore */ free(p); p Codice (istruzioni) Variabili globali Variabili locali e parametri (formali) Memoria dinamica RAM (1 GB) 18
19 Programma in memoria int main(void) int *p = malloc(); /* p usato come vettore */ free(p); p Codice (istruzioni) Allocazione Variabili globali Variabili locali e parametri (formali) RAM (1 GB) 19
20 Programma in memoria int main(void) int *p = malloc(); /* p usato come vettore */ free(p); p Codice (istruzioni) Rilascio (de-allocazione) Variabili globali Variabili locali e parametri (formali) RAM (1 GB) 20
21 Allocazione dinamica di memoria
22 Allocazione mediante malloc (1/3) La memoria in C viene allocata dinamicamente tramite la funzione malloc (e altre, quali calloc, realloc, ) La funzione di libreria malloc ha un prototipo simile al seguente void* malloc (int dimensione); Dimensione è il numero (intero) di byte da allocare Il valore di ritorno è un puntatore Indirizzo iniziale della memoria allocata (NULL se non c è memoria disponibile) tipo void *, tale da poter essere assegnato a qualunque tipo di puntatore 22
23 Allocazione mediante malloc (2/3) Per usarla occorre includere <stdlib.h> Per utilizzare correttamente malloc occorre richiedere una quantità di memoria compatibile col puntatore cui sarà assegnato il risultato (cioè la variabile generata dinamicamente) 23
24 Allocazione mediante malloc (3/3) Solitamente si ricorre all operatore sizeof per determinare la dimensione (in byte) di un dato. Per generare una variabile dinamica di tipo <tipo>, da assegnare a p (<tipo> *p), sono possibili 2 schemi Per ottenere una variabile scalare o struct p = malloc (sizeof (<tipo>)); Per ottenere un vettore di n elementi p = malloc (n*sizeof (<tipo>)); 24
25 Esempio: variabile dinamica singola struct studente char cognome[max], nome[max]; int matricola; struct studente *link; ; struct studente *creastud ( char *cognome, char *nome, int matricola ) struct studente *s; s = malloc (sizeof (struct studente)); if (s==null) return NULL; strcpy(s->cognome,cognome); strcpy(s->nome,nome); s->matricola = matricola; s->link = NULL; return s; ; 25
26 Esempio: variabile dinamica singola struct studente char cognome[max], nome[max]; int matricola; struct studente *link; ; struct studente *creastud ( char *cognome, char *nome, int matricola ) struct studente *s; s = malloc (sizeof (struct studente)); if (s==null) return NULL; strcpy(s->cognome,cognome); strcpy(s->nome,nome); Si potrebbe scrivere anche: s->matricola = matricola; s->link = NULL; return s = s; malloc (sizeof *s); ; 26
27 Esempio: vettore dinamico int *punt; int n; scanf ( %d, &n); punt = malloc(n*sizeof(int)); if (punt == NULL) printf ( Errore di allocazione\n ); else 27
28 Esempio: vettore dinamico int *punt; int n; scanf ( %d, &n); punt = malloc(n*sizeof(int)); if (punt == NULL) printf ( Errore di allocazione\n ); punt è un vettore dinamico di n interi else 28
29 De-allocazione mediante free (1/2) La memoria allocata dinamicamente viene restituita tramite la funzione free La funzione di libreria free ha un prototipo simile al seguente void free (void* p); p punta alla memoria (precedentemente allocata) da liberare La funzione non ritorna risultato 29
30 De-allocazione mediante free (2/2) Per usarla occorre includere <stdlib.h> La funzione free viene di solito chiamata quando è terminato il lavoro sulla variabile dinamica, affinchè la memoria possa essere riutilizzata 30
31 Esempio: vettore dinamico int *punt; int i, n; scanf ( %d, &n); punt = malloc(n*sizeof(int)); for (i=0; i<n; i++) punt[i] = ; free(punt); 31
32 I puntatori e l allocazione dinamica di memoria
33 Strutture dati dinamiche Vettori dinamici Matrici dinamiche Liste 2
34 Strutture dati dinamiche
35 Vettore dinamico Si dice vettore dinamico un vettore la cui dimensione è nota solo in fase di esecuzione del programma Soluzione Puntatore, sfruttando la dualità puntatore-vettore Allocazione mediante malloc Rilascio mediante free Per il resto, non cambia nulla rispetto al vettore sovradimensionato in modo statico 4
36 Esempio Acquisire da tastiera una serie di numeri reali, e memorizzarli in un vettore Stamparli successivamente in ordine inverso a quello di acquisizione La quantità di numeri non è nota al programmatore, né sovradimensionabile, ma è acquisita come primo dato da tastiera 5
37 Esempio Acquisire da tastiera una serie di numeri reali, e memorizzarli in un vettore Stamparli successivamente in ordine inverso a quello di acquisizione La quantità di numeri non è nota al programmatore, né sovradimensionabile, ma è acquisita come primo dato da tastiera Attenzione! Per creare un vettore dinamico occorre conoscerne la dimensione prima di iniziare ad utilizzarlo. Se il numero di dati (ignoto) fosse segnalato da un terminatore (es. input del valore 0), non si potrebbe usare un vettore dinamico 6
38 Soluzione (1/2) float *v; int N, i; InvertiOrdine.c printf( Quanti elementi vuoi inserire? "); scanf( %d,&n); /* alloca vettore */ v = malloc (N*(sizeof (float))); if (v==null) exit; 7
39 Soluzione (2/2) /* input */ printf("inserisci %d elementi\n, N); InvertiOrdine.c for (i=0; i<n; i++) printf("elemento %d: ", i+1) ; scanf("%f", &v[i]) ; /* output */ printf( Dati in ordine inverso\n ); for (i=n-1; i>=0; i--) printf("elemento %d: %f\n", i+1, v[i]); /* libera memoria dinamica */ free(v); 8
40 Strutture dati dinamiche
41 Matrice dinamica (1/2) Si dice matrice dinamica una matrice la cui dimensione è nota solo in fase di esecuzione del programma Soluzione 1 (meno flessibile): vettore dinamico e organizzazione manuale di righe e colonne su vettore 10
42 Matrice dinamica (2/2) Soluzione 2: vettore dinamico di puntatori a righe (o dualmente vettore di puntatori a colonne) Puntatore, sfruttando la dualità puntatore-vettore Allocazione dinamica del vettore di puntatori Iterazione di allocazione delle righe Per il resto, non cambia nulla rispetto alla matrice sovradimensionata in modo statico 11
43 Esempio Acquisire da tastiera una matrice di numeri reali, e memorizzarli in un vettore Stampare successivamente la matrice trasposta (righe e colonne scambiate di ruolo) Le dimensioni della matrice (righe e colonne) non sono note al programmatore, né sovradimensionabili, ma sono acquisite come primo dato da tastiera 12
44 Soluzione con vettore dinamico (1/2) float *v; int nr,nc,i,j; printf( Dimensioni (NR NC): "); scanf( %d%d, &nr, &nc); v = malloc (nr*nc*(sizeof (float))); if (v==null) exit; /* input */ for (i=0; i<nr; i++) printf("inserisci riga %d\n, i); for (j=0; j<nc; j++) scanf("%f", &v[nc*i+j]); matricetraspostavettdyn.c 13
45 Soluzione con vettore dinamico (2/2) /* output */ printf( Matrice trasposta\n ); for (j=0; j<nc; j++) for (i=0; i<nr; i++) printf("%6.2f, v[nc*i+j]); printf( \n ); /* libera memoria dinamica */ free(v); matricetraspostavettdyn.c 14
46 Soluzione con matrice dinamica (1/3) float **v; int nr,nc,i,j; matricetraspostamatdyn.c printf( Dimensioni (NR NC): "); scanf( %d%d, &nr, &nc); /* allocazione vettore di puntatori */ v = malloc (nr*sizeof (float *)); if (v==null) exit; 15
47 Soluzione con matrice dinamica (2/3) /* allocazione righe e input */ for (i=0; i<nr; i++) printf("inserisci riga %d\n, i); v[i] = malloc (nc*sizeof (float)); if (v[i]==null) exit; for (j=0; j<nc; j++) scanf("%f", &(v[i][j])); matricetraspostamatdyn.c 16
48 Soluzione con matrice dinamica (3/3) /* output */ printf( Matrice trasposta\n ); for (j=0; j<nc; j++) for (i=0; i<nr; i++) printf("%6.2f, v[i][j]); printf( \n ); /* libera memoria dinamica */ free(v); matricetraspostamatdyn.c 17
49 Strutture dati dinamiche
50 Lista concatenata (1/2) Una lista è una struttura dati dinamica concatenata in cui Ogni elemento conosce il successivo Esiste un elemento iniziale (testa) e uno finale (coda) della lista Si possono fare inserimenti, ricerche, estrazioni ed altre operazioni 19
51 Lista concatenata (2/2) Le liste non sono fornite dal linguaggio C come tipo predefinito, ma possono essere realizzate mediante strutture ricorsive La trattazione delle liste è al di la degli obiettivi di questo corso. Vediamo un esempio semplice 20
52 Esercizio: problema di Giuseppe Flavio N oggetti sono disposti in cerchio. Per semplicità gli oggetti sono numerati da 1 a N (N viene acquisito da tastiera) Si elimina un oggetto ogni M (in senso antiorario) e si richiude il cerchio Quale oggetto rimane per ultimo? Con quale ordine si eliminano gli oggetti? 21
53 Giuseppe Flavio dinamico: soluzione (1/2) struct oggetto int numero; GiuseppeFlavioDyn.c struct oggetto *succ; ; int main(void) int i, N, M; struct oggetto *p, *x; /* genera primo oggetto */ p=malloc(sizeof *p); p->numero=1; p->succ=p; x=p; /* x punta al primo oggetto */ printf( N = ); scanf( %d, &N); printf( M = ); scanf( %d, &M); 22
54 Giuseppe Flavio dinamico: soluzione (2/2) for (i=2; i<=n; i++) x = (x->succ = malloc(sizeof *x)); x->numero = i; x->succ = p; p=x; /* p punta all ultimo */ while (p!= p->succ) for (i=1; i<m; i++) p = p->succ; printf( Eliminato n.%d\n, p->succ->numero); x = p->succ; p->succ = p->succ->succ; free(x); printf( Ultimo n.%d\n, p->numero); GiuseppeFlavioDyn.c 23
55 I puntatori e l allocazione dinamica di memoria
56 Esercizi proposti Esercizio Mini-Editor 2
57 Esercizi proposti
58 Esercizio Mini-Editor Sia dato un file testo, contenente un certo numero (non noto) di righe, aventi ognuna non più di 80 caratteri (a-capo incluso) Si realizzi in C un programma che, acquisito da tastiera il nome del file, lo legga, immagazzinandone il contenuto in una opportuna struttura dati in memoria, quindi effettui mediante presentazione a menu (con comandi ricevuto da tastiera) una tra le operazioni seguenti 4
59 Esercizio Mini-Editor : menu Ricerca di una stringa nel testo (contando quante volte compare) Ricerca (stringa x) e sostituzione (con stringa y): ogni occorrenza di x nel testo viene sostituita da y Visualizza (da i a j): visualizza le righe dalla i- esima alla j-esima (incluse) Salva: salva il testo su un file (il cui nome va acquisito da tastiera Esci: fine del programma 5
60 Struttura dati (1/2) Vettore dinamico di stringhe (o matrice dinamica di caratteri) È necessario in quanto occorre immagazzinare tutti i dati, sui cui fare più elaborazioni. Sarebbe possibile operare sulle singole righe, secondo lo schema (input manipolazione output), solo riscrivendo, per ogni comando, il risultato su un file (temporaneo) intermedio La dimensione del vettore non è nota, ma può essere calcolata mediante una lettura preliminare del file 6
61 Struttura dati (2/2) Per ogni riga del file si alloca dinamicamente una stringa La riga viene acquisita in un vettore (sovradimensionato) di lunghezza fissa Successivamente si alloca il vettore dinamico e vi si copia la riga di caratteri La ricerca/sostituzione può richiedere una nuova stringa (di lunghezza diversa) 7
62 Algoritmo Input dei dati (tutti) da file a vettore Iterazione di esecuzione di comandi menu = selezione dei possibili comandi, riconosciuti dal primo carattere (selezione a switch) formato r <stringa>: ricerca <stringa> s <x> <y>: sostituisci <x> con <y> f <i> <j>: salva su file <f> da riga <i> a riga <j> (se <f> è stdout visualizza su video) u: uscita dal programma (fine) Per semplicità si omettono controlli di errore su apertura file e fallita allocazione di memoria 8
63 Mini-Editor (1/7) const int MAXRIGA=80; char **testo; int nrighe; int leggipagina(char *nomefile); int menu(void); void cerca (char *s); void sostituisci (char *s0, char *s1); void stampa (char *nomefile, int i, int j); int main(void) char nomefile[maxriga]; printf( nome file in ingresso: ); scanf( %s, nomefile); leggipagina(nomefile); while (menu()!=0); minieditor.c 9
64 Mini-Editor (1/7) const int MAXRIGA=80; char **testo; int nrighe; int leggipagina(char *nomefile); int menu(void); void cerca (char *s); Variabili globali, visibili a tutte le funzioni void sostituisci (char *s0, char *s1); void stampa (char *nomefile, int i, int j); int main(void) char nomefile[maxriga]; printf( nome file in ingresso: ); scanf( %s, nomefile); leggipagina(nomefile); while (menu()!=0); minieditor.c 10
65 Mini-Editor (2/7) int leggipagina(char *nomefile) FILE *fp; minieditor.c char s[maxriga+1]; /* +1 per \0 */ int i; fp = fopen(nomefile, r ); /* iterazione di conteggio righe */ for (i=0; fgets(s,maxriga,fp)!=null;i++); nrighe = i; /* chiude e riapre file */ fclose(fp); fp = fopen(nomefile, r ); /* alloca vettore dinamico */ testo = malloc(nrighe*sizeof(char *)); 11
66 Mini-Editor (3/7) int leggipagina(char *nomefile) FILE *fp; minieditor.c char s[maxriga+1]; /* +1 per \0 */ int i; /* leggi righe */ for (i=0; i<nrighe; i++) fgets(s,maxriga,fp); if (s[strlen(s)-1]== \n ) s[strlen(s)-1] = \0 ; testo[i]=malloc((strlen(s)+1)*sizeof(char)); strcpy(testo[i],s); 12
67 Mini-Editor (3/7) int leggipagina(char *nomefile) FILE *fp; char s[maxriga+1]; /* +1 per \0 */ int i; /* leggi righe */ for (i=0; i<nrighe; i++) fgets(s,maxriga,fp); if (s[strlen(s)-1]== \n ) s[strlen(s)-1] = \0 ; Lettura riga su stringa locale (la stessa per tutte le righe) minieditor.c testo[i]=malloc((strlen(s)+1)*sizeof(char)); strcpy(testo[i],s); 13
68 Mini-Editor (3/7) int leggipagina(char *nomefile) FILE *fp; char s[maxriga+1]; /* +1 per \0 */ int i; /* leggi righe */ Elimina eventuale a-capo for (i=0; i<nrighe; i++) fgets(s,maxriga,fp); if (s[strlen(s)-1]== \n ) s[strlen(s)-1] = \0 ; testo[i]=malloc((strlen(s)+1)*sizeof(char)); strcpy(testo[i],s); minieditor.c 14
69 Mini-Editor (3/7) int leggipagina(char *nomefile) FILE *fp; char s[maxriga+1]; /* +1 per \0 */ int i; Alloca i-esima riga (della /* leggi righe */ lunghezza corretta) e copia for (i=0; i<nrighe; contenuto i++) fgets(s,maxriga,fp); if (s[strlen(s)-1]== \n ) s[strlen(s)-1] = \0 ; testo[i]=malloc((strlen(s)+1)*sizeof(char)); strcpy(testo[i],s); minieditor.c 15
70 Mini-Editor (4/7) int menu (void) char com[maxriga], s0[maxriga], s1[maxriga]; int i, j; printf( comando (r/s/f/u): ); gets(com); switch(com[0]) case r :sscanf(com, r %s,s0); cerca(s0); break; case s :sscanf(com, s %s%s,s0,s1); sostituisci(s0,s1); break; case f :sscanf(com, f %s%d%d,s0,&i,&j); stampa(s0,i,j); break; case u : return 0; return 1; minieditor.c 16
71 Mini-Editor (5/7) void cerca (char *s) int i, conta; minieditor.c char *riga; for (i=0; i<nrighe; i++) riga = testo[i]; conta=0; while ((riga=strstr(riga,s))!=null) conta++; riga++; if (conta>0) printf( Trovato %d volta/e in riga %d\n, conta, i); 17
72 Mini-Editor (5/7) void Evita cerca stringa (char appena *s) trovata, incrementando riga al carattere successivo. Si accettano int i, conta; sovrapposizioni. char *riga; Es. for aa (i=0; viene i<nrighe; trovato 2 volte i++) in xaaay riga = testo[i]; conta=0; while ((riga=strstr(riga,s))!=null) conta++; riga++; if (conta>0) printf( Trovato %d volta/e in riga %d\n, conta, i); minieditor.c 18
73 Mini-Editor (6/7) void sostituisci (char *s0, char *s1) int i,l,l0=strlen(s0),l1=strlen(s1); char *riga, *nuova; for (i=0; i<nrighe; i++) riga = testo[i]; while ((riga=strstr(riga,s0))!=null) l = strlen(testo[i])+l1-l0; nuova = malloc((l+1)*sizeof(char)); strncpy(nuova,testo[i],riga-testo[i]); nuova[riga-testo[i]]= \0 ; strcat(nuova,s1); strcat(nuova,riga+l0); free(testo[i]); riga=testo[i]=nuova; minieditor.c 19
74 Mini-Editor (6/7) void sostituisci (char *s0, char *s1) int i,l,l0=strlen(s0),l1=strlen(s1); char *riga, *nuova; for (i=0; i<nrighe; i++) riga = testo[i]; while ((riga=strstr(riga,s0))!=null) l = strlen(testo[i])+l1-l0; nuova = malloc((l+1)*sizeof(char)); strncpy(nuova,testo[i],riga-testo[i]); nuova[riga-testo[i]]= \0 ; strcat(nuova,s1); strcat(nuova,riga+l0); free(testo[i]); riga=testo[i]=nuova; Puntatore a stringa iniziale o a sottostringa trovata in essa minieditor.c 20
75 Mini-Editor (6/7) void sostituisci (char *s0, char *s1) int i,l,l0=strlen(s0),l1=strlen(s1); char *riga, *nuova; for (i=0; i<nrighe; i++) riga = testo[i]; while ((riga=strstr(riga,s0))!=null) l = strlen(testo[i])+l1-l0; nuova = malloc((l+1)*sizeof(char)); strncpy(nuova,testo[i],riga-testo[i]); nuova[riga-testo[i]]= \0 ; strcat(nuova,s1); strcat(nuova,riga+l0); free(testo[i]); riga=testo[i]=nuova; Puntatore a nuova stringa (eventualmente di lunghezza diversa) minieditor.c 21
76 Mini-Editor (6/7) void sostituisci (char *s0, char *s1) int i,l,l0=strlen(s0),l1=strlen(s1); char *riga, *nuova; for (i=0; i<nrighe; i++) riga = testo[i]; while ((riga=strstr(riga,s0))!=null) l = strlen(testo[i])+l1-l0; nuova = malloc((l+1)*sizeof(char)); strncpy(nuova,testo[i],riga-testo[i]); nuova[riga-testo[i]]= \0 ; strcat(nuova,s1); strcat(nuova,riga+l0); free(testo[i]); riga=testo[i]=nuova; minieditor.c 22
77 Mini-Editor (6/7) void sostituisci (char *s0, char *s1) Concatena 3 pezzi: int -i,l,l0=strlen(s0),l1=strlen(s1); Parte iniziale (prima della sottostringa trovata) char -Stringa *riga, s1*nuova; for -(i=0; parte finale i<nrighe; (dopo la i++) sottostringa trovata) riga = testo[i]; while ((riga=strstr(riga,s0))!=null) l = strlen(testo[i])+l1-l0; nuova = malloc((l+1)*sizeof(char)); strncpy(nuova,testo[i],riga-testo[i]); nuova[riga-testo[i]]= \0 ; strcat(nuova,s1); strcat(nuova,riga+l0); free(testo[i]); riga=testo[i]=nuova; minieditor.c 23
78 Mini-Editor (7/7) void stampa (char *nomefile, int i, int j) FILE *fp; int k; minieditor.c if (strcmp(nomefile, stdout )==0) fp = stdout; else fp = fopen(nomefile, w ); if (j>=nrighe) j=nrighe-1; for (k=i; k<=j; k++) fprintf(fp, %s\n,testo[k]); if (fp!= stdout) fclose(fp) 24
79 I puntatori e l allocazione dinamica di memoria
80 Argomenti trattati Il puntatore come dato e riferimento dato Variabili e operatori sui puntatori Utilizzo avanzato dei puntatori con Vettori e matrici Strutture L allocazione dinamica di memoria e le strutture dati dinamiche Esercizi 2
81 Tecniche di programmazione Gestione di riferimenti a dati privi di nome Manipolazione dei puntatori e aritmetica Parametri per riferimento Strutture puntate Vettori e matrici dinamiche 3
82 Suggerimenti I puntatori sono un efficace strumento per Parametri per riferimento Allocazione dinamica (esplicita) di dati Vantaggi Accesso a dati altrimenti non manipolabili (mediante nome) Maggior flessibilità e possibilità di gestire meglio la memoria disponibile Possibilità di adattare la dimensione dei dati all input del programma (in esecuzione) 4
83 Materiale aggiuntivo Sul CD-ROM Testi e soluzioni degli esercizi trattati nei lucidi Scheda sintetica Esercizi risolti Esercizi proposti Esercizi proposti da altri libri di testo 5
I puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in
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;
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
DettagliGestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
DettagliL Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento
DettagliAllocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()
Allocazione Statica Finora abbiamo visto che le variabili sono sempre definite staticamente. Questo è un limite perché la loro esistenza deve essere prevista e dichiarata a priori. In particolare per variabili
DettagliI puntatori e l allocazione dinamica di memoria. Esercizi risolti
I puntatori e l allocazione dinamica di memoria Esercizi risolti 1 Esercizio Si vuole realizzare un tipo struct, utilizzato per informazioni su operazioni di vendita, avente i seguenti campi: codice: numero
DettagliLa gestione della memoria dinamica Heap
Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Prof. Luigi Lamberti 2005 Cenni sui Processi Un Programma è un insieme di Istruzioni memorizzato in un file con le costanti
DettagliL'allocazione dinamica della memoria
L'allocazione dinamica della memoria Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino I puntatori Le variabili di tipo puntatore permettono di accedere alla memoria
DettagliStruct, enum, Puntatori e Array dinamici
Struct, enum, Puntatori e Array dinamici Tratti dal corso del Dr. Francesco Fabozzi Corso di Informatica Tipi di dato in C Abbiamo esaminato diversi tipi di dato che il C mette a disposizione dell utente
DettagliUso avanzato dei puntatori Allocazione dinamica della memoria
Uso avanzato dei puntatori 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
DettagliOgni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.
Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono
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;
DettagliIl linguaggio C Strutture
Il linguaggio C Strutture Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C -- Strutture 2 Ringraziamenti Questi
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
DettagliStrutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
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
DettagliAllocazione dinamica della memoria: calloc() Se T è il nomed di un tipo, la chiamata calloc(n, sizeof(t)) è equivalente a malloc(n * sizeof(t))
Allocazione dinamica della memoria: malloc() In C è possibile allocare dinamicamente un area di memoria (ossia, durante l esecuzione di un programma) tramite le funzioni malloc() e calloc() (occorre includere
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
DettagliDefinizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori
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! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente
! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente!!la loro esistenza deve essere prevista e dichiarata a priori! Questo può rappresentare un problema soprattutto per variabili
DettagliIntroduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016
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:
DettagliLezione 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
DettagliAllocazione della memoria. Allocazione dinamica della memoria. Allocazione della memoria. Allocazione automatica
Allocazione dinamica della memoria Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Allocazione della memoria Il termine allocazione viene utilizzato per indicare l assegnazione di un blocco
Dettagli5. Quinta esercitazione autoguidata: liste semplici
22 5. Quinta esercitazione autoguidata: liste semplici 5.1. Liste rappresentate mediante strutture e puntatori (LISTE1.C, LISTE2.C) Scrivere un programma che - costruisce una lista di k interi (con k letto
DettagliAllocazione dinamica della memoria
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Tipi di memoria dati Nella macchina astratta C esistono tre tipi di memoria per allocare
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
DettagliSommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...
Sommario PREFAZIONE...XI Aggiornamenti e novità... xi Lo scopo di questo libro... xii Diagramma delle dipendenze... xii La metodologia di insegnamento... xiii Panoramica sul libro... xvi Ringraziamenti...
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
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 5 Struct, Union e allocazione dinamica della memoria Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
DettagliUnità Didattica 5 Linguaggio C. Stringhe. Accesso a file ASCII. Strutture.
Unità Didattica 5 Linguaggio C Stringhe. Accesso a file ASCII. Strutture. 1 Stringhe Una stringa è una sequenza di caratteri (es: ciao, sd!n29dnqa ); In C non esiste una variabile di tipo stringa; Una
DettagliSommario FONDAMENTI DI INFORMATICA 1. Il tipo FILE. Passaggio da standard I/O. LINGUAGGIO C Gestione dei file
Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011
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
DettagliLinguaggio 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
DettagliGestione 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)
DettagliProgrammazione 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
DettagliGESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
DettagliArray. 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
DettagliARRAY E STRINGHE. ESERCIZIO 2 Scrivere un programma che calcola il numero di doppie e di dittonghi (2 vocali vicine) presenti in una stringa.
3 ITI - a.s. 2007-2008 Compiti di Informatica ESTATE 2008 ARRAY E STRINGHE Scrivere una funzione che carica da tastiera un array di n elementi e lo stampa invertendo il primo elemento con l'ultimo, il
DettagliLinguaggi di programmazione + laboratorio a.a. 2012/2013
Linguaggi di programmazione + laboratorio a.a. 2012/2013 Scrivere un programma in linguaggio C che legga da tastiera una sequenza di lunghezza ignota a priori di numeri interi positivi. Il programma, a
DettagliConsideriamo un vettore allocato dinamicamente
Libreria per per la la gestione/manipolazione dei dei vettori Consideriamo un vettore allocato dinamicamente int * v; v = (int *) malloc (n * sizeof (int) ); Conversione di tipo da void * a int * Numero
DettagliProblema. Vettori e matrici. Vettori. Vettori
e matrici Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Problema Si vuole un programma che chieda 10 numeri dalla tastiera e li visualizzi dall ultimo al primo Soluzione attuale (con le
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
DettagliLe basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
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
DettagliStrutture Dinamiche. Fondamenti di Informatica
Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));
DettagliELEMENTI 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
DettagliIntroduzione al C. Unità Gestione Dinamica della Memoria
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità Gestione Dinamica della Memoria D. Bloisi, A. Pennisi, S. Peluso, S. Salza Gestione
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 6 - Liste Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento
DettagliAllocazione statica della memoria
2015 - Roberta Gerboni 1 2 Allocazione statica della memoria Cosa succede nella memoria del computer quando il un programma vengono dichiarate delle variabili? memoria Ad esempio: int main() 57 { int x=
DettagliEsercizio 2: Algebra dei Puntatori e Puntatori a Puntatori
Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Salvatore Mandrà 7 Ottobre 2008 1 Esercizio L esercizio prevede l implementazione di funzioni per il prodotto di una matrice per un vettore, attraverso
DettagliI puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore
I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p
DettagliFile e puntatori a file
File e puntatori a file Vitoantonio Bevilacqua vitoantonio.bevilacqua@poliba.it La libreria stdio.h mette a disposizione delle funzioni che hanno la peculiarità di trattare con questa nuova tipologia di
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
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
DettagliEsercitazione 12. Esercizi di Ricapitolazione
Esercitazione 12 Esercizi di Ricapitolazione Esercizio Scrivere un programma che, dato un numero intero positivo, stampa la sua rappresentazione binaria. ALGORITMO Scriviamo una procedura stampa_bin che,
DettagliPuntatori. Unità 6. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliEspressione di chiamata di funzione
Avvertenza Quanto segue NON è un libro, ma è una copia dei lucidi usati a lezione che NON sostituisce i libri di testo adottati e consigliati per l insegnamento di Informatica Generale. Questa copia è
DettagliPuntatori. Unità 6. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi
Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Via Ariosto
Dettagli4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste
4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1
DettagliUn 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
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 28 Febbraio 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,8,-4; int N = 7; int min = 3; int i; Scrivere la porzione di codice
DettagliCaratteri e stringhe
Caratteri e stringhe Vettori di caratteri Il tipo stringa Terminatore nullo Input/output di stringhe 2 Vettori di caratteri Stringhe in C Nel linguaggio C non è supportato esplicitamente alcun tipo di
DettagliVettori di caratteri. Caratteri e stringhe. Stringhe in C. Vettori di caratteri. char saluto[10] ; B u o n g i o r n o 4. Esempio.
Vettori di caratteri Il tipo stringa Terminatore nullo Input/output di stringhe Caratteri e stringhe 2 Stringhe in C Vettori di caratteri Nel linguaggio C non è supportato esplicitamente alcun tipo di
DettagliLe funzioni, e le istruzioni di input/output
Linguaggio C Le funzioni, e le istruzioni di input/output 1 Funzioni! Sono sottoprogrammi per svolgere un particolare compito! Sequenze di istruzioni (raggruppate tramite le parentesi graffe) alle quali
DettagliFunzioni. (Passaggio dei parametri per riferimento) Passaggio dei parametri
Funzioni (Passaggio dei parametri per riferimento) Passaggio dei parametri Per passaggio dei parametri si intende l associazione fra parametri attuali e parametri formali che avviene al momento della chiamata
DettagliComplementi. - 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
DettagliEsercizi 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]
DettagliLinguaggio C. tipi di dati definiti dall utente. Università degli Studi di Brescia. Docente: Massimiliano Giacomin
Linguaggio C tipi di dati definiti dall utente Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Tipi di dati in C Predefiniti
DettagliCaratteri e stringhe. Vettori di caratteri. Il tipo stringa Terminatore nullo Input/output di stringhe Politecnico di Torino 1
Caratteri e stringhe Il tipo stringa Terminatore nullo Input/output di stringhe 2 2006 Politecnico di Torino 1 Stringhe in C Nel linguaggio C non è supportato esplicitamente alcun tipo di dato stringa
DettagliNon ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
Dettagli1 (6) 2 (7) 3 (7) 4 (7) 5 (6)
CORSO DI LAUREA IN INGEGNERIA ELETTRICA, CHIMICA e MATERIALI Informatica B anno accademico 010-011 Prof. Danilo ARDAGNA Seconda Prova in Itinere 7.06.011 Durata 1h 30 Valutazioni 1 (6) (7) 3 (7) 4 (7)
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliLezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22
Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)
DettagliFondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 2A di Martedì 29 Gennaio 2015 tempo a disposizione 2h
Avvertenze per la consegna: apporre all inizio di ogni file sorgente un commento contenente i propri dati (cognome, nome, numero di matricola) e il numero della prova d esame. Al termine, consegnare tutti
DettagliProgrammazione. Laboratorio. Roberto Cordone DI - Università degli Studi di Milano
Gestione della memoria p. 1/11 Programmazione Laboratorio Roberto Cordone DI - Università degli Studi di Milano Tel. 02 503 16235 E-mail: roberto.cordone@unimi.it Ricevimento: su appuntamento Lezioni:
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;
DettagliEsercizio 1. Esercizio 1 - Soluzione
Esercizio 1 Progettare e Codificare in C un programma che permetta di Chiedere all utente quanti numeri vuole inserire Leggere i numeri inseriti dall utente e calcolare la somma dei fattoriali Esempio:
DettagliFondamenti di Informatica AA 2016/2017
Fondamenti di Informatica AA 2016/2017 Eng. Ph.D. Michela Paolucci DISIT Lab http://www.disit.dinfo.unifi.it Department of Information Engineering, DINFO University of Florence Via S. Marta 3, 50139, Firenze,
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
DettagliPROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 9/6/2008
PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 9/6/2008 MOTIVARE IN MANIERA CHIARA LE SOLUZIONI PROPOSTE A CIASCUNO DEGLI ESERCIZI SVOLTI ESERCIZIO 1 (5 punti) Descrivere
DettagliGestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico
Gestione dei file Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Gli stream Si dice stream qualsiasi sorgente di dati in ingresso e qualsiasi
DettagliInput/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE
Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente
DettagliEsercizio 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: *******************************************************************
DettagliLe librerie standard. ! La libreria standard del C è in realtà un insieme di librerie
! La libreria standard del C è in realtà un insieme di librerie! Per usare una libreria, non occorre inse -rirla esplicitamente nel progetto: ogni ambiente di sviluppo sa già dove cercarle! Ogni file sorgente
DettagliAllocazione dinamica
Allocazione dinamica Quando non si sa a priori quanto un array debba essere grande allocazione dinamica di array Quando si deve restituire un array come risultato di una funzione (a meno di non barare
DettagliStrategie di programmazione
Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie
DettagliCompendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)
Compendio sottoinsieme del C++ a comune col C (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Librerie 1/2 Il solo insieme di istruzioni di un linguaggio di programmazione
DettagliLaboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014
Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014 Damiano Macedonio Esercizio 1 Scrivere una funzione che riceve in ingresso un puntatore ad un array di interi e modifica tale array
DettagliProva di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:
Prova di Laboratorio del 12.1.2005 [durata 90 min.] Corso A-B di Programmazione (A.A. 2004/05) 1. Leggere da tastiera un insieme di numeri interi ed inserirli in un vettore A 2. Calcolare tramite una funzione
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
DettagliEsercizio n.1 FONDAMENTI DI INFORMATICA 1. Esercizio n.2. Soluzione. LINGUAGGIO C Funzioni e gestione file: esercitazione
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
DettagliAppunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio
Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio 1-La memoria dinamica La scrittura di un programma (indipendentemente dal linguaggio adottato) deve sempre tener conto
DettagliIl puntatore. Il puntatore
Il puntatore È un tipo scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Il dominio di una variabile di tipo puntatore è un insieme di indirizzi: Il valore di una
DettagliInformatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi
Informatica 1 Corso di Laurea Triennale in Matematica Gianluca Rossi gianluca.rossi@uniroma2.it Dipartimento di Matematica Università di Roma Tor Vergata 11: Stringhe (www.informatica-uno.blogspot.com)
DettagliArray Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione
Array Tipi di dato semplici e strutturati i tipi di dato visti finora erano tutti semplici: int, char, float,... i dati manipolati sono spesso complessi (o strutturati) con componenti elementari o strutturate
DettagliESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C
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
DettagliLinguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.
Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili
Dettagli