Capítulo 1: Algoritmos Introducción a la Ingeniería Informática [ICI-140] Capítulo 1: Algoritmos Dr. Ricardo Soto [[email protected]] [http://www.inf.ucv.cl/∼rsoto] M.Eng. Guillermo Cabrera [[email protected]] [http://www.inf.ucv.cl/∼gcabrera] Escuela de Ingeniería Informática Ponticia Universidad Católica de Valparaíso Marzo, 2010 Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 1/30 Capítulo 1: Algoritmos 1. Introducción Un algoritmo es un conjunto nito de instrucciones que especican la secuencia de operaciones a realizar para resolver un problema determinado. En otras palabras, es una fórmula para resolver un problema. Generalmente es una lista de la siguiente forma: Paso 1: Hacer algo Paso 2: Hacer algo Paso 3: Hacer algo . . . Paso n: Hacer algo Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 2/30 Capítulo 1: Algoritmos 1. Introducción Ejemplo Un alumno solicita ser el ayudante de un ramo. El profesor examina en la base de datos de la escuela el historial del alumno. Si el alumno está capacitado el profesor lo acepta como ayudante, en caso contrario la solicitud del alumno será rechazada. Los pasos del algoritmo en descripción narrativa son los siguientes: 1 Inicio 2 Leer solicitud del alumno 3 Leer historial del alumno 4 Si el alumno está capacitado, el profesor acepta la solicitud, en caso contrario la solicitud es rechazada. 5 Fin Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 3/30 Capítulo 1: Algoritmos 1. Introducción Ejemplo Calcular el promedio de tres notas. Inicio Leer nota 1 Leer nota 2 Leer nota 3 1 2 3 4 5 6 7 Asignar a suma_de_notas el resultado de nota1+ nota2 + nota3. Asignar a promedio el resultado de suma_de_notas / 3 Fin var nota1,nota2,nota3,promedio: numerico inicio leer (nota1) leer (nota2) leer (nota3) suma_de_notas = nota1 + nota2 + nota3 promedio = suma_de_notas / 3 n Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 4/30 Capítulo 1: Algoritmos 2. Tipos de datos El principal objetivo de todo computador es el manejo de información o datos. Un dato es la expresión general que describe los objetos con los cuales opera una computadora. Existen dos clases de tipos de datos: simples (sin estructura) y compuestos (estructurados). Tipos de datos simples Datos ______________|________________ | | | Numérico Carácter Lógico ______|______ | | Entero Real Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 5/30 Capítulo 1: Algoritmos 3. Variables, constantes, identicadores y expresiones Una constante es un objeto o una partida de datos cuyo valor no cambia durante el desarrollo del algoritmo o ejecución del programa. Una variable es un objeto o una partida de datos cuyo valor puede cambiar durante el desarrollo del algoritmo o ejecución del programa. Un identicador es el nombre que posee la variable. No se deben utilizar como identicadores palabras reservadas del lenguaje de programación. Una expresión es una combinaciones de constantes, variables, +,-,*,/,mod,div...), paréntesis y nombres símbolos de operación ( de funciones especiales. Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 6/30 Capítulo 1: Algoritmos 4. Estructuras de control estructuras de control son las que permiten conducir el ujo del estructuras selectivas y las estructuras repetitivas. Las programa. Existen dos tipos de estructuras de control: las Las estructuras selectivas se utilizan para tomar decisiones lógicas, también son llamadas estructuras de decisión o alternativas. Las estructuras repetitivas se utilizan para repetir una o varias acciones un número determinado de veces. Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 7/30 Capítulo 1: Algoritmos 4.1. Estructuras de control selectivas Alternativa simple si <condicion> { } <accion 1> <accion 2> si (numero MOD 2 == 0) { } imprimir("número es par") <accion n> Alternativa doble si <condicion> { <accion 1> ... <accion n> sino } <accion 1> ... <accion n> Dr. Ricardo Soto - M.Eng Guillermo Cabrera si (numero MOD 2 == 0) { imprimir("número es par") sino } imprimir("número es impar") Introducción a la Ingeniería Informática 8/30 Capítulo 1: Algoritmos 4.1. Estructuras de control selectivas Alternativa múltiple eval { caso <condicion 1> <accion 1> caso <condicion 2> <accion 2> ... caso <condicion n> <accion n> sino } imprimir("introduzca una vocal") leer(vocal) eval { caso (vocal == 'a') imprimir("ha pulsado la letra a") caso (vocal == 'e') imprimir("ha pulsado la letra e") caso (vocal == 'i') imprimir("ha pulsado la letra i") ... <accion sino> sino } imprimir("no ha pulsado una vocal") Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 9/30 Capítulo 1: Algoritmos 4.2. Estructuras de control repetitivas Mientras mientras <condicion> { } <accion 1> <accion 2> ... <accion n> mientras (i< 10) { } imprimir("el número es: ", i) i=i+1 Repetir repetir <accion 1> <accion 2> ... hasta <condicion n> repetir imprimir("el número es: ", i) i=i+1 hasta (i == 10) Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 10/30 Capítulo 1: Algoritmos 4.2. Estructuras de control repetitivas Desde desde <inicio_desde> hasta <fin_desde> { } <accion 1> <accion 2> ... <accion n> Dr. Ricardo Soto - M.Eng Guillermo Cabrera desde i=1 hasta 9 { } imprimir("el número es: ", i) Introducción a la Ingeniería Informática 11/30 Capítulo 1: Algoritmos Ejercicios Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 12/30 Capítulo 1: Algoritmos 4.3. Estructuras de control selectivas anidadas Si anidado si <condicion 1> { si <condicion 2> { } } <accion 1> ... <accion n> Si-sino anidado si <condicion 1> { si <condicion 2> { <accion 1> ... <accion n> sino } <accion 1> ... <accion n> sino ... } Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 13/30 Capítulo 1: Algoritmos 4.4. Estructuras de control repetitivas anidadas Mientras anidado Repetir anidado mientras <condicion1> { mientras <condicion2> { } repetir repetir } <accion 1> ... <accion n> hasta <condicion2> hasta <condicion1> <accion 1> ... <accion n> Desde anidado desde <inicio_desde> hasta <fin_desde> { desde <inicio_desde> hasta <fin_desde> { } } <accion 1> ... <accion n> Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 14/30 Capítulo 1: Algoritmos 4.4. Estructuras de control anidadas Posibilidad de anidar cualquier combinación de estructuras de control mientras <condicion1> { desde <inicio_desde> hasta <fin_desde> { si <condicion2> { repetir <condicion2> <accion 1> ... <accion n> hasta <condicion3> sino desde <inicio_desde> hasta <fin_desde> { } } } } <accion 1> ... <accion n> Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 15/30 Capítulo 1: Algoritmos Ejercicios Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 16/30 Capítulo 1: Algoritmos 5. Subprogramas Un método conocido para solucionar un problema complejo es dividirlo en subproblemas, o problemas más sencillos. La misma técnica se puede aplicar a los algoritmos, donde a cada uno de estos subproblemas le llamaremos Subprogramas, Subalgoritmos o Subrutinas. Programa Principal Problema Principal SubProblema 1 SubProblema 2 SubProblema 3 SubPrograma 1 SubPrograma 2 SubPrograma 3 Podemos identicar 2 tipos comunes de subprogramas: Funciones: retornan un valor y pueden utilizarse como operandos en expresiones. Procedimientos: no retornan un valor, por lo que no pueden utilizarse como operandos en expresiones. Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 17/30 Capítulo 1: Algoritmos 5.1. Funciones Una función es una operación que toma uno o más valores llamados argumentos y retorna un resultado. Los argumentos de la declaración de la función se denominan parámetros formales y sólo se utilizan dentro del cuerpo de la función. subrutina <nombre_funcion> (<parametros_formales>) retorna <tipo_de_dato> var <declaraciones_locales> inicio <acciones> retorna <expresion> n subrutina cuadrado(x: numerico) retorna numerico inicio retorna x*x n Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 18/30 Capítulo 1: Algoritmos 5.1. Funciones Invocación de la función <nombre_funcion> (<parametros_actuales>) Los argumentos utilizados en la llamada a la función se denominan parámetros actuales. Debe haber exactamente el mismo número de parámetros actuales y formales, presuponiéndose además correspondencia uno a uno de izquierda a derecha. ... inicio imprimir("ingrese número: ") leer(n) imprimir("el resultado es: ", cuadrado(n)) n subrutina cuadrado(x: numerico) retorna numerico inicio retorna x*x n Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 19/30 Capítulo 1: Algoritmos 5.2. Procedimientos procedimiento se utiliza cuando no es necesario retornar un valor al El programa principal. Los argumentos de la declaración de la función se denominan parámetros formales y sólo se utilizan dentro del cuerpo de la función. subrutina <nombre_funcion> (<parametros_formales>) var <declaraciones_locales> inicio <acciones> retorna <expresion> n subrutina mensaje_fuera_servicio() inicio imprimir("Estimado cliente lamentamos informarle que nuestro sitio se encuentra temporalmente fuera de servicio") n Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 20/30 Capítulo 1: Algoritmos 5.2. Procedimientos Invocación del procedimiento <nombre_procedimiento> (<parametros_actuales>) De igual forma que en las funciones: Los argumentos utilizados en la llamada al procedimiento se denominan parámetros actuales. Debe haber exactamente el mismo número de parámetros actuales y formales, presuponiéndose además correspondencia uno a uno de izquierda a derecha. ... inicio ... si (sistema_caido == TRUE) { mensaje_fuera_servicio() } ... subrutina mensaje_fuera_servicio() inicio imprimir("Estimado cliente lamentamos informarle ... n n Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 21/30 Capítulo 1: Algoritmos 5.3. Paso de Parámetros Existen dos formas de pasar parámetros: Por valor los cambios aplicados a la variable que recibe el parámetro NO se ven reejados en el programa que llama a la subrutina. Por referencia los cambios aplicados a la variable que recibe el parámetro SI se ven reejados en el programa que llama a la subrutina. Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 22/30 Capítulo 1: Algoritmos 5.3. Paso de Parámetros var a,b : numerico inicio a = 1 b = 1 mi_sub(a,b) imprimir("\n a: " ,a, "\n b: ",b) n subrutina mi_sub(a : numerico; ref b : numerico) inicio a=a+1 b=b+1 n Resultado a: 1 b: 2 Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 23/30 Capítulo 1: Algoritmos Ejercicios Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 24/30 Capítulo 1: Algoritmos 6. Arreglos Un arreglo es un conjunto nito y ordenado (cada elemento puede ser identicado) de elementos homogéneos (son del mismo tipo de datos). Existen distintos tipos de arreglos, los cuales varían dependiendo principalmente de su dimension: Arreglo unidimensional, también llamado vector. Arreglo bidimensional, también llamado matriz. Arreglo multidimensional. Los arreglos soportan diversas operaciones tales como asignación, lectura, escritura, recorrido, actualización (añadir, borrar, insertar), ordenación, búsqueda, etc. Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 25/30 Capítulo 1: Algoritmos 6.1 Arreglos Unidimensionales Declaración <nombre_arreglo> : vector [<tamaño>] <tipo_de_dato> mi_vector : vector [10] numerico notas[1] notas[2] notas[3] notas[n] Subíndice denota posición del elemento en el vector Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 26/30 Capítulo 1: Algoritmos 6.1 Arreglos Unidimensionales Lectura imprimir("Ingrese el primer valor del vector") leer(mi_vector[1]) Asignación mi_vector[1] = 28 //llenar el vector con ceros desde i=1 hasta 10 { mi_vector[i] = 0 } Impresión imprimir("El primer valor del vector es: ", mi_vector[1]) Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 27/30 Capítulo 1: Algoritmos 6.1 Arreglos Bidimensionales Declaración <nombre_arreglo> : vector [<tamaño_fila>,<tamaño_columna>] <tipo_de_dato> mi_matriz : matriz [10,10] numerico Fila 1 notas[1,1] notas[1,2] notas[1,j] Fila 2 notas[2,1] notas[2,2] notas[2,j] Fila 3 notas[3,1] notas[3,2] notas[3,j] Fila i notas[i,1] notas[i,2] notas[i,j] Columna 1 Columna 2 Dr. Ricardo Soto - M.Eng Guillermo Cabrera Columna j Introducción a la Ingeniería Informática 28/30 Capítulo 1: Algoritmos 6.1 Arreglos Bidimensionales Lectura imprimir("Ingrese el primer valor de la matriz") leer(mi_matriz[1,1]) Asignación mi_matriz[1,1] = 28 //llenar la matriz con ceros desde i=1 hasta 10 { desde j=1 hasta 10 { mi_vector[i,j] = 1 } } Impresión imprimir("El primer valor de la matriz es: ", mi_matriz[1,1]) Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 29/30 Capítulo 1: Algoritmos Ejercicios Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 30/30