You are on page 1of 30

Capítulo 1: Algoritmos

Introducción a la Ingeniería Informática [ICI-140]


Capítulo 1: Algoritmos

Dr. Ricardo Soto


[ricardo.soto@ucv.cl]
[http://www.inf.ucv.cl/∼rsoto]
M.Eng. Guillermo Cabrera
[guillermo.cabrera@ucv.cl]
[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.
1 Inicio 5 Asignar a suma_de_notas el resultado
2 Leer nota 1 de nota1+ nota2 + nota3.
3 Leer nota 2 6 Asignar a promedio el resultado de
4 Leer nota 3 suma_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 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,


símbolos de operación ( +,-,*,/,mod,div...), paréntesis y nombres
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

Las estructuras de control son las que permiten conducir el ujo del
estructuras
programa. Existen dos tipos de estructuras de control: las
selectivas 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 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> si (numero MOD 2 == 0)


{ {
<accion 1> imprimir("número es par")
<accion 2> }

<accion n>
}

Alternativa doble

si <condicion> si (numero MOD 2 == 0)


{ {
<accion 1> imprimir("número es par")
... sino
<accion n> imprimir("número es impar")
sino }
<accion 1>
...
<accion n>
}

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 imprimir("introduzca una vocal")


{ leer(vocal)
caso <condicion 1> eval
<accion 1> {
caso <condicion 2> caso (vocal == 'a')
<accion 2> imprimir("ha pulsado la letra a")
... caso (vocal == 'e')
caso <condicion n> imprimir("ha pulsado la letra e")
<accion n> caso (vocal == 'i')
sino 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> mientras (i< 10)


{ {
<accion 1> imprimir("el número es: ", i)
<accion 2> i=i+1
... }
<accion n>
}

Repetir

repetir repetir
<accion 1> imprimir("el número es: ", i)
<accion 2> i=i+1
... hasta (i == 10)
hasta <condicion n>

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> desde i=1 hasta 9


{ {
<accion 1> imprimir("el número es: ", i)
<accion 2> }
...
<accion n>
}

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-sino anidado

si <condicion 1> si <condicion 1>


{ {
si <condicion 2> si <condicion 2>
{ {
<accion 1> <accion 1>
... ...
<accion n> <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> repetir


{ repetir
mientras <condicion2> <accion 1>
{ ...
<accion 1> <accion n>
... hasta <condicion2>
<accion n> 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 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.
Problema Programa
Principal Principal

SubProblema SubProblema SubProblema SubPrograma SubPrograma SubPrograma


1 2 3 1 2 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
El procedimiento se utiliza cuando no es necesario retornar un valor al
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.

...
subrutina mensaje_fuera_servicio()
inicio inicio
...
imprimir("Estimado cliente
si (sistema_caido == TRUE)
lamentamos informarle ...
{
n
mensaje_fuera_servicio()
}
...
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 Columna j

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
Capítulo 1: Algoritmos

Ejercicios

Dr. Ricardo Soto - M.Eng Guillermo Cabrera Introducción a la Ingeniería Informática 30/30