Вы находитесь на странице: 1из 20

Algoritmos.

Definicin:
Un algoritmo se puede definir como una secuencia de instrucciones que representan un
modelo de solucin para determinado tipo de problemas. O bien como un conjunto de
instrucciones que realizadas en orden conducen a obtener la solucin de un problema.
Para realizar un programa es conveniente el diseo o definicin previa del algoritmo. El
diseo de algoritmos requiere creatividad y conocimientos profundos de la tcnica de
programacin. Luis Joyanes, programador experto y autor de muc hos libros acerca de
lgica y programacin nos dice en la ciencia de la computacin y en la programacin,
los algoritmos son ms importantes que los lenguajes de programacin o las
computadoras. Un lenguaje de programacin es slo un medio para expresar un
algoritmo y una computadora es slo un procesador para ejecutarlo.
Loa algoritmos son independientes de los lenguajes de programacin. En cada problema
el algoritmo puede escribirse y luego ejecutarse en un lenguaje diferente de
programacin. El algoritmo es la infraestructura de cualquier solucin, escrita luego en
cualquier lenguaje de programacin.
Caractersticas de los algoritmos

Preciso. Definirse de manera rigurosa, sin dar lugar a ambigedades.


Definido. Si se sigue un algoritmo dos veces, se obtendr el mismo resultado.
Finito. Debe terminar en algn momento.
Puede tener cero o ms elementos de entrada.
Debe producir un resultado. Los datos de salida sern los resultados de efectuar
las instrucciones.

Se concluye que un algoritmo debe ser suficiente para resolver el problema. Entre
dos algoritmos que lleven a un mismo objetivo, siempre ser preferible el ms corto
(se deber analizar la optimizacin de tiempos y / o recursos).
Etapas para la solucin de un problema por medio del computador
1. Anlisis del problema, definicin y delimitacin (macroalgoritmo). Considerar
los datos de entrada, el proceso que debe realizar el computador y los datos de
salida.
2. Diseo y desarrollo del algoritmo (se utiliza pseudocdigo, escritura natural del
algoritmo, diagramas de flujo, etc. )
3. Prueba de escritorio. Seguimiento manual de los pasos descritos en el algoritmo.
Se hace con valores bajos y tiene como fin detectar errores.
4. Codificacin. Seleccin de un lenguaje de programacin y digitacin del
pseudocdigo haciendo uso de la sintaxis y estructura gramatical del lenguaje
seleccionado.

5. Compilacin o interpretacin del programa. El software elegido convierte las


instrucciones escritas en el lenguaje a las comprendidas por el computador.
6. Ejecucin. El programa es ejecutado por la mquina para llegar a los resultados
esperados.
7. Depuracin (debug). Operacin de detectar, localizar y eliminar errores de mal
funcionamiento del programa.
8. Evaluacin de resultados. Obtenidos los resultados se los evala para verificar si
son correctos. (Un programa puede arrojar resultados incorrectos an cuando su
ejecucin no muestra erorres).
Clasificacin y Tipos de algoritmos
Se ha clasificado a los algoritmos de diversas formas, de acuerdo con algunos de sus
atributos. Por ejemplo:

A) Segn el sistema de signos con el que describen los pasos a seguir, se reconocen:
Algoritmos cualitativos: cuando se hace a travs de palabras, es decir, las instrucciones
son verbales. Sucede, por ejemplo, con recetas de cocina.
Algoritmos cuantitativos: cuando se hace a travs de clculos numricos. Se puede
hacer un algoritmo, por ejemplo, para obtener la raz cuadrada de un nmero.

B) Segn su funcin, los algoritmos pueden ser:


Algoritmos de ordenamiento: secuencian los elementos que ingresan a partir de un
cierto orden, en general, segn un orden numrico o lxico.
Algoritmos de bsqueda: al contrario de realizar operaciones o secuenciar elementos, se
dedica a encontrar dentro de una lista que ingresa, uno o varios elementos en particular que
cumplan con el conjunto de condiciones dadas.
Algoritmos de encaminamiento: deciden de qu modo se deber transmitir algo que
llega, y cmo seguir un conjunto de pasos encadenados. Se dividen fundamentalmente
entre adaptativos y estticos, los primeros con cierta capacidad de aprendizaje y ajuste a
la circunstancia, mientras que los segundos funcionan mecnicamente, siempre del mismo
modo. Es importante decir que los algoritmos de encaminamiento cuentan con una propia
subdivisin, segn el camino que se toma para que la transmisin llegue de manera
efectiva (ejemplos de estos tipos son: por el camino ms corto, de manera ptima, basado
en el flujo, etc.).

C) Tambin los algoritmos han sido clasificados segn la estrategia que se utiliza para
llegar al resultado. Veamos algunos ejemplos:
Algoritmos probabilsticos: no se puede estar seguro de la exactitud de la respuesta que
darn. Se agrupan en distintos subtipos, pero con esa premisa: o bien presentan soluciones
aproximadas del problema, o bien presentan soluciones que pueden ser correctas pero
tambin errneas.
Algoritmo cotidiano: es el que se da en la vida comn de las personas, no se aplica en
sistemas informticos ni en nada ajeno al da a da. Muchas de las decisiones que se toman
desde que uno se despierta por la maana pertenecen a este grupo.
Algoritmo heurstico: abandona alguno de los objetivos como recurso para terminar
llegando a la solucin. En general, son utilizados cuando no existe una solucin mediante
las vas tradicionales.
Algoritmo de escalada: se comienza con una solucin insatisfactoria (que no cumple la
entrada y la salida), y se la va modificando aproximndose a lo que se busca. En algn
momento, estaremos cerca de (o llegaremos a) la solucin correcta.
Algoritmo voraz: Con la idea de llegar a una solucin ptima definitiva, elige analizar
cada paso como nico y elegir la solucin ptima para ese paso.
Algoritmo determinista: es completamente lineal (cada paso tiene un paso sucesor y un
paso predecesor) y por lo tanto predictivo, si se conocen sus entradas y su forma de
proceder. El algoritmo de Euclides, que permite averiguar el mximo comn divisor entre
dos nmeros, responde a este tipo. Se distinguen de los no deterministas, donde el
algoritmo tiene un comportamiento en forma de rbol.
Algoritmos cualitativos y algoritmos cuantitativos
Un algoritmo es cualitativo cuando en sus pasos o instrucciones no estn involucrados
clculos numricos. Las instrucciones para armar un aeromodelo, para desarrollar una
actividad fsica o encontrar un tesoro, son ejemplos de algoritmos cualitativos.
Trate de disear el algoritmo para estos casos

Tomar mate
Utilizar una gua telefnica
Cocinar siguiendo una receta
Cambiar una llanta de automvil
Buscar una palabra en el diccionario

Los algoritmos cuantitativos involucran clculos numricos. Ejemplos:

Solucin de un factorial
Solucin de una ecuacin de segundo grado
Encontrar el mnimo comn multiplicador.

Tcnicas de representacin
Para la representacin de un algoritmo, antes de ser convertido a lenguaje de
programacin, se utilizan algunos mtodos de representacin escrita, grfica o
matemtica. Los mtodos ms conocidos son:

Diagramacin libre (Diagramas de flujo)


Diagramas Nassi-Shneiderman
Pseudocdigo
Lenguaje natural (espaol, ingls, etc.)
Frmulas matemticas

El lenguaje natural puede no ser suficientemente preciso, permitiendo ambigedades,


obteniendo una descripcin no del todo satisfactoria. Las frmulas, propias del
lenguaje matemtico, son un buen sistema de

representacin, pero no suelen ser fciles de convertir en programas. Por lo tanto,


trataremos en este curso los tres primeros modelos.

Ejercicios Resueltos
Ejercicio 1:- En un estacionamiento cobran $/. 1.500 por hora o fraccin. Disee un
algoritmo que determine cuanto debe pagar un cliente por el estacionamiento de su
vehculo, conociendo el tiempo de estacionamiento en horas y minutos.
Algoritmo 1

INICIO
// Declaracin de variables
ENTERO horas, minutos
REAL pago
// Entrada de datos
LEER horas, minutos
// Si hay alguna fraccin de hora, incrementa las horas a pagar en una unidad
SI( minutos > 0 )
horas = horas + 1
// Determina el importe a pagar
pago = horas * 1.500
// Salida de resultados
IMPRIMIR pago
FIN

Ejercicio 2:- Disee un algoritmo que determine si n nmero es o no es, par positivo.

Algoritmo

INICIO
// Declaracin de variables
REAL numero
CADENA tipoNumero
// Entrada de datos
LEER numero
// Determina si el nmero es o no es, par positivo
SI( (numero%2==0) && (numero>0) )
tipoNumero = "El nmero es par positivo"
SINO
tipoNumero = "El nmero no es par positivo"
// Salida de resultados
IMPRIMIR tipoNumero
FIN

Ejercicio 3:- Un supermercado ha puesto en oferta la venta al por mayor de cierto


producto, ofreciendo un descuento del 15% por la compra de ms de 3 docenas y 10% en

caso contrario. Adems por la compra de ms de 3 docenas se obsequia una unidad del
producto por cada docena en exceso sobre 3. Disee un algoritmo que determine el monto
de la compra, el monto del descuento, el monto a pagar y el nmero de unidades de
obsequio por la compra de cierta cantidad de docenas del producto.
Algoritmo

INICIO
// Declaracin de variables
REAL montopag, montocom, montodes, precio
ENTERO docenas, obsequio
// Entrada de datos
LEER docenas, precio
// Determina el monto de la compra
montocom = docenas*precio
// Determina el monto del descuento y el obsequio
SI( docenas > 3 ){
montodes = 0.15*montocom
obsequio = docenas-3
}
SINO{
montodes = 0.10*montocom
obsequio = 0
}
// Determina el monto a pagar
montopag = montocom - montodes
// Salida de resultados
IMPRIMIR montocom, montodes, montopag, obsequio
FIN

Ejercicio 4:- Disee un algoritmo que lea un nmero de tres cifras y determine si es igual
al revs del nmero.
Observacin
Como el nmero tiene tres cifras, para que sea igual al revs, basta con que la cifra de las
unidades sea igual a la cifra de las centenas. Por ejemplo: 353, 878, etc.
Algoritmo

INICIO
// Salida de resultados
ENTERO numero, unidades, centenas
CADENA tipoNumero
// Entrada de datos
LEER numero
// Si el nmero tiene tres cifras...
SI(numero >99 && numero < 1000 ){
// Determina la cifra de las unidades y la cifra de las centenas
unidades = numero%10
centenas = int(numero/100)
// Determina si el nmero es igual al inverso
SI( unidades == centenas )
tipoNumero = "El nmero es igual al inverso"
SINO
tipoNumero = "El nmero no es igual al inverso"
// Muestra el tipo de nmero
IMPRIMIR tipoNumero
}
SINO
IMPRIMIR "Debe ingresar un nmero de tres cifras"
FIN

Ejercicio 5:- Una compaa dedicada al alquiler de automoviles cobra un monto fijo de
$300000 para los primeros 300 km de recorrido. Para ms de 300 km y hasta 1000 km,
cobra un monto adicional de $ 15.000 por cada kilmetro en exceso sobre 300. Para ms
de 1000 km cobra un monto adicional de $ 10.000 por cada kilmetro en exceso sobre
1000. Los precios ya incluyen el 20% del impuesto general a las ventas, IVA. Disee un
algoritmo que determine el monto a pagar por el alquiler de un vehculo y el monto
includo del impuesto.
Algoritmo

INICIO
// Declaracin de variables
REAL kilomrec, montopag, montoiva, montofijo = 300000, iva = 0.20
// Entrada de datos
LEER kilomrec
// Determina el monto a pagar
SI( kilomrec <= 300 )
montopag = montofijo
SINO SI( kilomrec <= 1000 )
montopag = montofijo + 15000*(kilomrec-300)
SINO
montopag = montofijo + 15000*700 + 10000*(kilomrec-1000)
// Determina el monto del impuesto
montoiva = iva*montopag
// Salida de resultados
IMPRIMIR montopag, montoiva
FIN

Ejercicio 6:- Disee un algoritmo que determine quienes son contemporneos entre Juan,
Mario y Pedro.
Algoritmo

INICIO
// Declaracin de variables
ENTERO EdadJuan, EdadMario, EdadPedro
CADENA contemporaneos
// Entrada de datos
LEER EdadJuan, EdadMario, EdadPedro
// Determina quienes son contemporneos
SI(EdadJuan == EdadMario && EdadMario == EdadPedro)
contemporaneos = "Los tres son contemporneos"
SINO
SI(EdadJuan == EdadMario)
contemporaneos = "Juan y Mario son contemporneos"
SINO
SI(EdadJuan == EdadPedro)
contemporaneos = "Juan y Pedro son contemporneos"
SINO
SI(EdadMario == EdadPedro)
contemporaneos = "Mario y Pedro son contemporneos"
SINO
contemporaneos = "No hay contemporneos"
// Salida de resultados
IMPRIMIR contemporaneos
FIN

