Está en la página 1de 32

FUNDAMENTOS DE PROGRAMACIÓN

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> ) {

suma += i*i es equivalente a colocar


suma = suma + i*i
La misma operación se puede hacer con las
otras operaciones matemáticas

Existe el operador unario de suma y


resta en C, que permite reemplazar
La instrucción i = i +1 por i++

2
Retomando lo aprendido - Para

Para variable_numérica<-valor_inicial Hasta valor_final Con Paso paso Hacer


secuencia_de_acciones
Fin Para

Ejemplo factorial Acaba al ser i <=5


inicialización i varia de 1 en 1
fact  1
Para i  1 Hasta 5 Con Paso 1 Hacer
fact  fact*i
Fin Para

3
Retomando lo aprendido - for

for ( inicialización; cond. de fin; actualización){


secuencia_de_acciones
}

Ejemplo factorial Acaba al ser i <=5


inicialización i varia de 1 en 1
fact = 1;
for (i =1 ; i<= 5 ; i++){
fact = fact*i;
}

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

Nombre de la variable a retornar


Nombre de la función

Parámetros necesarios para


calcular la función

10
Función – Sin devolución de valor

13
14
Función - codificación

Las funciones pueden tener tipo de retorno double,


int, char o void
void es un tipo de retorno vacío, que permite que la
función no devuelva un valor en particular

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);
}

int es_anho_bisiesto (int anho) {


return (anho % 4 == 0) && ((anho % 100 != 0) || (anho % 400 == 0));
}

int maximo_dias_mes(int mes, int anho){


int maximo_dias_por_mes;
switch(mes){
case 2: maximo_dias_por_mes = 28; break;
case 1: case 3: case 5: case 7: case 8: case 10: case 12: maximo_dias_por_mes = 31; break;
default: maximo_dias_por_mes = 30;
}
if (mes==2 && es_anho_bisiesto(anho))
maximo_dias_por_mes++;
return maximo_dias_por_mes;
}

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.

Los términos de la sucesión de Farey comienzan con el número 0,


0
denotado por la fracción: , y termina con el número 1, denotado por
1
1
la fracción: , sin embargo, algunos autores suelen omitir estos
1
términos.

Una forma algorítmica sencilla de construir la sucesión de Farey para


un número “n” (por el ejemplo, n = 4) es la siguiente:

28
Ejercicios – Sucesión de Farey
a. Se construyen fracciones con todas las combinaciones posibles de
los números del 1 al 4.

b. Se eliminan aquellas fracciones iguales o superiores a 1, o dicho de


otra manera, en las que el numerador sea mayor o igual al
denominador.

29
Ejercicios – Sucesión de Farey
c. Las fracciones que se puedan simplificar se descartan dentro de la
serie porque estarían repetidas.

d. Se ordenan las fracciones de menor a mayor, agregando el 0 al inicio


y el 1 al final.

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

• Joyanes, L. (2008). Fundamentos de programación (4a. ed.).


Madrid: McGraw-Hill/Interamericana de España.
• Joyanes, L. y Zahonero, I. (2010). Programación en C, C++,
Java y UML (1a. ed.). México, D.F.: McGraw-
Hill/Interamericana Editores.
• Lopez, L. (2005). Programación estructurada en lenguaje C
(1a. ed.). México, D.F.: Alfaomega Grupo Editor.
• Correa, G. (1992). Desarrollo de algoritmos y sus
aplicaciones en Basic, Pascal, Cobol y C (3a. ed.). Santafé de
Bogotá: McGraw-Hill Interamericana.

34

También podría gustarte