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
[http://www.inf.ucv.cl/∼gcabrera]
Escuela de Ingeniería Informática
Ponti�cia 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 especi�can
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 labase de datos de la escuela el historial del alumno. Si el alumno estácapacitado el profesor lo acepta como ayudante, en caso contrario lasolicitud del alumno será rechazada.
Los pasos del algoritmo en descripción narrativa son los siguientes:
1 Inicio2 Leer solicitud del alumno3 Leer historial del alumno4 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.
1 Inicio
2 Leer nota 1
3 Leer nota 2
4 Leer nota 3
5 Asignar a suma_de_notas el resultadode nota1+ nota2 + nota3.
6 Asignar a promedio el resultado desuma_de_notas / 3
7 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 deinformación o datos. Un dato es la expresión general que describelos objetos con los cuales opera una computadora.
Existen dos clases de tipos de datos: simples (sin estructura) ycompuestos (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, identi�cadores y expresiones
Una constante es un objeto o una partida de datos cuyo valor nocambia durante el desarrollo del algoritmo o ejecución del programa.
Una variable es un objeto o una partida de datos cuyo valor puedecambiar durante el desarrollo del algoritmo o ejecución delprograma.
Un identi�cador es el nombre que posee la variable. No se debenutilizar como identi�cadores palabras reservadas del lenguaje deprogramación.
Una expresión es una combinaciones de constantes, variables,símbolos de operación (+,-,*,/,mod,div...), paréntesis y nombresde 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
Las estructuras de control son las que permiten conducir el �ujo delprograma. Existen dos tipos de estructuras de control: las estructurasselectivas y las estructuras repetitivas.
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 accionesun 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>
<accion n>
}
si (numero MOD 2 == 0)
{
imprimir("número es par")
}
Alternativa doble
si <condicion>
{
<accion 1>
...
<accion n>
sino
<accion 1>
...
<accion n>
}
si (numero MOD 2 == 0)
{
imprimir("número es par")
sino
imprimir("número es impar")
}
Dr. Ricardo Soto - M.Eng Guillermo Cabrera 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
<accion 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")
...
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>
}
desde i=1 hasta 9
{
imprimir("el número es: ", i)
}
Dr. Ricardo Soto - M.Eng Guillermo Cabrera 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
mientras <condicion1>
{
mientras <condicion2>
{
<accion 1>
...
<accion n>
}
}
Repetir anidado
repetir
repetir
<accion 1>
...
<accion n>
hasta <condicion2>
hasta <condicion1>
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 ensubproblemas, o problemas más sencillos. La misma técnica se puedeaplicar a los algoritmos, donde a cada uno de estos subproblemas lellamaremos Subprogramas, Subalgoritmos o Subrutinas.
ProblemaPrincipal
SubProblema2
SubProblema3
SubProblema1
ProgramaPrincipal
SubPrograma2
SubPrograma3
SubPrograma1
Podemos identi�car 2 tipos comunes de subprogramas:
Funciones: retornan un valor y pueden utilizarse como operandos enexpresiones.
Procedimientos: no retornan un valor, por lo que no puedenutilizarse 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 llamadosargumentos y retorna un resultado.
Los argumentos de la declaración de la función se denominanparámetros formales y sólo se utilizan dentro del cuerpo de lafunció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 denominanparámetros actuales.
Debe haber exactamente el mismo número de parámetros actuales yformales, 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
El procedimiento se utiliza cuando no es necesario retornar un valor alprograma principal.
Los argumentos de la declaración de la función se denominanparámetros formales y sólo se utilizan dentro del cuerpo de lafunció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 denominanparámetros actuales.
Debe haber exactamente el mismo número de parámetros actuales yformales, presuponiéndose además correspondencia uno a uno de
izquierda a derecha.
...
inicio
...
si (sistema_caido == TRUE)
{
mensaje_fuera_servicio()
}
...
�n
subrutina mensaje_fuera_servicio()
inicio
imprimir("Estimado cliente
lamentamos informarle ...
�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 seven re�ejados en el programa que llama a la subrutina.
Por referencia
los cambios aplicados a la variable que recibe el parámetro SI se venre�ejados 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
Resultadoa: 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 identi�cado) de elementos homogéneos (son del
mismo tipo de datos).
Existen distintos tipos de arreglos, los cuales varíandependiendo 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[3]notas[2] notas[n]
Subíndice denota posicióndel 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
notas[1,1] notas[1,2] notas[1,j]
Columna 1
notas[2,1] notas[2,2] notas[2,j]
notas[3,1] notas[3,2] notas[3,j]
notas[i,1] notas[i,2] notas[i,j]
Columna 2 Columna j
Fila 1
Fila 2
Fila 3
Fila i
Dr. Ricardo Soto - M.Eng Guillermo Cabrera 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