La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Politecnico di Milano Esercizi C sui tipi definiti dallutente Typedef, tipi enumerativi e strutturati.

Presentazioni simili


Presentazione sul tema: "Politecnico di Milano Esercizi C sui tipi definiti dallutente Typedef, tipi enumerativi e strutturati."— Transcript della presentazione:

1 Politecnico di Milano Esercizi C sui tipi definiti dallutente Typedef, tipi enumerativi e strutturati

2 - 2 - Definire un nuovo tipo 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().

3 - 3 - ??? ilMioRecord ? Definire un nuovo tipo Tipi strutturati: typedef struct { char campo1; float campo2; int campo3[2]; } Record; Record ilMioRecord; ilMioRecord.campo1 = ' A ' ; ilMioRecord.campo2 = 24.56; ilMioRecord.campo3[0] = 23; ilMioRecord.campo3[1] = 45; A ilMioRecord 45 campo1 campo2 campo3 1 x 1 byte + 1 x 4 byte + 2 x 2 byte = byte

4 - 4 - Numeri complessi Lutente inserisce due numeri complessi (parte reale e parte immaginaria) e lelaboratore esegue loperazione di somma Es: 3+4i + 5-6i = 8-2i Il programma chiede allutente se vuole calcolare unaltra somma. Se lutente inserisce il carattere q il programma termina, altrimenti ricomincia daccapo.

5 - 5 - Numeri complessi #include void main() { typedef struct { float reale; float immag; } Complesso; Complesso n1, n2, somma; char fine;.

6 - 6 - Numeri complessi do { printf ("Numero 1, parte reale: "); scanf ("%f", &n1.reale); printf ("Numero 1, parte immag: "); scanf ("%f", &n1.immag); printf ("Numero 2, parte reale: "); scanf ("%f", &n2.reale); printf ("Numero 2, parte immag: "); scanf ("%f", &n2.immag);.

7 - 7 - Numeri complessi somma.reale = n1.reale + n2.reale; somma.immag = n1.immag + n2.immag; printf ("Totale: %f%+fi\n", somma.reale, somma.immag); printf ("Fine? "); scanf (" %c", &fine); /*vedi nota su scanf()*/ }while (fine != 'q'); } "%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.

8 - 8 - Una nota sulla scanf() 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 leventuale \n che incontra prima del numero da leggere ma lascia il \n finale.

9 - 9 - Una nota sulla scanf() Adesso proviamo a leggere un carattere: Inserisco il carattere w; stdin diventa: \n w \n Eseguo scanf(%c,&y); stdin diventa: w \n La scanf(), quando legge un carattere (e solo in questo caso), NON scarta leventuale \n iniziale! Lo mette nella variabile y e lascia il resto in stdin Senza immettere nientaltro, eseguo unaltra 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.

10 Squadra di calcio 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).

11 Squadra di calcio #include void main() { typedef enum {portiere,difensore, centrocampista,attaccante} TipoRuolo; typedef struct { unsigned int numero; unsigned int goal; TipoRuolo ruolo; } Giocatore; const unsigned int MAX = 30; Giocatore giocatori[MAX]; unsigned int i, numGiocatori; unsigned int totaleGoalFatti = 0, totaleGoalSubiti = 0;.

12 unsigned int goalAttaccanti=0, goalDifensori=0, goalCentrocampisti=0; /* DATI. In programma vero, letti da un file */ giocatori[0].numero = 9; giocatori[0].goal = 9; giocatori[0].ruolo = attaccante; giocatori[1].numero = 1; giocatori[1].goal = 9; giocatori[1].ruolo = portiere; numGiocatori = 2; /* Fine DATI. */. Squadra di calcio

13 for (i = 0; i < numGiocatori; i++) { printf ("Giocatore:%u, ruolo:%u, goal:%u\n", giocatori[i].numero, giocatori[i].ruolo, giocatori[i].goal); if (giocatori[i].ruolo != portiere) { totaleGoalFatti = totaleGoalFatti + giocatori[i].goal; if (giocatori[i].ruolo == attaccante) { goalAttaccanti = goalAttaccanti + giocatori[i].goal; }. Squadra di calcio

14 else if (giocatori[i].ruolo==centrocampista) { goalCentrocampisti = goalCentrocampisti + giocatori[i].goal; } else { goalDifensori = goalDifensori + giocatori[i].goal; } } else /* il giocatore è un portiere */ { totaleGoalSubiti = totaleGoalSubiti + giocatori[i].goal; }. Squadra di calcio

15 } /* fine for */ printf ("Goal fatti: %u\n", totaleGoalFatti); printf ("Attacco:%u, centroc:%u, difesa: %u\n", goalAttaccanti, goalCentrocampisti, goalDifensori); printf ("Goal subiti:%u\n", totaleGoalSubiti); }. Squadra di calcio

16 Schedine Il programma, partendo da un array di dimensione prefissata che contiene in ogni cella: codice giocata data della giocata colonna con i tredici segni Copia in un altro vettore solo le giocate dellanno 2002 Quindi, visualizza queste giocate.

17 Schedine #include void main() { const unsigned int NUMSEGNI = 13, NUMGIOCATE = 3; const unsigned int ANNOCERCATO = 2002; typedef struct { unsigned int giorno; unsigned int mese; unsigned int anno; } TipoData; typedef struct { unsigned int codice; TipoData data; char colonna[NUMSEGNI]; } Giocata;.

18 Schedine Giocata giocate[NUMGIOCATE], trovate[NUMGIOCATE]; unsigned int i, k, j = 0; for (i = 0; i < NUMGIOCATE; i++) { printf ("Codice: "); scanf ("%u", &giocate[i].codice); printf ("Giorno mese anno: "); scanf ("%u", &giocate[i].data.giorno); scanf ("%u", &giocate[i].data.mese); scanf ("%u", &giocate[i].data.anno); scanf ("%*c"); printf ("Colonna: "); for (k = 0; k < NUMSEGNI; k++) { /* tutti insieme */ scanf ("%c", &giocate[i].colonna[k]); } }.

19 Schedine for (i = 0; i < NUMGIOCATE; i++) { if (giocate[i].data.anno == ANNOCERCATO) { trovate[j] = giocate[i]; j++; } }.

20 Schedine for (i = 0; i < j; i++) { printf ("Cod: %u ", trovate[i].codice); printf ("Data: %u/%u/%u\n", trovate[i].data.giorno, trovate[i].data.mese, trovate[i].data.anno); for (k = 0; k < NUMSEGNI; k++) { printf ("%c ", trovate[i].colonna[k]); } printf ("\n"); } }.


Scaricare ppt "Politecnico di Milano Esercizi C sui tipi definiti dallutente Typedef, tipi enumerativi e strutturati."

Presentazioni simili


Annunci Google