Relazione sulle strutture dati Svolta da: Buccella Simone Strutture di dati Aree di memoria Puntatore numericibooleani alfabetici Statici dinamici Puntatori.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Puntatori Linguaggio C.
Introduzione al linguaggio C++
I tipi Strutturati.
Puntatori e gestione dinamica della RAM
INFORMATICA Algoritmi fondamentali
Puntatori in C e C++.
Costruttori e Distruttori
Unità D2 Archivi e file.
Ripasso R1 Dati strutturati.
PUNTATORI Introduzione
PHP.
Algoritmi e Programmazione
Massa Laura Mela Enrica
1 Strutture dati nel supporto a run time. 2 Entità presenti quando un programma va in esecuzione §programmi dutente (compilati) §routines del supporto.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Un nuovo tipo di dati Gli array.
Anno accademico Le classi di memorizzazione.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Caratteri e stringhe di caratteri
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.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
File.
Allocazione dinamica della memoria
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.
Introduzione alla programmazione lll
Array Struttura numerate di dati. Memorizzare molti dati In informatica cè spesso bisogno di memorizzare ed elaborare un insieme costituito da molti dati.
nome: sequenza di caratteri usata per denotare un oggetto
Puntatori - Cenni Nicola Fanizzi Corso di Programmazione C.d.L. in Informatica DIB - Università degli Studi di Bari.
memoria gestita staticamente:
Lab. Calc. AA 2005/061 puntatori. Lab. Calc. AA 2005/062 Attributi di un oggetto nome o identificatore; tipo o classe; valore o valori; indirizzo;
Struct, enum, Puntatori e Array dinamici
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
File I record.
File ad accesso casuale o random
Array a un dimensione : vettori
PROBLEMA ALGORITMO PROGRAMMA LINGUAGGI di PROGRAMMAZIONE
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
Sintassi base e struttura di un programma
Corso JAVA Lezione n° 12 Istituto Statale di Istruzione Superiore “F. Enriques”
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
CORSO DI PROGRAMMAZIONE II Lezione 22
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.
1. 2 Variabili statiche e dinamiche Un programma è un processo in esecuzione a cui il sistema operativo assegna una certa zona di memoria. Tale zona può.
ORGANIZZAZIONE DI UN SISTEMA DI ELABORAZIONE
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Il linguaggio C Puntatori e dintorni. 2 Puntatori : idea di base In C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata.
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente –la loro esistenza deve essere prevista e.
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
1 Macchine astratte, linguaggi, interpretazione, compilazione.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
 Ogni processo che deve essere eseguito da un sistema di elaborazione, deve essere caricato e risiedere almeno parzialmente nella memoria centrale 
Introduzione alle Classi e agli Oggetti in Java 1.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

Relazione sulle strutture dati Svolta da: Buccella Simone Strutture di dati Aree di memoria Puntatore numericibooleani alfabetici Statici dinamici Puntatori a variabili strutturate Memoria statica Heap Puntatore variabile Memoria statica Heap Puntatorevariabile staticastack heap Gestione memoria 1 1 A

Strutture di dati Le strutture dei dati all´interno di un programma hanno un´importanza notevole in quanto subiscono elaborazioni, trasformazioni cambiando di valore nel loro ciclo di vita Le strutture dei dati possono essere classificati in diversi modi a secondo del loro utilizzo 2 A = B + 2 A 2 B 4 numerici booleani alfabetici permanenti Statici dinamici uscita ingresso Richiesta End

Inserisci numeri 1230 Ordine inverso 321 Si effettui la lettura da tastiera di un insieme di numeri terminati con uno 0 e si effettui la loro stampa a video in ordine inverso Richiesta Analisi problema Occorrono 2 operazioni elementari: - lettura - visualizzazione Nasce il problema sulla dichiarazione delle variabili perché non si sa a priori il numero massimo di elementi Possibili soluzioni End

Possibili soluzioni Dimensionare un vettore con un valore molto elevato sperando che sia sufficiente Limitare il numero massimo di numeri da leggere ponendo cosí un limite Effettuare elaborazioni parziali tipo creare un vettore di dimensione 100 ed effettuare l´inversione ogni 100 numeri End Soluzione ottimale

