Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2019-1
Capítulo 2
ALGORITMIA
Capítulo 3
RESOLUCIÓN DE PROBLEMAS
USANDO EL COMPUTADOR 1
Algoritmos de la vida diaria
4
Características de un algoritmo
• Es independiente del lenguaje y de la computadora.
• Se puede expresar en distintos lenguajes y ejecutarse en
distintas computadoras.
• Es finito: Tiene un número finito de pasos.
• Es preciso. Cada paso debe estar precisamente definido; las
acciones a realizar deben ser especificados de manera
rigurosa y sin ambigüedades para cada caso.
• Es efectivo: Las operaciones a realizar deben ser básicas
como para que se puedan realizar con exactitud.
• Tiene datos de entrada: Pueden ser cero o más datos de
entrada.
• Tiene datos de salida: Pueden ser uno o más datos de salida,
que tienen una relación específica con los datos de entrada.
(Knutt, 1997)
5
Formas de representación
• Un algoritmo debe escribirse como una expresión en algún
lenguaje:
• Descripción narrada (español, inglés, etc).
• Notación matemática.
• Diagrama N-S (Nassi-Schneiderman)
• Diagramas de flujo.
• Lenguaje de especificación de algoritmos: pseudocódigo.
6
Resolución de problemas usando la
computadora
Aspectos:
• Diseñar un algoritmo que resuelva el problema propuesto.
• Crear un programa usando la computadora que exprese el
algoritmo diseñado utilizando un lenguaje de
programación.
• Ejecutar y validar el programa elaborado en la
computadora.
7
Lenguaje de programación
8
Ejemplos lenguajes de prog.
En lenguaje de programación C: En lenguaje de programación Pascal:
program TriangleArea;
9
Lenguaje imperativo, ANSI C
10
Compilación - Interpretación
11
Partes de un algoritmo
En lenguaje de programación C
#include <stdio.h>
int main() {
float height, area, base;
1. Entrada printf("Introduzca base: ");
scanf("%f", &base );
2. Proceso printf("Introduzca altura: ");
scanf("%f", &height );
3. Salida area = base * height / 2;
printf("El area del triangulo es %.2f",
area );
return 0;
}
Fases de resolución de un prob.
1. Definición
2. Análisis
3. Diseño
4. Codificación
5. Ejecución y Pruebas
Definición
• Explicación: se explica de modo resumido el
problema
14
Análisis
• Técnica Top down
• Diagrama de módulos
• Dividir para vencer
15
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.
16
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.
17
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.
18
Pseudocódigo
Palabra Reservada Función
19
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.
20
Codificación
• Encoding
21
Lenguaje de programación
ANSI C
Lenguaje de Alto nivel
Palabras reservadas
auto double int struct break else long switch case enum
register typedef char extern return union continue for
signed void do if static while default goto sizeof volatile
const float short unsig
22
Lenguaje de máquina
• Es el sistema de códigos directamente interpretable por un
circuito micro-programable, como el microprocesador de
una computadora.
• Lenguaje binario, se simbolizan con los números 0 y 1
char letra ;
0 1 0 0 0 0 0 1
letra = ‘A’;
27 ∗ 0 + 26 ∗ 1 + 25 ∗ 0 + 24 ∗ 0 + 23 ∗ 0 + 22 ∗ 0 + 21 ∗ 0 + 20 ∗ 1
‘A’ = 65
‘B’ = 66
‘a’ = 97 1 byte = 8 bits
23
Herramienta codificación DevC++
24
Ejecución y pruebas
The first recorded computer bug (Credit: National Museum of American History)
25
El problema
• Un alumno de nombre Juan Paz Iparraguirre, ha
llevado el curso de Fundamentos de programación y
quiere saber cual sería su nota final en el curso.
Utilizando su campus virtual, el sabe cuanto obtuvo
en los nueve mejores laboratorios, examen parcial y
examen final. Sabe también, porque leyó el sílabo y
porque asistió a la primera clase que la fórmula para
hallar la nota final es:
NF=(2*Eparcial+3*Efinal+5*PromLab)/10
26
Definición
• Explicación: Se desea elaborar un algoritmo que
permita calcular la nota final del curso de FP.
• Fórmulas: NF=(2*Eparcial+3*Efinal+5*PromLab)/10
PromLab = (Truncar( σ9𝑖=1 𝑛𝑜𝑡𝑎𝑖 )/9)
• Salidas: Nota final del curso
27
Análisis
Top down
Obtener la nota del curso
1. Obtener datos de entrada
2. Calcular promedio laboratorios
3. Eliminar decimales del promedio de laboratorios
4. Calcular nota final
5. Mostrar nota final
28
Diseño-Pseudocódigo
Algoritmo ObtenerNotaFinalFP
// Lectura de datos
Escribir 'Ingrese las notas de los laboratorios:'
Leer lab1, lab2, lab3, lab4, lab5, lab6, lab7, lab8, lab9
Escribir 'Ingrese la nota del examen parcial:'
Leer examParcial
Escribir 'Ingrese la nota del examen final:'
Leer examFinal
// Se obtiene el promedio de los laboratorios
sumaLabs <- lab1 + lab2 + lab3 + lab4 + lab5 + lab6 + lab7 +
lab8 + lab9
promLabs <- sumaLabs / 9
// Se corta a un decimal
promLabsUnDec <- trunc(promLabs*10)/10
// Se obtiene el promedio del curso
promedioFinal <- (promLabsUnDec * 5 + examParcial * 2 +
examFinal * 3) / 10
// Mostrar resultados
Escribir 'El promedio de laboratorios es ', promLabsUnDec
Escribir 'La nota final es ‘, promedioFinal
FinAlgoritmo
29
Diseño-Pseudocódigo
Algoritmo ObtenerNotaFinalFP
// Lectura de datos
Escribir 'Ingrese las notas de los laboratorios:'
Leer lab1, lab2, lab3, lab4, lab5, lab6, lab7, lab8, lab9
Escribir 'Ingrese la nota del examen parcial:'
Leer examParcial
Escribir 'Ingrese la nota del examen final:'
Leer examFinal
// Se obtiene el promedio de los laboratorios
sumaLabs <- lab1 + lab2 + lab3 + lab4 + lab5 + lab6 + lab7 +
lab8 + lab9
promLabs <- sumaLabs / 9
// Se corta a un decimal
promLabsUnDec <- trunc(promLabs*10)/10
// Se obtiene el promedio del curso
promedioFinal <- (promLabsUnDec * 5 + examParcial * 0.2 +
examFinal * 3) / 10
// Mostrar resultados
Escribir 'El promedio de laboratorios es ', promLabsUnDec
Escribir 'La nota final es ‘, promedioFinal
FinAlgoritmo
30
Diseño
Diagrama de
Flujo
31
Codificación
32
Ejercicio
Un avión se mueve en línea recta a una velocidad constante de 400 km/h
durante 1,5 h de su recorrido. ¿Qué distancia recorrió en ese tiempo?
Definición:
Explicación
En base a la velocidad y al tiempo de recorrido de un avión, se quiere
saber cual será la distancia recorrida
Datos de entrada:
velocidad constante, tiempo
Salidas:
distancia recorrida
Fórmulas:
d= v * t
Análisis
Lectura de datos
Cálculo de distancia recorrida
Mostrar salidas
33
Diseño - Pseudocódigo
Algoritmo EvaluarDistanciaAvion
//Se leen los datos de entrada
Escribir "Ingrese la velocidad en km/h:"
Leer velocidad
Escribir "Ingrese el tiempo (t) en h.:"
Leer t
//Se calcula la distancia recorrida
dist_recorrida <- velocidad * t
//Se muestra la salida
Escribir "La distancia recorrida es ",
dist_recorrida, " km."
FinAlgoritmo
34
Diseño- Diagrama de Flujo
35
Codificación
#include <stdio.h>
int main(){
/* Se leen los datos de entrada */
float velocidad,tiempo,dist_recorrida;
printf("Ingrese la velocidad en km/h:\n");
scanf("%f",&velocidad);
printf("Ingrese el tiempo (t) en h.:\n");
scanf("%f",&tiempo);
/* Se calcula la distancia recorrida */
dist_recorrida=velocidad*tiempo;
/* Se muestra la salida */
printf("La distancia recorrida es %.2f km.",
dist_recorrida );
return 0;
}
36
Ejercicio
Se deja caer una moneda de un sol desde la torre del Centro Cívico; parte del reposo y
cae libremente. Calcule su posición y su velocidad después de un tiempo t en
segundos. Pruebe con t=1.0, 2.0 y 3.0 s.
• Definición:
Explicación: Como cae libremente, podemos usar las ecuaciones para aceleración constante.
Datos de entrada:
pos_ini_y, vel_ini_y, tiempo
Salidas:
posición, velocidad
Fórmulas:
𝑎𝑦 = −𝐺, 𝑑𝑜𝑛𝑑𝑒 𝐺 = 9.8 𝑚/𝑠 2
1
𝑦 = 𝑦0 + 𝑣0 + 𝑎𝑦 𝑡 2
2
𝑣𝑦 = 𝑣0𝑦 + 𝑎𝑦 𝑡
• Análisis
Lectura de datos
Cálculo de posición y velocidad
Mostrar salidas
37
Diseño - Pseudocódigo
Algoritmo CalcularPosicionVelocidad
Definir G Como Real
G <- 9.8
//Se leen los datos de entrada
Escribir "Posicion inicial en y(y0) m.:"
Leer y0
Escribir "Velocidad inicial en y(v0y) m/s:"
Leer v0y
Escribir "Ingrese el tiempo(t) s.:"
Leer t
//Se calcula la aceleracion en y
ay <- -G
//Se calcula la posicion en y
pos_y <- y0 + v0y * t + (1/2) * ay * t * t
//Se calcula la velocidad en y
vel_y <- v0y + ay * t
//Se muestra la salida
Escribir "La posicion cuando t=",t, " es ", pos_y, "m."
Escribir "La velocidad cuando t=",t, " es ", vel_y, "m/s."
FinAlgoritmo
38
Diseño
Diagrama de Flujo
39
Codificación
#include <stdio.h>
#define G 9.8
int main(){
/* Se leen los datos de entrada */
float y0, v0y, t, ay, pos_y, vel_y;
printf("Posicion inicial en y(y0) m.:\n");
scanf("%f",&y0);
printf("Velocidad inicial en y(v0y) m/s:\n");
scanf("%f",&v0y);
printf("Ingrese el tiempo (t) s.:\n");
scanf("%f",&t);
/* Se calcula la aceleracion en y */
ay = -G;
/* Se calcula la posicion en y */
pos_y = y0 + v0y * t + (1/2.0) * ay * t * t;
/* Se calcula la velocidad en y */
vel_y = v0y + ay * t;
/* Se muestra la salida */
printf("La posicion cuando t=%.2f s. es %.2f m.\n",
t, pos_y );
printf("La velocidad cuando t=%.2f s. es %.2f m/s.\n",
t, vel_y );
return 0;
}
40
Resumiendo lo aprendido
• Algoritmia: es la ciencia que estudia el cálculo aritmético y algebraico
(RAE, 2019).
• Algoritmo: es un conjunto ordenado y finito de operaciones que
permite hallar la solución de un problema (RAE, 2019). Debe ser
preciso, bien definido y finito.
• Lenguaje de programación: Conjunto de signos y reglas que permite la
comunicación con una computadora.
• 5 fases para la resolución de problemas
1. Definición
2. Análisis
3. Diseño (Pseudocódigo y diagrama de flujo)
4. Codificación
5. Ejecución y Pruebas
41
Bibliografía
42