Oppure

Loading
29/12/09 18:29
xshell32
Buongiorno a tutti! Ho il seguente problema: devo creare un vettore di struttura di 5 elementi che contenga il nome e il numero di uno studente. A questo punto dovrei scrivere sullo schermo il nome dello studente che ha numero 201, ma non riesco a capire come posso associare il numero dello studente all'elemento del vettore.

Io ho impostato il codice nel seguente modo:

typedef struct {
   char nome[20];
   int numero;
}classe;

main()
{
   int i;
   classe studente[5];

   for(i=0; i<5; i++)
   {
       scanf("%s%d", studente.nome, &studente.numero);
   }

   ... ???
}


Prendendo il numero dello studente 201, come faccio a visualizzarne il nome? Grazie!
Ultima modifica effettuata da xshell32 29/12/09 18:31
aaa
29/12/09 19:06
NetProgrammer
Ciao...allora che ne dici di usare le istruzioni condizionali?? basterebbe un if se ho capito bene il tuo problema.
Ultima modifica effettuata da NetProgrammer 29/12/09 19:14
aaa
29/12/09 19:08
Matthew
Devi scrivere un algoritmo che ricerchi in tutti gli elementi del vettore quello che ha il numero desiderato. Quando lo trovi (supponiamo che sia nell'elemento 3 del vettore) basta che accedi al nome della struttura 3 contenuta nel vettore.
aaa
29/12/09 19:12
Matthew
Postato originariamente da NetProgrammer:

Ciao...allora che ne dici di usare le istruzioni condizionali?? basterebbe un if se ho capito bene il tuo problema; inoltre non riesco a capire a che ti serve quel ciclo for.


Il ciclo for serve a inserire i dati da parte dell'utente. Giusto?
aaa
29/12/09 19:15
xshell32
Grazie per le risposte. La proposta di Matthew mi sembra ottima, però ricercare il numero in tutti gli elementi del vettore non è un po' lungo da eseguire? Esiste un modo più rapido?

Per ricercare il numero 201 io farei così:

for(i=0; i<5; i++)
{
   if(studente[i].numero==201)
        j=i
}


Così memorizzo il numero dell'elemento in j... è corretto?
aaa
29/12/09 19:15
NetProgrammer
Sisi giusto Matthew.. è solo che ho letto il codice un po' troppo velocemente...lol
Ultima modifica effettuata da NetProgrammer 29/12/09 19:16
aaa
29/12/09 19:20
Matthew
Postato originariamente da xshell32:

Grazie per le risposte. La proposta di Matthew mi sembra ottima, però ricercare il numero in tutti gli elementi del vettore non è un po' lungo da eseguire? Esiste un modo più rapido?

Per ricercare il numero 201 io farei così:

for(i=0; i<5; i++)
{
   if(studente[i].numero==201)
        j=i
}


Così memorizzo il numero dell'elemento in j... è corretto?


Si ed è esattamente quello che ti avevo suggerito io, ricercare il numero in tutti gli elementi del vettore! :rotfl:

[EDIT]


for(i=0; i<5; i++)
{
   if(studente[i].numero==201)
   {
        j=i;
        break;
   }
} 

Non c'è bisogno di andare avanti nella ricerca una volta che lo hai trovato.
Inoltre dovresti assicurarti che il programma non faccia pasticci quando il numero che ricerchi non esiste. Così com'è ora probabilmente otterresti un numero senza nessun significato.
Ultima modifica effettuata da Matthew 29/12/09 19:23
aaa
29/12/09 20:07
xshell32
Sì, hai ragione. Meglio inserire un break, così non si perde tempo. Ma esiste un algoritmo più rapido? Se il vettore fosse costituito da numerosissimi elementi il programma ci metterebbe un po'... (ok, con la velocità dei computer moderni il problema non si pone, ma è piuttosto la voglia di imparare ad ottimizzare ogni mio programma al massimo). Grazie ancora! :)

Postato originariamente da Matthew:
Inoltre dovresti assicurarti che il programma non faccia pasticci quando il numero che ricerchi non esiste.

In effetti... se non fosse trovato il numero j avrebbe un valore indefinito... io avrei un'idea per evitare che ciò accada: potrei assegnare un valore negativo a J e se questo rimane negativo, allora vuol dire che il numero non è stato trovato. Voi come fareste?

EDIT: Non è possibile rintracciare direttamente l'elemento del vettore che contiene un determinato valore in un campo della struttura?

Ultima modifica effettuata da xshell32 29/12/09 20:56
aaa