Ejercicio 7:- El promedio de prcticas de un curso se calcula en base a cuatro prcticas


calificadas de las cuales se elimina la nota menor y se promedian las tres notas ms altas.
Disee un algoritmo que determine la nota eliminada y el promedio de prcticas de un
estudiante.
Algoritmo

INICIO
// Declaracin de variables
REAL pc1, pc2, pc3, pc4, pcmenor, promedio
// Entrada de datos
LEER pc1, pc2, pc3, pc4
// Determina la nota menor
pcmenor = pc1
SI( pc2 < pcmenor )

pcmenor = pc2
SI( pc3 < pcmenor )
pcmenor = pc3
SI( pc4 < pcmenor )
pcmenor = pc4
// Determina el promedio
promedio = (pc1 + pc2 + pc3 + pc4 - pcmenor )/3
// Salida de resultados
IMPRIMIR promedio, pcmenor
FIN

Ejercicio 8:- Disee un algoritmo que lea tres longitudes y determine si forman o no un
tringulo. Si es un tringulo determine de que tipo de tringulo se trata entre: equiltero (si
tiene tres lados iguales), issceles (si tiene dos lados iguales) o escaleno (si tiene tres lados
desiguales). Considere que para formar un tringulo se requiere que: "el lado mayor sea
menor que la suma de los otros dos lados".
Algoritmo

INICIO
// Declaracin de variables
REAL L1, L2, L3, suma
CADENA tipoTriangulo
// Entrada de datos
LEER L1, L2, L3<
// Determina el lado mayor
mayor = L1
SI( L2 > mayor )
mayor = L2
SI( L3 > mayor )

mayor = L3
// Determina la suma de los lados a excepcin del lado mayor
suma = L1 + L2 + L3 - mayor
// Determina de que tipo de tringulo se trata
SI( mayor < suma ){
SI( ( L1 == L2 ) && ( L2 == L3 ) )
tipoTriangulo= "Tringulo equiltero"
SINO SI( ( L1 == L2 ) || ( L1 == L3 ) || ( L2 == L3 ) )
tipoTriangulo= "Tringulo issceles"
SINO
tipoTriangulo= "Tringulo escaleno"
}
SINO
tipoTriangulo= "No es un tringulo"
// Salida de resultados
IMPRIMIR tipoTriangulo
FIN

Ejercicio 9:- Disee un algoritmo que lea un nmero entero de 3 cifras, y forme el mayor
nmero posible con las cifras del nmero ingresado. El nmero formado debe tener el
mismo signo que el nmero ingresado.
Algoritmo

INICIO
// Declaracin de variables
ENTERO num1, num2, numaux, uni, dec, cen, menor, mayor,medio
// Entrada de datos
LEER num1
// Si el nmero tiene tres cifras...
SI( ( num1 >= 100 && num1 <= 999 ) || ( num1 >= -999 && num1 <= -100 ) ){

// Guarda el nmero en una variable auxiliar para preservar el signo


numaux = num1
// Cambia el signo de num1 en caso de ser negativo
SI( num1 < 0 )
num1 = -num1
// Determina las cifras del nmero
cen = num1/100
dec = (num1%100)/10
uni = (num1%100)%10
// Determina la cifra menor
menor = cen
SI( dec < menor )
menor = dec
SI( uni < menor )
menor = uni
// Determina la cifra mayor
mayor = cen
SI( dec > mayor )
mayor = dec
SI( uni > mayor )
mayor = uni
// Determina la cifra del medio
medio = cen+dec+uni-mayor-menor
// Forma el nuevo nmero
SI( numaux > 0 )
num2 = mayor*100 + medio*10 + menor
SINO
num2 = -1*(menor*100 + medio*10 + mayor)
// Imprime el nuevo nmero
IMPRIMIR num2
}
SINO
IMPRIMIR "El nmero no tiene tres cifras"
FIN
QU ES UN DIAGRAMA DE FLUJO
Un diagrama de flujo es una representacin grfica de un proceso. Cada paso del proceso
es representado por un smbolo diferente que contiene una breve descripcin de la etapa de
proceso. Los smbolos grficos del flujo del proceso estn unidos entre s con flechas que
indican la direccin de flujo del proceso.
El diagrama de flujo ofrece una descripcin visual de las actividades implicadas en un
proceso mostrando la relacin secuencial ente ellas, facilitando la rpida comprensin de
cada actividad y su relacin con las dems, el flujo de la informacin y los materiales, las
ramas en el proceso, la existencia de bucles repetitivos, el nmero de pasos del proceso,
las operaciones de interdepartamentales Facilita tambin la seleccin de indicadores de
proceso

