44
Introducción a los algoritmos Profesores: Jazna Meza Hidalgo Grisell Osses Díaz Luis Ángulo Mura Manuel Crisosto Muñoz Introducción a la Programación

Unidad 1, 2 y_3_algoritmos

Embed Size (px)

Citation preview

Page 1: Unidad 1, 2 y_3_algoritmos

Introducción a los algoritmos

Profesores:

Jazna Meza Hidalgo

Grisell Osses Díaz

Luis Ángulo Mura

Manuel Crisosto Muñoz

Introducción a la Programación

Page 2: Unidad 1, 2 y_3_algoritmos

Motivación

2

OBJETIVO GENERAL DE LA ASIGNATURA Resolver problemas básicos a través de la construcción de programas basados en algoritmos y un lenguaje de programación, generando acciones hacia la búsqueda de propuestas pertinentes.

APRENDIZAJES ESPERADOS (COMPETENCIAS) • Interpretar algoritmos y programas para la solución de problemas básicos de programación.• Construir algoritmos y programas para la solución de problemas básicos de programación.• Descomponer un problema en subproblemas para facilitar el proceso de definir una solución.• Trabajar colaborativamente, cumpliendo un rol y responsabilizándose de él.

Page 3: Unidad 1, 2 y_3_algoritmos

Pasos en la resolución de un problema

• Entender el problema– Conceptualización– Objetivo– Contexto

• Buscar soluciones• Elegir solución• Diseñar solución

– Descomposición– Especificar tareas– Modelar solución

• Implementar solución• Validar solución

3

Page 4: Unidad 1, 2 y_3_algoritmos

Programa de Aplicación

Programa que permite resolver la ecuación de primer grado

4

Programa que permite resolver la ecuación de primer grado

a x + b = 0

?a

bx = -b / a

#include <stdio.h>int main(){ int a,b,x; printf(“Ingrese valores de EC”); scanf(“%d %d”,&a,&b); if (a ==0) printf (“error”); else { x = -b / a; printf(“La solución es %d:”,x); } printf(“Fin programa”); return 0;}

Proceso Ecuacion_primer_grado Variables a,b,x de tipo entero Escribir 'Ingrese valores de EC' Leer a,b Si a = 0 Entonces Escribir 'Error' Sino x<- -1*b/a; Escribir 'La solución es: ',x; FinSi Escribir 'Fin programa';FinProceso

Page 5: Unidad 1, 2 y_3_algoritmos

¿Qué es un problema?

• Es una situación concreta sobre la cual se quiere implementar una solución (ejemplos)

• Solución: procedimiento que nos lleva a satisfacer ciertos requerimientos

• Esquema básico para la resolución de un problema a través de un programa con un enfoque sistémico

5

ProcesoEntrada Salida

•Datos Externos•Datos auto generados•Lectura de dispositivo de almacenamiento

•Informes•Datos para otro programa•Datos grabados en dispositivos externos de almacenamiento

Page 6: Unidad 1, 2 y_3_algoritmos

Datos y Variables

• Datos: objetos simbólicos que representan objetos del mundo real.– Ejemplos: 10 de Marzo de 2003, 3.14

• Variables: En programación corresponde a un espacio de memoria reservado para almacenar un dato, al cual se le asigna un nombre y un tipo de dato.– Ejemplos: velocidad del móvil, factor de

crecimiento6

Page 7: Unidad 1, 2 y_3_algoritmos

¿Qué es un algoritmo?

• Procedimiento detallado para resolver un problema en pasos y en un tiempo finito.

• Se especifican en base a operaciones básicas que controlan las variables y el flujo del algoritmo

• El algoritmo lleva desde un estado inicial a un estado final

• El algoritmo recibe Entradas y entrega Salidas

7

Page 8: Unidad 1, 2 y_3_algoritmos

¿Cómo desarrollar un algoritmo?

• Imaginación• No reinventar la rueda• Dividir para conquistar• Para ser efectivo se requiere practicar

constantemente• El diseño de algoritmos es una rama de la

Ciencia de la Computación

8

Page 9: Unidad 1, 2 y_3_algoritmos

¿Cómo se describe un algoritmo?

• Lenguaje natural• Pseudo código• Lenguaje de programación• La precisión es importante

– Un algoritmo no puede ser descrito de forma ambigua:

