PROGRAMACIN
UNIDAD 2
Algoritmos
Un ALGORITMO es una secuencia finita bien definida de
tareas bien definidas, cada una de las cuales se puede
realizar con una cantidad de recursos finitos.
Se dice que una tarea esta bien definida, si se sabe de
manera precisa las acciones requeridas para su realizacin.
Aunque los recursos que debe utilizar cada tarea deben ser
finitos estos no estn limitados, es decir, si una tarea bien
definida requiere una cantidad inmensa (pero finita) de
algn recurso para su realizacin, dicha tarea puede formar
parte de un algoritmo. Adems, se dice que una secuencia
de tareas esta bien definida si se sabe el orden exacto de
ejecucin de cada una de las mismas.
EJECUTAR un algoritmo es realizar las tareas del mismo, en
el orden especificado y utilizando los recursos disponibles.
Caractersticas de un algoritmo
Las caractersticas que debe poseer una secuencia de tareas para considerarse algoritmo son:
precisin, definitud y finitud.
Precisin
Definitud o determinismo
Finitud
El algoritmo debe indicar el orden exacto de ejecucin de cada tarea.
Si se sigue el algoritmo dos o ms veces con los mismos datos de entrada, se deben obtener los
mismos datos de salida.
El algoritmo debe terminar en algn momento y debe usar una cantidad de recursos finita.
Dada una cantidad de datos de entrada de un algoritmo, se dice que la cantidad de un recurso
usada por dicho algoritmo para su ejecucin determina la complejidad del algoritmo respecto a tal
recurso. Cuando se implementa un algoritmo en un computador digital, los recursos con los que se
cuenta son tiempo de proceso y memoria. Por lo tanto, a un algoritmo implementado en una
computadora se le pueden calcular sus complejidades temporal y espacial.[1]
[1] El estudio de la complejidad de un algoritmo respecto a sus recursos es conocido como
algoritmia, la cual no es tratada en este curso.
Diagramas de flujo
Se basan en la utilizacin de diversos smbolos
para representar operaciones especficas. Se
les llama diagramas de flujo porque los
smbolos utilizados son.
Simbologa
Pseudocdigo
Inicio
accin1
accin2
.
.
.
accin n
Fin
Decisin simple
si condicin entonces
accin1
accin2
.
.
.
accin n
Condicin doble
si condicin entonces
accin1
accin2
.
.
.
en caso contrario
accin1
accin2
Iteracin fija
para var. Entera inicial hasta final hacer
accin1
accin2
.
.
.
accin n
Condicional al inicio
mientras condicin hacer
accin1
accin2
.
.
.
accin n
Condicional al final
repita
accin1
accin2
.
.
.
accin n
Hasta que condicin
Seleccin
casos selector de
valor1 : accin1
accin2
valor2 : accin1
accin2
...
valor n : accin1
accin2
Ejemplos de algoritmos
1. PROBLEMA: Un
estudiante se encuentra
en su casa (durmiendo) y
debe ir al ITO (a tomar la
clase de Fundamentos
de programacin!!),
qu debe hacer el
estudiante?
Inicio
Dormir
haga 1 hasta que suene el despertador (o lo llame la mam).
Mirar la hora.
Hay tiempo suficiente?
Si hay, entonces
Baarse.
Vestirse.
Desayunar.
Sino,
Vestirse.
Cepillarse los dientes.
Despedirse de la mam y el pap.
Hay tiempo suficiente?
Si, Caminar al paradero.
Sino, Correr al paradero.
Hasta que pase un autobs para el ITO haga :
Esperar el autobs
Ver a las dems personas que esperan un autobs.
Tomar el autobs.
Mientras no llegue a l ITO haga :
Seguir en el autobs.
Pelear mentalmente con el conductor.
Timbrar.
Bajarse.
Entrar a l ITO.
Fin
2. PROBLEMA: Cambiar la
rueda ponchada de un
automvil teniendo un gato
mecnico en buen estado, una
rueda de reemplazo y una
llave inglesa.
Inicio
PASO 1. Aflojar los tornillos de la rueda
pinchada con la llave inglesa.
PASO 2. Ubicar el gato mecnico en su sitio.
PASO 3. Levantar el gato hasta que la rueda
ponchada pueda girar libremente.
PASO 4. Quitar los tornillos y la rueda
ponchada.
PASO 5. Poner rueda de repuesto y los
tornillos.
PASO 6. Bajar el gato hasta que se pueda
liberar.
PASO 7. Sacar el gato de su sitio.
PASO 8. Apretar los tornillos con la llave
inglesa.
Fin
3. PROBLEMA: Realizar la
suma de los nmeros 2448 y
5746.
Inicio
PASO 1. Colocar los nmeros el primero
encima del segundo, de tal manera que las
unidades, decenas, centenas, unidades de
millar de los nmeros queden alineadas. Trazar
una lnea debajo del segundo nmero.
PASO 2. Empezar por la columna ms a la
derecha.
PASO 3. Sumar los dgitos de dicha columna.
PASO 4. Si la suma es mayor a 9 anotar un 1
encima de la siguiente columna a la izquierda y
anotar debajo de la lnea las unidades de la
suma. Si no es mayor anotar la suma debajo de
la lnea.
PASO 5. Si hay ms columnas a la izquierda,
pasar a la siguiente columna a la izquierda y
volver a 3.
PASO 6. El nmero debajo de la lnea es la
solucin.
Fin
Inicio
Ejercicios de algoritmos
1. Buscar en el directorio telefnico, el nmero de:
a. Jos Gonzlez Prez
b. Pedro Gmez Bernal.
c. Escribir un algoritmo que sirva para buscar a cualquier
persona.
.
4. haga una caja de cartn con tapa de:
Datos
Instrucciones
Estructuras de
control
Lo que el algoritmo
recibe, procesa y
entrega como
resultado.
Las acciones o
procesos que el
algoritmo realiza
sobre los datos.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Inicio
Crear variable n1
Leer primer nmero entero positivo
Asignarle el valor ledo a n1
Crear variable n2
Leer segundo nmero entero positivo
Asignarle el valor ledo a n2
Crear variable resultado
Inicializar la variable resultado con cero
Si n1 es mayor o igual a n2 entonces
Restarle a n1 el valor de n2
Incrementar en uno el valor de la variable resultado
Regresar a paso 10
Fin de Si
Mostrar el valor de la variable resultado
Fin
Pseudocdigo
Inicio
var n1
var n2
var resultado
n1 Leer(Dame nmero entero positivo)
n2 Leer(Dame nmero entero positivo)
resultado 0
Mientras (n1 >= n2) hacer
n1 n1 n2
resultado++
Fin-mientras
Imprimir (El resultado es: + resultado)
Fin
var n1
2
Imprimir
resultado
Leer n2
resultado = 0
Fin
var n2
n1 > n2
var resultado
n1 = n1 n2
Leer n1
resultado ++
Diagrama de flujo
1
Inicio
Leer n2
Imprimir
resultado
var n1
resultado = 0
Fin
var n2
n1 > n2
var resultado
n1 = n1 n2
Leer n1
resultado ++
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Inicio
Crear variable n1
Leer primer nmero entero positivo
Asignarle el valor ledo a n1
Crear variable n2
Leer segundo nmero entero positivo
Asignarle el valor ledo a n2
Si n2 es menor o igual a 0 (cero)
Regresar a paso 6
Fin-si
Crear variable resultado
Inicializar la variable resultado con cero
Si n2 es mayor a cero
Sumar a resultado el valor de n1
Decrementar en uno el valor de la variable n2
Regresar a paso 13
Fin de Si
Mostrar el valor de la variable resultado
Fin
Inicio
var num1, num2
Var intento1, intento2
Var jugar = verdadero
Hacer
num1=Leer(Jugador 1:Dame el nmero a adivinar entre1-100)
mientras (num1 <1)
Hacer
num2=Leer(Jugador 2:Dame el nmero a adivinar entre1-100)
mientras (num2 <1)
Imprimir(Iniciemos el juego)
Mientras (jugar = verdadero)
intento1=Leer(Jugador 1: cul crees que es el nmero secreto del
jugador 2?)
Fin-mientras
Ejercicio
Del algoritmo anterior, realiza el pseudocdigo y
el diagrama de flujo correspondiente.
Nmeros primos
Iniciar
var n
var contador
hacer
n Leer (Dame un nmero entero positivo)
mientras (n<2)
contador 2
Mientras ( n%contador <> 0 y contador < sqrt(n) )
hacer
contador++
Fin-mientras
Si ( contador < sqrt(n) ) entonces
Imprimir ( No es nmero primo)
En otro caso
Imprimir (Es nmero primo)
Fin-Si
Fin
LA PAREJA MS CERCANA.
Inicio
var numeros [10]
var x, pos1, pos2,y
x1
pos1 0
pos2 0
Hacer
numeros[x] Leer (Dame un nmero entero positivo entre 1 y 1000)
si (numeros[x] >= 1 y numeros[x] <=1000)
x++
En otro caso
Imprimir (Nmero invlido)
Fin-si
mientras ( x <= 10)
x1
Mientras (x < 10)
si (pos1 == 0) entonces
pos1 1
pos2 pos1 + 1
en-otro-caso
y x+1
mientras (y <= 10)
si (absoluto(numeros[x] numeros[y] ) < absoluto(numeros[pos1] numeros[pos2]) entonces
pos1 x
pos2 y
fin-si
y++
fin-mientras
Fin-si
x++
Fin-mientras
Escribir (La pareja ms cercana es: + numeros[pos1] + , + numeros[pos2])
Fin