LE STRUTTURE DATI PARTE 2: RECORD. Prof. G. Ciaschetti

Размер: px
Начинать показ со страницы:

Download "LE STRUTTURE DATI PARTE 2: RECORD. Prof. G. Ciaschetti"

Транскрипт

1 1 ISTITUTO DI ISTRUZIONE SUPERIORE ANGIOJ LE STRUTTURE DATI PARTE 2: RECORD Prof. G. Ciaschetti Abbiamo visto nella prima dispensa sulle strutture dati che una struttura dati è una collezione di dati in memoria ai quali è possibile dare un unico nome. Abbiamo studiato finora gli array, strutture dati omogenee e lineari, dove per omogenee si ende il fatto che i dati che esse contengono sono tutti dello stesso tipo (o tutti eri, o tutte stringhe, o tutti reali, ecc.), mentre per lineari si ende che i dati della collezione sono memorizzati in modo contiguo in RAM, uno dietro l altro. Oltre agli array, esistono strutture dati non omogenee: i record. Un record (registrazione, in italiano) è la struttura base per la creazione degli archivi, ed è una struttura dati che serve per memorizzare tutti i dati relativi a un determinato individuo dell archivio. Degli archivi ci occuperemo nella prossima unità didattica. Facciamo, per ora, qualche esempio per capire meglio: In una biblioteca, gli individui sono i diversi libri e avremo, pertanto, un diverso record per ogni diverso libro, per poter memorizzare, ad esempio, il suo titolo, l autore, l anno di pubblicazione, e la casa editrice. record libro Nell anagrafe del comune di Carbonia, gli individui sono i cittadini e ogni record memorizzerà, per ogni cittadino, ad esempio, il nome, il cognome, la data di nascita, il domicilio. record cittadino In un canile municipale, gli individui sono i diversi cani ospitati, e per ognuno di essi si avrà un record che memorizzerà il nome, la razza, l età. record cane

2 2 I dati che compongono un record si chiamano campi, e ognuno di essi ha un nome e un tipo. Nell esempio precedente della biblioteca, il record libro ha il campo titolo di tipo stringa, il campo autore di tipo stringa, il campo anno di tipo ero, e il campo editore di tipo stringa. Nell esempio del canile, il record cane ha il campo nome di tipo stringa, il campo razza di tipo stringa, il campo eta di tipo ero. Quanti campi occorre mettere per ogni record? Vedremo, nella prossima unità didattica, quando parleremo di archivi, che occorre fare un giusto compromesso tra il numero di informazioni che vogliamo memorizzare per ogni individuo, e lo spazio occupato in memoria. Come criterio generale, per il momento, possiamo adottare il seguente: rappresentare solo le informazioni utili ai nostri scopi. Ad esempio, nella biblioteca, è inutile memorizzare per ogni libro il numero delle pagine, in quanto questo dato non serve in nessuna delle operazioni che si dovranno fare (prestito, restituzione, ecc.), e comporterà solo uno spreco di memoria. In linguaggio C, i record si chiamano strutture (structure, in inglese), e devono essere definiti prima di poterli utilizzare. Definizione di un record in C Per definire un record, in linguaggio C, occorre scrivere: struct nome tipo1 campo1; tipo2 campo2; tipon campon; La parola chiave struct del linguaggio C informa il compilatore che si sta definendo un nuovo tipo di dati, che è un record, che si chiama nome e che contiene i campi campo1, campo2,, campon, rispettivamente di tipo tipo1, tipo2,, tipon. Il nuovo tipo di dato così definito sarà il tipo struct nome. ATTENZIONE: una definizione di record non è una dichiarazione di variabile, cioè non riserva spazio in memoria! Piuttosto, è una definizione di tipo di dato. Abbiamo, cioè, oltre ai tipi di dato predefiniti del C (, float,, ecc.), un nuovo tipo di dato che si chiama struct nome. Questo significa che per poter effettivamente andare a memorizzare dati in un record, occorre avere spazio in memoria, e cioè dichiarare variabili del nuovo tipo: solo la dichiarazione di variabili riserva spazio in memoria! Riprendiamo i nostri esempi, e andiamo a definire i record libro, cittadino e cane. struct libro struct cittadino titolo[50]; autore[20]; anno; editore[20];

3 3 struct cane nome[20]; cognome[20]; anno_di_nascita; domicilio[50]; nome[20]; razza[20]; eta; Nota: per semplicità di esposizione, nel campo data di nascita del record cittadino abbiamo scelto di rappresentare solo l anno, perché l informazione completa è in effetti composta da tre dati: anno, mese, giorno. Per fare le cose in modo più preciso, avremmo potuto utilizzare un campo di tipo array di tre eri, oppure definire tre diversi campi. ESERCIZIO: pensare a un qualsiasi archivio, e definire la struttura dei suoi record. Utilizzo del tipo di dato record Come abbiamo detto, la definizione di un record non ci permette ancora di memorizzare dei dati al suo erno, piuttosto, definisce un nuovo tipo di dato. Per poter memorizzare informazioni in un record, abbiamo bisogno di una variabile del nuovo tipo. Esattamente come dichiariamo variabili di ogni altro tipo di dato in C: tipo nome; come ad esempio: N; nome[20]; possiamo dichiarare una variabile di tipo record scrivendo struct nome_struct nome_variabile; Ad esempio, facendo riferimento al record libro definito precedentemente, dichiariamo una variabile di tipo struct libro che si chiama un_libro: struct libro un_libro; L effetto della dichiarazione della variabile un_libro di tipo struct libro è quello di riservare memoria in RAM, come si vede dalla seguente figura:

4 4 Per fare un altro esempio, facendo riferimento al record cane definito precedentemente, dichiariamo due variabili che si chiamano primo_cane e secondo_cane: struct cane primo_cane, secondo_cane; Programmando, può risultare abbastanza noioso dover ripetere la parola struct ogni qualvolta si vuole utilizzare il nuovo tipo di dato. Questo avviene nelle dichiarazioni di variabili, ma anche quando si vuole passare un record come parametro a una funzione (ricordate? Ogni parametro formale va definito con il suo tipo!). Per ovviare a questo inconveniente, il linguaggio C permette di effettuare una definizione esplicita di tipo, con la quale è possibile assegnare un nuovo nome al nuovo tipo appena definito, nel seguente modo: typedef struct nome nuovo_nome; Ad esempio, possiamo dare il nuovo nome precedentemente book al tipo di dato struct libro definito typedef struct libro book; A questo punto, il nuovo tipo di dato record che abbiamo definito si chiama book. Per dichiarare una variabile del nuovo tipo, supponiamo di nome un_altro_libro, basta scrivere book un_altro_libro; senza dover ripetere la parola struct. Come accedere ai campi di un record in memoria? Per lavorare con i record occorre poter accedere ai suoi dati erni, cioè i suoi campi. Per far questo, si utilizza l operatore. (punto), nel seguente modo: nome_del_record. nome_del_campo Ad esempio, se vogliamo caricare in memoria nella variabile un_libro i dati di un particolare libro, dovremo scrivere: prf( inserisci il titolo del libro: ); scanf( %s, un_libro.titolo); prf( inserisci l autore del libro: ); scanf( %s, un_libro.autore); prf( inserisci l anno di pubblicazione del libro: ); scanf( %d, &un_libro.anno); prf( inserisci la casa editrice: ); scanf( %s, un_libro.editore); Oppure, se vogliamo controllare se il titolo del libro memorizzato è lo stesso di un titolo chiesto in input, dopo aver dichiarato una variabile dello stesso tipo del campo titolo

