PDA

Visualizza la versione completa : [C] Parola palindroma (puntatori)


goatboy
17-03-2012, 11:25
Salve,
ieri all'Universit il Prof ci ha fatto fare un esercizio dove dovevamo verificare se una parola inserita dall'utente era palindroma. L'esercizio andava svolto con i puntatori. Nel provarlo a casa per non funziona. Non riesco a capire quale errore ho fatto. L'ho ricontrollato varie volte, riga per riga, e tra l'altro non mi vengono dati errori o warnings, quindi non ho indizi :dh:
Il programma mi chiede di digitare la parola, io la scrivo e premo invio. Il programma mi dice la lunghezza della parola, ma poi mi richiede di digitare una parola, quindi mi salta tutto il controllo if-else, e non capisco perch. Qualcuno sa aiutarmi?

EDIT: ho modificato "if(*(punt_char+i)==*(punt_char+j))" in "if(*punt_char+i==*punt_char+j)" e ora mi fa il controllo, soltanto che dice sempre "La parola non palindroma" anche se inserisco "anna" o altre parole palindrome. :dh:

Il codice questo:



#include <stdio.h>
#define DIM 100

int main(){
char *punt_char;
char parola[DIM];
char c;
int lung, flag=0, i, j;
while(!flag){
punt_char=parola;
lung=0;
printf("Digita la parola: ");
while(((c=getchar())!=' ' && c!='\n')){
*(punt_char+lung)=c;
lung++;
}
*(punt_char+lung)='\0';
printf("La parola ha lunghezza %d caratteri\n", lung);
if(lung==0){
flag=1;
printf("Fine Programma\n");
}else{
if(lung==1){
printf("Carattere Isolato\n");
}else{
i=0;
j=lung-1;
while(i<j){
if(*punt_char+i==*punt_char+j){
i++;
j--;
}else{
printf("La parola non e' palindroma\n");
break;
}
}
}
}
}
}

oregon
17-03-2012, 12:01
Attenzione alle precedenze ... deve essere

if(*(punt_char+i)==*(punt_char+j)){

e non senza le parentesi ...

goatboy
17-03-2012, 12:08
Originariamente inviato da oregon
Attenzione alle precedenze ... deve essere

if(*(punt_char+i)==*(punt_char+j)){

e non senza le parentesi ...

Le avevo gi messe, ma il programma mi dava la lunghezza della parola e poi mi richiedeva di inserirne un'altra, senza dirmi se era o no palindroma. Poi le ho tolte, e mi diceva sempre che non era palindroma. In ogni caso ora le ho reinserite, ma il problema rimane.. :dh:

oregon
17-03-2012, 12:13
Scusa ... ma non vedo il problema ...

Hai scritto tu quel codice? Se l'hai scritto tu ti sarai reso conto che da nessuna parte il programma dice che la parola palindroma ... quindi, se cos, non avrai nulla a video ...

ardito86
17-03-2012, 12:16
Originariamente inviato da goatboy
Le avevo gi messe, ma il programma mi dava la lunghezza della parola e poi mi richiedeva di inserirne un'altra, senza dirmi se era o no palindroma. Poi le ho tolte, e mi diceva sempre che non era palindroma.
Nemmeno se la parola non era palindroma? In effetti se la parola palindroma normale che non ti compare nulla....finisce quell'if e ritorna al while principale, senza visualizzare nulla

goatboy
17-03-2012, 12:18
Originariamente inviato da oregon
Scusa ... ma non vedo il problema ...

Hai scritto tu quel codice? Se l'hai scritto tu ti sarai reso conto che da nessuna parte il programma dice che la parola palindroma ... quindi, se cos, non avrai nulla a video ...
Hai ragione, ho aggiunto il printf fuori dall'ultimo while, il codice lo abbiamo scritto a lezione durante un'esercitazione e tra il ricopiare e le correzioni che faceva il Prof mi deve essere sfuggita la cosa pi importante, scusami :shy:
In ogni caso ho provato a fare dei test, se inserisco "anna" mi dice che palindroma, se inserisco parole tipo "casa" mi dice che non palindroma. Dopo un tot di tentativi, ad ogni parola che inserisco mi esce scritto sia che palindroma sia che non lo . Come mai? :confused:

oregon
17-03-2012, 12:20
Originariamente inviato da goatboy Dopo un tot di tentativi, ad ogni parola che inserisco mi esce scritto sia che palindroma sia che non lo . Come mai? :confused:

Cerca di essere pi preciso ... un "tot" quanto vale? Quali parole? Esempio?

ramy89
17-03-2012, 12:22
Originariamente inviato da goatboy
Le avevo gi messe, ma il programma mi dava la lunghezza della parola e poi mi richiedeva di inserirne un'altra, senza dirmi se era o no palindroma.

Questo perch se ci guardi bene, se la stringa palindroma non stampa niente: non hai previsto alcuna stampa.Stampi solo "non palindroma" se non lo .



#include <stdio.h>
#include <stdbool.h>
#define DIM 100

int main(){
char *punt_char;
char parola[DIM];
bool palindroma=true;
char c;
int lung, flag=0, i, j;
while(!flag){
punt_char=parola;
lung=0;
printf("Digita la parola: ");
while(((c=getchar())!=' ' && c!='\n')){
*(punt_char+lung)=c;
lung++;
}
*(punt_char+lung)='\0';
printf("La parola ha lunghezza %d caratteri\n", lung);
if(lung==0){
flag=1;
printf("Fine Programma\n");
}else{
if(lung==1){
printf("Carattere Isolato\n");
}else{
i=0;
j=lung-1;
while(i<j)
{
palindroma=true;
if(*(punt_char+i)==*(punt_char+j)){
i++;
j--;
}else{
printf("La parola non e' palindroma\n");
palindroma=false;
break;
}
}
if(palindroma)
printf("La stringa palindroma\n");
}
}
}
}

goatboy
17-03-2012, 12:25
@ramy: se noti nel mio ultimo post me ne sono accorto e ho inserito il printf.
@oregon: no sbagliavo io a scrivere il printf, praticamente lo avevo inserito alla chiusura dell'ultimo else e quindi se non era palindroma mi stampava tutte e due le scritte :cry:

oregon
17-03-2012, 12:27
Originariamente inviato da goatboy
@ramy: se noti nel mio ultimo post me ne sono accorto e ho inserito il printf.
@oregon: no sbagliavo io a scrivere il printf, praticamente lo avevo inserito alla chiusura dell'ultimo else e quindi se non era palindroma mi stampava tutte e due le scritte :cry:

Stai attento alle risposte ... non avrai letto il codice di ramy ... trovi la risposta (anche se quella palindroma=true; la metterei fuori dal while)

Loading