Esempio: Array di struct Scrivere un programma C che definisca la struttura “esame”, composta dal nome dell’esame (stringa) e dal voto (intero). Si leggano poi da terminale n esami, con n definito dall’utente (max 30), e si inseriscano in un array. L’utente inserisca poi il nome di un esame da cercare e si stampi il relativo voto, se l'esame è presente. Suggerimento 1: Non usate spazi nel nome dell’esame (nella lettura di una stringa, gli spazi sono considerati separatori). Suggerimento 2: Utilizzare la funzione strcmp contenuta nella libreria string.h per confrontare due stringhe. Array di struct – Prima soluzione (1/3) Ver. 1: Gli esami vengono letti da tastiera uno a uno. #include <stdio.h> #include <string.h> #define NMAX 30 typedef struct { char nome[20]; int voto; } esame; main() { esame esamimarco[NMAX]; char cerca[20]; int n, i, pos, trovato; printf("Inserisci il numero di esami:"); scanf("%d", &n); Continua... Array di struct – Prima soluzione (2/3) //inserimento dati for (i=0; i<n; i++) { printf("\nInserisci il nome dell'esame:"); scanf("%s", esamimarco[i].nome); Nella lettura di stringhe non si usa & printf("Inserisci il voto:"); scanf("%d", &esamimarco[i].voto); } Voto non è una stringa, quindi si usa & printf("\nInserisci il nome dell'esame da cercare: "); scanf("%s", cerca); //cerca è una stringa! pos=0; //inizializzo contatore trovato=0; Continua... Array di struct – Prima soluzione (3/3) //ricerca while(pos <n && !trovato) { if(strcmp(esamimarco[pos].nome, cerca)==0) { trovato=1; } strcmp(string1,string2) else restituisce 0 se le due { stringhe sono uguali pos++; } } if (!trovato) { printf("\nEsame non trovato.\n"); } else { printf("\nTrovato in posizione %d.\n%s\t%d\n", pos+1, esamimarco[pos].nome, esamimarco[pos].voto); } } Array di struct – Seconda soluzione (1/2) Ver. 2: L'array di esami è inizializzato durante la definizione. #include <stdio.h> #include <string.h> #define NMAX 30 typedef struct { char nome[20]; int voto; } esame; main() { esame esamimarco[NMAX] = { {"analisi", 18}, {"geometria",28}, {"informatica",30}, {"fisica",26} } char cerca[20]; int i, pos,trovato; Continua... Array di struct – Seconda soluzione (2/2) printf("\nInserisci il nome dell'esame da cercare: "); scanf("%s", cerca); pos=0; //inizializzo contatore trovato=0; //ricerca while(pos<4 && !trovato) { if(strcmp(esamimarco[pos].nome,cerca)==0) trovato=1; else pos++; } if (!trovato) { printf("\nEsame non trovato.\n"); } else { printf("\nTrovato in posizione %d.\n%s\t%d\n", pos+1, esamimarco[pos].nome, esamimarco[pos].voto); } } ESERCIZI PROPOSTI Esercizio 1 - Stringhe Scrivere un programma C che legga da tastiera una stringa e la memorizzi in un'altra stringa, ma invertita. Ad esempio, se si legge “ciao”, bisogna creare e stampare la stringa “oaic”. Suggerimento 1: può essere utile usare la funzione strlen(string) definita nella libreria string.h che restituisce la lunghezza di una stringa. Suggerimento 2: Non dimenticare di inserire il terminatore nella stringa creata. ESERCIZI PROPOSTI Esercizio 2 – Struct Scrivere un programma C che definisca la struttura “persona” composta da nome, cognome, indirizzo, provincia e data di nascita. Si richiedano tutti i dati e si stampino a video. Suggerimento: definire apposite strutture anche per l'indirizzo e la data di nascita. ESERCIZI PROPOSTI Esercizio 3 - Array di struct Si realizzi un programma C che definisca una struttura che permetta di contenere i dati relativi ad alcuni corsi. In particolare, per ogni corso vengono forniti: denominazione del corso: una stringa di 20 caratteri che riporta il nome del corso; cognome del docente: una stringa di 15 caratteri che rappresenta il cognome del docente del corso; iscritti: un intero che indica il numero di studenti che frequentano il corso. Il programma deve stampare la denominazione del corso e il cognome del docente relativi a tutti i corsi che hanno il numero di iscritti maggiore o uguale alla media aritmetica degli iscritti (calcolata su tutti i corsi). Inizializzazione dell'array di strutture da usare programma dell'esercizio 3 (fare copia e incolla). { {"analisi1", "foschi", 78}, {"geometria", "mazzanti", 90}, {"informatica", "gavanelli", 85}, {"fisica1", "frontera", 75}, {"fisica2", "zavattini", 67}, {"inglese", "rossi", 45}, {"analisi2", "paoli", 61} } nel ESERCIZI PROPOSTI Esercizio 4 - Array di struct • Si scriva un programma C che definisca una struttura che permetta di contenere una serie di dati (struct squadra) del tipo: nome squadra (stringa di lunghezza 20); codice squadra (intero); goal fatti (intero); goal subiti (intero). • Li si memorizzi in un vettore di strutture "squadre"; • Stampi a terminale tutti i nomi e codici delle squadre che hanno fatto un numero di goal maggiore del numero dei goal subiti. • Letto a terminale un codice di una squadra stampi a video il nome della squadra, i goal fatti e i goal subiti. Inizializzazione dell'array di strutture da usare programma dell'esercizio 4 (fare copia e incolla). { {"juventus", 1, 10, 12}, {"milan", 8, 7, 6}, {"inter", 10, 13, 11}, {"palermo", 2, 9, 10}, {"lazio", 5, 8, 4}, {"udinese", 14, 5, 7} } nel ESERCIZI PROPOSTI Esercizio 5 – Array di struct Scrivere un programma C che crei una rubrica telefonica, usando una struct “persona” (nome, cognome, numero di telefono, e-mail). Il programma chiede il nome da cercare e stampa a video la scheda corrispondente. Inizializzazione dell'array di strutture da usare programma dell'esercizio 5 (fare copia e incolla). { {"maria","rossi","047541219","[email protected]"}, {"luca","verdi","057580913","[email protected]"}, {"andrea","pari","087122907","[email protected]"}, {"lucia","ponti","044109885","[email protected]"}, {"roberto","conti","099424566","[email protected]"} } nel ESERCIZI PROPOSTI Esercizio 6 – Array di Struct (Tratto dal compito del 20 dicembre 2006) Un negozio di alimentari ha un archivio in cui vengono memorizzati i prodotti presenti in magazzino. Per ogni prodotto in magazzino, si dispone dei seguenti dati: • la descrizione (stringa di al massimo 20 caratteri, incluso il terminatore); • la quantità disponibile in magazzino (int); • l'anno di scadenza (int). Il programma deve memorizzare in un altro array di strutture tutti i prodotti che sono da cancellare dall'archivio perché scaduti (in cui l'anno di scadenza è prima del 2010). Inizializzazione dell'array di strutture da usare programma dell'esercizio 6 (fare copia e incolla). { {"pere",150,2006}, {"arance",210, 2010}, {"tonno",48, 2007}, {"melanzane",85, 2009}, {"olio",60,2015}, {"aceto",49,2012}, {"pomodoro",61,2005}, {"pasta",75, 2011} } nel ESERCIZI PROPOSTI Esercizio 7 – Array di Struct (Tratto dal compito del 1 dicembre 2008 E) In un concorso, i partecipanti sono sottoposti a 10 prove. I risultati del concorso sono memorizzati in un array di strutture, che contiene, per ogni concorrente, i seguenti dati: • nome: stringa contenente al massimo 20 caratteri, compreso il terminatore; • punteggi: una sequenza di 10 interi. Si scriva un programma che stampi, per ciascuna prova, chi è il vincitore e con quale punteggio. Ad esempio: Rossi 1 Bianchi 2 Verdi 4 3 1 2 4 5 6 ... ... ... Il programma dovrà visualizzare: Verdi 4 Rossi 3 Verdi 6 Inizializzazione dell'array di strutture da usare programma dell'esercizio 7 (fare copia e incolla). { {"Rossi", {4,6,1,2,0,4,0,1,2,2}}, {"Bianchi", {12,0,9,4,5,2,1,1,0,5}}, {"Verdi", {2,3,7,9,10,4,5,9,7,2}}, {"Astolfi", {0,2,6,1,8,5,9,10,7,8}}, {"Lorenzi", {6,9,7,1,0,0,4,5,2,1}}, {"Franchi", {1,10,11,19,4,7,2,0,2,7}} } nel ESERCIZI PROPOSTI Esercizio 8 – Array di Struct (Tratto dal compito del 15 luglio 2008) Un ambulatorio dentistico utilizza un array di strutture per memorizzare tutte le prenotazioni effettuate per il mese di Luglio. Le prenotazioni hanno la seguente struttura: • cognome: stringa di 20 caratteri, compreso il terminatore; • data: intero da 1 a 30. Si scriva un programma che stampi quali giorni sono liberi. Inizializzazione dell'array di strutture da usare programma dell'esercizio 8 (fare copia e incolla). { {"Astolfi", 27}, {"Bianchi", 3}, {"Carli", 15}, {"Conti", 26}, {"Diaz", 2}, {"Ferro", 22}, {"Finotti", 21}, {"Marangoni", 13}, {"Montale", 18}, {"Nardo", 1}, {"Natale", 30}, {"Papi", 28}, {"Pasquali", 4}, {"Ranieri", 10}, {"Salvi", 20}, {"Tommasi", 7}, {"Verdi", 25}, {"Zanetti", 17}, {"Zucchi", 14} } nel ESERCIZI PROPOSTI Esercizio 9 – Array di Struct (Tratto dal compito del 29 novembre 2006 A) Un array di strutture contiene l'andamento delle quotazioni di alcune azioni in borsa nell'ultima settimana. La struttura è definita in questo modo: • nome: stringa al massimo di 20 caratteri, senza spazi; • valori: una sequenza di 7 float (uno per ogni giorno della settimana). Il programma deve visualizzare sullo schermo quante azioni hanno avuto un calo superiore al 10% in una sola giornata. Ad esempio: KettImport 100 ACME 100 98 95 97 100 96 88 110 81 109 105 105 107 Il programma dovrà fornire come risultato 1, in quanto la ACME ha avuto un calo superiore al 10% fra il terzo e il quarto giorno. Inizializzazione dell'array di strutture da usare programma dell'esercizio 9 (fare copia e incolla). { {"KettImport",{90,93,99,95,102,93,101}}, {"ACME", {100,95,100,88,60,105,107}}, {"Grassi", {99,92,97,91,102,98,103}}, {"ASDF", {94,103,96,100,90,80,99}}, {"Lanzi", {102,93,102,92,101,94,100}} } nel