Está en la página 1de 42

FUNDAMENTOS DE PROGRAMACIÓN

2019-1

Capítulo 2
ALGORITMIA
Capítulo 3
RESOLUCIÓN DE PROBLEMAS
USANDO EL COMPUTADOR 1
Algoritmos de la vida diaria

Fig. 1. Ingeniería civil Fig. 2. Química. Fig. 3. Ingeniería mecánica.

Fig. 4. Ingeniería biomédica. Fig. 5. Matemáticas. Fig. 6. Ingeniería industrial.

[Fig. 1] Recuperado de https://www.pucp.edu.pe/carrera/ingenieria-civil/ [Fig. 4] Recuperado de https://www.pucp.edu.pe/carrera/ingenieria-biomedica/


[Fig. 2] Recuperado de https://www.pucp.edu.pe/carrera/quimica/ [Fig. 5] Recuperado de https://www.pucp.edu.pe/carrera/matematicas/
[Fig. 3] Recuperado de https://www.pucp.edu.pe/carrera/ingenieria-mecanica/ [Fig. 6] Recuperado de https://www.pucp.edu.pe/carrera/ingenieria-industrial/
Agenda
1. Algoritmia
• Definición de algoritmia y algoritmo.
• Características.
• Formas de representación de los algoritmos.
2. Resolución de problemas usando la computadora.
3. Fases de resolución de un problema usando la
computadora.
• Definición del problema.
• Análisis.
• Diseño.
• Implementación.
• Ejecución y pruebas.
3
Algoritmia y algoritmo
• 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).

Ejemplo: Para calcular el área de un triángulo seguiremos los


siguientes pasos:
1. Leer la base y la altura del triángulo.
2. Calcular el área del triángulo con la fórmula área=base*altura/2.
3. Mostrar el área del triángulo.

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.

Cada pregunta de un problema debe ser contestada por la


ejecución del algoritmo.
Cualquiera que sean los valores de las entradas, la ejecución
terminará después de algún número finito de pasos.

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

• Conjunto de signos y reglas que permite la


comunicación con una computadora.
• Cada lenguaje de programación definirá los
símbolos que se pueda utilizar así como también las
reglas sintácticas (estructura) y semánticas
(significado)
• Implementa al menos un paradigma (imperativo,
orientado a objetos, funcional, lógico, entre otros).

8
Ejemplos lenguajes de prog.
En lenguaje de programación C: En lenguaje de programación Pascal:

program TriangleArea;

var base, height, area:real;


#include <stdio.h> begin
write('Ingrese la base del triangulo: ');
readln(base);
int main() { write('Ingrese la altura del triangulo: ');
readln(height);
float height, area, base; area:=base*height/2;
write('El area del triangulo es : ', area);
printf("Introduzca base: "); readln();
end.
scanf("%f", &base );
printf("Introduzca altura: ");
scanf("%f", &height ); En lenguaje de programación Python 3:
area = base * height / 2;
base = int(input('base='))
printf("El area del triangulo es %.2f",
height = int(input('altura='))
area ); area = base * height / 2
return 0; print ('El area del triangulo es',
} area)

9
Lenguaje imperativo, ANSI C

• Lenguaje estándar para C


• Es un lenguaje estructurado
• Uso extensivo de punteros (memoria, arreglos,
estructuras y funciones)
• Posee construcciones de alto nivel y de bajo nivel
• Puede ser compilado

10
Compilación - Interpretación

• Compilar consiste en • Interpretar es cuando se


transformar un traducen las instrucciones
programa escrito en un escritas en lenguaje
lenguaje en otro fuente a código máquina
programa creado en directamente durante su
lenguaje máquina. ejecución.
• En la interpretación se
evalúa línea por línea.

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

• Datos de entrada: serán los valores necesarios para


llevar a cabo los cálculos

• Fórmulas: cálculos que se realizarán

• Salidas: resultados requeridos

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.

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


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

Salida: Representa las salidas del algoritmo.

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


las operaciones.

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.

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.

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

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.

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.
Recuerden cargar el perfil PUCP

20
Codificación
• Encoding

• Es el proceso por el cual la información de una fuente es


convertida en símbolos para ser comunicada.

• Al codificar convertimos información de un formato o código a


otro, con el propósito de estandarización, velocidad o de
compresión.

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++

Dev-C++ es un entorno de desarrollo integrado (IDE) para


programar en lenguaje C/C++. Usa MinGW, que es una versión de
GCC (GNU Compiler Collection) como su compilador. Dev-C++
puede además ser usado en combinación con Cygwin y cualquier
compilador basado en GCC.

El Entorno está desarrollado en el lenguaje Delphi de Borland.


Tiene una página de paquetes opcionales para instalar, con
diferentes bibliotecas de código abierto.

24
Ejecución y pruebas

• Depuración : el concepto depuración en informática se refiere


al proceso de limpieza que se realiza en un programa para
identificar y corregir errores o problemas de programación.
• Debugging que viene a
ser la traducción literal
de eliminación de bichos
(bugs).
• Acción de limpiar o
• purificar

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.

• Datos de entrada: las mejores nueve notas de


laboratorio, nota del examen parcial y nota del
examen final

• 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

• Knuth, D. E. (1997). The art of computer programming (Vol.


3). Pearson Education.
• 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.

42

También podría gustarte