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++ - Codice Fiscale calcolo parte nome
Forum - C/C++ - Codice Fiscale calcolo parte nome

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Codice sorgente - presumibilmente C++

  1. int codnom(const char *str, char *buf){
  2.     int i;
  3.     int conso;
  4.     conso=0;
  5.     if (!str || !buf)
  6.         return -1;
  7.     for(i = 0; (*str != '\0') && (i < 4); str++)
  8.       if ( !isvocal(*str) ){
  9.         if (i != 1)
  10.           *(buf++) = *str;
  11.         i++;
  12.         conso++;
  13.       }
  14.       if (conso<=3){
  15.         for (i=j=1;j <=3; i++) {
  16.         if (!isvocal(str[i])) {
  17.             buf[j] = str[i];
  18.             j++;
  19.         }
  20.        
  21.     }
  22. }
  23.     return 0;
  24. }



Perchè se inserisco un nome che ha consonati <= 3 la parte del CF riservata al nome non è esatta?
P.S. Grazie in anticipo...:):):)

PM Quote
Avatar
ingMark (Ex-Member)
Pro


Messaggi: 176
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 19:15
Martedì, 12/01/2010
Nel ciclo in cui controlli il caso che le consonanti siano minori o uguali a 3 hai sbagliato il parametro di isvocal().
Gli passi str e non *str.

Senza offesa ma la mia impressione è che tu abbia copiato il pezzo sopra del tuo codice dal suggerimento di totem, senza però averci capito molto ;)
Se non ti trovi coi puntatori inizia con gli array e poi vai per gradi.

Prova a passare *str a isvocal() e poi dicci cosa esce.

EDIT: il compilatore dovrebbe darti anche un bel warning:k:
EDIT2: ovviamente anche a buf[j] devi assegnare *str e non str

Ultima modifica effettuata da ingMark il 12/01/2010 alle 19:18
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 19:22
Martedì, 12/01/2010
Ho seguito alla lettera il tuo suggerimento ma niente da fare

PM Quote
Avatar
ingMark (Ex-Member)
Pro


Messaggi: 176
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 19:27
Martedì, 12/01/2010
quello era solo un errore sintattico.
Adesso veniamo agli altri :D
Non va non aiuta molto chi ti deve rispondere :P
Dovresti precisare se ricevi degli errori in fase di compilazione oppure no.
Se non ricevi qual'è poi l'output del programma?

Se posso avanzare un ipotesi del perchè "non vada" direi che il for in cui consideri il caso di conso <= 3 non ha molto senso.

Codice sorgente - presumibilmente C/C++

  1. if (conso<=3){
  2.         for (i=j=1;j <=3; i++) {
  3.         if (!isvocal(*str)) {
  4.             buf[j] = *str;
  5.             j++;



Cosi facendo aumenti j e i, ma sapresti spiegarmi cos'è i?
Sono convinto che con i tu vuoi intendere la lettera i-esima di str.
Ma cosi non funziona :k:
Per leggere la lettera i-esima di str puoi modificare il tuo for in maniera simile al primo, oppure usare str come array e non come puntatore

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 19:34
Martedì, 12/01/2010
Questo è l'output
P.S. Per il luogo di nascita il prof ci ha detto di fare cosi non so perchè


ha allegato un file: out.jpg (27511 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:23
Mercoledì, 13/01/2010
Nel mio esempio i * erano al posto giusto, comunque. E i conta il numero delle consonanti (notare che conso++ è dopo i++ e conso=0 poco prima di i=0), quindi conso è ridondante.

Mi hai chiesto tu di saltare la seconda consonante, e così viene fuori il i!=1 e sparisce la "c".

Ultima modifica effettuata da Il Totem il 13/01/2010 alle 17:25
PM Quote