Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda en funcion de Palindromos

Estas en el tema de Duda en funcion de Palindromos en el foro de C/C++ en Foros del Web. Bueno, lo que pasa es que tengo un programa que detecta si una cadena es o no un palindromo, sin embargo tengo 2 codigos, uno ...
  #1 (permalink)  
Antiguo 18/08/2012, 16:46
 
Fecha de Ingreso: febrero-2012
Mensajes: 56
Antigüedad: 12 años, 3 meses
Puntos: 1
Duda en funcion de Palindromos

Bueno, lo que pasa es que tengo un programa que detecta si una cadena es o no un palindromo, sin embargo tengo 2 codigos, uno si funciona(lo hizo un amigo) y el otro no(lo hice yo)
y segun mi logica deberia de funcionar el mio tambien, ya probe y probe e hice varios cambios, pero nada.

Bien, en primera un PALINDROMO es una palabra, oracion o frace que se lee exactamente igual si se escribe alreves, ejemplos: oso, somos, reconocer, anita lava la tina, etc.

ahora, lo primero que hice es que opte por quitarle los espacios a la cadena introducida, de ahi, recorria el arreglo de inicio a fin y de fin a inicio simultaneamente, comparando cada caracter (suponiendo que no hay acentos y todas son minusculas) y me queda el programita asi:

Código:
#include <stdio.h>

int fun (char cad[]) {

	int i,j,k=0,flag=0;
	char cadaux[50];

	i=0;
	j=0;
	while(cad[i]!='\0') {
		if(cad[i]!=' ') {
			cadaux[j]=cad[i];
			j++;
		}
		i++;
	}
	cadaux[j]='\0';
	i=0;
	while(i<=(j/2)&&flag==0) {
		for(k=j-1;k>=(j/2);k--)
			if(cadaux[i]!=cadaux[k])
				flag=1;
		i++;
	}
	if (flag==1)
		return 1;
	else return 0;
}



main () {
	char cade[50];

	printf("Dame una cadena sea o no Palindroma\n");
	gets(cade);
	if (!fun(cade))
		printf("Es PALINDROMO\n\n");
	else
		printf ("NO es un palindromo\n\n");
}



Ese de arriba es mi codigo, sin embargo la parte seleccionada si la cambias por el codigo de abajo si funciona, pero PORQUE?! si segun mi logica ambos hacen exactamente lo mismo

Código:
	cadaux[j] = '\0';
	k = j - 1;
	i = 0;
	while((k >= i) && flag == 0) {
		if(cadaux[i] != cadaux[k])
			flag = 1;
		i++;
		k--;
	}


me gustaria que me dijeran cual es el error logico en mi codigo o en mi funcion
MUCHAS GRACIAS
  #2 (permalink)  
Antiguo 18/08/2012, 18:25
Avatar de Doommarine_Maxi  
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 2 meses
Puntos: 8
Respuesta: Duda en funcion de Palindromos

El problema en el primer codigo es que en i siempre va a ser igual durante el for, por que lo incrementas solamete durante el While, pero no durante el bucle for, entonces estas siempre comparando cadux[k] con cadux[i], cuando i siempre es constante y k esta variando.

Código C++:
Ver original
  1. while(i<=(j/2)&&flag==0) {
  2.         for(k=j-1;k>=(j/2);k--)
  3.             if(cadaux[i]!=cadaux[k]) /*Error: cadaux[1] != cadaux[5], cadaux[1] != cadaux[4], etc...*/
  4.                 flag=1;
  5.         i++; /*Aca esta el error, estas incrementando la variable
  6.             solamente durante el while, pero en el for i siempre es igual*/
  7.     }

Yo con este código lo pude hacer andar tranquilamente, sin necesidad de usar un bucle dentro de otro.
Código C++:
Ver original
  1. i=0;
  2. for(k=j-1;k>=(j/2);k--)
  3. {
  4.     if(cadaux[i++]!=cadaux[k])
  5.     {
  6.         flag=1;
  7.         break;
  8.     }
  9. }

Es una pena, por que realizaste un código muy bonito, pero no te funcionaba solamente por ese detalle mínimo.

Última edición por Doommarine_Maxi; 18/08/2012 a las 18:31 Razón: Agregar el break
  #3 (permalink)  
Antiguo 18/08/2012, 18:58
 
Fecha de Ingreso: febrero-2012
Mensajes: 56
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Duda en funcion de Palindromos

muchas gracias amigo, tenia esa muy grande duda y no veia el error, y cuando me dijiste eso que "i" no cambiaba durante el ciclo for me hizo sentir como un chavito que apenas empieza ='( pero deberas gracias, ahora bien, me surgio una pequeña duda:

en el renglon:
if(cadaux[i++]!=cadaux[k])

casi eso nunca lo suelo usar eso asi, y tengo una remota idea, me gustaria me dijeras si estoy en lo cierto o me lo aclararas

Tengo entendido que al llegar a esa parte va a comparar cadaux[0] con cadaux[j] y al terminar la comparacion le sumara +1 a i, es cierto, o me equivoco?

supongo que si estoy yo en lo cierto, el "++" es el que menos jerarquia tiene, no?

otra duda, como le haces para que te quede el codigo asi como tu lo pusiste? xD lo que pasa es que por aqui luego publico mis codigos, pero nunca he sabido como hacerle asi

muchas gracias deberas
MIL GRACIAS

Saludos
  #4 (permalink)  
Antiguo 18/08/2012, 19:09
Avatar de Doommarine_Maxi  
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 2 meses
Puntos: 8
Respuesta: Duda en funcion de Palindromos

Gracias a ti :D

Si, estas en lo cierto i++ incrementa para luego que se realiza la comparación (caso contrario si hubiera puesto ++i; en ese caso se incrementaría antes de la comparación)
El codigo quedo asi por que utilice el Highlight de C++ (Arriba a la derecha)

PD: no te sientas así, todos cometen errores y de todo se aprende. A mi me pasa siempre, veo a sujetos como sam90 u otros usuarios veteranos aquí, la verdad hay gente muy buena y que sabe mucho en este foro, yo aquí todavía soy un novato, y lo seré durante mucho tiempo, pero al igual que tu, me gusta progresar.
Y tu vas a ir muy bien.

Última edición por Doommarine_Maxi; 18/08/2012 a las 19:19 Razón: Agregar info

Etiquetas: funcion, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:41.