Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Esercizi C sui tipi definiti dall’utente
Typedef, tipi enumerativi e strutturati
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
Definire un nuovo tipo Tipi strutturati: typedef struct { char campo1; float campo2; int campo3[2]; } Record; Record ilMioRecord; ? ilMioRecord 24.56 23 A ilMioRecord 45 campo1 campo2 campo3 ilMioRecord.campo1 = 'A'; ilMioRecord.campo2 = 24.56; ilMioRecord.campo3[0] = 23; ilMioRecord.campo3[1] = 45; 1 x 1 byte + 1 x 4 byte + 2 x 2 byte = byte
4
Numeri complessi 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.
5
Numeri complessi #include <stdio.h> void main() { typedef struct
float reale; float immag; } Complesso; Complesso n1, n2, somma; char fine;
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
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
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’ La scanf() scarta l’eventuale ‘\n’ che incontra prima del numero da leggere ma lascia il ‘\n’ finale.
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 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.
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 <stdio.h> 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
Squadra di calcio 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. */
13
Squadra di calcio 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; }
14
Squadra di calcio 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; }
15
Squadra di calcio } /* 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); }
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 dell’anno 2002 Quindi, visualizza queste giocate.
17
Schedine #include <stdio.h> 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; 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"); }
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.