Elaboracin del Diagrama de Flujo


El diagrama de flujo debe ser realizado por un equipo de trabajo en el que las distintas
personas aporten, en conjunto, una perspectiva completa del proceso, por lo que con
frecuencia este equipo ser multifuncional y multijerrquico.
Determinar el proceso a diagramar.
Definir el grado de detalle. El diagrama de flujo del proceso puede mostrar a grandes
rasgos la informacin sobre el flujo general de actividades pricipales, o ser desarrollado de
modo que se incluyan todas las actividades y los puntos de decisin. Un diagrama de flujo
detallado dar la oportunidad de llevar realizar un anlisis ms exhaustivo del proceso.
Identificar la secuencia de pasos del proceso. Situndolos en el orden en que son
llevados a cabo.
Construir el diagrama de flujo. Para ello se utilizan determinados smbolos. Cada
organizacin puede definir su propio grupo de smbolos. En la figura anterior se mostraba
un conjunto de smbolos habitualmente utilizados. Al respecto cabe decir que en la figura
Conector de proceso es frecuentemente utilizado un crculo como smbolo. Para la
elaboracin de un diagrama de flujo, los smbolos estndar han sido normalizados, entro
otros, el American National Standars Institute (ANSI).
Revisar el diagrama de flujo del proceso.
Diagramas Nassi-Schneiderman o Chapin
Tambin conocidos como Diagramas de Chapin, corresponden a uno de los tipos de
diagramacin estructurada. Las acciones se escriben en rectngulos o cajas sucesivas. Se
pueden escribir diferentes acciones en una caja. La simbologa utilizada es como vemos
en las figuras siguientes.

Pseudocdigo
Es la tcnica que permite expresar la solucin de un problema mediante un algoritmo
escrito en palabras normales de un idioma (por ejemplo, el espaol), utilizando palabras
imperativas. Es comn encontrar en pseudocdigo palabras como: Inicie, lea, imprima,
sume, divida, calcule, finalice. No hay un lxico obligado para el pseudocdigo, pero
con el uso frecuente se han establecido algunos estndares. Este es un ejemplo de un
programa escrito en pseudocdigo:

Inicie
{Calcule el salario neto y deduccin de 6% } {Esto es un comentario}
Lea nombre, horas, valor_hora
Salario_bruto=horas*valor_hora
Deduccion=Salario_bruto*6%
Salario_neto=Salario_bruto Deduccion
Imprima nombre, Salario_bruto, Deduccion, Salario_neto
Finalice

Tcnicas de diagramacin
En nuestra asignatura, por su facilidad y adecuada representacin de los problemas a
resolver, utilizaremos para represetar los algoritmos, a la tcnica de diagramas de flujo.

A su vez, para un mejor ordenamiento en la realizacin de esos diagramas, se han


elaborado tcnicas de diseo de los mismos.
Nosotros utilizaremos las denominadas top-down y estructrurada.
La primera de ellas, la top-down, persigue la descomposicin de un problema en partes,
tomando en primer lugar la dimensin total, para luego ir identificando sus partes
componentes e ir tratndolas en forma particular y con mayor grado de detalle cada vez,
hasta llegar a una expresin final de resolucin simple, trivial o ya conocida.
La diagramacin estructurada no indica la forma en que se pueden utilizar y vincular
los smbolos grficos entre s.
De esta manera se distinguen la siguientes estructuras elementales, que luego al
combinarse entre s, dan lugar al diagrama total.
Estructuras:
Secuencia
Decisin simple
Decisin mltiple
Repeticin con condicin inicial
Repeticin con condicin final