Aiuto - Cerca - Utenti - Calendario
Versione completa: Auto per un esercizio i c ;)
.: GBArl.it :. News sulle Console Nintendo - Emulazione - Flash Cards - Trainer > Discussioni OT > Off-Topic
Eater
Salve ragazzi ormai è gia da un pò che sono qui e vedo che c'è gente che ne capisce davvero molto di linguaggio di programmazione C...
mi trovo davanti a questo esercizio, e non riesco a capire come posso rintracciare il nome dopo che l'esterno lo ha inserito da tastiera ... per il resto dovrei riuscire a farle, ma questo particolare mi confonde.

l'es è a questo indirizzo: http://www.liviula.net/informatica/terza/v...enzegriglia.pdf

(ovviamente rimuovete il link se non posso metterlo, ma è semplicemente il sito della mia prof xD)
Daviex
Se mi dai 10/15 minuti ti scrivo il programma e ti spiego la parte che ti interessa wink.gif
Eater
CITAZIONE (Daviex @ Monday 9 May 2011 - 21:02) *
Se mi dai 10/15 minuti ti scrivo il programma e ti spiego la parte che ti interessa wink.gif

sisi grazie mille ;D
Pak_Gatsu
Ma sono il solo che non riesce ad interpretare la tabella e a capire il problelma? biggrin.gif
Comunque per tornare in tema che strutture dati hai fatto e puoi usare?

Edit: Posto di aver capito il tuo dubbio (e la tabella), potresti rappresentare il tutto con una cosa del genere: http://www.liviula.net/informatica/libro/1...eArray2DInC.pdf
Una prima soluzione grezza potrebbe essere quella di scorrere l'array per trovare il nome digitato, letto da scanf, e prendere/elaborare i valori che ti servono. Visto che i nomi sono ordinati puoi anche evitare di fare iterazioni inutili durante la ricerca wink.gif
Trivia
Non sono sicuro di aver capito bene il tuo problema... chiaramente hai bisogno di un piccolo buffer (un array di char) per ospitare l'input dell'utente, hai bisogno di raccogliere questo input (con la funzione scanf, ad esempio)... qual è il punto in particolare in cui hai un disagio?

Edit: Avevo frainteso il tuo post; chiaramente per "rintracciare" il nome devi fare un confronto "cella per cella" tra le varie stringhe.
Verosimilmente avrai un array di struct, ciascuna con un campo nome; dunque userai un ciclo for per iterare sull'array, e posizione per posizione userai la funzione strcmp usando come argomenti l'input utente e il campo "nome" dell'elemento di turno dell'array.
Penso sia chiaro, ma chiaramente posso scriverti un po' di codice se ne hai bisogno.
Daviex
Credo intenda nella parte in cui inserisce il nome è già stato inserito, e in quel caso lo rifaccia inserire
Eater
CITAZIONE (Pak_Gatsu @ Monday 9 May 2011 - 21:28) *
Ma sono il solo che non riesce ad interpretare la tabella? biggrin.gif
Vorrei aiutare ma non capendo come leggere la tabella non vorrei scrivere fesserie

bhe ti capisco questa prof. è abbastanza strana... cercherò di spiegartela io:

- i primi due rettangoli contengono rispettivamente cognome e nome;
- affianco vi è la data della lezione;
- quel vettore che segue la data contiene il numero corrispondente all'alunno (es: placido n° 7 nell'elenco);
- e infine il numero totale di assenti il giorno.

spero di aver chiarito il dubbio e di non aver fatto capitan ovviO xD
Daviex
Non lo avevo capito nemmeno io.

Comunque siccome devo uscire, ti spiego il concetto.

Creiamo due For, un con i = 0, i < n-1 ( numero alunni ); i++ mentre l'altro j = i+1; j < n; j++, all'interno metti l'inserimento e subito dopo un if che controlla se le stringhe inserite se sono uguali come:

if((strcmp(alun[i].nome, alun[j].nome) == 0) && (strcmp(alun[i].cognome, alun[j].cognome) == 0))

e all'interno altra cosa...

ORa devo andare, mi spiace di non poterti essere più d'aiuto di cosi.

Spero tu risolva biggrin.gif

Ciao
Eater
il vero problema è che non abbiamo mai usato la funzione strcmp o.o intuisco a cosa possa servire ma non ce ne hanno proprio mai parlato... comunque grazie lo stesso wink.gif

EDIT: umm inserisco il cognome in una stringa, poi faccio una lettura del vettore e individuo il numero nell'elenco, fatto cio faccio un altro confronto (questa volta nel vettore delle assenza) per trovare i giorni in cui l'alunno è stato assente... si ma questo confronto come lo faccio?? .-.
Pak_Gatsu
Per quello basta fare rapida ricerca su internet... tanto per fare un esempio: http://digilander.libero.it/uzappi/C/libre...oni/strcmp.html
Magari il sito lascia un pò a desiderare ma in due secondi ho trovato una breve descrizione della funzione che ti fa capire come funziona. Se fai alcune prove in un semplice programmino tutto ti sarà più chiaro.

Edit: Per la funzione se dimostri di aver capito come funziona (non che ci voglia poi molto), e se ovviamente non è proibito o è richiesto dal testo di usare altro, non vedo perchè non usarla. Detto in altri modi se già esiste l'acqua calda perchè reinventarla? Ovviamente il mio è solo un consiglio da studente universitario che forse mal si adatta alla scuola...
%IO ME MEDESIMO
non so se ti può essere di aiuto mapotresti risolverlo tranquillamente con un vettore (nel quale inserire i dati delle assenze) e ovviamente cicli for
Eater
CITAZIONE (%IO ME MEDESIMO @ Monday 9 May 2011 - 21:57) *
non so se ti può essere di aiuto mapotresti risolverlo tranquillamente con un vettore (nel quale inserire i dati delle assenze) e ovviamente cicli for

si ma il mio problema è il confronto umm mi spiego meglio:
come faccio a trovare il nome digitato da tastiera all'interno del vettore?? ovviamente devo fare un confronto ma come??


p.s. magari potrei chiedere se posso usarla domani potrebbe risultare un punto a favore dato l'interessamento :trollface:
altrimenti mi spremo le meningi e provo a farle senza lo strcmp ...
Pak_Gatsu
Sarà l'ora tarda ma ancora non ho capito il tuo problema e come sono rappresentati i nomi ed i cognomi nell'esercizio... comunque se proprio non vuoi usare questa funzione createne una te che lavora più o meno allo stesso modo. Ad esempio, posto che hai delle "stringhe" classiche confronta carattere per carattere i due nomi e ritorna un int che ti dice se sono o no uguali.
Ovviamente ti servirà anche un for che cicla su tutto l'array per fare i confronti.
Gamera
QUOTE (Eater @ Monday 9 May 2011 - 22:01) *
QUOTE (%IO ME MEDESIMO @ Monday 9 May 2011 - 21:57) *
non so se ti può essere di aiuto mapotresti risolverlo tranquillamente con un vettore (nel quale inserire i dati delle assenze) e ovviamente cicli for

si ma il mio problema è il confronto umm mi spiego meglio:
come faccio a trovare il nome digitato da tastiera all'interno del vettore?? ovviamente devo fare un confronto ma come??


p.s. magari potrei chiedere se posso usarla domani potrebbe risultare un punto a favore dato l'interessamento :trollface:
altrimenti mi spremo le meningi e provo a farle senza lo strcmp ...



Ricorda che in C le stringhe sono vettori di caratteri. Se non vuoi usare la strcmp puoi confrontare le stringhe carattere per carattere. Una stringa finisce sempre con il carattere '\0' . Quindi se S è la tua stringa puoi fare un ciclo del tipo
i=0;
while (s[i]!='\0'){
....... e qui quello che ti serve ....
i++;
}
Eater
CITAZIONE (Pak_Gatsu @ Monday 9 May 2011 - 22:21) *
Ancora non ho capito come sono rappresentate i nome ed i cognomi nell'esercizio ma se proprio non vuoi usare questa funzione createne una te che lavora più o meno allo stesso modo. Ad esempio, posto che sono delle "stringhe" classiche confronta carattere per carattere i due nomi e ritorna un int che ti dice se sono o no uguali.
Ovviamente ti servirà anche un for che cicla su tutto l'array per fare i confronti.

umm ... forse mi hai dato l'ispirazione giusta ... facendo così inizializzo un cont che appunto conti i confronti che ho fatto così da poter sapere anche il numero identificativo del cognome per poter visualizzale le relative giornate di assenze...
Trivia
CITAZIONE (Eater @ Monday 9 May 2011 - 22:01) *
[...]

Non ti preoccupare per la strcmp di cui non hai mai sentito parlare... due suggerimenti:

1. Se studi informatica e immagini una carriera che riguardi l'informatica e la programmazione, non è mai troppo presto per iniziare ad anticipare i prof. e studiare autonomamente documentazione e man pages... migliorerai tantissimo in men che non si dica!

