Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)



Documenti analoghi
Corso di Fondamenti di Programmazione canale E-O. Strutture. Strutture. Definizione di strutture (2) Definizione di strutture (1)

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Funzioni in C. Violetta Lonati

Introduzione alla programmazione in C

Laboratorio di programmazione

Corso di Fondamenti di Informatica

I puntatori e l allocazione dinamica di memoria

La struttura dati ad albero binario

INFORMATICA - I puntatori Roberta Gerboni

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Introduzione al Linguaggio C

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Visibilità dei Membri di una Classe

Record in C: il costruttore struct.

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Esercitazione 10. Strutture ed Enumerazioni. Allocazione dinamica di memoria

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Introduzione al linguaggio C Gli array

Inizializzazione, Assegnamento e Distruzione di Classi

Programmazione. Laboratorio. Roberto Cordone DI - Università degli Studi di Milano

RICERCA DI UN ELEMENTO

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

Allocazione dinamica della memoria - riepilogo

GESTIONE INFORMATICA DEI DATI AZIENDALI

Concetto di Funzione e Procedura METODI in Java

Le stringhe. Le stringhe

Esercizio 1. Esercizio 1

Esercizio: gestione di un conto corrente

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014

Concetti chiave. Struct. Variabili strutturate: il tipo struct Elementi di una struttura typedef e struct Array di strutture

Definizione di nuovi tipi in C

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura

Appello di Informatica B

Laboratorio di Algoritmi e Strutture Dati

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

Capitolo 13. Interrogare una base di dati

Servizio di prestito. Attività 2011: dati, grafici, analisi a cura di Marco Muscolino

LISTE, INSIEMI, ALBERI E RICORSIONE

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Elementi di Architettura e Sistemi Operativi

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Progettazione di un Database

puntatori Lab. Calc. AA 2007/08 1

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Gestione dei File in C

Il tipo di dato astratto Pila

Calcolare il massimo di una lista

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Sottoprogrammi: astrazione procedurale

Algoritmi e Strutture Dati

Grammatica di base: Pointers

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

Riconoscibilità dei siti pubblici: i domini della Pa e le regole di.gov.it

Le operazioni di allocazione e deallocazione sono a carico del sistema.

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp KP Cap. 6 pp

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Strutturazione logica dei dati: i file

Le variabili. Olga Scotti

Lezione 9: Strutture e allocazione dinamica della memoria

Progettazione di Basi di Dati

Esempio: Array di struct

dall argomento argomento della malloc()

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Database. Si ringrazia Marco Bertini per le slides

Algoritmi di Ricerca. Esempi di programmi Java

IL MIO PRIMO SITO: NEWS

Politecnico di Torino

Guida Compilazione Piani di Studio on-line

I/O su Socket TCP: read()

costruttori e distruttori

Breve riepilogo della puntata precedente:

Problem solving elementare su dati vettoriali

Monitoraggio sulla conversione dei prezzi al consumo dalla Lira all Euro

Fondamenti di Informatica T. Linguaggio C: i puntatori

Funzioni. Il modello console. Interfaccia in modalità console

Puntatori Passaggio di parametri per indirizzo

I file di dati. Unità didattica D1 1

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi

Esame del 3 febbraio 2010

Prova di Laboratorio di Programmazione

Quotazione compareto( ) Quotazione piurecente( ) Quotazione Quotazione Quotazione non trovato count( )

Linguaggio C - Stringhe

Oggetti Lezione 3. aspetti generali e definizione di classi I

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Organizzazione degli archivi

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Transcript:

Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi e tipi Sono usate comunemente per definire i record da memnorizzare nei files Combinate con i puntatori danno luogo a liste lincate, pile, code ed alberi Definizione di strutture (1) : struct card ; La parola chiave struct introduce la definizione della card è il nome della ed è usato per dichiarare variabili di quel tipo di card contiene due membri della : un intero che contiene il valore della carta, ed un carattere che contiene l iniziale del suo seme ( c, q, f, p ) I membri della stessa devono avere nomi diversi, mentre membri di diverse strutture possono avere lo stesso nome (poi capiremo perché). Ogni definizione di deve terminare con ; Definizione di strutture (2) La definizione di una non riserva spazio in memoria, ma definisce un nuovo tipo composto, del quale si potranno definire variabili: struct card può essere usato come tipo. Una non può contenere un istanza di se stessa ma può contenere un puntatore ad una del suo stesso tipo: : struct dipendente char nome[20]; int eta; struct dipendente superiore; /*NO*/ struct dipendente *ptr; /*ok*/ ;

