Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

di il
11 risposte

Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

Salve. Ho un problema con un esercizio. Qualcuno potrebbe correggerlo e dirmi dove sbaglio? Grazie

Traccia: Scrivere un programma in linguaggio C che riceve in ingresso una parola inserita da tastiera. Si consideri che la parola può contenere sia caratteri maiuscoli che caratteri minu scoli, e complessivamente al massimo 30 caratteri. Il programma deve svolgere le seguenti operazioni:
•visualizzare la parola inserita
•aggiornare la parola in modo che tutti i caratteri siano minuscoli. Il programma deve
visualizzare la parola ottenuta
•verificare se la parola è palindroma. Una parola è palindroma se può essere letta
indifferentemente da sinistra verso destra e da destra verso sinistra. Ad esempio, le
seguenti parole sono palindrome: otto, madam.
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>

#define N 30

main () {
	
	char str1[N], str2[N];
	int i, j, l, n;
	printf("Inserire la parola da analizzare\n");
	gets(str1);
	printf ("La parola da analizzare e %s\n", str1);
//conversione da maiuscoli a minuscoli	
	for( i=0; i<N ; i++ ) {
		str1[i] = tolower(str1[i]);
		
	}
	printf("Converto la parola in minuscolo...\n");
	sleep (3);
	printf("La parola convertita e' %s\n", str1);
	
	l=strlen(str1);
	n=0;
	strcpy(str2,str1);
	
	for (i=0; i<l; i++){
 			for (j=l-1; j>=0; j--){
				if (str1[i]==str2[j]){
					n++;
				}
    			else 
    				n--;
				
  	   		     
		 }
	}	
	if (n=l){
	
		printf("La parola e' palindroma");
	}
	else
		printf("La parola non e' palindroma");
}

Vi ringrazio in anticipo.

