Ayuda con un programa

rafabkn
03 de Diciembre del 2005
Hola tengo un problema con el siguiente programa que intenta resolver si un numero almacenado previamente en una variable es capicua o no. Os dejo el codigo porque yo no consigo ver el fallo. Gracias por adelantado.

CODIGO FUENTE:


//Autor: Rafael Enriquez Herrador
//Asignatura: Metodologia y Tecnologia de la Programacion
//Titulo: Practica 2, Ejercicio4
//Fecha: 1-12-2005
//Version: 0.1

/* Programa que determine si un numero es capicua o no */

#include <stdio.h>
#include <stdlib.h>

/* La manera mas rapida y sencilla a mi parecer es almacenar el numero, digito a digito, en
un array (vector) para poder comparar los digitos mas facilmente y determinar si el numero es capicua */

//Funcion main()

int main()
{

//Declaracion de variables

int num[100]; //La longitud del vector es suficiente, no creo que encontremos numeros
//de mas de 100 digitos

long int n, n_temp;
int aux1, aux2, i;

i = 0;
aux1 = 0;

//Introduccion de datos

printf("Introduzca el numero a analizar si es capicua o no: ");
scanf("%i", &n);
printf("n");

n_temp = n;

//Copiamos el numero digito a digito dentro del vector con un contador que nos diga la longitud
//del numero (cuantos digitos posee)

do
{
num[aux1] = n_temp%10; //El numero se copia en un vector al reves de como es,
n_temp = n_temp/10; //pero eso no influye para estudiar si es capicua,
aux1++; //y la variable i nos da la ultima posicion que se ha llenado en el array.
i++;
}
while (n_temp != 0); //Con el do..while nos aseguramos de que se copien los numeros con un solo digito

//num[aux1] = n_temp; //Debemos copiar el ultimo digito fuera del bucle porque la condicion
//de finalizacion no lo permite

//Vamos a escribir el vector por pantalla

aux1 = 0;

while (aux1 != i)
{
printf("%i ", num[aux1]);
aux1++;
}

printf("nn");

//Comparamos los digitos en el vector para ver si coinciden los extremos y probar que n es capicua

aux1 = 0;
aux2 = i-1;

while ((aux1 != aux2) || ((aux1+1) != (aux2)))
{
if (num[aux1] != num[aux2]) //Si hay dos digitos simetricos distintos el numero no es capicua
{
printf("El numero %i NO ES capicuann", n);
return 0; //Se termina la ejecucion
}
else //Seguimos ejecutando el bucle hasta comparar el vector entero
{
printf("%i = %in", aux1, aux2);
aux1++;
aux2--;
}
}

//Si hemos salido del bucle significa que el numero es capicua

//Salida del resultado

printf("El numero %i ES capicuann", n);

return 0;

}

rafa_bkn
03 de Diciembre del 2005
Gracias a todo el que haya pensado en el problema. Al final he hayado la solucion, solo habia que poner como condicion de finalizacion del segundo while

((aux1!=aux2)&&((aux1+1)!=aux2))

gracias por todo, no obstante tengo mas dudas con programas escritos en C que ire exponiendo en el foro.