Problema con programa en C (no C++)
Publicado por Rafa (4 intervenciones) el 03/12/2005 19:35:09
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("\n\n");
//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 capicua\n\n", n);
return 0; //Se termina la ejecucion
}
else //Seguimos ejecutando el bucle hasta comparar el vector entero
{
printf("%i = %i\n", aux1, aux2);
aux1++;
aux2--;
}
}
//Si hemos salido del bucle significa que el numero es capicua
//Salida del resultado
printf("El numero %i ES capicua\n\n", n);
return 0;
}
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("\n\n");
//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 capicua\n\n", n);
return 0; //Se termina la ejecucion
}
else //Seguimos ejecutando el bucle hasta comparar el vector entero
{
printf("%i = %i\n", aux1, aux2);
aux1++;
aux2--;
}
}
//Si hemos salido del bucle significa que el numero es capicua
//Salida del resultado
printf("El numero %i ES capicua\n\n", n);
return 0;
}
Valora esta pregunta


0