5 5 titolo_da_cercare[50]; dovremo scrivere, ricordando di usare la strcmp per il confronto tra due stringhe: prf( quale titolo cerchi? ); scanf( %s, titolo_da_cercare); if (!strcmp(titolo_da_cercare, un_libro.titolo)) prf( e il libro che stavi cercando! ); Facciamo un altro esempio: supponiamo di avere in RAM un record un_cane del tipo struct cane definita in un esempio precedente (anche in questo caso avremmo potuto utilizzare una typedef per non dover ripetere la parola chiave struct), e di voler visualizzare il suo campo eta. Basterà scrivere la seguente istruzione: prf( %d, un_cane.eta); Per concludere questa trattazione sui record, diciamo che i campi di un record possono essere di qualsiasi tipo, tra tutti quelli che abbiamo visto. Quindi, potremmo avere un ero, un reale, un carattere, una stringa (vettore di caratteri), un array, o anche un altro record. Attenzione alle notazioni da utilizzare per accedere ai campi, quando si utilizzano strutture dati e non dati semplici: facciamo qualche esempio: struct cittadino /* definizione del tipo record */ nome[20]; cognome[20]; data_di_nascita[3]; /* l array contiene tre eri: giorno, mese, anno, domicilio[50]; rispettivamente in posizione 0, 1, e 2 */ typedef struct cittadino citizen; /* definizione esplicita di tipo */ citizen c; /* dichiarazione della variabile c di tipo record */ prf( nome: %s, c.nome); /* visualizza il nome del cittadino */ prf( giorno di nascita: %d, c.data_di_nascita[0]); /* visualizza il giorno di nascita */ prf( mese di nascita: %d, c.data_di_nascita[1]); /* visualizza il mese di nascita */ prf( anno di nascita: %d, c.data_di_nascita[2]); /* visualizza l anno di nascita */ Assegnamento multiplo A differenza degli array, i record permettono l assegnamento multiplo, ossia, è possibile assegnare un record a un altro record, assegnando in una sola volta tutti i dati in esso contenuto. Facciamo un esempio: sia dato il seguente record struct libro titolo[50];

6 6 autore[20]; anno; editore[20]; typedef struct libro book; book b1, b2; Supponiamo di aver già caricato i campi del libro b1, con i dati b1.titolo = L idiota b1.autore = Dostoevskij b1.anno = 1869 b1.editore = Einaudi Possiamo, con una sola istruzione, assegnare il record b1 al record b2 b2 = b1; e ritrovarci gli stessi valori nei campi del record b2. Si noti che questo non è possibile con gli array. Se si vuole assegnare un vettore a un altro vettore, ad esempio, occorre invece assegnare uno per uno ogni elemento! Cioè, se abbiamo vet1[10],vet2[10]; e vogliamo assegnare al vettore v2 il vettore v1, è sbagliato scrivere vet2 = vet1 mentre bisogna eseguire un ciclo per assegnare, uno per uno, tutti gli elementi for(i=0; i<10; i++) vet2[i] = vet1[i];

Linguaggio C: puntatori

Linguaggio 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

Подробнее

Ripasso R1. Dati strutturati. Esempi. Array. Dichiarazione di un array. Dichiarazione di un array in C

Ripasso R1. Dati strutturati. Esempi. Array. Dichiarazione di un array. Dichiarazione di un array in C Ripasso R1 Dati strutturati Aggregazione di dati omogenei: gli array Spesso gli algoritmi lavorano su insiemi di dati omogenei. o l insieme dei valori reali che rappresentano le temperature medie delle

Подробнее

I tipi strutturati e i record in C++

I tipi strutturati e i record in C++ I tipi strutturati e i record in C++ Docente: Ing. Edoardo Fusella Dipartimento di Ingegneria Elettrica e Tecnologie dell Informazione Via Claudio 21, 4 piano laboratorio SECLAB Università degli Studi

Подробнее

Gli Array. Dichiarazione di un array

Gli Array. Dichiarazione di un array Gli Array Un array rappresenta una variabile indicizzata (ovvero contenente un indice) che viene utilizzata per contenere più elementi dello stesso tipo. Ogni array ha un nome al quale viene associato

Подробнее

Esercitazione 11. Liste semplici

Esercitazione 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

Подробнее

Introduzione al linguaggio C Puntatori

Introduzione 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

Подробнее

Esercizi. Filtraggio

Esercizi. Filtraggio Politecnico di Milano Esercizi Preparazione alla prima prova intermedia Filtraggio L utente inserisce un array di numeri reali non negativi (un numero negativo indica la fine della fase di inserimento)

Подробнее

Introduzione alla programmazione. Alice Pavarani

Introduzione alla programmazione. Alice Pavarani Introduzione alla programmazione Alice Pavarani Il linguaggio C Creato da Dennis Ritchie nel 1972 presso i Bell Laboratories Linguaggio di programmazione procedurale, strutturato Linguaggio ad alto livello

Подробнее

Lezione 6 programmazione in Java

