Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Vettore di struttura
Forum - C/C++ - Vettore di struttura

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
xshell32 (Normal User)
Rookie


Messaggi: 34
Iscritto: 08/02/2008

Segnala al moderatore
Postato alle 19:29
Martedì, 29/12/2009
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:

Codice sorgente - presumibilmente C++

  1. typedef struct {
  2.    char nome[20];
  3.    int numero;
  4. }classe;
  5.  
  6. main()
  7. {
  8.    int i;
  9.    classe studente[5];
  10.  
  11.    for(i=0; i<5; i++)
  12.    {
  13.        scanf("%s%d", studente.nome, &studente.numero);
  14.    }
  15.  
  16.    ... ???
  17. }



Prendendo il numero dello studente 201, come faccio a visualizzarne il nome? Grazie!

Ultima modifica effettuata da xshell32 il 29/12/2009 alle 19:31
PM Quote
Avatar
NetProgrammer (Member)
Pro


Messaggi: 175
Iscritto: 28/06/2008

Segnala al moderatore
Postato alle 20:06
Martedì, 29/12/2009
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 il 29/12/2009 alle 20:14
PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 20:08
Martedì, 29/12/2009
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.

PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 20:12
Martedì, 29/12/2009
Testo quotato

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?

PM Quote
Avatar
xshell32 (Normal User)
Rookie


Messaggi: 34
Iscritto: 08/02/2008

Segnala al moderatore
Postato alle 20:15
Martedì, 29/12/2009
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ì:

Codice sorgente - presumibilmente Plain Text

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



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

PM Quote
Avatar
NetProgrammer (Member)
Pro


Messaggi: 175
Iscritto: 28/06/2008

Segnala al moderatore
Postato alle 20:15
Martedì, 29/12/2009
Sisi giusto Matthew.. è solo che ho letto il codice un po' troppo velocemente...lol

Ultima modifica effettuata da NetProgrammer il 29/12/2009 alle 20:16
PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 20:20
Martedì, 29/12/2009
Testo quotato

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ì:

Codice sorgente - presumibilmente Plain Text

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



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]

Codice sorgente - presumibilmente Plain Text

  1. for(i=0; i<5; i++)
  2. {
  3.    if(studente[i].numero==201)
  4.    {
  5.         j=i;
  6.         break;
  7.    }
  8. }


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 il 29/12/2009 alle 20:23
PM Quote
Avatar
xshell32 (Normal User)
Rookie


Messaggi: 34
Iscritto: 08/02/2008

Segnala al moderatore
Postato alle 21:07
Martedì, 29/12/2009
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 il 29/12/2009 alle 21:56
PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 21:57
Martedì, 29/12/2009
Beh potresti ordinare l'array in base al numero dello studente... Se hai 1000 studenti con rispettivi numeri da 0 a 999, basta che inserisci lo studente con numero 0 nella posizione 0, quello con numero 1 nella posizione 1 e così via... In questo modo non hai bisogno di effettuare alcuna ricerca... Se i numeri degli studenti invece non andassero da 0 a 999 o comunque non tutti i numeri fossero presenti potresti comunque salvarli nell'array in ordine (crescente o decrescente) e poi scrivere un algoritmo più efficiente per trovare il numero desiderato.
Però l'unico modo per risparmiare tempo nella ricerca consiste nel salvare i dati con un qualche tipo di ordine. Se li salvi a caso, come il tuo programma ora fa, poi devi cercare uno ad uno.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo