![]() |
Benvenuto Visitatore ( Log In | Registrati )
![]() ![]() |
![]() |
![]()
Messaggio
#1
|
|
![]() Special User ![]() Gruppo: Membri Messaggi: 128 Iscritto il: Thu 30 December 2010 - 12:29 Utente Nr.: 52.048 Feedback: 0 (0%) ![]() |
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) -------------------- ![]() |
|
|
![]()
Messaggio
#2
|
|
![]() Expert GBA/NDS ![]() Gruppo: Membri Messaggi: 1.856 Iscritto il: Thu 20 December 2007 - 18:35 Da: Messina Utente Nr.: 23.776 Feedback: 0 (0%) ![]() 1521-4722-7425 ![]() Daviex94 ![]() |
Se mi dai 10/15 minuti ti scrivo il programma e ti spiego la parte che ti interessa
![]() Messaggio modificato da Daviex il Monday 9 May 2011 - 20:04 |
|
|
![]()
Messaggio
#3
|
|
![]() Special User ![]() Gruppo: Membri Messaggi: 128 Iscritto il: Thu 30 December 2010 - 12:29 Utente Nr.: 52.048 Feedback: 0 (0%) ![]() |
Se mi dai 10/15 minuti ti scrivo il programma e ti spiego la parte che ti interessa ![]() sisi grazie mille ;D -------------------- ![]() |
|
|
![]()
Messaggio
#4
|
|
No-Life GBARL ![]() Gruppo: Veterani Messaggi: 16.425 Iscritto il: Fri 3 September 2004 - 17:12 Da: Roma Utente Nr.: 1.542 Feedback: 0 (0%) ![]() 6861-2949-9189 ![]() 2234-7478-7577 ![]() PakGatsu ![]() 7500-2265-8704 ![]() |
Ma sono il solo che non riesce ad interpretare la tabella e a capire il problelma?
![]() 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 ![]() Messaggio modificato da Pak_Gatsu il Monday 9 May 2011 - 20:40 -------------------- Visita il mio blog sui videogiochi ed i giochi da tavolo Gears of Games
Le mie gamertag » Clicca per leggere lo Spoiler! « |
|
|
![]()
Messaggio
#5
|
|
![]() Expert GBA/NDS ![]() Gruppo: Moderatori Messaggi: 1.939 Iscritto il: Thu 31 May 2007 - 10:06 Da: β Persei Utente Nr.: 18.491 Feedback: 1 (100%) ![]() 2921-9207-0800 ![]() Trivia89 ![]() |
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. Messaggio modificato da Trivia il Monday 9 May 2011 - 20:33 -------------------- |
|
|
![]()
Messaggio
#6
|
|
![]() Expert GBA/NDS ![]() Gruppo: Membri Messaggi: 1.856 Iscritto il: Thu 20 December 2007 - 18:35 Da: Messina Utente Nr.: 23.776 Feedback: 0 (0%) ![]() 1521-4722-7425 ![]() Daviex94 ![]() |
Credo intenda nella parte in cui inserisce il nome è già stato inserito, e in quel caso lo rifaccia inserire
|
|
|
![]()
Messaggio
#7
|
|
![]() Special User ![]() Gruppo: Membri Messaggi: 128 Iscritto il: Thu 30 December 2010 - 12:29 Utente Nr.: 52.048 Feedback: 0 (0%) ![]() |
Ma sono il solo che non riesce ad interpretare la tabella? ![]() 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 -------------------- ![]() |
|
|
![]()
Messaggio
#8
|
|
![]() Expert GBA/NDS ![]() Gruppo: Membri Messaggi: 1.856 Iscritto il: Thu 20 December 2007 - 18:35 Da: Messina Utente Nr.: 23.776 Feedback: 0 (0%) ![]() 1521-4722-7425 ![]() Daviex94 ![]() |
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 ![]() Ciao |
|
|
![]()
Messaggio
#9
|
|
![]() Special User ![]() Gruppo: Membri Messaggi: 128 Iscritto il: Thu 30 December 2010 - 12:29 Utente Nr.: 52.048 Feedback: 0 (0%) ![]() |
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
![]() 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?? .-. Messaggio modificato da Eater il Monday 9 May 2011 - 20:51 -------------------- ![]() |
|
|
![]()
Messaggio
#10
|
|
No-Life GBARL ![]() Gruppo: Veterani Messaggi: 16.425 Iscritto il: Fri 3 September 2004 - 17:12 Da: Roma Utente Nr.: 1.542 Feedback: 0 (0%) ![]() 6861-2949-9189 ![]() 2234-7478-7577 ![]() PakGatsu ![]() 7500-2265-8704 ![]() |
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... Messaggio modificato da Pak_Gatsu il Monday 9 May 2011 - 21:08 -------------------- Visita il mio blog sui videogiochi ed i giochi da tavolo Gears of Games
Le mie gamertag » Clicca per leggere lo Spoiler! « |
|
|
![]()
Messaggio
#11
|
|
![]() Boss GBA/NDS ![]() Gruppo: Membri Messaggi: 561 Iscritto il: Thu 13 September 2007 - 19:19 Da: Termoli Utente Nr.: 21.453 Feedback: 0 (0%) ![]() |
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
-------------------- FORZA INTER/ UN Pò DI TUTTO IN SPOILER:
» Clicca per leggere lo Spoiler! « ![]() felice possessore di HTC HD2 con win mobile 6.5.x e android 2.1 |
|
|
![]()
Messaggio
#12
|
|
![]() Special User ![]() Gruppo: Membri Messaggi: 128 Iscritto il: Thu 30 December 2010 - 12:29 Utente Nr.: 52.048 Feedback: 0 (0%) ![]() |
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 ... Messaggio modificato da Eater il Monday 9 May 2011 - 21:17 -------------------- ![]() |
|
|
![]()
Messaggio
#13
|
|
No-Life GBARL ![]() Gruppo: Veterani Messaggi: 16.425 Iscritto il: Fri 3 September 2004 - 17:12 Da: Roma Utente Nr.: 1.542 Feedback: 0 (0%) ![]() 6861-2949-9189 ![]() 2234-7478-7577 ![]() PakGatsu ![]() 7500-2265-8704 ![]() |
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. Messaggio modificato da Pak_Gatsu il Monday 9 May 2011 - 21:24 -------------------- Visita il mio blog sui videogiochi ed i giochi da tavolo Gears of Games
Le mie gamertag » Clicca per leggere lo Spoiler! « |
|
|
![]()
Messaggio
#14
|
|
![]() Utente GBARL ![]() Gruppo: Membri Messaggi: 73 Iscritto il: Wed 12 October 2005 - 13:43 Da: Crema Utente Nr.: 7.895 Feedback: 0 (0%) ![]() 0645 - 5859 - 8806 ![]() |
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++; } -------------------- Ciao ciao!
|
|
|
![]()
Messaggio
#15
|
|
![]() Special User ![]() Gruppo: Membri Messaggi: 128 Iscritto il: Thu 30 December 2010 - 12:29 Utente Nr.: 52.048 Feedback: 0 (0%) ![]() |
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... -------------------- ![]() |
|
|
![]()
Messaggio
#16
|
|
![]() Expert GBA/NDS ![]() Gruppo: Moderatori Messaggi: 1.939 Iscritto il: Thu 31 May 2007 - 10:06 Da: β Persei Utente Nr.: 18.491 Feedback: 1 (100%) ![]() 2921-9207-0800 ![]() Trivia89 ![]() |
[...] 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 ![]() Il che si traduce in tanti soldini per me che faccio ripetizioni private, quindi BRAVI PROFESSORI ![]() Messaggio modificato da Trivia il Monday 9 May 2011 - 21:30 -------------------- |
|
|
![]()
Messaggio
#17
|
|
![]() Utente GBARL ![]() Gruppo: Membri Messaggi: 73 Iscritto il: Wed 12 October 2005 - 13:43 Da: Crema Utente Nr.: 7.895 Feedback: 0 (0%) ![]() 0645 - 5859 - 8806 ![]() |
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? Messaggio modificato da Gamera il Monday 9 May 2011 - 21:35 -------------------- Ciao ciao!
|
|
|
![]()
Messaggio
#18
|
|
![]() Special User ![]() Gruppo: Membri Messaggi: 128 Iscritto il: Thu 30 December 2010 - 12:29 Utente Nr.: 52.048 Feedback: 0 (0%) ![]() |
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 ...
-------------------- ![]() |
|
|
![]()
Messaggio
#19
|
|
![]() Utente GBARL ![]() Gruppo: Membri Messaggi: 73 Iscritto il: Wed 12 October 2005 - 13:43 Da: Crema Utente Nr.: 7.895 Feedback: 0 (0%) ![]() 0645 - 5859 - 8806 ![]() |
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 .... -------------------- Ciao ciao!
|
|
|
![]() ![]() |
![]() |
Versione Lo-Fi | Oggi è il: Wed 24 April 2024- 14:15 |