|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Nov 2004
Messaggi: 124
|
Problema con esercizio in C sulle parole palindrome.
Ciao,
in classe ho preso gli appunti un po' a cavolo e mi sono ritrovato questo esercizio che però non funziona (anche se lo compila) e in più ho qualche dubbietto....potete darmi una mano per favore? #include <stdio.h> #include <stdlib.h> #define M 100 int main(void){ int a=0, k=0, palindroma; char V[M+1] = {0}; // Imposto a 0 tutti gli elementi di un vettore char di 100+1 elementi (1 per il char terminatore) printf("Inserire una stringa di al più 100 caratteri: \n"); while(a < M && V[a] != '\n'){ // Finchè non ha occupato tutto il vettore e finchè non è stato premuto invio V[a] = getchar(); // Memorizza il carattere in input nella posizione corrente del vettore a++; // Incrementa la posizione corrente del vettore } if(V[a] == '\n'){ // Se l'ultimo elemento del vettore è il carattere newline a = a-1; // decrementa la variabile a per posizionarti all'ultimo carattere effettivo nel vettore } palindroma = 1; while(k < (a+1)/2 && palindroma == 1){ // Finchè l'indice di scorrimento k non è arrivato a metà parola e palindroma è 1 if(V[k] != (a-k)){ // Se i caratteri puntati dai 2 indici sono diversi imposta palindroma a 0 palindroma = 0; } k++; } if(palindroma == 1){ printf("La stringa immessa è PALINDROMA"); } else{ printf("La stringa immessa NON è PALINDROMA"); } return 0; } Le cose che mi lasciano particolarmente perplesso sono queste: 1) while(a < M && V[a] != '\n'){ Perchè and ? non dovrebbe bastare che una delle due condizioni sia falsa per far terminare il ciclo per immettere gli elementi del vettore? 2) Ma la getchat si usa sempre dentro i cicli per fargli prendere più caratteri o può essere usata anche come la scanf? Grazie |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Intanto, comincia a far funzionare il programma; ci sono 3 errori:
- Nella while, V[a]!='\n' viene effettuato su un "a" incrementato (v. a++ dentro il blocco while), quindi non punta all'ultimo carattere letto, ma al primo libero (da leggere) - a = a-1 va eseguito sempre - V[k] != (a-k) è ovviamente sbagliato Codice:
--- pali.c.org 2004-11-23 11:31:19.000000000 +0100 +++ pali.c 2004-11-23 11:36:12.000000000 +0100 @@ -9,18 +9,17 @@ printf("Inserire una stringa di al più 100 caratteri: \n"); - while(a < M && V[a] != '\n'){ // Finchè non ha occupato tutto il vettore e finchè non è stato premuto invio + while(a < M){ // Finchè non ha occupato tutto il vettore e finchè non è stato premuto invio V[a] = getchar(); // Memorizza il carattere in input nella posizione corrente del vettore + if(V[a]=='\n') break; a++; // Incrementa la posizione corrente del vettore } - if(V[a] == '\n'){ // Se l'ultimo elemento del vettore è il carattere newline a = a-1; // decrementa la variabile a per posizionarti all'ultimo carattere effettivo nel vettore - } palindroma = 1; while(k < (a+1)/2 && palindroma == 1){ // Finchè l'indice di scorrimento k non è arrivato a metà parola e palindroma è 1 - if(V[k] != (a-k)){ // Se i caratteri puntati dai 2 indici sono diversi imposta palindroma a 0 + if(V[k] != V[a-k]){ // Se i caratteri puntati dai 2 indici sono diversi imposta palindroma a 0 palindroma = 0; } k++;
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:03.