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