Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408

    [C] Parola palindroma (puntatori)

    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
    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.

    Il codice è questo:

    codice:
    #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;
                        }
                    }
                }
            }
        }
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Attenzione alle precedenze ... deve essere

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

    e non senza le parentesi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    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..

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    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

  6. #6
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    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
    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?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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?
    Cerca di essere più preciso ... un "tot" quanto vale? Quali parole? Esempio?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    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 è.

    codice:
    #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");
                }
            }
        }
    }

  9. #9
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    @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

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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
    Stai attento alle risposte ... non avrai letto il codice di ramy ... trovi la risposta (anche se quella palindroma=true; la metterei fuori dal while)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.