Esercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018
|
|
- Rosa Manfredi
- 4 anni fa
- Visualizzazioni
Transcript
1 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 nome [MAXLENGTH] ; 6 char cognome [MAXLENGTH] ; 7 } Persona ; 8 9 void stampa persona ( Persona p ){ p r i n t f ( "%s %s\n", p. nome, p. cognome ) ; 1 } 1 14 void m o d i f i c a p e r s o n a ( Persona p ){ 1 p. nome [ 0 ] = \0 ; 16 } int main ( ) { 0 1 Persona p = {"Mario", "Rossi" } ; stampa persona ( p ) ; m o d i f i c a p e r s o n a ( p ) ; 4 stampa persona ( p ) ; } La struttura p viene passata alla funzione modifica persona per valore, la funzione modifica persona quindi copia tutti i valori della struttura persona p contenuta nel record di attivazione del main, nella variabile locale persona p contenuta nel record di attivazione della funzione modifica persona. In questo modo, la chiamata a modifica persona non ha nessun effetto sulla variabile p contenuta nel main.. Cosa stampa il seguente programma? #include <s t r i n g. h> #d e f i n e MAXLENGTH typedef struct { 7 char nome ; 8 char cognome ; 9 } Persona ; void a l l o c a p e r s o n a ( Persona p, char nome [ ], char cognome [ ] ) { 1 14 /* alloco in modo dinamico gli array che contengono 1 nome e cognome */ 16
2 17 p >nome =(char ) malloc (MAXLENGTH sizeof ( char ) ) ; 18 p >cognome = ( char ) malloc (MAXLENGTH sizeof ( char ) ) ; 19 s t r c p y (p >nome, nome ) ; 0 s t r c p y (p >cognome, cognome ) ; 1 } 4 void stampa persona ( Persona p ){ 6 p r i n t f ( "%s %s\n", p. nome, p. cognome ) ; 7 } void m o d i f i c a p e r s o n a ( Persona p ){ 1 p. nome [ 0 ] = \0 ; /* N.B. in questo caso la struttura contiene dei puntatori ad una zona di memoria dinamica. Quando la funzione 4 viene richiamata si effettua una copia di ogni suo attributo, quindi una copia dei puntatori, ma non d e l l a r e a di memoria 6 allocata dinamicamente a cui essi puntano 7 */ 8 } 9 40 int main ( ) { 41 4 Persona p ; 4 a l l o c a p e r s o n a (&p, "Mario", "Rossi" ) ; 44 stampa persona ( p ) ; 4 m o d i f i c a p e r s o n a ( p ) ; 46 stampa persona ( p ) ; 47 } In questo caso il codice stamperá prima Mario Rossi e dopo Rossi. Infatti, passando per riferimento l indirizzo della variabile p del main alla funzione modifica persona, questa é in grado di modificare il contenuto di p appartenente al record di attivazione del main.. Che cosa stampa il seguente codice? Rimane della memoria non deallocata al termine del main? 4 int main ( ) { 6 int p ; 7 int q ; 8 9 p = ( int ) malloc ( sizeof ( int ) ) ; /* alloco lo spazio di un intero */ 10 p = 1 0 ; 11 q = p ; 1 q = ( p ) ++; 1 /* 14 int temp = *p; 1 *p += 1; 16 *q = temp; 17 */ p r i n t f ( "%d\n", q ) ; /* stampa 10 */ 0
3 1 q = ++( p ) ; /* *p += 1; 4 *q = *p; */ 6 7 p r i n t f ( "%d\n", q ) ; /* stampa 11 */ 8 f r e e ( q ) ; 9 } 4. Cosa stampa questo codice? Rimane della memoria non deallocata al termine del main? 4 int main ( ) { 6 int i = 10, j = 0 ; 7 int p ; 8 p = ( int ) malloc ( sizeof ( int ) ) ; /* alloco lo spazio di un intero */ 9 p = i ; 10 for ( ; p<j ; ( p)++){ 11 p r i n t f ( "%d\n", i ) ; 1 } 1 14 p = &i ; 1 16 for ( ; p<j ; ( p)++){ 17 p r i n t f ( "%d\n", i ) ; /* stampo i numeri da 10 a 19 */ 18 } 19 0 f r e e ( p ) ; 1 /* il programma termina con un errore perche 4 tenta di deallocare una zona non allocata in modo dinamico. Infatti in riga 16 viene assegnato a p l indirizzo della 6 variabile i. 7 La memoria non viene deallocata in modo corretto. 8 */ 9 0 }. Cosa stampa questo codice? #d e f i n e MAX int main ( ) { 7 8 char p, q ; 9 10 p=(char ) malloc (MAX sizeof ( char ) ) ; 11 /* alloco uno spazio di memoria grande 0 volte un char, 1 in pratica un array di char contente 0 elementi
4 1 char p[0]; 14 */ 1 16 /* 17 leggo una stringa di testo e la salvo nella zona di memoria 18 puntata da p 19 */ 0 s c a n f ( "%s", p ) ; 1 q=p ; p r i n t f ( "%s\n", q ) ; 4 /* dato che q punta alla zona di memoria allocata dinamicamente, stampo la stringa letta in input */ 6 7 /* uso il puntatore q per iterare lungo l array */ 8 for ( ; q!= \0 ; q++){ 9 p r i n t f ( "%c", q ) ; 0 /* stampo uno alla volta tutti i caratteri della 1 stringa letta in input */ } 4 p r i n t f ( "\n" ) ; f r e e ( p ) ; 6 /* libero la memoria 7 nota: se avessimo fatto free(q), avremmo ottenuto un errore 8 */ 9 40 } 6. Cosa stampa questo codice? 1 #include <s t d l i b.> #d e f i n e MAX 4 int main ( ) { 6 7 int m[max] ; /* dichiaro un array di puntatori ad intero */ 8 /* N.B. -> ogni cella dell array e un puntatore */ 9 10 int i, j ; 11 1 for ( i =0; i <MAX; i ++){ 1 14 m[ i ] = ( int ) malloc (MAX sizeof ( int ) ) ; 1 /* 16 Alloco u n a r e a di memoria con l e q u i v a l e n t e 17 di un array di interi di dimensione MAX e 18 restituisco il puntatore ad una cella dell array m */ 19 0 /* alla fine del ciclo ottengo una matrice MAX x MAX */ 1 for ( j =0; j<max; j ++){ m[ i ] [ j ] = ( i +1) ( j +1); 4 /* per ogni cella di indice(i,j) della matrice, calcolo (i +1) * (j +1). 6 Costruisco in pratica una tavola pitagorica. 7 */
5 8 } 9 } 0 1 for ( i =0; i <MAX; i ++){ for ( j =0; j<max; j ++){ /* stampo ogni cella della tavola */ 4 p r i n t f ( "%d ",m[ i ] [ j ] ) ; } 6 p r i n t f ( "\n" ) ; 7 /* devo deallocare ogni array creato dinamicamente */ 8 f r e e (m[ i ] ) ; 9 } } 7. Cosa stampa questo codice? #d e f i n e MAX 4 6 int main ( ) { 7 8 int m; /* puntatore a puntatori */ 9 int i, j ; /* 1 N.B. A differenza d e l l e s e r c i z i o 6, la matrice e 1 completamente dinamica, sia per il numero di 14 righe che di colonne 1 */ m = ( int ) malloc ( sizeof ( int ) MAX) ; /* alloco un area di memoria corrispondente 0 ad un array di MAX puntatori ad interi 1 */ for ( i =0; i <MAX; i ++){ 4 m[ i ] = ( int ) malloc (MAX sizeof ( int ) ) ; 6 /* 7 Alloco u n a r e a di memoria con l e q u i v a l e n t e 8 di un array di interi di dimensione MAX e 9 restituisco il puntatore ad una cella dell array m */ 0 1 for ( j =0; j<max; j ++){ m[ i ] [ j ] = ( i +1) ( j +1); } 4 } 6 for ( i =0; i <MAX; i ++){ 7 for ( j =0; j<max; j ++){ 8 /* stampo ogni cella della tavola */ 9 p r i n t f ( "%d ",m[ i ] [ j ] ) ; 40 } 41 p r i n t f ( "\n" ) ;
6 4 /* devo deallocare ogni array creato dinamicamente */ 4 f r e e (m[ i ] ) ; 44 } 4 46 /* 47 E necessario deallocare anche la memoria dell array di array 48 */ 49 f r e e (m) ; 0 1 } 8. Cosa stampa il seguente programma? #d e f i n e MAX int main ( ) { 8 9 int m; 10 int i, j ; 11 1 /* 1 Rappresento la matrice come un unico array dove le righe della 14 matrice sono state concatenate una dopo l a l t r a 1 */ 16 m = ( int ) malloc ( sizeof ( int ) MAX MAX) ; for ( i =0; i <MAX; i ++){ 19 for ( j =0; j<max; j ++){ 0 /* 1 Per accedere ad un elemento d e l l a r r a y e necessario calcolare la giusta posizione : Es: la cella di riga 1, colonna nella matrice (m [1][]) e l elemento di 4 posizione (1 * MAX + ) nell array */ 6 m[ i MAX + j ] = ( i +1) ( j +1); 7 } 8 } 9 0 for ( i =0; i <MAX; i ++){ 1 for ( j =0; j<max; j ++){ p r i n t f ( "%d ",m[ i MAX + j ] ) ; } 4 p r i n t f ( "\n" ) ; } 6 f r e e (m) ; 7 8 } 9. Creare una lista dinamica di interi in cui gli elementi sono mantenuti in ordine crescente: implementare i metodi che permetto di creare la lista, inserire un nuovo elemento e stampare la lista.
7 4 /* Dichiaro la struttura che rappresenta un elemento della lista */ 6 typedef struct EL{ 7 int v a l o r e ; 8 struct EL next ; 9 } Elemento ; /* 1 Il tipo Lista e semplicemente un puntatore 14 al primo elemento della lista 1 */ typedef Elemento L i s t a ; /* 0 procedura crea_lista : 1 assegna alla testa di una lista il valore NULL, per simboleggiare che la lista e vuota */ 4 void c r e a l i s t a ( L i s t a l i s t a ){ 6 l i s t a = NULL; 7 } 8 9 /* 0 La procedura stampa_lista, stampa in modo ricorsivo tutti gli elementi 1 della lista, dal primo a l l u l t i m o */ 4 void s t a m p a l i s t a ( L i s t a l i s t a ){ 6 if ( l i s t a!= NULL){ 7 /* stampa il valore d e l l e l e m e n t o corrente */ 8 p r i n t f ( "%d ", l i s t a >v a l o r e ) ; 9 /* Passo ricorsivo su cio che rimane */ 40 s t a m p a l i s t a ( l i s t a >next ) ; 41 } 4 else{ 4 p r i n t f ( "\n" ) ; 44 } 4 46 } void i n s e r i s c i ( L i s t a l i s t a, int v a l o r e ) { 49 0 /* 1 Se la lista e terminata o il valore corrente e maggiore del valore da inserire, allora e il momento di creare il nuovo elemento */ 4 if ( l i s t a == NULL ( l i s t a ) >v a l o r e > v a l o r e ){ 6 /* 7 N.B. se la condizione considerata nella if e vera 8 vuol dire che: 9 o * lista == NULL
8 60 la lista e vuota o * lista ora corrisponde 61 all ultimo elemento 6 o (* lista)-> valore > valore) 6 in questo caso * lista corrisponde al puntatore 64 al primo elemento il cui valore e maggiore 6 di valore e quindi all elemento che deve 66 essere posizionato nella lista subito dopo 67 a quello che stiamo inserendo ora /* Alloca nuova area di memoria */ 70 Elemento e l = ( Elemento ) malloc ( sizeof ( Elemento ) ) ; 71 el >v a l o r e = v a l o r e ; /* Assegna il valore */ 7 el >next = l i s t a ; /* nuovo elemento punta all elemento corrente */ 7 l i s t a = e l ; /* L elemento precedente punta al nuovo elemento */ 74 } 7 else{ 76 /* Altrimenti procedi ricorsivamente sul resto della lista */ 77 i n s e r i s c i (&(( l i s t a ) >next ), v a l o r e ) ; 78 } 79 } int main ( ) { 8 84 L i s t a l i s t a ; 8 c r e a l i s t a (& l i s t a ) ; p r i n t f ( "Lista " ) ; 88 s t a m p a l i s t a ( l i s t a ) ; i n s e r i s c i (& l i s t a, ) ; 9 i n s e r i s c i (& l i s t a, 1 ) ; 9 i n s e r i s c i (& l i s t a, ) ; 94 i n s e r i s c i (& l i s t a, ) ; 9 i n s e r i s c i (& l i s t a, ) ; 96 p r i n t f ( "Lista" ) ; 97 s t a m p a l i s t a ( l i s t a ) ; 98 } 10. Creare una lista bidirezionale di interi, ovvero una lista che permette lo scorrimento in entrambe le direzioni (dal primo elemento allultimo e dallultimo al primo). Implementare i metodi che permettano di creare la lista, inserire un nuovo elemento al termine della lista, stampare la lista in entrambi i sensi 4 typedef struct EL{ int v a l o r e ; 6 struct EL next ; /* Puntatore all elemento successivo in lista */ 7 struct EL prev ; /* Puntatore all elemento precedente in lista */ 8 } Elemento ; 9
9 10 11 /* 1 La testa della lista e un elemento in cui il puntatore next 1 punta al primo elemento della lista, mentre il puntatore 14 prev punta all ultimo elemento della lista 1 */ typedef Elemento L i s t a ; /* 0 Procedura che inizializza la lista come lista vuota 1 ( entrambi i puntatori a NULL */ 4 void c r e a l i s t a ( L i s t a l i s t a ){ 6 l i s t a > next = NULL; /* puntatore al primo elemento della lista */ 7 l i s t a > prev = NULL; /* puntatore all ultimo elemento della lista */ 8 } /* Procedura che stampa la lista dal primo elemento all ultimo */ void s t a m p a l i s t a f o r w a r d ( L i s t a l i s t a ){ 4 if ( l i s t a. next!=null){ 6 p r i n t f ( "%d ", l i s t a. next >v a l o r e ) ; 7 s t a m p a l i s t a f o r w a r d ( ( l i s t a. next ) ) ; 8 } 9 } /* Procedura che stampa la lista dall ultimo elemento al primo */ 4 void s t a mpa l i sta b a ckward ( L i s t a l i s t a ){ 4 44 if ( l i s t a. prev!=null){ 4 p r i n t f ( "%d ", l i s t a. prev >v a l o r e ) ; 46 stampa lista backward ( ( l i s t a. prev ) ) ; 47 } 48 } 49 0 /* 1 Procedura per l i n s e r i m e n t o di un nuovo elemento al termine della lista */ 4 void i n s e r i s c i ( L i s t a l i s t a, int v a l o r e ){ 6 7 /* Non c e bisogno di iterare fino a l l u l t i m o elemento p e r c h e il 8 suo puntatore e disponibile nella testa della lista */ 9 60 Elemento elemento = ( Elemento ) malloc ( sizeof ( Elemento ) ) ; 61 elemento >v a l o r e = v a l o r e ; 6 elemento >next = NULL; /* l elemento che stiamo inserendo 6 e sempre l ultimo */ 64 elemento >prev = l i s t a >prev ; /* lista -> prev contiene 6 sempre il puntatore 66 all ultimo elemento 67 dell array, che ora deve 68 diventare l elemento
10 69 precedente a quello 70 che stiamo inserendo 71 */ 7 7 if ( l i s t a >prev!=null){ 74 /* 7 aggiorno il puntatore di quello che era l ultimo 76 elemento della lista, il cui elemento 77 successivo ora dovra corrispondere 78 all elemento che stiamo inserendo 79 */ 80 l i s t a >prev >next=elemento ; 81 } 8 else{ 8 /* 84 Nel caso la lista sia vuota, 8 il nuovo elemento diventa il primo 86 della lista 87 */ 88 l i s t a >next=elemento ; 89 } 90 /* l elemento diventa l ultimo elemento della lista 91 e aggiorno dunque il corrispondente puntatore prev 9 contenuto nella testa della lista 9 */ 94 l i s t a >prev=elemento ; 9 } int main ( ) { L i s t a l i s t a ; c r e a l i s t a (& l i s t a ) ; 10 i n s e r i s c i (& l i s t a, 1 ) ; 10 i n s e r i s c i (& l i s t a, ) ; 104 i n s e r i s c i (& l i s t a, ) ; s t a m p a l i s t a f o r w a r d ( l i s t a ) ; 107 p r i n t f ( "\n" ) ; 108 s t a m pa l i sta backward ( l i s t a ) ; 109 p r i n t f ( "\n" ) ; 110 }
Esercitazioni 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
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
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 4 23/10/2018
Esercitazioni di Fondamenti di Informatica - Lez. 4 2/0/20 Esercizi sui tipi in C I codici e le soluzioni degli esercizi sono nella cartella parte. Dato il seguente codice, trovare gli errori, correggerli
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
DettagliPreviously on TDP. LISTA rappresentata mediante "struct e puntatori" Cosa e aux? Di che tipo e e cosa contiene?
Previously on TDP lis ^ ^ 7 21 ** ** 14 *** memoria 9 NULL LISTA rappresentata mediante "struct e puntatori" *** lis->info == cosa? lis->next == ^^; /*cosa e ^^?*/ che cosa e' (*lis)? Cosa e aux? Di che
DettagliStrutture dati dinamiche
Strutture dati dinamiche - Liste concatenate - Pile -> LIFO (last in first out) - Code -> FIFO (first in first out) - Alberi binari: gestione dati in algoritmi complessi Liste Concatenate Formata da elementi
DettagliStrutture Dinamiche. Strutture Dinamiche
Corso di Informatica A Vito Perrone 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato)); Crea in memoria una variabile
DettagliPreviously on TDP. LISTA rappresentata mediante "struct e puntatori" TipoLista lis. Dichiarare DISEGNARE e. DISEGNARE aux.
Previously on TDP lis 7 21 ** ** 14 *** *** memoria 9 LISTA rappresentata mediante "struct e puntatori" TipoLista lis lis->info == cosa? lis->next == ; /*cosa e?*/ che cosa e' (*lis)? Dichiarare DISEGNARE
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
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;
DettagliStrutture dati dinamiche in C. Emilio Di Giacomo
Strutture dati dinamiche in C Emilio Di Giacomo Strutture dati Una struttura dati è un contenitore in cui i dati sono organizzati in maniera che possano essere recuperati e manipolati efficientemente Un
DettagliE12 Esercizi su Strutture dati dinamiche in C
E12 Esercizi su Strutture dati dinamiche in C Esercizio 1. Si vuole realizzare una lista caratteri in C utilizzando una rappresentazione semplicemente collegata. Scrivere una struttura nodo che contiene
DettagliListe concatenate e allocazione dinamica
Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide, e seguita
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
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));
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
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
DettagliPolitecnico di Milano. Strutture dati dinamiche
Politecnico di Milano Strutture dati dinamiche Strutture dati statiche e dinamiche In C le dimensioni di ogni dato sono note prima dell esecuzione Sarebbe utile avere contenitori la cui dimensione varia
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
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
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.
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
DettagliListe concatenate. Violetta Lonati
Liste concatenate Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 2 novembre 2017 Violetta Lonati Liste
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
DettagliListe concatenate e allocazione dinamica
Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2017/2018 Calendario delle lezioni Ogni lezione consta di una spiegazione assistita da slide,
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;
DettagliAllocazione Dinamica della memoria
Allocazione dinamica Allocazione Dinamica della memoria I Il C mette a disposizione delle primitive per la gestione dinamica della memoria, grazie all utilizzo di alcune funzioni messe a disposizione dalla
DettagliLa programmazione nel linguaggio C. Liste
Liste È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse. Esempi: sequenza di interi (23 46 5 28 3) sequenza di caratteri ( x r f ) sequenza di
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Memoria stack ed heap (1) L'area di memoria stack é quella in cui viene allocato un pacchetto di dati non appena l'esecuzione passa dal programma chiamante a una funzione.
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
DettagliEsercizio 1 Liste: calcolo del numero di elementi ripetuti in una lista
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 11 Esercitazione: 27 gennaio 2005 Esercizi su liste, ricorsione, file. Scaletta Esercizio 1 Liste: calcolo del numero di
DettagliDiversi modi di rappresentare sequenze di elementi
Liste È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse. Esempi: sequenza di interi (23 46 5 2 3) sequenza di caratteri ( x r f ) sequenza di
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
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
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
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
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
DettagliSoluzioni seconda prova intermedia del 30 gennaio 2006 temi 1 e 2. Siano date le seguenti definizioni di costanti e tipi in linguaggio C:
Fondamenti Informatica B Soluzioni seconda prova intermedia del 30 gennaio 2006 temi 1 e 2 Esercizio 1 tema 1 Siano date le seguenti definizioni di costanti e tipi in linguaggio C: #define MAX_LENGTH 40
DettagliGestione della memoria
Gestione della memoria Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2017 2018 Allocazione di memoria A una variabile puntatore si può assegnare
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 21 Strutture dinamiche Gli array ci permettono di memorizzare un insieme di dati dello stesso tipo Deve essere noto staticamente il
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
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
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Una funzione per i numeri di Fibonacci
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
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/
DettagliLezione 6: Array e puntatori
Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Una funzione per i numeri di Fibonacci
DettagliUna breve introduzione all implementazione in C di algoritmi su grafo
Una breve introduzione all implementazione in C di algoritmi su grafo A cura di Gianmaria Leo Introduzione La lezione è un introduzione a concetti e strumenti che permettono l implementazione di algoritmi
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
Dettaglicons: L E L (...), e (e,...) Operatori tradizionali sulle liste car: (e,...) cdr: What s LISTE? null: () TRUE (...) FALSE Una lista e' una
What s LISTE? Una lista e' una ( es. λ = {4, 9, 1 E = dominio degli elementi di lista (persone, voli, interi, lettere...) L = {λ / λ e' una lista di elementi in E Bool = {TRUE, FALSE cons: L E L (...),
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
DettagliLa struttura dati CODA
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta
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
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
DettagliEsercizio 1 File: ordinamento di un archivio di studenti (file binario)
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 9 Esercitazione: 19 gennaio 2005 Esercizi sui file e sulle liste. Scaletta Esercizio 1 File: ordinamento di un archivio
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
DettagliLinguaggio C: Strutture e Liste Concatenate Valeria Cardellini
Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica
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
DettagliAllocazione Dinamica della Memoria
Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10 Scelta delle variabili Quando
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
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 25 Luglio 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
DettagliCorso di Programmazione I
Corso di Programmazione I I puntatori in C e C++ I puntatori in C Il C prevede puntatori a funzione e puntatori a dati di qualsiasi natura, semplici o strutturati. In particolare il puntatore viene utilizzato
DettagliListe collegate. Liste
Liste È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse. Esempi: sequenza di interi (23 46 5 28 3) sequenza di caratteri ( x r f ) sequenza di
Dettaglidott. Sabrina Senatore
dott. Sabrina Senatore Dipartimento di Informatica Riepilogo strutture 1 Sintassi della dichiarazione: typedef struct nome_tipo { Dichiarazione dei campi nome_tipo; typedef struct point{ int x; int y;
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
DettagliLinguaggio C: puntatori
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: puntatori La presente dispensa e da utilizzarsi ai soli fini didattici previa
DettagliVariabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free
Variabili dinamiche Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free 1 Tipi di variabili in C In C è possibile classificare le variabili in
DettagliL'Allocazione Dinamica della Memoria nel linguaggio C
L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria
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)
DettagliLezione 12: Allocazione Dinamica della Memoria
Lezione 12: Allocazione Dinamica della Memoria Laboratorio di Elementi di Architettura e Sistemi Operativi 17 Aprile 2013 Puntatori e vettori Puntatori ed indirizzi Semplificando, la memoria di un computer
DettagliIL CONCETTO DI LISTA!
Liste semplici Obiettivi: Discutere la realizzazione collegata (puntatori a strutture) di liste semplici Introdurre l ADT lista semplice e le operazioni tipiche su essa 1 IL CONCETTO DI LISTA Una lista
DettagliPARTE
Programmazione CdS in Matematica Appello d esame 24 Settembre 2008 Nome.. Cognome... Matricola.. INDICARE SUBITO NOME, COGNOME, E MATRICOLA NON è permesso (pena espulsione) usare la calcolatrice e consultare
DettagliPuntatore. Ritorniamo sul problema dell accesso alle variabili
Puntatori Puntatore Ritorniamo sul problema dell accesso alle variabili Nel linguaggio di von Neumann attraverso il loro indirizzo Nei linguaggi di alto livello attraverso il loro nome Però in taluni casi
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 19 Settembre 2006 Esercizio 1 (4 punti) Date le seguenti variabili int pari; int dispari; Stat; Stat s; A[] = 2,3,7,-2,5,-8,-4; int N = 7; int i; Scrivere
DettagliEsercitazioni di Fondamenti di Informatica - Lez /12/2018
Esercitazioni di Fondamenti di Informatica - Lez. 0 //08 Esercizi su Python. ESAME 3/08/07 es. 6. Scrivere un programma Python 3 che definisce un apposito dizionario che contiene, attraverso le coppie
DettagliALGORITMI 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 Puntatori e Liste StudentiDIA
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
DettagliAritmetica dei puntatori
Aritmetica dei puntatori Marco Alberti Programmazione e Laboratorio, A.A. 2016-2017 Dipartimento di Matematica e Informatica - Università di Ferrara Ultima modifica: 7 dicembre 2016 sizeof L operatore
DettagliEsercizi Array 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
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
DettagliEsercizi Array. Parte 7. 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
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
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 15 Corso di Informatica 2009-2010 Lezione 15 1 Liste concatenate Liste concatenate Una lista concatenata costituisce un metodo molto utile per immagazzinare
DettagliIntroduzione al C. Lezione 4 Allocazione dinamica della memoria. Rossano Venturini. Pagina web del corso
Introduzione al C Lezione 4 Allocazione dinamica della memoria Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Lezioni di ripasso
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 14 Febbraio 2006 Esercizio 1 (4 punti) Formulare la seguente istruzione del linguaggio C utilizzando il costrutto while: for(i=0,j=n-1; i
DettagliFondamenti di Informatica T. Linguaggio C: i puntatori
Linguaggio C: i puntatori Il puntatore E` un tipo di dato, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un insieme
DettagliLezione 23 - ADT LISTA
Lezione 23 - ADT LISTA Rappresentazione concreta del Tipo di Dati Astratto LISTA. - Cenni sulla rappresentazione mediante array (puah!) - Rappresentazione concreta mediante struct e puntatori. - concetto
DettagliPer quanto sappiamo finora, in C le variabili sono sempre definite staticamente. per variabili di tipo array, in cui dover
ALLOCAZIONE STATICA: LIMITI 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
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
DettagliCapitolo 10 - Strutture
1 Capitolo 10 - Strutture Strutture In molte situazioni, una variabile non è sufficiente per descrivere un oggetto. Ad esempio, una posizione sul piano cartesiano è identificata da due coordinate, e la
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
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 5 30/10/2018
Esercitazioni di Fondamenti di Informatica - Lez. 30/10/018 Esercizi sulle funzioni in C I codici e le soluzioni degli esercizi sono nella cartella parte1 1. Scrivere i prototipi delle seguenti funzioni.
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/ Copyright Mirko Viroli Copyright 2017, 2018 Moreno
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
DettagliTipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.
Array di Tipi di dato utente Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2016/2017 Array di Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7 Lez. 8 - Introduzione
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
DettagliLaboratorio di algoritmi e strutture dati
Laboratorio di algoritmi e strutture dati G. Melideo CdL in Informatica A.A. 2009/2010 G. Melideo (CdL in Informatica) Laboratorio di algoritmi e strutture dati A.A. 2009/2010 1 / 23 Indice 1 Richiami
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
Dettagli