Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2019-1
Capítulo 4
DISEÑO DE ALGORITMOS
Capítulo 5
IMPLEMENTACIÓN DE ALGORITMOS
1
Retomando lo aprendido
while ( <expresión_lógica> ) {
2
Retomando lo aprendido - Para
3
Retomando lo aprendido - for
4
Break
Encontrado =0;
while (!encontrado){
scanf("%d", &caracter);
if (carácter =='$')
break;
….
5
Retomando lo aprendido
Repetir
secuencia_de_acciones
Mientras Que expresion_lógica
6
Retomando lo aprendido
do {
secuencia_de_acciones
} while ( condición );
7
Agenda
1. Resumiendo lo aprendido
2. Funciones
3. Ejercicios desarrollados
4. Ejercicios propuestos
5. Resumiendo lo aprendido
8
Funciones
Una función proporciona una forma
conveniente de encapsular una tarea o un
conjunto de instrucciones. Además, nos
permite modular nuestros programa.
9
Funciones - diseño
10
Función – Sin devolución de valor
13
14
Función - codificación
15
Funciones – codificación
16
17
Función “factorial” usando while
#include <stdio.h>
long double factorial(int n){
int control=1;
long double factorial=1;
while(control<=n){
factorial *= control;
control++;
}
return factorial;
}
int main() {
int numero=9;
long double factorial_num;
factorial_num = factorial(numero);
printf("%d! = %LG\n", numero, factorial_num);
return 0;
}
18
Función “factorial” usando for
#include <stdio.h>
long double factorial(int n){
int control;
long double factorial=1;
for (control = 1; control <= n; control++)
factorial *= control;
return factorial;
}
int main() {
int numero=9;
long double factorial_num;
factorial_num = factorial(numero);
printf("%d! = %LG\n", numero, factorial_num);
return 0;
}
19
Función “factorial” usando for y
mostrando resultados por iteración
#include <stdio.h>
long double factorial(int n){
int control;
long double factorial=1;
printf("%d! = %d\n", 0, 1);
for (control = 1; control <= n; control++) {
factorial *= control;
printf("%d! = %LG\n", control, factorial);
}
return factorial;
}
int main() {
int numero=9;
long double factorial_num;
factorial_num = factorial(numero);
return 0;
}
20
Ejemplo: Primeros n números
primos usando while
#include <stdio.h>
int es_primo(long numero){
long i=1;
int num_divisores = 0;
while (i <= numero) {
if (numero % i == 0) {
num_divisores++;
}
i++;
}
if (num_divisores == 2)
return 1;
else
return 0;
}
21
Ejemplo: Primeros n números
primos usando while
int main() {
long n, num_a_evaluar, contador_primos;
printf("Los primeros n numeros primos, ingrese el valor de n:\n");
scanf("%ld", &n);
num_a_evaluar = 1;
contador_primos = 0;
while (contador_primos < n) {
if (es_primo(num_a_evaluar)) {
contador_primos = contador_primos + 1;
printf("Primo %ld: %ld\n", contador_primos, num_a_evaluar);
}
num_a_evaluar++;
}
return 0;
}
22
Ejemplo: Primeros n números
primos usando for
#include <stdio.h>
int es_primo(long numero){
long i;
int num_divisores = 0;
for (i=1; i<=numero; i++) {
if (numero % i == 0) {
num_divisores++;
}
}
if (num_divisores == 2)
return 1;
else
return 0;
}
23
Ejemplo: Primeros n números
primos usando for
int main() {
long n, num_a_evaluar, contador_primos;
printf("Los primeros n numeros primos, ingrese el valor de n:\n");
scanf("%ld", &n);
num_a_evaluar = 1;
for (contador_primos = 0; contador_primos < n; num_a_evaluar++) {
if (es_primo(num_a_evaluar)) {
contador_primos = contador_primos + 1;
printf("Primo %ld: %ld\n", contador_primos, num_a_evaluar);
}
}
return 0;
}
24
Ejemplo: Fecha mágica (Adaptación
de la Pregunta 2 del Ex. Esp. 2018-1)
Una fecha mágica es una fecha donde el día multiplicado por el mes es
igual a los dos últimos dígitos del año. Por ejemplo 10 de junio de 1960
es una fecha mágica ya que 1960 es el sexto mes y 6 veces 10 es 60,
que es igual a los dos últimos dígitos de 1960.
Escriba un programa en C que permita encontrar y mostrar todas las
fechas mágicas en un rango de años determinado. Debe tener en
cuenta que enero, marzo, mayo, julio, agosto, octubre y diciembre
tienen 31 días. Abril, junio, setiembre y noviembre tienen 30 días.
Asimismo, la cantidad de días del mes de febrero dependerá de si el
año es bisiesto o no. En un año bisiesto el mes de febrero tiene 29
días, mientras en un año no bisiesto tiene 28. Se considera año bisiesto
a aquellos años que son múltiplos de 4, pero no múltiplos de 100,
excepto los múltiplos de 400 (Si un año es divisible entre 100, pero no
entre 400, por ejemplo, 1900, entonces NO es un año bisiesto. Si un
año es divisible tanto entre 100 como entre 400, entonces SÍ es un año
bisiesto).
Su solución debe tener por lo menos 3 módulos incluido el algoritmo
principal.
25
Fecha mágica (Adaptación de la
Pregunta 2 del Ex. Esp. 2018-1)
#include <stdio.h>
int es_fecha_magica(int dia, int mes, int anho){
return (dia * mes) == (anho % 100);
}
26
Fecha mágica (Adaptación de la
Pregunta 2 del Ex. Esp. 2018-1)
int main() {
int anhoInicio, anhoFin, dia, mes, anho, maximo_dias_por_mes;
printf("Ingrese un anho de inicio: "); scanf("%d", &anhoInicio);
printf("Ingrese un anho fin: "); scanf("%d", &anhoFin);
/* Se inicializa la primera fecha del rango */
dia = 1; mes = 1; anho = anhoInicio;
/* Mientras la fecha no sea la última, se itera */
while (!(dia == 1 && mes == 1 && anho == (anhoFin + 1))) {
/* Se verifica si es una fecha mágica */
if (es_fecha_magica(dia, mes, anho)) {
printf("%02d-%02d-%d\n", dia, mes, anho);
}
/* Se genera la siguiente fecha */
dia++;
if (dia == (maximo_dias_mes(mes, anho)+1)){
dia=1; mes++;
if (mes==13){
mes=1; anho++;
}
}
}
return 0;
} 27
Ejercicios – Sucesión de Farey
Es una sucesión matemática de fracciones irreductibles entre 0 y 1
que tienen un denominador menor o igual a “n” en orden creciente,
donde “n” es un número entero positivo.
28
Ejercicios – Sucesión de Farey
a. Se construyen fracciones con todas las combinaciones posibles de
los números del 1 al 4.
29
Ejercicios – Sucesión de Farey
c. Las fracciones que se puedan simplificar se descartan dentro de la
serie porque estarían repetidas.
30
Ejercicios – Sucesión de Farey
Se le pide elabore el diseño de un algoritmo en pseudocódigo o
diagrama de flujo e implemente un programa en lenguaje ANSI C, que
permita mostrar los números de la sucesión de Farey para un número
“n”, considerando solo los pasos a, b y c, sin considerar el
ordenamiento.
31
Ejercicios
32
Ejercicios
33
Bibliografía
34