• Non ci sono risultati.

Esempio: Array di struct

N/A
N/A
Protected

Academic year: 2021

Condividi "Esempio: Array di struct"

Copied!
22
0
0

Testo completo

(1)

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.

(2)

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

(3)

//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 contatore trovato=0;

Array di struct – Prima soluzione (2/3)

Nella lettura di stringhe non si usa &

Continua...

Voto non è una stringa, quindi si usa &

(4)

//ricerca

while(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 due stringhe sono uguali

(5)

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

(6)

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

} }

Array di struct – Seconda soluzione (2/2)

(7)

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.

(8)

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.

(9)

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

ESERCIZI PROPOSTI

(10)

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

}

(11)

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.

ESERCIZI PROPOSTI

(12)

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

}

(13)

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.

(14)

Inizializzazione dell'array di strutture da usare nel programma dell'esercizio 5 (fare copia e incolla).

{

{"maria","rossi","047541219","m.rossi@yahoo.it"}, {"luca","verdi","057580913","lucav@gmail.com"}, {"andrea","pari","087122907","aapp@libero.it"}, {"lucia","ponti","044109885","lucyp@msn.it"},

{"roberto","conti","099424566","rob_conti@unife.it"}

}

(15)

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

(16)

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

}

(17)

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 3 4 ...

Bianchi 2 1 5 ...

Verdi 4 2 6 ...

Il programma dovrà visualizzare:

Verdi 4 Rossi 3 Verdi 6

(18)

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

}

(19)

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.

(20)

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

}

(21)

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.

(22)

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

}

Riferimenti

Documenti correlati

Siete un Test Analyst in un nuovo progetto. I documenti dei requisiti sono ad alto livello, contengono poco dettaglio sul problema che il software dovrebbe indirizzare. Come

[r]

- se cittadino extra-comunitario, dovrà produrre il titolo di studio in copia autentica, tradotta in lingua italiana e legalizzata con allegata dichiarazione

Dipartimento di Sociologia e Ricerca Sociale Universit` a degli Studi di Milano-Bicocca Corso di Laurea in Scienze dell’Organizzazione..

Il Candidato certificato conosce le caratteristiche della dislessia, della disortografia, della disgrafia e della discalculia ed è in grado di realizzare attraverso

Il Candidato risolva uno dei due problemi e 5 dei 10 quesiti in cui si articola il questionario. 2) Verificare se tutte le curve hanno lo stesso asintoto e lo stesso punto di

Considerata una sfera di diametro AB, lungo 2, per un punto P di tale diametro si conduca il piano α perpendicolare ad esso e si ponga uguale ad x la lunghezza di AP. 1) Si calcoli

Tuttavia `e consigliabile cercare una primitiva nella nuova variabile, poi risos- tituire la vecchia e quindi andare a calcolare la primitiva (nella vecchia vari- abile) in b quindi