Lezione sulle allocazioni dinamiche

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Uso avanzato di C.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 2 Copyright © The McGraw.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Liste.
Esercizi su alberi binari
Tail recursion: esempio
Alberi binari Definizione della struttura dati: struct tree { };
Esercizi su alberi binari di ricerca
Corso di Fondamenti di programmazione a.a.2009/2010
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Esercizi su strutture dinamiche Fondamenti di Programmazione Canale AD a.a. 2009/2010.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di Programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli Corso.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione VII: puntatori 3/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
CORSO DI PROGRAMMAZIONE II
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
Esercizi su pile Scrivere una funzione che restituisca una nuova pila che contiene i valori di una pila in ingresso in ordine inverso. La pila originale.
Esercizi su alberi binari
1 laboratorio di calcolo II AA 2003/04 seconda settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Struct, enum, Puntatori e Array dinamici
1 Strutture Dinamiche Corso di Informatica A Vito Perrone.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Le liste dinamiche La ricorsione
Le funzioni.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Programmazione di Calcolatori
1.Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. 2.Scrivere.
1 ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista–>info == elem ) { puntTemp =
Calcolo Parallelo e Distribuito
ARRAY MULTIDIMENDIONALI
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Programmazione di Calcolatori
C. Gaibisso Programmazione di Calcolatori Lezione XVI Allocazione dinamica della memoria Programmazione di Calcolatori: allocazione dinamica della memoria.
Esercizi su File.
Esercizi Liste.
Esercizi su File e Liste
Gestione dei file di testo, matrici e struct
Grafi Rappresentazione mediante liste di adiacenza:
Tail recursion: esempio
Esercizi su alberi binari di ricerca
Alberi binari Definizione della struttura dati: struct tree { };
Matrici: un’implementazione parametrica in C++
Corso di Informatica 2 a.a. 2003/04 Lezione 6
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Strutture dati elementari
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 2 La ricorsione Corso di Informatica 2 a.a. 2003/04 Lezione 2.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 1 Cicli ed asserzioni Corso di Informatica 2 a.a. 2003/04 Lezione 1.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 8 Oggetti statici e dinamici. Classi annidate. Costruttori/distruttori.
Fondamenti di Informatica
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
30/10/01Array 1  Un array e’ una struttura dati che contiene piu’ valori del medesimo tipo.  La lunghezza di un array e’ stabilita quando l’array viene.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Transcript della presentazione:

Lezione sulle allocazioni dinamiche Matrici in C Lezione sulle allocazioni dinamiche Matrici - Ugo de'Liguoro

Matrici con dimensioni fissate Una matrice nm è un vettore di n elementi, ciascuno dei quali è un vettore di m elementi: dunque è un vettore di vettori: a b c d e f g h i l m n a b c d e f g h i l m n Matrici - Ugo de'Liguoro

Dichiarazione ed accesso int m[3][4]; causa l’allocazione di un vettore di 3 vettori di 4 interi ciscuno; l’accesso agli elementi della matrice avviene attraverso l’uso di un doppio indice: m[i][j] = 12; Il calcolo dell’indirizzo di m[i][j] è definito dalla formula: &m + i  4  sizeof(int) + j  sizeof(int)  indirizzo del vettore m[i] Matrici - Ugo de'Liguoro

Matrici - Ugo de'Liguoro Vettori di puntatori Invece di realizzare una matrice con un vettore di vettori si può ricorrere ad un vettore di puntatori: int *m[3]; // crea un vettore di 3 puntatori a intero Quindi occorre allocare i vettori che costituiscono le righe della matrice. Osserviamo: nel caso delle matrici le righe avranno sempre lo stesso numero di elementi, ma in generale non siamo obbligati a questa uniformità. L’accesso (dopo l’allocazione delle righe) è lo stesso che con i vettori di vettori: m[i][j]. Matrici - Ugo de'Liguoro

Matrici con dimensioni note a run-time typedef int T; typedef struct { int row, col; T** mtr; } Matrix_frm; typedef Matrix_frm* Matrix; Matrix A; Matrici - Ugo de'Liguoro

Allocazione di una matrice Matrix MtrCreate(int r, int c, T init) /* genera una matrice r * c, ne inizializza le entrate a init, quindi ritorna il puntatore alla struttura */ { Matrix A; int i, j; A = (Matrix) malloc(sizeof(Matrix_frm)); A->row = r; A->col = c; A->mtr = (T**) malloc(r * sizeof(T*)); for (i = 0; i < r; i++) A->mtr[i] = (T*) malloc(c * sizeof(T)); for (j = 0; j < c; j++) A->mtr[i][j] = init; return A; } Matrici - Ugo de'Liguoro

Matrici - Ugo de'Liguoro A = (Matrix) malloc(sizeof(Matrix_frm)); r c A->row = r; A->col = c; Matrici - Ugo de'Liguoro

Matrici - Ugo de'Liguoro A->mtr = (T**) malloc(r * sizeof(T*)); r c A->mtr[i] = (T*) malloc(c * sizeof(T)); Matrici - Ugo de'Liguoro

Accesso alle matrici dinamiche #define FORMAT "%8.3f" /* formato con max 8 cifre a sinistra e 3 cifre a destra della virgola */ void MtrPrint(Matrix A) /* stampa per righe delle entrate della matrice m */ { int i, j; printf("\n"); for (i = 0; i < A->row; i++) { for (j = 0; j < A-> col; j++) printf(FORMAT,A->mtr[i][j]); } Matrici - Ugo de'Liguoro

Matrici - Ugo de'Liguoro Matrici sparse Si parla di matrice sparsa quando i valori significativi delle entrate sono molti di meno del numero delle entrate: 50 0 0 0 10 0 0 20 0 0 0 0 30 0 60 5 Matrici - Ugo de'Liguoro

Realizzazione di una matrice sparsa 1 1 50  2 1 10 2 4 20   4 1 30 4 3 60 4 4 5  Matrici - Ugo de'Liguoro

Strutture dati e tipi per matrici sparse typedef struct entry { int row; int col; T info; struct entry *next; // punt. al prossimo el. sulla riga } Entry; typedef Entry** SMatrix; Matrici - Ugo de'Liguoro

Matrici - Ugo de'Liguoro Accesso in lettura T get (SMatrix m, int i, int j) { Entry *p = m[i]; // m e’ un puntatore ad un vettore while ((p != NULL) && (p->col < j)) p = p->next; if ((p == NULL) || (p->col > j)) return 0; else return p->info; } Matrici - Ugo de'Liguoro

Matrici - Ugo de'Liguoro Accesso in scrittura void Set(Smatrix m, int i, int j, T val) { Entry *q, *t, *p = m[i]; q = p; while ((p != NULL) && (p->col < j)) { q = p; p = p->next; } if ((p == NULL) || (p->col > j) { t = (Entry*) malloc (sizeof(Entry)); t->row = i; t->col = j; t->info = val; t->next = p; if ((m[i] == NULL) || (i == 1)) m[i] = t; else q->next = t; } else p->info = val; Matrici - Ugo de'Liguoro