• Todos tienen que entender lo mismo (incluido el computador!)

9

Page 10: Unidad 1, 2 y_3_algoritmos

Llamada telefónica

• Se desea conceptualizar el problema de efectuar una llamada telefónica en un teléfono público que recibe monedas de $10, $50 y $100. El costo mínimo de la llamada es de $100 por 5 minutos. El proceso se inicia desde que se levanta el auricular y finaliza cuando se cuelga.

10

Page 11: Unidad 1, 2 y_3_algoritmos

Conceptos Básicos de Algoritmos

• La forma en que se ejecutan las operaciones básicas en un computador, es similar a lo que ocurre en nuestro cerebro.

• Por ejemplo, suponga que se nos pide sumar dos números: ¿Cuáles son los pasos básicos para realizar la operación solicitada?

Page 12: Unidad 1, 2 y_3_algoritmos

Conceptos Básicos de Algoritmos• Primero debemos pedirle a la persona (usuario) que nos diga el

primer valor. • Luego de que conocemos este valor, debemos almacenarlo (para

recordarlo después) en una neurona (Suponemos que un valor se puede almacenar en una neurona).

• Ya conocemos el primer valor y está almacenado en nuestro cerebro!!!.

• Ahora debemos pedir el segundo valor.• Una vez conocido, lo almacenamos en otra neurona distinta de la

anterior. ¿ Por qué?.......• Ahora que conocemos los dos valores procedemos a sumarlos, y

dicho resultado lo almacenamos en otra neurona distinta de las anteriores.

• Por último, le decimos el resultado a la persona que nos entrego los números.

Page 13: Unidad 1, 2 y_3_algoritmos

Conceptos Básicos de Algoritmos

– De lo anterior, al menos necesitamos 3 neuronas para sumar dos números.

– Le pedimos explícitamente que nos dijeran dichos valores.

– Le asignamos dichos valores a las neuronas– La suma la realizó nuestro cerebro de forma

mecánica. Note que no existen detalles de la operaciones básicas (*,/,+, -).

– Finalmente se da el resultado

Page 14: Unidad 1, 2 y_3_algoritmos

Conceptos Básicos de Algoritmos

• Algoritmo para sumar dos números:

• Definimos tres neuronas• Pedimos el primer valor• Almacenamos ese valor en la neurona 1.• Pedimos el segundo valor• Almacenamos ese valor en la neurona 2.• Almacenamos la suma de las neuronas 1 y 2 en la neurona 3• Entregamos el resultado que se encuentra en la neurona 3.

Page 15: Unidad 1, 2 y_3_algoritmos

Conceptos Básicos de Algoritmos

• Sin embargo, en los lenguajes no se pueden usar neuronas, pero podemos definir variables (Recuerde que las variables pueden tomar cualquier valor)

• En lugar de usar neurona 1 y neurona 2, se utilizan espacios de memoria que llamaremos “var_1” y “var_2”, y así sucesivamente. También las podemos llamar “x1” y “x2” ó “x” e “y” ….

Page 16: Unidad 1, 2 y_3_algoritmos

Conceptos Básicos de AlgoritmosEjercicio: Cree un algoritmo que multiplique tres números.

• Algoritmo para multiplicar tres números:– Definimos cuatro variables– Pedimos el primer valor– Almacenamos ese valor en var 1.– Pedimos el segundo valor– Almacenamos ese valor en var 2.– Pedimos el tercer valor– Almacenamos ese valor en var 3.– Almacenamos la multiplicación de las variables en var 4– Entregamos el resultado que se encuentra en var 4.

¿Podemos intentar multiplicar tres valores usando solo dos variables?

Page 17: Unidad 1, 2 y_3_algoritmos

Conceptos Básicos de Algoritmos

• La manera en que hemos detallado nuestros dos algoritmos se llama PSEUDOCÓDIGO. Y este pseudocódigo fue escrito en lenguaje natural.

• Otra manera de poder detallar nuestros algoritmos es a través de los diagrama de flujo. Un diagrama de flujo es una representación simbólica de la lógica del algoritmo.

Page 18: Unidad 1, 2 y_3_algoritmos

Elementos básicos presentes en un Algoritmo