Lezione 6 programmazione in Java Lezione 6 programmazione in Java Nicola Drago [email protected] Dipartimento di Informatica Università di Verona Anteprima Le costanti I vettori Cos è un vettore Come si usa I vari tipi di vettori Esempi

Подробнее

Linguaggio C: PUNTATORI

Linguaggio 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

Подробнее

Strutture dati e loro organizzazione. Gabriella Trucco

Strutture dati e loro organizzazione. Gabriella Trucco Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi

Подробнее

Trasformare array paralleli in array di record

Trasformare array paralleli in array di record Trasformare array paralleli in array di record Un array è una struttura di dati omogenea: gli elementi dell array sono tutti dello stesso tipo (che è il tipo dell array). A volte è necessario gestire informazioni

Подробнее

Il linguaggio C. Puntatori e dintorni

Il 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;

Подробнее

C array. Problema: scrivere un programma che, ricevuto in input un intero n ed n interi positivi, li stampi in ordine inverso.

C array. Problema: scrivere un programma che, ricevuto in input un intero n ed n interi positivi, li stampi in ordine inverso. Problema: scrivere un programma che, ricevuto in input un intero n ed n interi positivi, li stampi in ordine inverso. Non sappiamo a priori quante variabili dobbiamo definire per contenere gli interi.

Подробнее

Esercizi. La funzione swapint() primo tentativo

Esercizi. La funzione swapint() primo tentativo Politecnico di Milano Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio di array. #include

Подробнее

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che

Подробнее

Lezione 8 Struct e qsort

Lezione 8 Struct e qsort Lezione 8 Struct e qsort Rossano Venturini [email protected] Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort

Подробнее

Aggregati di dati eterogenei: il tipo struct. Esercizi risolti

Aggregati di dati eterogenei: il tipo struct. Esercizi risolti Esercizi risolti 1 Esercizio Si vuole realizzare un tipo utilizzato per informazioni su operazioni di vendita, avente i seguenti campi: codice: numero intero indicante il codice di riferimento dell articolo

Подробнее

Costanti e Variabili

Costanti e Variabili Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli

Подробнее

Lezione 6 Struct e qsort

Lezione 6 Struct e qsort Lezione 6 Struct e qsort Rossano Venturini [email protected] Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Struct Struct Fino ad ora abbiamo utilizzato

Подробнее

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++ Programmazione Procedurale in Linguaggio C++ Tipi Strutturati Parte 1 Introduzione G. Mecca M. Samela Università della Basilicata Tipi Strutturati: Introduzione >> Sommario Sommario Panoramica Alcuni Esempi

Подробнее

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Подробнее

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Подробнее

Il linguaggio C. Notate che...

Il 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

Подробнее

Dati aggregati. Violetta Lonati

Dati aggregati. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica - in breve: Definizione di tipi Array Stringhe Strutture

Подробнее

Le strutture /1. struct temp {char titolo[200]; char autore[100]; int pagine; } ; typedef struct temp libro;

Le strutture /1. struct temp {char titolo[200]; char autore[100]; int pagine; } ; typedef struct temp libro; Le strutture /1 Le strutture rappresentano un tipo di variabile che, diversamente dagli array, consente di gestire in modo compatto, mediante un'unico identificatore, un insieme di valori che non possiedano

Подробнее

Database Lezione 2. Sommario. - Progettazione di un database - Join - Valore NULL - Operatori aggregati

Database Lezione 2. Sommario. - Progettazione di un database - Join - Valore NULL - Operatori aggregati Sommario - Progettazione di un database - Join - Valore NULL - Operatori aggregati Progettazione di un database - In un database c'è una marcata distinzione tra i valori in esso contenuti e le operazioni

Подробнее

Esercitazione di Reti degli elaboratori

Esercitazione 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

Подробнее

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Non 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

Подробнее

C: panoramica. Violetta Lonati

C: panoramica. Violetta Lonati C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati

Подробнее

Fortran in pillole : prima parte

Fortran in pillole : prima parte Fortran in pillole : prima parte Annamaria Mazzia Dipartimento di Metodi e Modelli Matematici per le Scienze Applicate Corso di Metodi Numerici per l Ingegneria Introduzione al Fortran Un libro consigliato

Подробнее

Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini

Linguaggio 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

Подробнее

Primi passi col linguaggio C

Primi passi col linguaggio C Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta

Подробнее