DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Tipi di dati strutturati
Marco D. Santambrogio – [email protected]
Ver. aggiornata al 4 Marzo 2013
Obiettivi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Dichiarazione di nuovi tipi di dato
• Dato strutturati
2
Definire un nuovo tipo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Sinonimi:
typedef int Intero;
Intero a;
int b;
typedef char Stringa[10];
Stringa c;
char d[10];
Tipi enumerativi:
typedef enum {lun,mar,mer,gio,ven,sab,dom} Settimana;
Settimana giorno;
giorno = lun;
giorno = 3;
/* 3 equivale a gio */
Non funziona con scanf() e printf().
Definire un nuovo tipo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Tipi strutturati:
typedef struct
{
char campo1;
float campo2;
int campo3[2];
} Record;
ilMioRecord
?
A
campo1
Record ilMioRecord;
ilMioRecord.campo1 = 'A';
ilMioRecord.campo2 = 24.56;
ilMioRecord.campo3[0] = 23;
ilMioRecord.campo3[1] = 45;
?
24.56
?
23
?
45
campo2
campo3
Numeri complessi: problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• L’utente inserisce due numeri complessi
(parte reale e parte immaginaria) e
l’elaboratore esegue l’operazione di
somma
 Es: 3+4i + 5-6i = 8-2i
• Il programma chiede all’utente se vuole
calcolare un’altra somma. Se l’utente
inserisce il carattere ‘q’ il programma
termina, altrimenti ricomincia daccapo.
Numeri complessi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Numeri complessi: note
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
"%f" stampa un numero float con il
segno “-” se è negativo, senza segno se
è positivo
"%+f" stampa un numero float con il
segno “-” se è negativo, con il segno
“+” se è positivo
"i" non fa parte degli specificatori di
formato
Una nota sulla scanf()
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Quando inserisco dei dati da tastiera, gli stessi vengono
accodati nello standard input (stdin) del programma
Anche in carattere ENTER finale viene accodato:
Se inserisco: 123 [ENTER]
Ottengo in stdin: 123 ‘\n’
Eseguo scanf(“%d”,&x); stdin diventa: ‘\n’
Inserisco il numero 432; stdin diventa: ‘\n’ 432 ‘\n’
Eseguo scanf(“%d”,&x); stdin diventa: ‘\n’
La scanf() scarta l’eventuale ‘\n’ che incontra prima del
numero da leggere ma lascia il ‘\n’ finale.
Una nota sulla scanf()
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Adesso proviamo a leggere un carattere:
 Inserisco il carattere ‘w’; stdin diventa: ‘\n’ ‘w’
 Eseguo scanf(“%c”,&y); stdin diventa: ‘w’ ‘\n’
‘\n’
• La scanf(), quando legge un carattere (e solo in questo
caso), NON scarta l’eventuale ‘\n’ iniziale! Lo mette nella
variabile y e lascia il resto in stdin
 Senza immettere nient’altro, eseguo un’altra scanf(“%c”,&y); stdin
diventa: ‘\n’
• Questa volta la scanf() mette ‘w’ in y
• Quindi: se devo leggere caratteri (“&c”) ma prima ho
effettuato altre letture, devo togliere da stdin il carattere ‘\n’
rimasto.
Schedine: problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Il programma, partendo da un array di
dimensione prefissata che contiene in ogni
cella:
 data della giocata
 colonna con i tredici segni
• Copia in un altro vettore solo le giocate
dell’anno 2012
• Quindi, visualizza queste giocate.
Schedine: dati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Schedine: inserimento dati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Schedine: copia valori
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Schedine: stampa dei risultati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Squadra di calcio: problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Il programma, partendo da un array che
contiene i dati personali dei calciatori di una
squadra, permette di calcolare:





totale goal fatti dalla squadra
goal fatti dagli attaccanti
goal fatti dai centrocampisti
goal fatti dai difensori
totale goal subiti dalla squadra
• Il programma inoltre visualizza i dati
personali di tutti i giocatori
• Per ogni giocatore, il programma memorizza:
 numero di maglia
 ruolo
 goal fatti (subiti, se è un portiere).
Fonti per lo studio + Credits
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Fonti per lo studio
 Informatica arte e mestiere, S. Ceri, D.
Mandrioli, L. Sbattella, McGrawHill
• Capitolo 5 (No: 5.5.3, 5.5.4 e 5.6)
• Credits
 Vito Perrone, Daniele Braga
Scarica

typedef int - Dipartimento di Elettronica ed informazione