Definizione di strutture (3) Si osservi la dichiarazione: struct card carta, mazzo[ 52 ], *cptr; Si possono definire le stesse variabili anche in fase di definizione della : struct card carta, mazzo[ 52 ], *cptr; Il nome della è opzionale, ma in tal caso le variabili di quel tipo di possono essere dichiarate solo contestualmente alla Buona abitudine: usare sempre il nome delle strutture scegliendo nomi significativi. Definizione di strutture (4) Le uniche operazioni valide sulle strutture sono: Assegnare una ad un altra dello stesso tipo rilevare l indirizzo (&) di una variabile di tipo accedere ai membri di una variabile di tipo usare l operatore sizeof per determinare la dimensione di una struttuta N.B. le strutture non si possono confrontare con == e!= Inizializzare le strutture Le strutture possono essere inizializzate, allo stesso modo dei vettori, usando degli elenchi di inizializzazione : struct card carta=3, c ; Nel caso in cui nell elenco ci fossero meno valori dei membri della, si completa con 0 o NULL. L inizializzazione può avvenire anche copiando una su un altra: : struct card carta=3, c ; altracarta=carta; Accedere ai membri delle strutture Si accede ai membri di una strutture tramite: operatore membro di o operatore punto (.) : card miacarta; printf( "%c", miacarta.seme); operatore puntatore a o operatore freccia (->) : card *cptr=&miacarta; printf( %c, cptr->seme); Attenzione: -> va scritto senza spazi! Attenzione: le seguenti 3 scritture sono equivalenti: miacarta.seme cptr->seme (*cptr).seme N.B. Se due strutture (ad es. card e plant) hanno un membro con lo stesso nome (seme), questo non è un problema: card miacarta; plant miapianta; miacarta.seme miapianta.seme non genera ambiguità!

Usare le strutture con le funzioni Le strutture possono essere passate alle funzioni: Passando l intera Passando singoli membri In entrambi i modi il passaggio è per valore Per passare le strutture per riferimento: Passare l indirizzo Vettori: un vettore di strutture è passato per riferimento (è un vettore!) creando una contenente solo un vettore e passandolo si ottiene il passaggio di un vettore per valore Problema: dato un vettore di carte, struct dire card se tra esse c è una carta data. carta, mazzo[20]; void cerca(struct card x, struct card v[]) int i=0; while ((i<20) &&!((v[i].valore==x.valore) && (v[i].seme==x.seme))) i++; if (i==20) printf( carta non trovata ) else printf( carta trovata ); Un altro esempio Problema: dato un elenco di studenti (memorizzati in un vettore) ciascuno con il proprio voto, contare il numero struct di studenti studente che ha preso 30. char *nome; int matricola; int voto; class[20]; int conta30(struct studente a[]) int i, cont=0; for (i=0; i<20; i++) cont+=a[i].voto==30; return cont; equivalentemente: struct studente *a Ancora un esempio struct min_max CalcolamM(int v[], int n) struct min_max temp; if (n==1) temp.min=v[0]; temp.max=v[0]; return temp; else temp=calcolamm(v, n-1); if (v[n-1]<temp.min) temp.min=v[n-1]; if (v[n-1]>temp.max) temp.max=v[n-1]; return temp; Problema: si scriva una funzione che, dato un vettore, restituisca il minimo e il massimo del vettore. Attenzione: le funzioni restituiscono solo un valore, a meno che struct min_max int min; int max; ;

typedef La parola chiave typedef crea dei nomi fittizi per i tipi di dato già definiti in precedenza. : typedef struct card Card; typedef Card * CardPtr; typedef non crea dei nuovi tipi, ma solo degli alias per quelli già esistenti Per abbreviare i nomi di questi sono spesso definiti con typedef : typedef struct Card; Buona abitudine: scrivere in maiuscolo la prima lettera dei tipi definiti con typedef Le unioni (1) Un unione, come una, è un tipo di dato derivato i cui membri condividono lo stesso spazio in memoria. In varie situazioni, un programma può avere delle variabili utili in quel momento ed altre inutili: queste possono condividere lo spazio in memoria invece di sprecare. I membri di un unione possono essere di qualsiasi tipo. Lo spazio occupato da un unione è pari allo spazio occupato dal tipo del suo membro più grande. Le unioni contengono più tipi, ma si può far riferimento ad uno solo per volta. : union number int x; double y; ; Le unioni (2) number è un tipo union e i suoi membri sono un intero e un double. La union crea solo un nuovo tipo di dato e non una variabile. Le operazioni che si possono eseguire su un unione sono: assegnare un unione ad un altra rilevare l indirizzo di una variabile di tipo unione accedere ai membri di una unione usando gli operatori. e -> non si possono usare == e!=. #include <stdio.h> Cosa stampa? union number 100-9255.. int x; 0 100.000000 double y; ; int main() union number val; value.x=100; printf( %d %f\n,value.x,value.y); value.y=100.0; printf( %d %f,value.x,value.y); return 0;

Costanti di enumerazione Il C fornisce il dato definito dall utente detto enumerazione (enum), definito da un insieme di costanti intere rappresentate da identificatori. I valori di una enum iniziano da 0 e sono incrementati di 1. : enum mesi GEN, FEB, MAR, APR, MAG, GIU, LUG, AGO, SET, OTT, NOV, DIC; enum crea un nuovo tipo i cui identificatori corrispondono agli interi da 0 a 11. Per partire da 1: enum mesi GEN=1, FEB, MAR, APR, MAG, GIU, LUG, AGO, SET, OTT, NOV, DIC; #include <stdio.h> enum mesegen=1, FEB, ; int main() enum mese m; char *nomemese[]=, gennaio, ; for (m=gen; m<=dic; m++) printf( %d %s, m, nomemese[m]); return 0; può contenere un intero tra 1 e 12 vettore bidimensionale