esempio: array di struct - lampnuovolabs.fauser.edu/~valeria/materiale-didattico/...esercizio 4 -...

22
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.

Upload: others

Post on 07-Jul-2020

37 views

Category:

Documents


0 download

TRANSCRIPT

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 letturadi una stringa, gli spazi sono considerati separatori).

Suggerimento 2: Utilizzare la funzionestrcmp contenuta nellalibreria string.h per confrontare due stringhe.

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);

Array di struct – Prima soluzione (1/3)

Continua...

//inserimento dati

for (i=0; i<n; i++){

printf("\nInserisci il nome dell'esame:");

scanf("%s", esamimarco[i].nome);

printf("Inserisci il voto:");

scanf("%d", &esamimarco[i].voto);}

printf("\nInserisci il nome dell'esame da cercare: ");

scanf("%s", cerca); //cerca è una stringa!

pos=0; //inizializzo contatoretrovato=0;

Array di struct – Prima soluzione (2/3)

Nella lettura di stringhe non si usa &

Continua...

Voto non è una stringa, quindi si usa &

//ricercawhile(pos <n && !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);

}}

Array di struct – Prima soluzione (3/3)

strcmp(string1,string2)restituisce 0 se le duestringhe sono uguali

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;

Array di struct – Seconda soluzione (1/2)

Continua...

printf("\nInserisci il nome dell'esame da cercare: ");scanf("%s", cerca);

pos=0; //inizializzo contatoretrovato=0;//ricercawhile(pos<4 && !trovato){

if(strcmp(esamimarco[pos].nome,cerca)==0)trovato=1;

elsepos++;

}

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 (2/2)

ESERCIZI PROPOSTI

Esercizio 1 - StringheScrivere 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 – StructScrivere un programma C che definisca la struttura “persona” composta da nome, cognome, indirizzo, provincia e data di nascita. Si richiedano tutti i dati esi stampino a video.

Suggerimento: definire apposite strutture anche per l'indirizzo e la data di nascita.

Esercizio 3 - Array di structSi realizzi un programma C che definisca una struttura chepermetta di contenere i dati relativi ad alcuni corsi. Inparticolare, per ogni corso vengono forniti:�denominazione del corso: una stringa di 20 caratteri cheriporta il nome del corso;�cognome del docente: una stringa di 15 caratteri cherappresenta il cognome del docente del corso;�iscritti: un intero che indica il numero di studenti chefrequentano 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).

ESERCIZI PROPOSTI

Inizializzazione dell'array di strutture da usare nelprogramma 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}

}

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 deigoal subiti.

• Letto a terminale un codice di una squadra stampi a videoil nome della squadra, i goal fatti e i goal subiti.

ESERCIZI PROPOSTI

Inizializzazione dell'array di strutture da usare nelprogramma 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}

}

ESERCIZI PROPOSTI

Esercizio 5 – Array di structScrivere 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 nelprogramma 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]"}

}

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 nelprogramma 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}

}

ESERCIZI PROPOSTIEsercizio 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 3 4 ...Bianchi 2 1 5 ...Verdi 4 2 6 ...

Il programma dovrà visualizzare:Verdi 4Rossi 3Verdi 6

Inizializzazione dell'array di strutture da usare nelprogramma 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}}

}

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 nelprogramma 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}

}

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 98 97 96 110 109 105

ACME 100 95 100 88 81 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 nelprogramma 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}}

}