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
Decisiones en la vida diaria
http://micarrerauniversitaria.com/c-ingenieria/ingenieria-economica/ https://elsanturariodelaelectronica.webnode.es/circuitos-logicos/
https://commons.wikimedia.org/wiki/File:Putrajaya_Bridge_073.jpg http://iimp.org.pe/pptjm/jm20150827-planeamiento-estrategicos.pdf
https://asantos.milaulas.com/course/index.php?categoryid=3
Agenda
1. Diseño de algoritmos
• Pseudocódigo
• Diagramas de Flujo
• Estructuras Selectivas Simples
2. Implementación de Algoritmos
3
Diseño
• Diagrama de flujo:
Diagrama que utiliza un conjunto de símbolos estándar unidos por
flechas llamadas líneas de flujo, con el fin de mostrar los pasos que
tendrá el algoritmo.
4
Diagramas de flujo
Símbolo Función
Terminal Inicio: Representa el comienzo (inicio)
de un algoritmo.
Terminal Fin: Representa el final (fin) de un
algoritmo.
Entrada: Representa los datos de entrada del
algoritmo.
Proceso: Cualquier tipo de operación que pueda
originar cambio de valor.
5
Diagramas de flujo
Símbolo Función
Decisión: Indica operaciones lógicas o de comparación entre
datos y en función del resultado de la misma determina cuál
de los distintos caminos alternativos del programa debe
seguir.
6
Pseudocódigo
Palabra Reservada Función
7
Herramienta de diseño PseInt
Para que sirve: PSeInt está pensado para asistir a los estudiantes
que se inician en la construcción de programas o algoritmos
computacionales. Introduce conceptos básicos como el uso de
estructuras de control, expresiones, variables, etc. Busca facilitar
la tarea de escribir algoritmos en pseudolenguaje.
8
PseInt
9
Estructura selectiva simple
Si <expresion_lógica> Entonces
acciones_por_verdadero
10
Estructura selectiva simple
Camino que se sigue en
La expresión lógica debe devolver un caso la expresión lógica
valor de verdad o de falso. Pueden ser sea verdad
varias proposiciones unidas por
conectores.
11
Estructura selectiva simple
¿El número M es múltiplo del número N ?
12
Pseudocódigo
Debemos recordar que:
• Siempre debe tener la estructura Algoritmo – FinAlgoritmo.
• Para asignar usamos la flecha que apunta a la izquierda .
• Para comparar usamos el signo =.
• Existen funciones matemáticas como trunc, redon, abs, rc, sen, cos
entre otras.
• El indentado siempre debe estar presente por una cuestión de
orden y de estructura.
• Las palabras reservadas Leer y Escribir son las únicas que podemos
usar para la lectura y escritura de datos respectivamente.
13
Diagrama de flujo
Debemos recordar que:
• Siempre debe tener la estructura Algoritmo – FinAlgoritmo (dentro
de elipses.
• Para asignar usamos la flecha que apunta a la izquierda y debe ir
en un rectángulo.
• Para comparar usamos el signo = .
• Existen funciones matemáticas como trunc, redon, abs, rc, sen, cos
entre otras.
• Siempre se debe poder seguir el flujo y llegar al fin del algoritmo.
• Las palabras reservadas Leer y Escribir son reemplazadas por
paralelogramos, para la lectura utilizamos la flechita que apunta
hacia adentro y para la escritura la flechita que apunta hacia afuera.
14
Instrucciones
En ANSI C una de las instrucciones más usadas de salida es:
printf : permite imprimir datos según determinado
formato en la salida estándar
Debemos recordar que:
• Para poder usarlas necesitamos necesario invocar al archivo de
cabecera que contiene su declaración:
#include <stdio.h>
• Tiene dos argumentos:
• el primer argumento se utiliza para especificar una cadena de
formato que se utiliza para especificar el tipo de dato de la
variable cuyo valor se desea escribir.
• El segundo argumento es/son las variables que se quieren
imprimir en la salida estándar.
• Recuerde que el orden es muy importante.
15
Instrucciones
En ANSI C una de las instrucciones más usadas de entrada es:
scanf: permite leer datos según determinado
formato en la entrada estándar
Debemos recordar que:
• Para poder usarlas necesitamos necesario invocar al archivo de
cabecera que contiene su declaración
#include <stdio.h>
• Tiene dos argumentos:
• El primer argumento se utiliza para especificar una cadena de
formato que se utiliza para especificar el tipo de dato de la
variable cuyo valor se desea leer.
• El segundo argumento se utiliza para especificar la dirección de
memoria en donde se encuentra la variable cuyo contenido se
desea actualizar con el valor ingresado por el usuario.
• Recuerde que el orden es muy importante.
16
Instrucciones
Debemos recordar que:
• Al final de cada instrucción debe ir el punto y coma (;).
• El bloque se delimita por las llaves {}.
• Indentar es necesario para tener un código ordenado.
• Los comentarios se colocan dentro de los signos /* */.
• La función main retorna un entero de valor 0 .
• Para asignar usamos el signo =.
• Para comparar usamos el signo == .
• Como conectores tenemos:
o &&(conjunción)
o || (disyunción)
o ! (negación)
17
Estructura selectiva simple
If ( <expresion_lógica> )
acción_por_verdadero ;
El indentado o sangría
nos ayuda a mantener
el orden y a tener en
claro qué acciones se Si la expresión lógica es verdad
ejecutarán si la entonces se ejecutará la acción
expresión lógica es
verdad.
18
Estructura selectiva simple
If ( <expresión_lógica> ) {
acciones_por_verdadero
El indentado o sangría }
nos ayuda a mantener
el orden y a tener en
claro qué acciones se Si la expresión lógica es verdad
ejecutarán si la entonces se ejecutarán las acciones o
expresión lógica es acción
verdad.
19
Ejercicio
𝑥 2 + 2𝑥 , 𝑠𝑖 𝑥 ≤ −1
𝑓 𝑥 =ቐ 𝑥 𝑠𝑖 − 1 < 𝑥 ≤ 1
−1 𝑠𝑖 𝑥 > 1
Importante:
f(x) no puede ser usado como nombre de variable.
En lugar de f(x) usaremos f_x
Definición:
Explicación: debemos evaluar el valor de la función f(x)
Datos de entrada: x
Salidas: f(x)
Fórmulas: las anteriores
20
Diseño - Pseudocódigo
𝑥 2 + 2𝑥 , 𝑠𝑖 𝑥 ≤ −1
𝑓 𝑥 =ቐ 𝑥 𝑠𝑖 − 1 < 𝑥 ≤ 1
−1 𝑠𝑖 𝑥 > 1
21
Diseño - Diagrama de Flujo
22
Codificación
23
Ejercicio
Dos jóvenes, Neo y Trinity, caminan cada uno con sus respectivas
velocidades en m/s. Determine la distancia que los separa luego de t
segundos partiendo de un mismo punto, y se puede dar cualquiera de
las siguientes situaciones:
a) Se mueven en el mismo sentido.
b) Se mueven en sentidos contrarios.
c) Se mueven en forma perpendicular.
Definición:
Explicación: debemos determinar la distancia que los separa luego de
un determinado tiempo (t) y cualquiera de los tres posibles ángulos
(ang) que forman las direcciones de sus movimientos, si las velocidades
de cada uno son v1 y v2.
Datos de entrada: v1, v2, t, ang
Salidas: distancia
Fórmulas: (Siguiente diapositiva)
24
Ejercicio
Si parten en el mismo sentido, es
decir, el ángulo es 0o:
𝑑 = 𝑥2 − 𝑥1 = 𝑣2 𝑡 − 𝑣1 𝑡 0 x
= 𝑡|𝑣2 − 𝑣1 | x1 = v1t d
x2 = v2t
Si parten en sentidos contrarios, es
decir, el ángulo es 180o:
0 x
𝑑 = 𝑥1 + 𝑥2 = 𝑣1 𝑡 + 𝑣2 𝑡 x1 = v1t x2 = v2t
d
25
Diseño - Pseudocódigo
Algoritmo HallarDistanciaSeparacion
//Lectura de datos de entrada
Escribir "Ingrese los valores de las velocidades de Neo y Trinity en m/s:”
Leer v1, v2
Escribir "Ingrese el valor del tiempo en segundos:"
Leer t
Escribir "Ingrese el valor del angulo [0, 90, 180] que forman las
direcciones de sus movimientos:"
Leer ang
//La distancia d dependera del angulo que forman las direcciones de sus
movimientos
Si ang = 0 Entonces
d <- t * abs(v2-v1)
FinSi
Si ang = 180 Entonces
d <- v1 * t + v2 * t
FinSi
Si ang = 90 Entonces
d <- rc( (v1*t)^2 + (v2*t)^2)
FinSi
//Se muestra la salida
Escribir "La separacion entre Neo y Trinity es de ", d, " metros."
FinAlgoritmo
26
Diseño - Diagrama de Flujo
27
Codificación
#include <stdio.h>
#include <math.h>
int main() {
float v1, v2, t, ang, d;
/* Lectura de datos de entrada */
printf("Ingrese los valores de las velocidades de Neo y Trinity en m/s:");
scanf ("%f %f", &v1, &v2);
printf("Ingrese el valor del tiempo en segundos:");
scanf ("%f", &t);
printf("Escribir 'Ingrese el valor del angulo [0, 90, 180] que forman las
direcciones de sus movimientos:");
scanf("%f", &ang);
/* d depende del angulo entre direcciones de sus movimientos */
if (ang==0)
d = t * fabsf(v2-v1);
if (ang==180)
d = v1*t+v2*t;
if (ang==90)
d = sqrt(pow(v1*t,2)+pow(v2*t,2));
29
Diseño - Pseudocódigo
Algoritmo LograONoHazana
Definir G como Real
G <- 9.8
// Lectura de datos de entrada
Escribir 'Ingrese la velocidad inicial (v0) en m/s: '
Leer v0
Escribir 'Ingrese la distancia (x) a saltar en m.: '
Leer x
Escribir 'Ingrese la diferencia de altura por debajo del risco del otro lado (m): '
Leer hy
//Despejando t en F1:
t <- x / v0
// Se muestra el tiempo
Escribir 'Tiempo para recorrer la distancia(x) horizontal en s.: ', t
//Reemplazando t en F2:
altura_luego_t <- abs( -(1/2)*G*t^2 )
Si altura_luego_t<= hy Entonces
// Se muestra la salida de logro de hazaña
Escribir 'El motociclista logra la hazaña'
FinSi
Si altura_luego_t > hy Entonces
// Se muestra la salida de no logro de hazaña
Escribir 'El motociclista no logra la hazaña :('
FinSi 30
FinAlgoritmo
Diseño - Diagrama de Flujo
31
Codificación
#include <stdio.h>
#include <math.h>
#define G 9.8
int main0() {
float v0, x, hy, t, altura_luego_t;
/* Lectura de datos de entrada */
printf("Ingrese la velocidad inicial (v0) en m/s:");
scanf ("%f", &v0);
printf("Ingrese la distancia (x) a saltar en m.:");
scanf ("%f", &x);
printf("Ingrese la diferencia de altura por debajo del risco del otro lado (m):");
scanf("%f", &hy);
/* Despejando t:*/
t = x / v0;
/* Se muestra el tiempo */
printf("El tiempo para recorrer la distancia(x) horizontal es %.2f segundos. \n", t);
altura_luego_t = fabs( -(1/2.0)*G*pow(t,2) );
if (altura_luego_t <= hy)
printf("El motociclista logra la hazana.");
if (altura_luego_t > hy )
printf("El motociclista no logra la hazaña :(.");
return 0;
}
32
Bibliografía
33