Vous êtes sur la page 1sur 38

FUNDAMENTOS DE

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.

Tcnicas para la formulacin de


algoritmos
Las tcnicas para la formulacin de algoritmos
ms populares son:
Diagramas de flujo
Pseudocdigo

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

Es un lenguaje de especificacin de algoritmos. El uso de tal lenguaje hace el paso


de codificacin final (esto es, la traduccin a un lenguaje de programacin)
relativamente fcil.
El pseudocdigo naci como un lenguaje similar al lenguaje natural y era un medio
para representar bsicamente las estructuras de control de programacin
estructurada. Se considera un primer borrador, dado que el pseudocdigo tiene
que traducirse posteriormente a un lenguaje de programacin.
La ventaja del pseudocdigo es que en su uso en la planificacin de un programa,
el programador se puede concentrar en la lgica y en las estructuras de control y
no preocuparse de las reglas de un lenguaje especfico. Es tambin fcil modificar
el pseudocdigo si se descubren errores o anomalas en la lgica del programa,
adems de todo esto es fcil su traduccin a lenguajes como Pascal, C o Basic.
El pseudocdigo utiliza para representar las acciones sucesivas palabras reservadas
(similares a sus homnimos en los lenguajes de programacin), tales como inicio,
fin, si-entonces-sino, mientras, repita-hasta.etc
Secuencia

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

Condicional al final MIENTRAS


Hacer
accin1
accin2
.
.
.
accin n
Mientras 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

4. PROBLEMA: Sean los


puntos P=(a,b) y Q=(c,d)
que definen una recta,
encontrar un segmento
de recta perpendicular a
la anterior que pasa por
el punto medio de los
puntos dados.

PASO 1. Trazar un crculo con centro en el punto P que


pase por el punto Q.

PASO 2. Trazar un crculo con centro en el punto Q


que pase por el punto P.

PASO 3. Trazar un segmento de recta entre los puntos de interseccin de las


circunferencias trazadas.

Fin. El segmento de recta trazada es el buscado.

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.

2. Calcular el nmero de das entre las fechas:

a. Enero 17 de 1972 y Julio 20 de 1973


b. Febrero 2 de 1948 y Agosto 11 de 1966
c. Escribir un algoritmo que sirva para calcular la cantidad de
das entre 2 fechas cualquiera.

3. Solicitar en prstamo algn libro de una biblioteca

.
4. haga una caja de cartn con tapa de:

a. 20 cm de largo, por 10 cm de ancho y 5 cm de alto.


b. 10 cm de largo, por 30 cm de ancho y 15 cm de alto.
c. Escribir un algoritmo que sirva para construir una caja de
cartn con tapa de cualquier tamao.

5. Construir un avin de papel.

6. Calcular manualmente la divisin de cualquier par de nmeros


naturales. El resultado tambin debe ser un nmero natural. Escribir un
algoritmo para calcular el residuo de la divisin.

7. Un juego muy famoso entre dos nios es el de adivina mi nmero, el


cual consiste en que cada nio trata de adivinar el nmero pensado por el
otro nio. Dicho nmero generalmente est entre 1 y 100. Las reglas del
juego son las siguientes:
a. Cada nio posee un turno en el que trata de averiguar el
nmero del otro.
b. En su turno el primer nio pregunta si un nmero que dice es
el pensado por el segundo.
c. Si el nmero que ha dicho el primer nio es el que pens el
segundo, este ltimo debe informarle al primero que gan.
d. Si el nmero no es, el segundo nio debe decir si su nmero
pensado es menor o mayor al que el primer nio dijo.
e. Luego el segundo nio tiene su turno y de esta manera se
van intercalando hasta que alguno de los dos gane. Desarrollar
un algoritmo para jugar adivina mi nmero.

8. Una balanza se encuentra en equilibrio cuando el producto de la carga aplicada


sobre el brazo derecho por la longitud de este brazo, es igual al producto de la
carga aplicada sobre el brazo izquierdo por la longitud de este otro brazo.
Determinar si la balanza se encuentra en equilibrio si:

a. La longitud del brazo izquierdo es3 m, la del derecho es 2 m,


la carga aplicada al brazo izquierdo es 5 Kg y la carga aplicada al
derecho es 7 Kg.
b. La longitud del brazo izquierdo es4 m, la del derecho es 2 m,
la carga aplicada al brazo izquierdo es 4 Kg y la carga aplicada al
derecho es 4 Kg.
c. Desarrollar un algoritmo que sirva para cualquier conjunto
de valores para las longitudes de los brazos y las cargas
aplicadas.

Estructura bsica de un algoritmo

En esencia un algoritmo est constituido por los siguientes tres elementos:

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.

Las que determinan


el orden en que se
ejecutarn las
instrucciones del
algoritmo.

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

Diagrama de1 flujo


Inicio

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.

Dada una lista de nmeros enteros positivos que puede


contener desde 5 hasta 1000 elementos, por ejemplo
(4,6,1,90,56,379,23,35,99,82) se desea saber, cules
dos de ellos son los mas cercanos en valor, es decir,
que el valor absoluto de su diferencia sea menor que el
de cualquier otra pareja de nmeros en la lista. Para la
lista anterior, la pareja ms cercana son 4 y 6, ya que
ningn otro par de nmeros tiene una resta cuyo valor
absoluto sea menor a 2 (6-4=2). Escribe de la manera
ms eficiente posible, un algoritmo que permita,
mediante el uso de una computadora obtener la pareja
ms cercana de una lista dada.

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