u_boss (Normal User)
Newbie
Messaggi: 11
Iscritto: 19/05/2010
|
sisi chiarissimo!
grazie per l'intrvento
|
|
u_boss (Normal User)
Newbie
Messaggi: 11
Iscritto: 19/05/2010
|
Ragazzi ora ho complicato un pò le cose..
praticamente ora devo verificare se le parole immesse sono palindrome.
io ho fatto cosi:
Ricordo che le parole palindrome pe es. possono essere: anna,radar enne etc.
C'èun problema però..nella stampa come primo termine mi stampa qualcosa di strano...
se inserisco
ho un radar in tasca tasca
mi esce(in foto):
il codice è:
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #include <stdlib.h> #include <string.h> #define maxchar 21 #define maxparole 10 int reverse_lett(char word[maxchar]);/*funzione per invertire l'ordine delle lettere nella stringa*/ int main() { enum {SI,NO}; int i=0,j,ESCI,cont[maxparole]; ESCI=NO;/*verifica l'uscita dal ciclo*/ char parole[maxparole][maxchar],temp[maxchar]={'\0'}; printf("Inserire serie di parole\n"); while(ESCI==NO)/*ciclo while per riempire il vettore di stringhe*/ { scanf("%s",temp);/*variabile temporanea*/ if((strcmp(temp,parole[i-1])==0))/*confronto*/ ESCI=SI; else { strcpy(parole[i],temp);/*copia della stringa nel vettore*/ i++; } } for(j=i;j>=0;j--) /*ciclo per mandare alla funzione tutte le stringhe immesse*/ { cont[j]=reverse_lett(parole[j]);/*funzione che stampa e allo stesso tempo mi dice se una parole è palindroma*/ } for(j=0;j<=i;j++)/*for che verifica se è palindroma*/ { if(cont[j]==128) printf("la parola %s e' palindroma\n",parole[j]); } return EXIT_SUCCESS; } /*-----inizio funzione reverse------*/ int reverse_lett(char word[maxchar]) { char palin[maxchar];/*nuova stringa*/ int k,lung=strlen(word); int x=lung-1,compar; char temp; strcpy(palin,word); for(k=0;k<(lung/2);k++) { temp=palin[k]; palin[k]=palin[x]; palin[x]=temp; x--; } /*ora la stringa è rovesciata*/ printf("%s\n",palin);/*stampa*/ compar=strcmp(palin,word); if(compar==0)/*verifico se la stringa è palindroma confrontando l'originale con l'inversa*/ return compar+128;/*se è palindroma nel main avrò 128*/ else return EXIT_SUCCESS;/*altrimenti esco normalmente*/ }
|
|
|
Premoli (Normal User)
Pro
Messaggi: 108
Iscritto: 25/06/2009
|
hai di nuovo sbagliato nei cicli for del main(), sono concettualmente gli stessi errori che hai fatto prima, poi perché fai ritornare 128? cioè perché fai return compar+128?
|
|
u_boss (Normal User)
Newbie
Messaggi: 11
Iscritto: 19/05/2010
|
perchè se metto solamente return compar (che è uguale a zero) mi conta come palindromi tutti i valori e non ho capito perchè.
comunque potresti segnalarmi gli errori che faccio e spiegarmi perchè come ho fatto non funge correttamente?
|
|
u_boss (Normal User)
Newbie
Messaggi: 11
Iscritto: 19/05/2010
|
ok ho capito gli errori.
In pratica il ciclo for aumenta i di 1.Ma l'aumenta anche nel caso la parola è uguale, allora nel ciclo per stampare devo partire da i-1!
ma per il discorso dei problemi col return compar che mi sai dire?
lì non trovo nessuna spiegazione!
|
|
u_boss (Normal User)
Newbie
Messaggi: 11
Iscritto: 19/05/2010
|
--------RISOLTO-------------
Perchè in pratica EXIT_SUCCESS equivale ad 0!
|
|
Premoli (Normal User)
Pro
Messaggi: 108
Iscritto: 25/06/2009
|
Codice sorgente - presumibilmente Plain Text |
for(j=i;j>=0;j--) //sostituiscilo con for(j=0; j<i; j++)
for(j=0;j<=i;j++) //al posto di <= ci devi mettere <
|
Per l'if puoi fare semplicemente così:
Codice sorgente - presumibilmente C/C++ |
|
|
u_boss (Normal User)
Newbie
Messaggi: 11
Iscritto: 19/05/2010
|
per il primo for che mi hai fatto notare non posso fare cosi perchè è richiesto nell'esercizio espressamente di stampare le parole al contrario nell'ordine inverso in cui sono state inserite!
|
|