Ir0nM4id3n84
23-11-2004, 10:04
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
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