La soluzione ideale è quella di creare variabili ogni volta che occorrono e salvare in memoria i dati ogni qualvolta che si inseriscono assegnando loro una certa locazione di memoria, in modo da non creare limiti. Soluzione Inserisci numeri End Gestione memoria Puntatore

Gestione memoria Allocazione dinamica Allocazione statica Consiste nel definire le variabili con nome e dimensione prima dell´inizio dell´esecuzione del programma Consiste nel definire le variabili al momento opportuno mediante l´utilizzo di una funzione che consente al programma di interagire con il sistema operativo, per conoscere lo spazio di memoria utilizzabile 1 Variabile A locazione 1 A 1 ? Quale locazione è libera 1 A Locazione 1 End Aree di memoria

La locazione di memoria varia a secondo del tipo di variabile ed è suddivisa in 3 aree Memoria statica : è utilizzata per le variabili globali visibile quindi da tutti i sottoprogrammi Stack: è utilizzata per memorizzare i dati dei sottoprogrammi e dalle funzioni che man mano vengono mandate in esecuzione Heap: è utilizzata per memorizzare le variabili create dinamicamente mediante una particolare funzione (new) che assegna ad esse una determinata locazione di memoria End Puntatore

Per allocare le variabili in modo dinamico, il programma deve chiedere al sistema operativo la posizione di memoria libera per essere utilizzata. Queste vengono allocate in maniere sequenziale e la loro posizione è variabile, per cui occorre un qualcosa che associ ad ogni variabile l´indirizzo della loro locazione di memoria. Definiamo quindi il Puntatore un tipo di variabile che contiene l´indirizzo del primo byte di una variabile dinamica. Puntatore 1 ? Quale locazione è libera 1 A Locazione 1 1 Puntatore End Definizione Inizializzazione Creazione Accesso indiretto Assegnazione Rilascio della heap

Come tutte le variabili, per definire un puntatore occorre assegnare: un nome Il tipo della variabile che andrá a puntare Definizione double* p_d; int* p_i; char* p_c ; float* p_f ;C++ type IntegerPointer = ^Integer var B : ^Integer Pascal End

Inizializzazione Nel momento della definizione, quindi dell´avvio del programma, le variabili di tipo puntatore contengono un indirizzo non significativo, cioè di nessun interesse, oppure il valore 0. Per evitare ambiguitá inizializziamo tale puntatore con una particolare istruzione che assegna al puntatore un valore di indirizzo convenzionale. C++ Pascal doube p_d = null; Int* p_i = null; char p_c = null ; float p_f = null ; IntegerPointer := null; NIL Puntatore Messa a terra potenziale nullo End

Creazione La creazione vera e propria della variabile dinamica, cioè dell´allocazione dello spazio all´interno della heap, avviene durante l´esecuzione del programma nel momento del bisogno. La funzione che permette al sistema di creare lo spazio necessario è new. double* p_d = new; int* p_i = new; Char* p_c = new ; float* p_f = new ;C++ new (IntegerPointer); new (B); Pascal Memoria staticaHeap VariabilePuntatore End

Accesso indiretto L´accesso indiretto alla variabile dinamica si intende l´operazione che permette di scrivere il contenuto di una variabile dinamica mediante l´utilizzo della variabile puntatore che ne contiene l´indirizzo. Questa operazione prende anche il nome di dereferenziazione 10 Memoria staticaHeap VariabilePuntatore End

Assegnazione ad una variabile dinamica Simone Memoria staticaHeap VariabilePuntatore int* p_i = new; p_i = 0; Char* p_c = new; p_c = simone; C++ new (charPointer); charPoint^:=simone; new (B); B^:=simone; Pascal End