PROGRAMA: Conjunto de instrucciones, con una secuencia lógica, escrito en algún Lenguaje de Programación que permite resolver un Problema. El programa recibe datos de entrada, realiza las operaciones de transformación requeridas, y entrega los resultados esperados.

ALGORITMO: Una secuencia de pasos (modelo) para realizar una tarea.

Page 19: Unidad 1, 2 y_3_algoritmos

Estructura general de un Algoritmo utilizando Pseudocódigo

Proceso <Nombre_Proceso> Variables Lista de variables Tipo_Dato; Acción_1 Acción_2 Acción_3 : : Acción_nFinProceso

Las variables son espacios de memoria reservados para el almacenamiento de datos requeridos por el algoritmo

Las instrucciones o acciones presentes en un programa o algoritmo se pueden clasificar de la siguiente manera:

• Instrucciones o acciones de transferencia de datos• Instrucciones o acciones aritméticos / lógicos• Instrucciones o acciones de transferencia de control (condicional o incondicional)

Page 20: Unidad 1, 2 y_3_algoritmos

Variables

Proceso <Nombre_Proceso> Variables Lista de variables Tipo_Dato; Acción1 Acción_2 Acción_3 : : Acción_nFinProceso

Las variables son espacios de memoria reservados para el almacenamiento de datos requeridos por el algoritmo.

Las variables quedan definidas por un nombre y el tipo de dato que pueda contener. La posición de memoria especificada por una variable solo puede contener un valor a la vez.

Nombre de Variable: se recomienda usar nombres “significativo”, asociado al uso que se le dará al dato almacenado.

Tipo de dato: Corresponde a un atributo del dato que permite especificar el dominio de valores que puede tomar y las operaciones que se pueden hacer sobre ellos. Los tipos de datos primitivos (básicos) son: Numérico (Entero o Decimal), Carácter y Lógicos.

Page 21: Unidad 1, 2 y_3_algoritmos

InstruccionesProceso <Nombre_Proceso> Variables Lista de variables Tipo_Dato; Acción_1 Acción_2 Acción_3 : : Acción_nFinProceso

Las instrucciones o acciones presentes en un programa o algoritmo se pueden clasificar de la siguiente manera:

• Instrucciones o acciones de transferencia de datos:•INGRESO/SALIDA DE DATOS (LECTURA/ESCRITURA)

Leer lista_de_variables; //separadas por coma

Escribir lista_de_expresiones; //separadas por comalista_de_expresiones: pueden ser variables, expresiones aritméticas, 'mensajes entre comillas simples'

•ASIGNACIÓNvariable <expresión>/<variable>

expresión: corresponde a una transformación matemática que usa variables definidas y/o funciones predefinidas o desarrolladas.

Page 22: Unidad 1, 2 y_3_algoritmos

•ASIGNACIÓNa 5;b a+z;c (a*a+b*b)/(a*b);

InstruccionesProceso <Nombre_Proceso> Variables Lista de variables Tipo_Dato; Acción_1 Acción_2 Acción_3 : : Acción_nFinProceso

• Ejemplos Instrucciones o acciones de transferencia de datos:

•INGRESO/SALIDA DE DATOS (LECTURA/ESCRITURA) Leer a, b, c; Escribir 'El valor ingresado de a =',a; Escribir 'La suma de a y b es =', a+b; Escribir 'La suma de ', a , ' + ‘ , b , 'es =', a+b; Escribir 'Ingrese un ´numero: '; Leer n

Page 23: Unidad 1, 2 y_3_algoritmos

InstruccionesProceso <Nombre_Proceso> Variables Lista de variables Tipo_Dato; Acción_1 Acción_2 Acción_3 : : Acción_nFinProceso

Las instrucciones o acciones presentes en un programa o algoritmo se pueden clasificar de la siguiente manera:

• Instrucciones o acciones aritméticos / lógicos:•Suma (+), Resta(-), Multiplicación(*), División (/), Módulo (%), Raíz cuadrada (RC) (el módulo como la raíz cuadrada pueden ser implementados con las operaciones básicas, pero por comodidad los utilizaremos en forma explicita)

• y (and o &), o (or 0 |), no (not o ~)(los operadores lógicos, al igual que los aritméticos y relacionales se utilizan en las expresiones lógicas presentes en las transferencias de control condicional)

Page 24: Unidad 1, 2 y_3_algoritmos

