Introducción
En este laboratorio, aprenderás a escribir un programa en C para comprobar si un número dado es perfecto. El programa leerá un entero del usuario, calculará la suma de sus divisores propios y determinará si el número es perfecto o no. El laboratorio cubre conceptos fundamentales de teoría de números y matemáticas discretas, proporcionando una aplicación práctica de estos principios en la programación en C.
El programa primero solicita al usuario que introduzca un entero positivo, luego calcula la suma de los divisores propios del número (es decir, todos los enteros positivos menores que el número que dividen al número exactamente). Finalmente, el programa compara la suma de los divisores propios con el número original e imprime el resultado, indicando si el número es perfecto o no.
Leer un Entero
En este paso, aprenderás a leer una entrada de entero en C para comprobar números perfectos. Crearemos un programa en C que permita a los usuarios introducir un número para analizar.
Primero, creemos un nuevo archivo C en el directorio del proyecto:
cd ~/project
nano perfect_number.c
Ahora, añade el siguiente código al archivo:
#include <stdio.h>
int main() {
int number;
// Solicitar al usuario que introduzca un entero positivo para comprobar si es un número perfecto:
printf("Introduce un entero positivo para comprobar si es un número perfecto: ");
scanf("%d", &number);
// Imprimir el número introducido para verificar la entrada
printf("Has introducido: %d\n", number);
return 0;
}
Ejemplo de salida:
Introduce un entero positivo para comprobar si es un número perfecto: 28
Has introducido: 28
Desglose del código:
#include <stdio.h>incluye la biblioteca de entrada/salida estándarscanf("%d", &number)lee una entrada de entero del usuarioprintf()se utiliza para solicitar la entrada y mostrar el número introducido.
Compila y ejecuta el programa:
gcc perfect_number.c -o perfect_number
./perfect_number
Sumar Divisores Propios y Comparar con el Número
En este paso, modificarás el programa C anterior para calcular la suma de los divisores propios y determinar si el número es perfecto.
Abre el archivo existente y actualiza el código:
nano ~/project/perfect_number.c
Reemplaza el código anterior con:
#include <stdio.h>
int main() {
int number, sum = 0;
// Solicitar al usuario que introduzca un entero positivo para comprobar si es un número perfecto:
printf("Introduce un entero positivo para comprobar si es un número perfecto: ");
scanf("%d", &number);
// Calcular la suma de los divisores propios
for (int i = 1; i < number; i++) {
if (number % i == 0) {
sum += i;
}
}
// Comprobar si el número es perfecto
if (sum == number) {
printf("%d es un número perfecto!\n", number);
} else {
printf("%d no es un número perfecto.\n", number);
}
return 0;
}
Compila y ejecuta el programa:
gcc perfect_number.c -o perfect_number
./perfect_number
Ejemplo de salida para un número perfecto:
Introduce un entero positivo para comprobar si es un número perfecto: 28
28 es un número perfecto!
Ejemplo de salida para un número no perfecto:
Introduce un entero positivo para comprobar si es un número perfecto: 12
12 no es un número perfecto.
Conceptos clave explicados:
- El bucle
foritera a través de los números del 1 alnumber - 1 number % i == 0comprueba siies un divisor del númerosum += isuma todos los divisores propios- Un número perfecto es un entero positivo igual a la suma de sus divisores propios
Imprimir el Resultado
En este paso final, mejorarás el programa para proporcionar una salida más detallada sobre el número perfecto, incluyendo sus divisores y la suma.
Abre el archivo y actualiza el código:
nano ~/project/perfect_number.c
Reemplaza el código anterior con:
#include <stdio.h>
int main() {
int number, sum = 0;
// Solicitar al usuario que introduzca un entero positivo para comprobar si es un número perfecto:
printf("Introduce un entero positivo para comprobar si es un número perfecto: ");
scanf("%d", &number);
// Imprimir encabezado para los divisores
printf("Divisores propios de %d: ", number);
// Calcular la suma de los divisores propios e imprimirlos
for (int i = 1; i < number; i++) {
if (number % i == 0) {
printf("%d ", i);
sum += i;
}
}
// Imprimir el resultado detallado
printf("\n\nSuma de los divisores propios: %d", sum);
// Comprobar e imprimir el estado del número perfecto
if (sum == number) {
printf("\n%d es un NÚMERO PERFECTO!\n", number);
} else {
printf("\n%d no es un número perfecto.\n", number);
}
return 0;
}
Compila y ejecuta el programa:
gcc perfect_number.c -o perfect_number
./perfect_number
Ejemplo de salida para un número perfecto (28):
Introduce un entero positivo para comprobar si es un número perfecto: 28
Divisores propios de 28: 1 2 4 7 14
Suma de los divisores propios: 28
28 es un NÚMERO PERFECTO!
Ejemplo de salida para un número no perfecto (12):
Introduce un entero positivo para comprobar si es un número perfecto: 12
Divisores propios de 12: 1 2 3 4 6
Suma de los divisores propios: 16
12 no es un número perfecto.
Mejoras clave:
- Ahora imprime todos los divisores propios.
- Muestra la suma de los divisores propios.
- Proporciona una salida clara y formateada.
- Mantiene la lógica central de la detección de números perfectos.
Resumen
En este laboratorio, aprenderás a leer una entrada de entero en C y determinar si un número es perfecto. Primero, crearás un programa en C que solicita al usuario que introduzca un entero positivo. Luego, calcularás la suma de los divisores propios del número y la compararás con el número original para comprobar si es un número perfecto. Finalmente, imprimirás el resultado en la consola.
Los puntos clave de aprendizaje de este laboratorio son: leer la entrada de un entero usando scanf(), calcular la suma de los divisores propios usando un bucle for y comparar la suma con el número original para determinar si es un número perfecto.



