Está en la página 1de 33

FUNDAMENTOS DE PROGRAMACIÓN

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.

• Lenguaje de especificación de algoritmos (pseudocódigo):


Usa un conjunto de palabras reservadas en lenguaje natural para
representar cada paso del 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.

Salida: Representa las salidas del algoritmo.

Línea de Flujo: Indique el sentido de ejecución de


las operaciones.

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.

Decisión Múltiple: Indica que es posible ejecutar distintas


acciones posibles, dependiendo del valor almacenado en una
variable. Se evalúa el contenido de una variable y luego se
ejecuta la secuencia de acciones asociadas a dicho valor.

Instrucción 'Para': Indica que se ejecutará una secuencia de


instrucciones un determinado número de veces.

6
Pseudocódigo
Palabra Reservada Función

Algoritmo <nombre_algoritmo> Representa el comienzo de un algoritmo.


FinAlgoritmo Representa el final de un algoritmo.
Leer Representa la lectura de los datos de entrada del algoritmo.

Escribir Representa la escritura de las salidas del algoritmo.


Si … Entonces Indica operaciones lógicas o de comparación entre datos y en función del
SiNo resultado de la misma, determina cuál de los distintos caminos alternativos
Fin Si del programa se debe seguir.
Según … Hacer
Indica que es posible ejecutar distintas acciones posibles, dependiendo del
…. :
valor almacenado en una variable. Se evalúa el contenido de una variable y
de otro modo:
luego se ejecuta la secuencia de acciones asociadas a dicho valor.
Fin Según
Mientras … Hacer Representa la repetición de un conjunto de instrucciones mientras se cumpla
Fin Mientras cierta condición (entrada controlada).
Repetir Representa la repetición de un conjunto de instrucciones mientras se cumpla
Hasta Que … cierta condición (salida controlada).
Para … Hasta … Con Paso … Hacer Indica que se ejecutará una secuencia de instrucciones un determinado
Fin Para número de veces.

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.

Presenta herramientas de edición para escribir algoritmos en


pseudocodigo en español: Autocompletado, Ayudas Emergentes,
Plantillas de Comandos, Coloreado de Sintaxis, Resaltado de
bloques lógicos, Indentado Inteligente, Listados de funciones,
operadores y variables.

8
PseInt

9
Estructura selectiva simple

La expresión lógica debe devolver un


valor de verdad o de falso. Pueden ser
varias proposiciones unidas por
conectores.

Si <expresion_lógica> Entonces

acciones_por_verdadero

El identado o sangría Fin Si


nos ayuda a mantener
el orden y a tener en
claro que 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 la acción especificada.
verdad.

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.

Camino que se sigue en


caso la expresión lógica
sea Falso
Si la expresión lógica es verdad
entonces se ejecutarán las acciones o
la acción especificada.

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

La expresión lógica debe devolver un


valor de verdad o de falso. Pueden ser
varias proposiciones unidas por
conectores. Se delimita con paréntesis.

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

La expresión lógica debe devolver un


valor de verdad o de falso. Pueden ser
varias proposiciones unidas por El bloque es definido
conectores. por las llaves

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

Si parten en sentidos perpendiculares,


es decir, el ángulo es 90o: 0
v1t v2t

𝑑= (𝑣1 𝑡)2 +(𝑣2 𝑡)2


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

printf("La separacion entre Neo y Trinity es de %.2f metros.", d);


return 0;
}
28
Ejercicio
Un acróbata en motocicleta se lanza del borde de un risco. Si justo en el borde, su
velocidad es horizontal con magnitud de vx m/s y la base del otro lado del precipicio
está a una distancia x con una diferencia de altura y, menor a la altura inicial del borde
del risco. Averigue el tiempo que le tomaría recorrer los x metros y, si el motociclista
logra o no la hazaña de llegar al otro lado.
Definición:
Explicación: debemos determinar si
logra la hazaña de llegar a la base del
otro lado del precipicio.
Datos de entrada: v0, x, y
Salidas: El tiempo para
recorrer la distancia (x)
horizontal, y si logra o no
logra la hazaña.
Fórmulas: F1: 𝑥 = (𝑣0 cos 𝛼0 ) 𝑡 (movimiento de proyectil)
1
F2: 𝑦 = (𝑣0 sin 𝛼0 ) 𝑡 − 𝑔 𝑡2 (movimiento de proyectil)
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

• 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.

33

También podría gustarte