Ejemplos de Algoritmo básicos utilizando Pseudocódigo

Construir los algoritmos en pseudocódigo que permita resolver los siguientes problemas, mostrando el resultado por pantalla:

• sume dos valores• multiplica tres números • divida dos números• Calcular el cuadrado de un número• Determine los años de nacimiento de una persona a partir de la edad

Page 25: Unidad 1, 2 y_3_algoritmos

Ejemplos de Algoritmo básicos utilizando Pseudocódigo

Sume dos valoresProceso Suma Variables a,b,c Entero; Escribir 'Ingrese los datos a sumar'; Leer a,b; c<-a+b; Escribir 'La suma de los numeros ingresados es = ',c;FinProceso

Multiplica tres númerosProceso Suma Variables a,b,c,d Entero; Leer a,b,c; d<-a*b*c; Escribir d;FinProceso

Nota: //En la herramienta PSeInt no se definen previamente las variables

Page 26: Unidad 1, 2 y_3_algoritmos

Ejemplos de Algoritmo básicos utilizando Pseudocódigo

Divida dos númerosProceso División Variables a,b,c Entero; Escribir 'Ingresar el dividendo y divisor'; Leer a,b; c<-a/b; Escribir 'El resultado es =', c;FinProceso

Calcular el cuadrado de un númeroProceso cuadrado Variables a,c Entero; Escribir 'Ingresar un numero'; Leer a; c<-a*a; Escribir 'El cuadrado es ', c;FinProceso

Determine los años de nacimiento de una persona a partir de la edad

Proceso cuadrado Variables a Entero; //una sola variable Escribir 'Ingresar un numero'; Leer a; a<-a*a; Escribir 'El cuadrado es', a;FinProceso

Page 27: Unidad 1, 2 y_3_algoritmos

Ejemplos de Algoritmo básicos utilizando Pseudo-Código

Construir los algoritmos en pseudocódigo que permita resolver los siguientes problemas, mostrando el resultado por pantalla:

• Determinar la distancia entre dos puntos en el plano cartesiano

• Evaluar la función f(x)=3*x3+4*x2 - 5 para un valor especifico de x

• Evaluar la ecuación de primer grado

• Evaluar la ecuación de segundo grado

Page 28: Unidad 1, 2 y_3_algoritmos

Instrucciones de transferencia de controlProceso <Nombre_Proceso> Variables Lista de variables Tipo_Dato; Acción_1 Acción_2 Acción_3 : : Acción_nFinProceso

Las instrucciones o acciones presentes en un programa o algoritmo se pueden clasificar de la siguiente manera:

•Instrucciones o acciones de transferencia de control:•Transferencia condicional

Esta instrucción es necesaria cuando el flujo de ejecución del algoritmo depende de una condición lógica. La instrucción más simple es la bifurcación, en la cual la ejecución puede tomar dos cursos de acción dependiendo de una condición lógica.

Si expresion_logica Entoncesacciones_por_verdadero;

Sinoacciones_por_falso;

FinSi

•Transferencia repetitiva (se vera con posterioridad)•Transferencia incondicional (se explicara el porque no es aconsejable usar)

Page 29: Unidad 1, 2 y_3_algoritmos

Instrucciones de transferencia de controlProceso <Nombre_Proceso> Variables Lista de variables Tipo_Dato; Acción_1 Acción_2 Si expresion_logica Entonces acciones_por_verdadero; Sino acciones_por_falso; FinSi : Acción_nFinProceso

Evaluar la ecuación de primer grado

a x + b = 0

?a

bx = -b / a

a ≠ 0 Proceso Ecuacion_primer_grado Variables a,b Entero; x Flotante; Leer a,b; Si a = 0 Entonces Escribir 'La ecuacion no es de primer grado'; Sino x<- -b/a; //probar la solución con PSeInt Escribir x; FinSi Escribir 'Fin de Programa';FinProceso

Page 30: Unidad 1, 2 y_3_algoritmos

– Del ejemplo anterior podemos observar que la bifurcación permite seguir el flujo adecuado dada una condición.

– Las condiciones lógicas que se evalúan en las bifurcaciones son siempre verdaderas o falsas.

– También es posible que existan bifurcaciones contiguas.

– No necesariamente deben existir los dos cursos de acción.

Instrucciones de transferencia de control