11 Risposte

  • Re: Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

    Nessuno prende un programma e lo corregge... Non funziona così...

    Devi dirlo cosa non va!
  • Re: Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

    Mi dice sempre che la parola è palindroma ma non capisco perchè. Ho pensato di introdurre n per fare il confronto con l perchè così mi dice se è palindroma o meno. Perchè sennò non saprei come fare.
  • Re: Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

    Dubito fortemente che chi ti ha dato l'esercizio si aspetti che tu usi tolower per convertire i caratteri in minuscolo. Immagino voglia che tu lo faccia con una tua funzione.

    Non usare mai la funzione gets per ricevere input da utente:era deprecata già nel C99 ed è stata eliminata completamente con il C11: usa la scanf o ancora meglio la fgets.

    Per quanto riguarda il controllo del palindromo, prova a ragionare un attimo su quelli che hai scritto. Ricopi la stringa inserita dall'utente in un a seconda striga e poi le confronti byte a byte...... come diavolo faranno a essere diverse?

    Per verificare che sia palindroma basta confrontare il primo carattere con l'ultimo , il secondo con il penultimo, ecc..

    Se avete già studiato i puntatori con due puntatori fai tutto con uno stupidissimo ciclo while.
  • Re: Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

    Molto semplicemente fai attenzione e correggi questa

    if (n=l){
  • Re: Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

    LPs ha scritto:


    Dubito fortemente che chi ti ha dato l'esercizio si aspetti che tu usi tolower per convertire i caratteri in minuscolo. Immagino voglia che tu lo faccia con una tua funzione.

    Non usare mai la funzione gets per ricevere input da utente:era deprecata già nel C99 ed è stata eliminata completamente con il C11: usa la scanf o ancora meglio la fgets.

    Per quanto riguarda il controllo del palindromo, prova a ragionare un attimo su quelli che hai scritto. Ricopi la stringa inserita dall'utente in un a seconda striga e poi le confronti byte a byte...... come diavolo faranno a essere diverse?

    Per verificare che sia palindroma basta confrontare il primo carattere con l'ultimo , il secondo con il penultimo, ecc..

    Se avete già studiato i puntatori con due puntatori fai tutto con uno stupidissimo ciclo while.

    Perchè dovrei creare una mia funzione quando c'è tolower? Cambia qualcosa nel programma?

    Sul libro (deitel) in quasi tutti gli esercizi che spiega c'è gets e non fgets o scanf. Visto che è deprecato quale libro "aggiornato" mi consiglieresti?

    Sto facendo le stringhe (argomento che precede i puntatori), quindi ancora i puntatori non so usarli.
  • Re: Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

    oregon ha scritto:


    Molto semplicemente fai attenzione e correggi questa

    if (n=l){
    Forse perchè ho scritto n=l invece di n==l. Ma il programma non funziona comunque e non riesco a capire il perchè.
    ho fatto questo ragionamento: uso n per implementarla ogni volta che l' i-esimo carattere della prima stringa sarà uguale al j-esimo carattere della seconda stringa. n così arriverà ad un numero che sicuramente sarà uguale alla lunghezza della stringa visto che scandisce e compara ogni singolo carattere. Perciò
    if n(==l)
    la parola sarà palindroma
    else
    la parola non sarà palindroma. Sbaglio nell'usare n e confrontarlo con l?
  • Re: Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

    Metti una printf per vedere l e n prima della if nei due casi e facci sapere
  • Re: Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

    Luke96 ha scritto:


    LPs ha scritto:


    Dubito fortemente che chi ti ha dato l'esercizio si aspetti che tu usi tolower per convertire i caratteri in minuscolo. Immagino voglia che tu lo faccia con una tua funzione.

    Non usare mai la funzione gets per ricevere input da utente:era deprecata già nel C99 ed è stata eliminata completamente con il C11: usa la scanf o ancora meglio la fgets.

    Per quanto riguarda il controllo del palindromo, prova a ragionare un attimo su quelli che hai scritto. Ricopi la stringa inserita dall'utente in un a seconda striga e poi le confronti byte a byte...... come diavolo faranno a essere diverse?

    Per verificare che sia palindroma basta confrontare il primo carattere con l'ultimo , il secondo con il penultimo, ecc..

    Se avete già studiato i puntatori con due puntatori fai tutto con uno stupidissimo ciclo while.

    Perchè dovrei creare una mia funzione quando c'è tolower? Cambia qualcosa nel programma?

    Sul libro (deitel) in quasi tutti gli esercizi che spiega c'è gets e non fgets o scanf. Visto che è deprecato quale libro "aggiornato" mi consiglieresti?

    Sto facendo le stringhe (argomento che precede i puntatori), quindi ancora i puntatori non so usarli.
    Tutto questo non fa che confermarmi ulteriormente il livello dell'insegnamento dell'informatica nella scuola italiana....

    QUI trovi una lista completadi buoni libri (attuali) che potresti comprare.

    In ogni caso il manuale on line è facile da consultare, basta una ricerca in google: scanf fgets

    Se non hai ancora fatto i puntatori usa semplicemente gli indici: str[0] deve essere uguale a str[str_len-1], str[1] uguale a str[str_len-2] etc....
  • Re: Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

    oregon ha scritto:


    Metti una printf per vedere l e n prima della if nei due casi e facci sapere

    purtroppo continuo a non capire. Ho provato con diverse parole:
    1. otto: n=0 e l=4;
    2.Madam: n=-7 e l=5;
    Non riesco a capire perchè. Ho fatto il ragionamento con carta e penna ed n non dovrebbe avere questo valore
  • Re: Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

    LPs ha scritto:


    Luke96 ha scritto:


    LPs ha scritto:


    Dubito fortemente che chi ti ha dato l'esercizio si aspetti che tu usi tolower per convertire i caratteri in minuscolo. Immagino voglia che tu lo faccia con una tua funzione.

    Non usare mai la funzione gets per ricevere input da utente:era deprecata già nel C99 ed è stata eliminata completamente con il C11: usa la scanf o ancora meglio la fgets.

    Per quanto riguarda il controllo del palindromo, prova a ragionare un attimo su quelli che hai scritto. Ricopi la stringa inserita dall'utente in un a seconda striga e poi le confronti byte a byte...... come diavolo faranno a essere diverse?

    Per verificare che sia palindroma basta confrontare il primo carattere con l'ultimo , il secondo con il penultimo, ecc..

    Se avete già studiato i puntatori con due puntatori fai tutto con uno stupidissimo ciclo while.

    Perchè dovrei creare una mia funzione quando c'è tolower? Cambia qualcosa nel programma?

    Sul libro (deitel) in quasi tutti gli esercizi che spiega c'è gets e non fgets o scanf. Visto che è deprecato quale libro "aggiornato" mi consiglieresti?

    Sto facendo le stringhe (argomento che precede i puntatori), quindi ancora i puntatori non so usarli.
    Tutto questo non fa che confermarmi ulteriormente il livello dell'insegnamento dell'informatica nella scuola italiana....

    QUI trovi una lista completadi buoni libri (attuali) che potresti comprare.

    In ogni caso il manuale on line è facile da consultare, basta una ricerca in google: scanf fgets

    Se non hai ancora fatto i puntatori usa semplicemente gli indici: str[0] deve essere uguale a str[str_len-1], str[1] uguale a str[str_len-2] etc....

    Quello che hai detto tu con gli indici non è riconducibile al mio doppio ciclo for?
    Comunque grazie per i libri e per i suggerimenti
  • Re: Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

    Direi di no. Puoi fare tutto con un for.

    Come ultima dritta di dico che il controllo è da fare fra str e str[str_len-1-i] .....
Devi accedere o registrarti per scrivere nel forum
11 risposte