Verificare se la parola sia palindroma o meno mediante una funzione

di Anonimizzato29959 il
10 risposte
Salve... Mi da errore nel momento in cui assegno la funzione alla variabile parola affinché mi dia il risultato se sia palindroma o meno...


/*Scrivere un programma che utilizza una funzione per verificare se una parola
data in input dall’utente è palindroma.*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LENGTH 50

/*Definizione del prototipo*/
int parola_Palindroma(char s[],int i,int l);

int main() {
    char ch,S[LENGTH+1];
    int j=0,length;
    
    printf("Inserire una stringa, massimo di 49 caratteri, e premere INVIO: ");
    while((j<LENGTH)&&((ch=getchar())!='\n')){
        S[j]=ch;
        j++;
    }
    S[j]='\0';
    while(getchar()!='\n');
    
    length=strlen(S);
    
        printf("\n%d\n\n", parola_Palindroma(S, j, length));
    
    return 0;
}

int parola_Palindroma(char s[],int i, int l){
    
    for(i=0;i<l/2 && s[i]==s[l-i-1];i++);
    
    if(s[i]!=s[l]){
        printf("La parola inserita non e' palindroma\n");
        return 0;
    }
    if (i>=1){
        printf("La parola inserita e' palindroma\n");
        return 1;
    }
}

10 Risposte

  • La variabile i non l'hai inizializzata a zero.

    ... ma poi perché non usi le funzioni standard tipo scanf()? Se poi più avanti vuoi provare a farle da solo quando sarai più esperto ok, ma perché non utilizzarle ora?
  • Ho aggiornato il thread poichè pur inserendo una parola palindroma me la da sempre non palindroma :/
  • Spiega...
    
    
    inserisci una frase o una parola : Onorarono
    onorarono l=9
    1
    
    
    Il programma restituisce l=9 la lunghezza della parola.
    1 la parola è palindroma, altrimenti 0.

    Oppure hai un tuo nuovo codice corretto?
  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define LENGTH 50
    
    /*Definizione del prototipo*/
    int parola_Palindroma(char s[],int i,int l);
    
    int main() {
        char ch,S[LENGTH+1];
        int j=0,length;
        
        printf("Inserire una stringa, massimo di 49 caratteri, e premere INVIO: ");
        while((j<LENGTH)&&((ch=getchar())!='\n')){
            S[j]=ch;
            j++;
        }
        S[j]='\0';
        while(getchar()!='\n');
        
        length=strlen(S);
        
            printf("\n%d\n\n", parola_Palindroma(S, j, length));
        
        return 0;
    }
    
    int parola_Palindroma(char s[],int i, int l){
        
        for(i=0;i<l/2 && s[i]==s[l-i-1];i++);
        
        if(s[i]!=s[l]){
            printf("La parola inserita non e' palindroma\n");
            return 0;
        }
        if (i>=1){
            printf("La parola inserita e' palindroma\n");
            return 1;
        }
    }
    
  • Ecco il codice...
  • Il codice restituisce sempre la parola non e' palindroma ma non ne capisco il motivo
  • Ma perché tutti quei parametri per la funzione? Basta la stringa da esaminare?
    E quei controlli a cosa servono? Hai una spiegazione?

    Infine, la funzione deve solo restituire 1 o 0 e non visualizzare frasi (questo vale per tutte le funzioni di questo tipo).
    
    int parola_Palindroma(char s[])
    {
    	int i, l = strlen(s);
    
    	for (i = 0; i<l / 2 && s[i] == s[l - i - 1]; i++);
    
    	if (i >= l / 2)
    		return 1;
    	else
    		return 0;
    }
    
  • Ti ringrazio infinitamente del tuo aiuto oregon Il codice funziona... Sono un disastro con le funzioni il mio cervello va in tilt :/
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define LENGTH 50
    
    /*Definizione del prototipo*/
    int parola_Palindroma(char s[]);
    
    int main() {
        char ch,S[LENGTH+1];
        int j=0,length;
        
        printf("Inserire una stringa, massimo di 49 caratteri, e premere INVIO: ");
        while((j<LENGTH)&&((ch=getchar())!='\n')){
            S[j]=ch;
            j++;
        }
        S[j]='\0';
        while(getchar()!='\n');
        
        int parola= parola_Palindroma(S);
        
        if(parola==1){
            printf("La parola inserita e' palindroma\n");
        } else printf("La parola inserita non e' palindroma\n");
    
        return 0;
    }
    
    int parola_Palindroma(char s[]){
        int i,l=strlen(s);
        
        for(i=0;i<l/2 && s[i]==s[l-i-1];i++);
        
        if(i>=l/2){
            return 1;
        } else 
            return 0;
        }
    
  • Non è una questione di funzioni, devi solamente ragionare un po' di più su tutti i singoli passi che il programma deve svolgere, a prescindere dal linguaggio di programmazione.
Devi accedere o registrarti per scrivere nel forum
10 risposte