Page 31: Unidad 1, 2 y_3_algoritmos

En las bifurcaciones, se evalúan proposiciones utilizando:• Operadores lógicos

y (and o &), o (or 0 |), no (not o ~)• Operadores aritméticos

(*) multiplicación, (/) división, (+) suma, (-) resta, (%) módulo• Operadores Relacionales

> (mayor que), < (menor que), = (igual), <= (menor o igual), >= (mayor o igual), != (distinto)*

Instrucciones de transferencia de control

* No presente en PSeint

Page 32: Unidad 1, 2 y_3_algoritmos

y, And, &

Y

&V F

V V F

F F F

O, Or, || No, ~

Tablas de verdad asociadas a los operadores lógicos and, or, not

Ejemplos de proposición lógica:7 > 3(a+b > c) y (b>0)~(a = 0)(b*b – 4*a*c) >= 0((b*b – 4*a*c) < 0) o (a=0)Deportes concepción es el mejor equipo del año

Cada una de estas expresiones tendrá un valor de verdad dependiendo de los valores de los operandos.

Page 33: Unidad 1, 2 y_3_algoritmos

Ejemplos se evaluación de proposiciones lógicas

Proceso <Nombre_Proceso> Variables Var1, var2, var3, var4 Entero; var1 2; var2 0; var3 4; var4 (var1*var1)/var3; Si (var4>=1) y (var1 !=0) Entonces acciones_por_verdadero; Sino acciones_por_falso; FinSi : Acción_nFinProceso

Proceso <Nombre_Proceso> Variables Var1, var2, var3, var4 Entero; var1 2; var2 0; var3 4; var4 (var3%var1) Si ((var4!=0) o (var2 >0)) y (var3 =4) Entonces acciones_por_verdadero; Sino acciones_por_falso; FinSi : Acción_nFinProceso

Es importante notar que existen prioridades entre los operadores. Por lo tanto, deben utilizarse paréntesis en los casos que correspondan

Page 34: Unidad 1, 2 y_3_algoritmos

Ejercicios: Construir, utilizando pseudocódigo, un algoritmo para cada uno de los siguientes enunciados Cree un algoritmo que divida dos números y muestre el resultado

Crear un algoritmo que muestre en forma ordenada tres números enteros ingresados desde teclado.

Cree un algoritmo que resuelva la ecuación de segundo grado, para valores reales, y muestre el resultado

Cree un algoritmo que resuelva la ecuación de segundo grado, para valores reales e imaginarios, y muestre el resultado

Cree un algoritmo que permita evaluar la siguiente función para un valor de x: (3x2-5x)/ (x-10) si x > 0 f(x)= (5x)/x si 0 < x <=10 x2 si x <=0

Cree un algoritmo que permita calcular el valor absoluto de un número

Cree un algoritmo que permita calcular el promedio de 20 números

Cree un algoritmo que permita sumar n números y muestre el resultado. El valor de n debe ser ingresado por teclado al igual que los números que se sumarán.

Page 35: Unidad 1, 2 y_3_algoritmos

Instrucciones de transferencia repetitivaEl último ejemplo planteado permite introducir el concepto de iteración o ciclo. Las estructuras iterativas permiten la ejecución de un grupo de instrucciones un número conocido o desconocido de veces.

• Concepto de Ciclo– Un ciclo es la repetición de un conjunto de instrucciones. Dicho ciclo

culmina cuando se cumple una condición lógica de de término.• Cuándo se aplican los Ciclos

– Se aplican cuando queremos ejecutar un conjunto de instrucciones varias veces.

Page 36: Unidad 1, 2 y_3_algoritmos

Bloque de Instrucción1

Condición lógica

Bloque de Instrucción2

Bloque de Instrucción3

Verdadero

Falso

Bloque de Instrución1;Mientras Condición_Logica Hacer

Bloque de Instrución2;

FinMientrasBloque de Instrución3;

Bloque de Instrucción1

Condición lógica

Bloque de Instrucción2

Bloque de Instrucción3

Verdadero

Falso

Bloque de Instrución1;Repetir

Bloque de Instrución2;

Hasta Que Condición_LogicaBloque de Instrución3;

Estructuras Iterativas

Page 37: Unidad 1, 2 y_3_algoritmos

Construir un algoritmo que permita imprimir los primeros n números pares

