Introducción
Números pares
Números perfectos
Números invertidos
Múltiplos de 3
Suma de sucesores
Referencias
En el presente documento se muestra un ejercicio realizado con el método top-Down o el método descendente, con la finalidad de aplicar su filosofía de divide y veceras, con base a eso se pudo realizar el ejercicio dividiéndolo en varios módulos para hacer más sencillo su elaboración.
Dentro de la actividad se presenta los análisis, sus algoritmos, pseudocódigo, pruebas de escritorio de cada uno de los módulos así como también el diagrama de flujo de modulo donde se muestra la división que se le hiso al ejercicio.
Instrucciones
Lee detalladamente y analiza el siguiente problema:
Un estudiante decide crear una calculadora para resolver diversos problemas que implican el cálculo de:
- Números pares e impares: El programa pedirá al usuario diez números enteros y evaluará si este es par o impar. Los números pares son aquellos números enteros múltiplos de 2.
- Números perfectos: El programa mostrará en pantalla los primeros 1000 Números perfectos de forma automática. Un número perfecto es un número natural que es igual a la suma de sus divisores propios (todos sus divisores excepto el propio número).
- Números invertidos: el programa pedirá al usuario un entero de cuatro dígitos y mostrará en pantalla el número con los dígitos en orden inverso
- Múltiplos de 3: el programa solicitará al usuario un entero y mostrará todos los múltiplos de 3 del número, de lo contrario mostrará un mensaje indicando no es múltiplo de 3.
- Suma de sucesores: dado un número N, se mostrará como resultado la suma de todos sus sucesores.
Para este caso utilizaremos el método top-down, dividiendo el programa en 5 operaciones distintas: números pares e impares, números perfectos, números invertido, múltiplos de 3 y suma de sucesores.
Diagrama de modulo
Algoritmo
Modulo principal
- Inicio
- Leer opción
- Llamar [Números pares]
- Llamar [Números perfectos]
- Llamar [Números invertidos]
- Llamar [Múltiplos de 3]
- Llamar [Suma de sucesores]
- Fin
Números pares
- Inicio
- Declarar variables de entrada “n” y de almacenamiento “i1”
- Utilizar la función for i1<n hasta 10
- Leer el valor del número ingresado
- Dividir el número en 2 y calcular su residuo
- Si el residuo es 0
- Imprimir el número es par
- Si no es 0
- Imprimir el número es impar
- Fin
Números perfectos
- Inicio
- Declarar 2 variables, una de almacenamiento “i” y salida “resultado”
- Utilizar la función for i<2 hasta 1000
- Calcular los números perfectos con la siguiente formula 2 i-1 (2 i – 1)
- Imprimir resultado
- Fin
Números invertidos
- Inicio
- Declarar variables, centenas, decenas, millar, unidades, residuoc, residuom, nume
- Leer número (nume)
- “millar” = “nume”/1000
- “residuom” = residuo de “1000”
- “centenas” = “residuom”/100
- “residuoc” = residuo de “residuom”
- “decenas” = “residuoc”/10
- “unidades” = residuo de “residuoc”
- Si el número (nume) es menor a 4 dígitos
- Imprimir “unidades”, “decenas”, “centenas”, “millar”
- Si no
- Imprimir por favor escriba un numero de 4 dígitos
- Fin si
- fin
Múltiplos de 3
- Inicio
- Declarar variables, ent, i3, múltiplos
- Leer numero
- Si el numero dividido entre 3 es igual a 0 su residuo
- Dividir el numero entre 3
- Utilizar la función for i3 <1 hasta el valor obtenido de la división
- Realizar la operación 3 más lo acumulado de cada ciclo for
- Imprimir los múltiplos
- Si no es 0 el residuo
- Imprimir no es múltiplo de 3
- Fin si
- Fin
Suma de sucesores
- Inicio
- Declarar variables e, num
- Leer numero
- Utilizar la función for e<1 hasta numero
- Realizar la operación 1 más lo acumulado de cada ciclo
- Imprimir los resultados
- Fin
Pseudocódigo
Números pares
Inicio
Definir n como real
Escribir “Tecle los números que dese conocer si son pares o impares”
Para i1 <-n hasta 10 hacer
Leer n
Si n %==0 entonces
Escribir “El número” n “es par”
Si no
Escribir “El número” n “es impar”
Fin si
Fin para
Fin
Números perfectos
Inicio
Definir resultados como real
Escribir “Aquí están los primeros 1000 números perfectos”
Para i <- 2 hasta 1000 hacer
Resultado <- ((2^(i-1))*((2^i)-1)
Escribir resultado
Fin para
Fin
Números invertidos
Inicio
Definir num, unidades, decenas, centenas, millar, residuom, residuoc, como entero
Escribir “Tecle el numeor de 4 digitos que desea invertir”
Leer num
millar <- (num /1000)
residuom <- (num %1000)
centenas <- (residuom /100)
residuoc <- (residuom%100)
decenas <- (residuoc/10)
unidades <- (residoc%10)
Si num <- 10000 entonces
Escribir “El número invertido es” unidades, decenas, centenas, millar
Si no
Escribir “Por favor escriba un numero de 4 digitos”
Fin si
Fin
Múltiplos de 3
Inicio
Definir ent, val como entero
Escribir “Tecle el número que desea conocer sus múltiplos de 3”
Leer ent
Si ent %==0 entonces
Val<-(ent/3)
Escribir “Todos los multiplos de 3 del número” ent “son”
Para i3<-1 hasta val hacer
multiplos <- (cont +3)
cont <-+ multiplos
Escribir multiplos
Fin para
Si no
Escribir “El número” ent “no es múltiplo de 3”
Fin si
Fin
Suma de sucesores
Inicio
Definir num, suma, como entero
Escribir “Tecle un numero”
Leer num
cont <- 0
Para e<-1 hasta num hacer
Suma <- suma +e
Fin para
Escribir “La suma es” suma
Fin
Diagrama de flujo
Modulo principal
Prueba de escritorio
Números pares
- Inicio
- 6
- Si 6%2=0
- Es numero 6 es par
- 7
- Si no 7%2=0
- Es numero 7 es impar
- 8
- Si 8%2=0
- Es numero 8 es par
- 200
- Si 200%2=0
- Es numero 200 es par
- 303
- Si no 303%2=0
- Es numero 303 es impar
- 45
- Si no 45%2=0
- Es numero 45 es impar
- 24
- Si 24%2=0
- Es numero 24 es par
- 65
- Si no 65%2=0
- Es numero 65 es impar
- 98
- Si 98%2=0
- Es numero 98 es par
- 10
- Si 10%2=0
- Es numero 10 es par
- Fin
Números perfectos
- Inicio
- Resultado = ((2^(i-1))*((2^i)-1))
- 6, 28, 120, 496, 2016, 8128, 32640,130816, 523776, 2096128…….
- Fin
Caso 1
- Inicio
- 1234
- millar = (1234/1000) =1
- residuom = (1234%1000)= 234
- centenas = (234/100)= 2
- residuoc = (234%100)= 34
- decenas = (34/10)= 3
- unidades = (34%10)= 4
- si 1234<10000
- unidades, decenas, centenas, millar
- 4321
- Fin
Caso 2
- inicio
- 123456
- millar = (123456/1000) =123
- residuom = (123456%1000)= 456
- centenas = (456/100)= 4
- residuoc = (456%100)= 56
- decenas = (56/10)= 5
- unidades = (56%10)= 6
- si no 123456<10000
- Por favor escriba un numero de cuatro dígitos
- Fin
Caso 1
- Inicio
- 6
- Si (6%3==0)
- val = (6/3)= 2
- i3=1; i3<=2; i3+=1
- multiplos = (cont+3)
- cont = + multiplos
- 3
- 6
- Fin
Caso 2
- Inicio
- 7
- Si no (7%3==0)
- El número 7 no es múltiplo de 3
- Suma de sucesores
- Inicio
- 4
- e=1; e<=4; e+=1
- suma=suma+e
- 10
Código en C
Función para el menú
principal
#include <stdio.h> /*biblioteca a utilizar*/
#include <stdlib.h> /*biblioteca para el comando pausa*/
#include "operaciones.h" /*biblioteca para realizar operaciones matemáticas*/
int main (){
int numero; /*variable para menú*/
do{ /*función repetitiva*/
system ("cls"); /*limpiar pantalla*/
printf ("Teclee el numero de la opcion que desea"); /*indicaciones para el usuario*/
printf ("\n"); /*salto de línea*/
printf ("\n1: Numeros pares e impares "); /*menú*/
printf ("\n2: Numeros perfectos "); /*menú*/
printf ("\n3: Numeros invertidos"); /*menú*/
printf ("\n4: Multiplos de 3 "); /*menú*/
printf ("\n5: Suma de sucesores"); /*menú*/
printf ("\n6: Salir\n\n");
scanf("%i",&numero); /*entrada de la variable numero*/
}while(numero < 1 || numero > 6);
calcular(numero);
system("pause");
return 0;
}
Biblioteca
(tipo de formato .H)
#ifndef _CALCULADORA_H_
#define _CALCULADORA_H_
#include <stdio.h>
void calcular(int numero);
#endif
Funciones
Números pares
#include <math.h>
Números perfectos
static void numeroperfe(){
float i;
double resultado; /*variable*/
printf("\nAqui estan los primeros 1000 numeros perfectos\n"); /*mensaje para el usuario*/
for (i=2;i<=1000;i+=1) { /*proceso*/
resultado = (pow(2,(i-1)))*((pow(2,i))-1); /*fórmula para calcular números perfectos*/
printf ("%.f\n",resultado);
}
}
Números invertidos
static void numeroinv(){
int centenas; /*variable para las centenas*/
int decenas; /*variable para decenas*/
int millar; /*variable para millar*/
int nume; /*variable de entrada*/
int numinv; /*variable de salida*/
int residuoc; /*variable residuos de centenas*/
int residuom; /*variable residuos de millar*/
int unidades; /*variable unidades*/
printf("Tecle un numero de cuatro dígitos que desea invertir\n"); /*indicaciones al usuario*/
scanf("%i",&nume); /*entrada de la variable*/
/*Proceso*/
millar = (nume/1000);
residuom = (nume%1000);
centenas = (residuom/100);
residuoc = (residuom%100);
decenas = (residuoc/10);
unidades = (residuoc%10);
if (nume<10000 5="" a="" calcula="" cantidad="" centenas="" code="" cuatro="" d="" de="" decenas="" digitos="" el="" else="" erroneo="" es="" escriba="" favor="" gitos="" i="" invertido="" la="" mayor="" millar="" muestra="" n="" numero="" or="" printf="" resultado="" se="" si="" un="" unidades="">
10000>
Múltiplos de 3
static void multiplo3(){ int cont; /*variable contador*/ int ent; /*variable de entrada*/ int i3; /*variable*/ int multiplos; /*variable de salida*/ int val; /*variable*/ printf("tecle el numero que desea conocer sus multiplos de 3\n\n"); /*indicaciones para el usuario*/ scanf("%i",&ent); /*entrada de la variable*/ cont=0; if (ent%3==0) { /*identificar si es múltiplo de 3*/ val = (ent/3); /*conocer cuántas veces cabe el 3 en dicho numero*/ printf("\nTodos los multiplos de 3 del numero %i son: \n",ent); /*imprimir todos anteriores múltiplos hasta el numero*/ for (i3=1;i3<=val;i3+=1) { /*proceso*/ multiplos = (cont+3); cont = +multiplos; printf("%i\n",multiplos); /*resultados*/ } } else { printf("El numero %i no es multiplo de 3\n",ent); /*si no es un múltiplo de 3*/ } }
static void sumasuc (){
int e; /*variable*/
int num; /*variable de entrada*/
int suma; /*resultado*/
printf("tecle un numero\n"); /*indicaciones*/
scanf("%i",&num); /*entrada de la variable*/
suma=0;
for (e=1;e<=num;e+=1) { /*proceso*/
suma=suma+e;
}
printf("La suma es %i\n",suma); /*resultado*/
}
Función del menú principal
void calcular(int numero){
switch(numero){ /*función de múltiples alternativas*/
case 1:
numeropar();
break;
case 2:
numeroperfe();
break;
case 3:
numeroinv();
break;
case 4:
multiplo3();
break;
case 5:
sumasuc();
break;
case 6:
salir();
break;
}
}
Referencias
Buijs, U. (11 de Septiembre de 2017). Archimedes Tube. Obtenido de
https://www.youtube.com/watch?v=BU6dqmkTCjU
Morera, S. (23 de Septiembre de 2016). Math4all. Obtenido de
https://www.youtube.com/watch?v=TWkkbwtHTFg
programar, E. a. (23 de Aosto de 2014). Empieza a programar. Obtenido de
https://youtu.be/0yfHFstcN34
Rancel, M. R. (s.f.). aprenderaprogramar.com. Obtenido de
https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=129:programacion-modular-y-definicion-de-recursividad-o-autollamada-diagramas-de-flujo-ejemplos-cu00204a&catid=36&Itemid=60
Rangel, J. (10 de Mayo de 2012). Jesse Rangel. Obtenido de
https://www.youtube.com/watch?v=FsO39sqbWTU
Taboada, A. (25 de Febrero
de 2016). Programación ATS. Obtenido de
https://www.youtube.com/watch?v=UbkRifnA0FU