2. Un detto dice che i programmatori "non devono reinventare la ruota", ossia: esiste la strcmp, non preoccuparti ed usala!
Una versione che preferisco è "Non reinventare la ruota, a meno che tu non voglia capire meglio come funzionano le ruote", ossia immagina in cosa consiste un confronto tra due nomi; chiaramente è un confronto tra stringhe, che deve comportarsi "grossomodo" come un confronto a mezzo di operatore di uguaglianza... ma quando due stringhe sono uguali? Decisamente quando tutti i loro elementi sono uguali, dunque puoi provare a percorrerle con un ciclo e confrontare lettera per lettera; se tutte dovessero essere uguali avresti finalmente trovato il nome che cercavi. Chiaramente, una volta capito "cosa c'è sotto", puoi tranquillamente iniziare ad usare la funzione di libreria senza preoccuparti.

P.S. rispetto al codice di Daviex preciserei che solo uno dei due argomenti dovrebbe essere un array di strutture "alunno", l'altro è semplicemente la stringa che hai usato come buffer per il tuo testo da tastiera.

P.P.S. nel "grossomodo" tra virgolette è nascosta tutta la mia stima per l'OOP, nonché per l'overloading degli operatori e, in misura diversa, per il Duck Typing; e la mia crociata infinita verso i professori che vedono nel C l'unica fede laugh.gif
Il che si traduce in tanti soldini per me che faccio ripetizioni private, quindi BRAVI PROFESSORI wink.gif
Gamera
QUOTE (Eater @ Monday 9 May 2011 - 22:27) *
QUOTE (Pak_Gatsu @ Monday 9 May 2011 - 22:21) *
Ancora non ho capito come sono rappresentate i nome ed i cognomi nell'esercizio ma se proprio non vuoi usare questa funzione createne una te che lavora più o meno allo stesso modo. Ad esempio, posto che sono delle "stringhe" classiche confronta carattere per carattere i due nomi e ritorna un int che ti dice se sono o no uguali.
Ovviamente ti servirà anche un for che cicla su tutto l'array per fare i confronti.

umm ... forse mi hai dato l'ispirazione giusta ... facendo così inizializzo un cont che appunto conti i confronti che ho fatto così da poter sapere anche il numero identificativo del cognome per poter visualizzale le relative giornate di assenze...


Hai un vettore di struct con nome e cognome. La posizione del vettore è il numero dello studente. Quindi il primo studente è il numero 0 o se preferisci 0+1 e così via.

Le lezioni sono in un altro vettore di struct con giorno, mese e anno (int).

Le assenze le metterei in una matrice di e NMAXLEZIONI x e NMAXALUNNI+1 (perchè devi usare l'ultima cella per metterci il totale degli alunni assenti).

Una volta acquisito il cognome dello studente lo ricerchi nel vettore degli studenti. La sua posizione è il numero dello studente che poi devi ricercare nella matrice. La riga nin cui lo trovi è il numero della cella del vettore lezioni dove puoi trovare la data della lezione. Un po' laborioso ma non difficile.

Aggiungo che mi sembra strano che alla fine della terza non abbiate ancora fatto le funzioni per lavorare sulle stringhe .... magari ti sono sfuggite?
Eater
nono ti assicuro che quella funzione non l'abbiamo mai usata xD comunque la data non mi conviene metterla in una stinga pure lei? tanto una volta che ho il numero dello studente ricerco quel numero (es: 3) nella struct delle assenze e visualizzo le stringhe delle date che sono legate al vettore contenente quel numero ...
Gamera
QUOTE (Eater @ Monday 9 May 2011 - 22:41) *
nono ti assicuro che quella funzione non l'abbiamo mai usata xD comunque la data non mi conviene metterla in una stinga pure lei? tanto una volta che ho il numero dello studente ricerco quel numero (es: 3) nella struct delle assenze e visualizzo le stringhe delle date che sono legate al vettore contenente quel numero ...


Si è vero .... puoi metterla come stringa ... oppure puoi allungare di tre elementi la matrice e li usi per memorizzare giorno mese e anno come interi ... così ti serve solo una matrice di interi quindi sarà NMAXLEZIONIxNMAXALUNNI+4

vedi tu come sei più comodo ....
Questa è la versione 'lo-fi' del forum. Per visualizzare la versione completa con molte più informazioni, formattazione ed immagini, per favore clicca qui.
Invision Power Board © 2001-2021 Invision Power Services, Inc.