Hola.. tengo un problema de programación en lenguaje C++ Donde me piden que programe:
1- Generación de un número capicúa a partir de un número ingresado, salvo que ya sea capicúa. Indicando la cantidad de pasos realizados para obtener el capicúa.
2- Determinación, si corresponde, del número cuyo cuadrado sea igual a la suma de los dígitos del valor capicúa.
3- Presentación de los valores capicúa comprendidos en un rango especificado.
No se como programarlo con modularidad..
AYUDIITAAA!!!
Hola Ariana.
Aunque se trate de programación, este problema tiene varias componentes de índole matemática.
Así que hay que razonar primero en papel a ver lo que significa cada cosa.
Hay que interpretar cada detalle del enunciado con cuidado.
1.
Habla de número "capicúa". Como sabrás, un mismo número se puede representar de distintas maneras, según qué base se use. Los humanos usamos base diez, pero las computadoras internamente usan base 2 (dígitos 0 y 1 solamente). Así que para detectar que un número capicúa, hay que calcular de algún modo los dígitos en base diez del número, y quizás almacenarlos en alguna parte, por ejemplo en un array (vector) de tipo "int" (también es válido usar el tipo de datos entero que ocupe menos espacio en memoria, como "char").
Luego habría que recorrer este array desde sus extremos hacia el centro, iterando, mediante una estructura repetitiva tipo "for" o "while", para comprobar si los dígitos de cada extremo van conicidiendo. Por ejemplo, Si los dígitos son: 1, 3, 6, 3, 1, hay que chequear que los "1" de las puntas coinciden, luego los "3" de más adentro, y así hasta llegar al dígito central.
Pueden usarse criterios matemáticos más prácticos, pero no sé si es parte de lo que se admite que podés usar en el problema.
Existe la posibilidad de comparar los dígitos directamente, sin necesidad de guardarlos en un array.
Pero hay que calcular el número de dígitos previamente (usando por ejemplo la función log10 de <math>),
y luego trabajar cuidadosamente con divisiones, restos y acumuladores.
2.
El segundo punto del problema confirma lo que te dije en el punto anterior: quien te puso ese problema tiene la intención de que calcules cada dígito (de base diez) del número, y los almacenes en algún array, ya que así los tendrás memorizados para poder luego operar con ellos. Por ejemplo, para sumarlos, como te pide en el segundo punto.
Esa suma quedaría guardada en una variable de tipo acumulador.
A continuación, basta calcular la raíz cuadrada de esa variable que tiene almacenada la "suma".
Podés calcular la raíz cuadrada de un número usando la función sqrt() de el archivo de cabecera <math>.
Si la intención es que no se use un array, entonces esta suma de dígitos tendrás que hacerla al mismo tiempo que los vas analizando en el punto 1, así que este punto 2 no iría aparte. Habría que agregar la variable acumuladora suma en algún lugar apropiado del algoritmo del punto 1.
Lo que no entiendo es el significado de la frase "si corresponde". Quizás se refiere a que solamente muestres el resultado de la raíz cuadrada si es que te da un número entero.
Es decir, el término "número" es más general que el de "número entero", porque con "número" nos podemos referir también a números con parte fraccionaria.
Pero es posible que la intención sea la de considerar sólo números enteros.
En ese caso, podrías hacer un cast a un tipo de datos entero, y así comparar si la parte entera del número obtenido coincide con el número mismo:
double raiz = sqrt(suma);
if ( raiz == (int) raiz ) { /* OK */ }
3.
Para el tercer punto habría que llevar a cabo un procedimiento más sistemático,
ya que pide generar una lista de números capicúas.
Ese es un problema aparte.
Una posibilidad sería forzar las cosas, aprovechando la "modularidad".
Es decir, si hacés una función que resuelva el punto 1, entonces recorrerías cada número en el rango especificado,
y verificarías si es capicúa o no llamando a dicha función.
Otra posibilidad sería aplicar algún criterio aritmética para que el algoritmo vaya más rápido, pero eso no lo explico, porque parece que el enunciado pretende otra cosa.
La función del punto 1 tendría este prototipo:
bool es_capicua (int N) {
// Sentencias ......
// Sentencias ......
}
La lógica interna de la función es lo que tenés que pensar.