Programan

2468::2*nn > 0

Proceso Numeros_Pares Variables n,i Entero; Repetir Escribir 'Ingrese numeros de pares a imprimir'; Leer n; Hasta Que (n > 0) i <-1; Mientras (i <=n) Hacer Escribir 2*i; i <- i+1; FinMientras Escribir 'Fin del Programa';FinProceso

Page 38: Unidad 1, 2 y_3_algoritmos

Construir un algoritmo que permita calcular el promedio de n números ingresados por teclado

Programa

n

n > 0

Proceso Promedio Variables n,i,x,suma, prom Entero; Repetir Escribir 'Cuántos números sumara?'; Leer n; Hasta Que (n > 0) i <-1; suma<-0; Mientras (i <=n) Hacer Leer x; suma<-suma+x; i <- i+1; FinMientras prom<-suma/n Escribir 'Resultado:',prom;FinProceso

X1

X2

X3

:Xn

Promedio

Promedio= (x1+ x2+ x3+…. +xn)/n

n

(∑ xi = x1+ x2+ x3+…. +xn ) / n

i=1

Page 39: Unidad 1, 2 y_3_algoritmos

Construir un algoritmo que permita sumar números ingresados por teclado. El ingreso de números debe realizarse hasta que se ingrese un 0. Se debe imprimir la suma y la cantidad de números ingresados.

Programa

Proceso Sumatoria Variables n,i,x,suma Entero;

Escribir 'El programa terminara cuando ingrese un cero'; i<-0; suma<-0; Repetir Escribir 'Ingrese un numero'; Leer x; suma<-suma+x; i<-i+1 Hasta Que (x = 0) Escribir 'Resultado:',suma; Escribir 'Numeros ingresados: ' , i;FinProceso

X1

X2

X3

:X?

suma

suma= x1+ x2+ x3+…. +x?

Page 40: Unidad 1, 2 y_3_algoritmos

Construir un algoritmo que permita sumar números ingresados por teclado. El ingreso de números debe realizarse hasta que se ingrese un 0. Se debe imprimir la suma, la cantidad de números ingresados, además el menor y mayor valor ingresado.

Page 41: Unidad 1, 2 y_3_algoritmos

Estructuras Iterativas

Otra estructura iterativa es la siguiente:

Bloque de Instrucción1

Bloque de Instrucción2

Bloque de Instrucción3

VC ← VI , VF, Salto

Bloque de Instrución1;Para Variable_Numerica<-valor_inicial Hasta valor_final Con Paso paso Hacer Bloque de Instrución2;FinPara

Bloque de Instrución3;

Page 42: Unidad 1, 2 y_3_algoritmos

Construir un algoritmo que permita calcular el promedio de n números ingresados por teclado

Programa

n

n > 0

Proceso Promedio Variables n,i,x,suma, prom Entero; Repetir Escribir 'Cuantos numeros sumara?'; Leer n; Hasta Que (n > 0) suma<-0; Para i<-1 Hasta n Con Paso 1 Hacer Leer x; suma<-suma+x; FinPara prom<-suma/n Escribir 'Resultado: ',prom;FinProceso

X1

X2

X3

:Xn

Promedio

Promedio= (x1+ x2+ x3+…. +xn)/n

n

(∑ xi = x1+ x2+ x3+…. +xn ) / n

i=1

Page 43: Unidad 1, 2 y_3_algoritmos

¿Preguntas?

Page 44: Unidad 1, 2 y_3_algoritmos

Ejercicios• Crear un algoritmo que encuentre e imprima el número mayor de N números

enteros positivos ingresados por teclado.• Crear un algoritmo que calcule e imprima el resultado de la siguiente sumatoria n ∑i i=1• Cree un algoritmo que permita evaluar la siguiente función, para n valores de x:• (3x2-5x)/ (x-10) si x > 0• f(x)= (5x)/x si 0 < x <=10• x2 si x <=0

• Crear un algoritmo que permita evaluar la función f(x)=3*x3+4*x2-5 para todos los valores enteros de x comprendidos en el intervalo [a,b]

• Crear un algoritmo que permita generar los primeros n números de la serie de Fibonacci

• Crear un algoritmo que permita calcular la siguiente sumatoria: S= n + 2*n + 3*n +4*n +…….+ n*n