Rilascio della heap al termine dell´utilizzo La possibilitá di effettuare modifiche al contenuto dei puntatori, puó portare a situazioni indesiderate, facendo assumere a due puntatori lo stesso indirizzo di memoria heap si puó cosí perdere il collegamento con una variabile di memoria provocando: ingombro inutile della memoria heap con una variabile che rimarrá per sempre inutilizzata soluzione 10 Variabile Puntatore 1 10 Variabile Puntatore 2 2 perdita senza possibilitá di recupero del contenuto della variabile End

Risoluzione a problemi di variabili del heap Per risolvere il problema di ingombro inutile della memoria heap è possibile farlo in due modi: Per ovviare al problema di perdita del contenuto della variabile se è necessario, salvare il valore in un´altra variabile dinamica o statica. Modalitá manuale Modalitá automatica 2 A 2 B End

Modalitá manuale double* p_d; p_d = dispose ; int* p_i p_i = dispose; Char* p_c; p_c = dispose float* p_f ; p_f = dispose ; C++ dispose (IntegerPointer); dispose (B); Pascal La modalitá manuale consiste nel rendere nuovamente disponibile lo spazio di memoria heap quando il dato non serve piú. La funzione che permette al sistema di cancellare lo spazio é dispose. End

Modalitá automatica La modalitá automatica detta anche garbage collector, è un processo che si occupa di recuperare le porzioni di memoria heap inutilizzate per metterle a disposizione del programma, effettuando il compattamento delle aree libere e liberando la memoria occupata da variabili non piú utilizzate. Memoria staticaHeap VariabilePuntatore End

Puntatori a variabili strutturate I puntatori a variabili strutturate hanno le stesse caratteristiche di quelli che puntano a semplici variabili, cambia logicamente la loro definizione. record data: string nomegiorno[10] int giorno int mese int anno; data* comp; C++ Pascal type data = record nomegiorno : string[10]; giorno: integer; mese: integer; anno: integer end; var comp:^data; End Assegnazione Creazione Richiesta

Creazione record data: string nomegiorno[10] int giorno int mese int anno; data* compleanno; comp = new C++ Pascal type data = record nomegiorno : string[10]; giorno: integer; mese: integer; anno: integer end; var compleanno:^data; new (comp); Memoria staticaHeap VariabilePuntatore anno mese giorno nome End

Assegnazione comp.nomegiorno = lunedi comp.giorno = 21 comp.mese = 12 comp.anno = 2012 C++ Pascal comp.nomegiorno^:=lunedi; comp.giorno^:=21; comp.mese^:=12; comp.anno^:=2012; Memoria staticaHeap VariabilePuntatore lunedi End

Inserisci numeri 123 Ordine crescente 321 Leggere 3 numeri interi e memorizzarli in tre variabili dinamiche. Successivamente, ordinarli in ordine decrescente Richiesta Analisi problema Occorrono operazioni elementari: - lettura - confronto - visualizzazione Possibile soluzioni End

Inizio numero pmax = numero pmin > pmax tempo = pmax pmax = pmin pmin = tempo pmin = numero Diagramma si numero End

numero pmed = numero pmed > pmax tempo = pmax pmax = pmed pmed = tempo si pmed < pmin tempo = pmed pmed = pmin pmin = tempo si pmax pmed pmin Fine Diagramma End Codifica

Memoria staticaHeap VariabilePuntatore pmax pmed pmin Definizione int* pmax, pmed, pmin; int numero, tempo; Creazione pmax = new; pmed = new; pmin = new; End

cin >> numero; pmax = numero;mettiamo in pmax il 1°numero cin >> numero; pmin = numero;mettiamo in pmin il 2°numero If (pmin > pmax) { tempo = pmax; pmax = pmin;confrontiamo i primi 2 numeri pmin = tempo;} cin >> numero; pmed = numero;mettiamo in pmed il 3°numero If (pmed > pmax) { tempo = pmax; pmax = pmed;confrontiamo il maggiore con il 3° numero pmed = tempo;} End

If (pmed < pmin) { tempo = pmed; pmed = pmin;confrontiamo i primi 2 numeri pmin = tempo;} cout << pmax; visualizzazione del primo cout << pmed; visualizzazione del secondo cout << pmin; visualizzazione del terzo End