Está en la página 1de 72

Mdulo 1

Anlisis de
Algoritmos.


1


1.1- Introduccin.

El objetivo de la presente unidad es realizar una introduccin acerca de los
usos de los algoritmos para resolver problemas y poder utilizar los mismos
en los distintos casos de uso.
En esta unidad se presentarn los elementos esenciales que los
caracterizan, as como las reglas e instrucciones bsicas necesarias para
realizar los ejercicios pedidos. Se estudiarn sus caractersticas, anlisis
sobre el tiempo de ejecucin de los mismos, las distintitas notaciones (ej.
!"rande#, los problemas de las b$squedas estticas y las limitaciones.
%inalmente, tendremos varios ejemplos a &in de practicar los conceptos que
veremos en esta unidad.

Definicin de algoritmo.

Un algoritmo es un mtodo para resolver un problema. Es
un conjunto de instrucciones ordenadas que tienen un
tiempo de ejecucin y que para la cual consume una serie de
recursos identificados. Todo algoritmo tiene un punto de
inicio y un punto de terminacin, los cuales son nicos y
claramente identificables.
'odo algoritmo debe cumplir las siguientes caractersticas(
) Ser preciso( esto signi&ica que los pasos u operaciones del algoritmo
deben desarrollarse en un orden estricto.
) Ser definido( el algoritmo se desarrolla como paso &undamental para
desarrollar un programa, el computador slo desarrollar las tareas
programadas, con los datos suministrados*no puede improvisar ni inventa
el dato que necesite para realizar un paso. +or ello, cuantas veces se
ejecute el algoritmo, el resultado depende estrictamente de los datos
suministrados, de ,ec,o si se ejecuta con un mismo conjunto de datos de
entrada, el resultado ser siempre el mismo.

-

) Ser finito( el n$mero de pasos de un algoritmo, por grande y complicado
que sea el problema que soluciona, debe ser limitado. 'odo algoritmo
incluye los pasos inicio y &in.
) Presentacin formal( el algoritmo debe estar e.presado en alguna de las
&ormas com$nmente aceptadas. /as &ormas de presentacin de algoritmos
son, entre otras( el pseudocdigo, diagrama de &lujo y diagramas de
0assi1Sc,neiderman.
) Correccin( el algoritmo debe satis&acer la necesidad o solucionar el
problema para el cual &ue dise2ado. +ara garantizar que el algoritmo logre
el objetivo, es necesario ponerlo a prueba*a esto se le llama veri&icacin o
prueba de escritorio.
) Eficiencia( En cuanto menos recursos requiere ser ms e&iciente el
algoritmo. Este concepto se aplica, entre otros puntos, las &ormas de
almacenar los datos, de leerlos, etc.

Ejemplos de algoritmos.
Supongamos que tenemos un problema en el auto, 3qu4 debemos ,acer5
6ebemos encontrar lo que anda mal (resolver el problema#, para lo cual,
primeramente queremos ver qu4 puede ,acer el auto y qu4 no puede
,acer (estado inicial#.
+ara ello ,acemos di&erentes operaciones, por ejemplo, damos arranque,
prendemos las luces (en varios casos aplicamos algunos golpes sobre el
motor#.
Si estamos con un mecnico, nos preguntar si sentimos algo raro cuando
empez la &alla, si cambiamos algo, etc.* intentar realizar algunos
controles (aceite, presin de los cilindros, carga de la batera, etc.#. Es
decir, tanto nosotros como el mecnico, intentamos obtener datos que nos
permitan llegar a un diagnstico, y &inalmente saber la accin a seguir, el
tiempo de reparacin y el costo. +or lo que el algoritmo que realiz &ue el
siguiente(
7ecabar la in&ormacin inicial.
6iagnosticar (ejecutar el algoritmo#
8n&ormar los resultados obtenidos.
+or ejemplo, el mismo concepto es aplicable a(
8nstrucciones para montar una bicicleta.
ESTAR SEGUROS DE:
) Entender el problema
) +resentarlo de una
manera 9&amiliar: al
usuario
) btener la
aprobacin
) +restar atencin a
cualquier comentario
) En caso de cambios
volver a presentarlos al
usuario
) Si tienen impacto en
el plan de trabajo(
in&ormarlo

;

<acer una receta de cocina.
btener el rea de un tringulo.
En todos ellos es conveniente responder a las siguientes preguntas(
3=u4 entradas se requieren5
3>ul es la salida deseada5
3=u4 m4todo produce la salida deseada5




Diseo del Algoritmo.
?n algoritmo recibe datos de entrada y devuelve datos de salida.
Esta 9trans&ormacin: o 9generacin: de nuevos datos se conoce como
procesamiento de la informacin
+ara procesar la in&ormacin, es muy importante tener desarrollados los
algoritmos pertinentes, pero veremos ms adelante que no son ellos solos
los en este procesamiento.
/os m4todos ms e&icaces para el proceso de dise2o se basan en el
conocido divide y vencers, es decir, la resolucin de un problema
complejo se realiza dividiendo el problema en sub!problemas y a
continuacin dividir estos sub!problemas en otros de nivel ms bajo o sea
ms simples, ,asta que pueda ser implementada una solucin en la
computadora y as sucesivamente (de lo global a lo concreto#* es lo que se
denomina dise2o descendente (Top-o!n design# o modular.
?na vez realizado un primer acercamiento al problema, 4ste se ,a de
ampliar, (romper el problema en cada etapa y e.presar cada paso en &orma
ms detallada# lo que denominamos como re&inamiento del algoritmo
("tep!ise #efinement#.
>ada sub!problema es resuelto mediante un mdulo (sub!programa#, que
tiene un solo punto de entrada y un solo punto de salida.
$%mo puedo obtener la solucin deseada si mi error
est& en el planteo del problema'

@

>ualquier programa bien dise2ado consta de un programa principal (el
mdulo de nivel ms alto# que llama a sub!programas (mdulos de nivel
ms bajo# que a su vez puede llamar a otros sub!programas.
/os programas estructurados de esta &orma se dicen que tienen un dise2o
modular y el m4todo de romper el programa en mdulos ms peque2os se
llama programacin modular.
/os mdulos pueden ser planeados, codi&icados, comprobados y depurados
independientemente (incluso por di&erentes programadores# y a
continuacin combinarlos entre ellos.
El proceso implica la ejecucin de los siguientes pasos ,asta que el
programa se termina(
1. +rogramar el mdulo.
-. >omprobar el mdulo.
;. Si es necesario, depurar el mdulo.
@. >ombinar el mdulo con los mdulos anteriores.
El proceso que convierte los resultados del anlisis del problema en un
dise2o modular, con re&inamiento sucesivos que permitan una posterior
traduccin a un lenguaje, se denomina dise2o del algoritmo.
El dise2o del algoritmo es independiente del lenguaje de programacin en
el que se vaya a codi&icar posteriormente.
En todos los casos, durante el desarrollo de la materia, evitaremos
&ocalizarnos en un lenguaje y de igual manera todo ejemplo o ejercicio que
les pida deber ser resuelto con las instrucciones propias, que veamos
dentro de algoritmos. +or ejemplo( 7esumiendo todo lo visto ,asta a,ora,
en dise2o top!doAn, modular sera(







Es decir, que resolver un problema, implica la resolucin de tres sub!
problemas en el siguiente orden(


B

1C. Dnlisis del problema
-C 6ise2ar el algoritmo
;C Dplicar la solucin en la computadora.
bviamente cada uno de estos sub!problemas pueden a su vez dividirse en
otros* por ejemplo(






>on lo cual vemos que el concepto de dividir un gran problema en
peque2os problemas, nos ayuda a(
) 7educir la complejidad para el desarrollo
) %acilitar la comprensin de la lgica de cada proceso
) >ada proceso pasa a tener un objetivo $nico
) >ualquier cambio se aplica sobre el proceso espec&ico que maneja la
situacin a&ectada
) +ermite reducir los &uturos costos de mantenimiento.
) +ermite entregas parciales que ayudan a reducir los tiempos totales.

Tipos de Ojetos.
/os algoritmos trabajan con datos de la realidad, esta in&ormacin que
recibe, deber procesarla, por lo cual puede generar nuevos datos a partir
de la in&ormacin ingresada, trans&ormar directamente lo que ingreso al
proceso y actualizar o in&ormar a partir de las condiciones que le
de&inamos.
Esa relacin de comunicacin, ya sea de entrada al mismo o de salida
desde el algoritmo lo realiza mediante 6D'S, que en nuestro proceso los
conocemos como >DE+S.

DIERE!CIA:
CA"PO( estructura
de&inida en el algoritmo
y que servir para
realizar las operaciones
requeridas.

DATO( valor de la
in&ormacin a manejar
dentro de mi algoritmo.

El valor del 6D' se
mueve dentro de un
>DE+

F

+odemos dar como primera de&inicin, que un >DE+ es el elemento que
nosotros identi&icamos mediante un nombre, por lo cual una de las
caractersticas &undamentales del >DE+ es su nombre* ese nombre que
declaramos es el que permite que el algoritmo lo identi&ique unvocamente
y que mediante el mismo lo utilizare en el proceso en las operaciones que
desarrollemos. Eientras que el 6D' es el valor que ese campo tiene.
Ese valor lo puede obtener desde(
) El e.terior
) +or modi&icaciones durante el proceso.
+or tal motivo consideramos al >DE+ como el nombre y lugar &sico en el
cual alojaremos el valor o 6D'.
>ada 6D' tiene una particularidad, y es justamente el tipo de in&ormacin
que puede traer y por la cual a esa particularidad debemos de&inirla en el
>DE+ que lo va a contener. +or ejemplo, encontramos rpidamente dos
grandes divisiones(
) caracteres al&ab4ticos (9a, b, 6, G, H, 1,I, ;, B#
) n$meros (1 - @,B !J K,@#,
Lemos que dentro de los caracteres al&ab4ticos incluyo tambi4n n$meros*
esos n$meros que ingreso, ms adelante, los tomaremos como caracteres,
es decir, no podremos ,acer operaciones matemticas con ellos.
D,ora los veamos un poco ms en pro&undidad y podremos distinguir una
divisin mayor en los tipos de objetos( +ara esto vamos a ,acer un peque2o
repaso de la clasi&icacin de los n$meros que vimos en las clases de
Eatemtica.
El sistema num4rico lo podemos clasi&icar de la siguiente &orma(





Seg$n lo cual un n$mero que utilicemos como tal, es decir que nos permita
usarlo en operaciones matemticas pude ser o bien un !#"ERO REA$ o un
!#"ERO E!TERO%
6e&iniendo entonces como(


M

) E!TERO( son slo n$meros enteros( 1, K, -J, ;K, B, tambi4n los
enteros negativos (!1, !@K, etc.#, pero siempre sin decimales.
) REA$( son los enteros ms los n$meros decimales (;1@, K.@B , !J , !
NB.@B , etc.#

D,ora bien, tambi4n e.isten otros tipos de datos, como vimos antes, que
son los caracteres al&ab4ticos, con la aclaracin de los n$meros que en caso
de ser de&inidos de esta manera no podemos usarlos para operaciones
matemticas.
+ara nuestros algoritmos los de&iniremos como(
) A$A!U"&RICO: ?n objeto que representa una cadena de
caracteres, que pueden ser letras o n$meros, en este caso los
n$meros se toman como caracteres, es decir que no tendrn un valor
num4rico.
+or Ej.( 9SanEartin1BB@:

) CAR'CTER: ?n carcter es cualquier smbolo que se representa en
&orma de un solo smbolo.
+or Ej.: OaP* O-P* OQP
+or lo que la di&erencia entre un tipo de dato >D7R>'E7 y uno
D/%D0?ES78> es que el primero es slo cuando se quiere indicar un
$nico carcter.
+or $ltimo tenemos un tipo de dato especial que es el /T"8>, que lo
de&inimos como(
) $(GICO: Slo ,ay dos posibilidades, verdadero y &also, un valor
lgico es un valor de verdad. +ero siempre debe tener uno de esos
valores.
+or Ej.( eo& 1 no eo& (es el indicador de &in de arc,ivo# ( est en eo& o
est en no eo&#

Ddems los objetos pueden ser(
) Constantes:
1. 0ormales(
a. Enteros

J

b. 7eales
c. Dl&anum4ricas
d. >arcter
e. /gica
-. %igurativas(
a. Enteros
b. 7eales
c. Dl&anum4rica
d. >arcter
e. /gica
) )aria*les

%onstante (definicin)( ?n objeto de tipo constante es un valor cuyo
contenido no puede variar.
+odramos di&erenciar(
) Constante !ormal( Lalor constante e.presado en si mismo. +or Ej.( Lalor
num4rico 1-J
) Constante figurati+as( ?n nombre que de manera &igurada simboliza un
valor constante que no cambia. +or Ej.( +8 I ;,1@1F* en el que +8 sera la
constante.
*ariable (definicin)( /ugar en la memoria que esta reservado, y que posee
un nombre, un tipo y un contenido. El valor de la variable puede cambiar y
puede ser modi&icado a lo largo del programa.
Dl igual que las constantes pueden ser de tipo(
) Enteros
) 7eales
) Dl&anum4rica
) /gica
) >arcter

N

/a variable tiene un valor determinado, de &orma que el tipo de variable,
debe de ser uno en concreto, por lo tanto el primer dato de la variable
condicionar los posteriores datos que almacenar despu4s.
$a +aria*le contiene tres cualidades:
! +ombre
! Tipo
! *alor
En el momento de declarar una variable deberemos de&inir el nombre y el
tipo, pero el valor podr declararse despu4s.
+ara &acilitar y recordar &cilmente qu4 valor tiene asignado cada variable,
4sta deber tener un nombre acorde al valor que contenga.
'ambi4n podemos decir que las variables y constantes tienen un atributo
que es la longitud, o sea la cantidad m.ima de caracteres o dgitos que
4stas pueden contener.
+odemos adems asignarle un valor y este valor puede ser modi&icado a lo
largo de todo el procesamiento, por esta razn, se denominan Lariables.
Ejemplo(
07/E"DGI -@MMN O,e estamos asignando a la variable +#-,E./0- el
*alor 12334
Descripcin del Tipo , $ongitud
TIPO E-emplos Defino como
+umrico, Entero 51677 entero
+umrico, #eal 126.86 real
,gico9*erdadero .*. lgico
,gico9:also .:. lgico
%ar&cter9alfabtico9;nica </= car&cter
%ar&cter9alfabtico9cadena </nal>a= alfanumrico
+or lo tanto, en el lenguaje de pseudocdigo podramos de&inir como
ejemplo las siguientes variables(
>antidad( entero
0ombre( al&anum4rico
Sueldo( real


1K

Resumiendo
+odemos encontrar solamente @ tipos de datos en nuestros ejercicios(
) 7eal
) Entero
) Dl&anum4rico
) /gico

E!presiones.
6entro de nuestros algoritmos podemos ,acer una separacin, un tanto
parcial, diciendo que tendremos instrucciones y e.presiones.
Leremos en este momento un poco ms en detalle las EU+7ES80ES.
D,ora bien, 3a qu4 consideramos una e.presin5
+odemos considerar como e.presiones tanto una operacin matemtica
como un manejo de cadena de caracteres.
Expresiones de resultado nico
Eensaje I :Euy Vuenos 6as:
Suma I @WJ




Expresiones de resultado variable
Sueldo I VsicoWVsicoHK.BK
0ombre I :Sr. : ,SXnombre
En estos ejemplos, tanto el campo V&sico como el campo "?nombre, son
las variables


CONSUL!@ $Au tipo de dato le Bubieras asignado a
Censaje y "uma'

CONSUL!@ $Au tipo de dato le Bubieras asignado a
"ueldo y +ombre'


11

Ejemplo 1( si a la variable Vsico le corresponde el valor BKK, la e.presin
resultara
Sueldo I BKKWBKKHK.BK
:inalmente
Sueldo I MBK
Ejemplo -( si a la variable SXnombre le corresponde el valor 9Guan +erez:,
la e.presin resultara(
0ombre I :Sr. :,SXnombre
0ombre I Sr. Guan +erez

Operaciones "undamentales
Lamos a de&inir a continuacin estructuras que nos permitirn interactuar
con el ambiente y determinar la &orma en que podemos resolver los
clculos matemticos y operaciones con caracteres.

!signacin
/a utilizamos cuando a un campo determinado le queremos mover un valor
espec&ico, ya sea producto de una operacin matemtica o no.
>uando creamos una variable a trav4s de su de&inicin (Ej.( >antidad,
entera#, estamos reservando un lugar en memoria, pero no le estamos
pasando ning$n valor* es lo que identi&icamos como el >DE+. D,ora bien,
cuando le queremos dar un valor la operacin que usamos es la asignacin
y decimos que le estamos asignando un valor.
+or ejemplo al campo LD78, le movemos el valor que tiene el campo D, eso
quiere decir que a LD78 le asigno el valor de D
Lari I D
6onde el signo 9I: representa la asignacin
Ej.( 0ombreI:Dna:
Esto signi&ica que al campo 0EV7E, le asignamos el valor 9Dna:.
/a asignacin la representamos por el 9I:, pero tambi4n podemos utilizar

1-


6ebemos tener especial cuidado de moverle a un campo, un tipo de dato
igual al que usamos para de&inir al campo, es decir, moveremos caracteres
a un campo de&inido como tal, y podremos mover n$meros a utilizar en
operaciones aritm4ticas si previamente al campo lo de&inimos como entero
o como real.

Operaciones Num"ricas
/as operaciones ms comunes son la de contar o la de acumular en un
campo. +ara ello, se utilizan dos estructuras(
) Dcumuladores
) >ontadores.
Si bien son operaciones bsicamente similares, tiene peque2as
particularidades que las di&erencian.
/cumuladores
>onsiste en la operacin de ir acumulando cantidades variables dentro de
una misma variable.
3=u4 ,ago primero5( 6E%80 /DS LD78DV/ES D ?'8/8YD7, por ejemplo(
Importe. entera
Acumulo. entera
3=u4 caractersticas tienen5 =?E S8EE+7E 6EVE0 SE7 0?ES78>DS, ZD SED
E0'E7D (como en este caso# o 7ED/.
Si el campo el cual se acumula es 7ED/, tenemos que pensar que
seguramente el acumulador tambi4n deba ser 7ED/
3=u4 ,ago despu4s5, utilizo al campo D>?E?/ (en este caso# como el
campo en la cual voy guardando la suma de todos los campos 8E+7'E
que pasen por esta instruccin.
Acumulo / Acumulo 0 Importe
>ada vez que se pase por esta instruccin, se agregar al contenido de la
variable Dcumulo el contenido de la variable 8mporte.

1;

Ejemplo de esto, podra ser sumar las ventas de todo un da, donde en una
variable se acumulara los importes de todas las &acturas. Es adelante
pondremos en prctica ejemplos de este tipo.

%ontadores
>onsiste en la operacin de ir sumando cantidades constantes dentro de
una variable.
>antidad, entera 11O6e&ino la variable a utilizar que debe ser de tipo
num4rica
>antidad I >antidad W 1
>ada vez que el programa pase por esta instruccin incrementar en uno el
valor de %antidad.
>omo se puede apreciar, bsicamente ambas operaciones son similares, la
di&erencia radica en que las primeras el valor se incrementa en &orma
variable y en las segundas en &orma constante.
Este tipo de variables se podra aplicar para determinar por ejemplo,
dentro de un conjunto de personas cuntas de ellas son del se.o &emenino
y cuantas del se.o masculino.

Operaciones !lfab"ticas o alfanum"ricas
Estas operaciones son aquellas de&inidas para el manejo de caracteres.
+ara resolverlas e.iste una jerarqua de operaciones a tener en cuenta(
-peracin
1. +ar4ntesis
-. %unciones
;. >oncatenacin

:unciones para el manejo de caracteres
DI/E0(Lariable#
Esta &uncin devuelve la cantidad de caracteres ocupados de una variable
al&ab4tica o al&anum4rica, despreciando los caracteres en blanco del &inal.
Ejemplo(

1@

D, al&anum4rica
V, entera
DI:Guan +erez:
VI/E0(D# 11 El contenido de V es I1K

%oncatenacin de %adena de %aracteres
/a concatenacin puede ser de&inida como una suma de caracteres, pero
no una suma algebraica, sino como la unin de cadena de caracteres.
Ejemplo(
DI:Guan:, 9+erez: da como resultado 9Guan +erez:
En este caso a cada valor que quiero mover lo debo colocar entre 9: por ser
caracteres (ese es el caso de 9Guan: y de 9+erez:#,
/uego uno a ambos por medio de la 9 , 9
Si ,ubiera tenido la in&ormacin de la siguiente manera(
DI:Vuenos:
VI:6as:
> I D W V da como resultado 9Vuenos 6as:

Operaciones de Entrada # Salida
El objetivo del proceso es tomar y validar la in&ormacin de entrada luego
e&ectuar una trans&ormacin de la misma seg$n las instrucciones que
previamente se le de&ini. +or tal motivo, debemos contar con operaciones
que establezcan la inter&az con el medio en que est inmerso el algoritmo
desarrollado.
Vsicamente cuando tomamos datos del ambiente para drselos a la
aplicacin estamos realizando una operacin de E0'7D6D y cuando
devolvemos al ambiente los resultados obtenidos ,acemos una operacin
de SD/86D.
Dnalicemos estas dos operaciones.



1B

Entrada de $atos
El ingreso de datos desde un teclado lo vamos a realizar por medio de la
instruccin
I!GRESAR
/a estructura es la siguiente(
80"7ESD7(variable)
o
80"7ESD7 (teDto, variable)
Ejemplo
80"7ESD7(98ngresar el valor ( 9,val#
En este caso(
)al es el campo donde el sistema asignara el valor ingresado desde la
pantalla.
8maginamos que al usuario le aparecer algo similar a esto en la pantalla(






En el caso de ambas sentencias(
80"7ESD7(variable)
o
80"7ESD7 (teDto, variable)
'oman la in&ormacin ingresada y la almacenan en una variable.
/a di&erencia entre ambas es que la segunda muestra un mensaje para
indicar al usuario que debe ingresar.
0osotros, en la materia, utilizamos 80"7ESD7, cuando queremos asociar la
entrada de datos a un proceso de ingreso de in&ormacin por pantalla.


1F

Lale aclarar, que en este caso debemos preguntar al operador que ingresa
la in&o si quiere seguir ingresando ms in&ormacin, como &orma de saber
cundo termina el proceso* volveremos ms adelante con este tema al
re&erirnos a estructuras repetitivas y a sus clusulas de escape.
'ambi4n podemos utilizar otra instruccin para el ingreso de datos que es(
$EER
Su estructura es de la siguiente manera(
/eer(campo1,campo-,campon#
Entre par4ntesis, coloco el nombre de los campos que estar4 trayendo de
alg$n arc,ivo e.istente.
+uedo colocar un campo o 9n: campos, siempre que indique claramente a
cada uno por su nombre y separados por 9,:
En caso de no de&inir otra condicin, el &in del proceso se dar con el &in del
&ic,ero, es decir cuando all ledo toda la in&o, eso se da por la condicin de
&in de arc,ivo o(
Eof
+or lo que el campo eo&, que es del tipo lgico o booleano, es quien me
avisa si tengo o no registros del arc,ivo secuencial para seguir leyendo.
>uando veamos las instrucciones del tipo repetitivas debemos recordar a
este campo como la clusula de escape de la misma, es decir la condicin
por la cual dejo de realizar el loop.

Salida de $atos
El egreso de datos, tanto por pantalla o por impresora, nos permite
in&ormar el contenido de las variables, es decir in&ormar sobre los
resultados obtenidos.
+ara el caso que la salida &uera a una pantalla usaremos la instruccin(
"OSTRAR
En el caso que la salida &uera a una impresora usaremos la instruccin(
I"PRI"IR
Z en el caso que quisi4ramos como salida un arc,ivo usaramos(
ESCRI1IR

1M

/a &orma de las tres instrucciones es la misma, por lo que usar4 una como
ejemplo.
Si quisiera que apareciera la &rase %80 6E/ +7>ES, la instruccin sera(
Eostrar (9%80 6E +7>ES:#
7ecordando el uso de las 9: dado que es una salida de caracteres.
Si quiero que la salida indique una leyenda ms el valor de un campo que
genere durante el proceso, la &orma de ,acerlo es(
Eostrar (9/a cantidad de reg. ledos son( 9,campoXcant#

6onde, al igual que el caso anterior escribo la leyenda entre 9:
/uego con una como ( , # separo a la leyenda del campo variable
campoXcant, que por ejemplo tiene un valor de 1;-
6e ser as, quedara en la pantalla
/a cantidad de reg. ledos son( 1;-
?n ejemplo completo( >on&eccionar un algoritmo tal que dados - n$meros
enteros muestre su suma y su di&erencia.
Dtencin( ...9dados - n$meros cualquiera:... signi&ica que nuestro
algoritmo tiene que 9servir: para cualquier par de n$meros. +or lo tanto
tendremos que 9preguntarlos:.
%ormalicemos(
E-ercicio 2
Dlgoritmo Ejemplo
Lar
0?E1,entera
0?E-,entera
S?ED, entera
7ES'D, entera
8nicio
8ngresar(98ngrese un n$mero:, 0?E1#
8ngresar(98ngrese otro n$mero:, 0?E-#
S?EDI0?E1W0?E-
7ES'DI0?E1!0?E-
Eostrar(9/a suma es(:, S?ED#
Eostrar(9/a resta es(:, 7ES'D#
%in


1J

Leamos en detalle el proceso de este algoritmo(
) 7ealizaremos un D/"78'E, al cual llamamos EGEE+/
) Dl cual le de&inimos @ campos enteros( 0?E1, 0?E-, S?ED y 7ES'D
) Dl momento de indicar 808>8, comienza la zona de procesamiento
propiamente dic,a.
) /a in&ormacin la obtenemos de una pantalla, por eso usamos la
instruccin 80"7ESD7.
) Se ingresan - n$meros, que se 9guardan: en los campos 0?E1 y 0?E-
) +rocedemos a realizar la operacin de suma de ambos n$meros y
colocamos el resultado en el campo S?ED.
) /uego procedemos a restar los mismos valores y colocamos el resultado
de esta operacin en el campo 7ES'D.
) /uego in&ormamos por pantalla el resultado de ambas operaciones,
usando la instruccin ES'7D7, y en pantalla aparecer la e.presin entre
9:(
/a suma es(
Z luego el valor que se obtuvo de la suma, el cual est en el campo S?ED
) 6ebajo de ella aparecer la &rase(
/a resta es(
Seguida del valor resultante de la resta, la cual est en el campo 7ES'D.
) 'erminando el algoritmo con la sentencia %80

%rueba de Escritorio
Este m4todo se utiliza para probar el algoritmo dise2ado, a &in de
corroborar que el mismo &unciona y alcanza el objetivo deseado.
6ebemos indicar en el papel el valor que toman las distintas variables del
proceso en cuestin y nosotros debemos actuar como la >+? que recorre
secuencialmente al algoritmo ,aciendo 9cumplir: cada una de las
instrucciones y condiciones indicadas.
+ara la prueba de escritorio debemos recordar que(
) 0o debemos saltear ninguna instruccin, si no estamos totalmente
seguros de lo que ,ace

1N

) 8ndicar el valor en la ,oja una vez que estamos seguros del mismo.
) 0o asumir nada que no est4 indicado e.presamente en el algoritmo.
Leremos a continuacin cmo quedara la misma para este programa(




&epresentacin de !lgoritmos
E.isten diversas &ormas de representar algoritmos* dentro de las ms
comunes se encuentran los diagramas de &lujo y el pseudocdigo. >ada uno
tiene sus ventajas y desventajas, todo depende del gusto de la persona que
realiza el algoritmo.

Pseudocdigo
El pseudocdigo es una ,erramienta de programacin en la que las
instrucciones se escriben en palabras similares al espa2ol o ingl4s, que
&acilitan tanto la escritura como la lectura de programas, y permite a quien
lo realiza concentrarse en las estructuras de control sin tener presente las
caractersticas propias de alg$n lenguaje en especial. En esencia se puede
de&inir como un lenguaje de especi&icaciones de algoritmos.
El pseudocdigo se encuentra a un solo paso de pasarse a un lenguaje de
programacin y es entendible, de igual &orma que los diagramas de &lujo, a
di&erencia que no es gr&ico pero igual de comprensible.
>uenta con palabras reservadas y la &orma de su uso, y tiene una estructura
mnima que se debe respetar. Siempre la primera palabra debe ser(
Algoritmo:nombre
Seguida de 9 ( 9 y el nombre que le de&inamos para el mismo.
6ebe tener una sentencia $nica de %80, que indica la &inalizacin del
proceso.

Diagramas de flu-o
'ambi4n llamado ordinograma.


-K

Esta t4cnica muestra los algoritmos de una manera clara y comprensible.
Es una representacin gr&ica, es decir, se vale de diversos smbolos para
representar las ideas o acciones a desarrollar.
/os diagramas de &lujo ayudan en la comprensin de la operacin de las
estructuras de control. +or ejemplo( el inicio y el &in del algoritmo se
representan con un smbolo elptico, las entradas y salidas con un
paralelogramo, las decisiones con un rombo, los procesos con un
rectngulo, etc.
/os smbolos utilizados ,an sido normalizados por el 8nstituto
0orteamericano de 0ormalizacin (D0S8# y algunos de ellos son(









Estructuras y acciones en un diagrama de flujo@
) Definicin de +aria*les(
Es obligatorio de&inir todas las variables que vayamos a utilizar
durante el programa, en el inicio del diagrama de &lujo.
>uando nuestro programa se ejecuta, a nuestros e&ectos la memoria
contendr in&ormacin basura (in&ormacin que estaba cargada en la
memoria antes de ejecutar nuestro programa#.
+ara de&inir una variable es imprescindible indicar cul ser su
nombre y su tipo, pudiendo asignar a esa variable su valor
posteriormente.
) Asignacin de +alores a +aria*les(
E.isten dos tipos de asignaciones(


-1

- irecta( Dsignar un valor directamente que ya conocamos a
priori.
- Endirecta@ El valor de estas variables vendr dado una vez que se
ejecuta el programa, y se produzcan datos de entrada.
/a accin de asignacin a una variable destruye cualquier valor inicial
de esa variable.
) Declaracin de E3presiones num4ricas:
efinicin de e.presin num4rica( 6os o ms valores num4ricos
operados entre s aritm4ticamente. Ej.(
-. W y [ M.
-. W ;y I 1K
/os operadores aritm4ticos siguen una jerarqu>a de prioridad@
/signacin directa de variables en un iagrama de :lujo
Se representa con este smbolo(

\ Lariable ] I \E.presin]
E.presin( >onsiste en un valor o ms en el caso de que e.istan varios
valores operados entre s mediante operadores del tipo que sea.
/a e.presin que da el valor a una variable puede ser aritm4tica,
al&anum4rica y lgica.

EDpresiones /ritmticas@
?no o ms valores num4ricos operados entre s.
?na e.presin puede constar de variables y constantes, utilizando los
operadores aritm4ticos(
Edulo ( E6 #
Eultiplicacin ( H #
6ivisin ( 1 #

--

Suma ( W #
7esta ( ! #
Estos operadores tienen un nivel de prioridad(
Edulo [ Eultiplicacin [ 6ivisin [ Suma [ 7esta
El orden de evaluacin es de derec,a a izquierda, resolviendo primero los
par4ntesis que tenga la e.presin.
El operador Edulo ( E6 #, ,ace un resto entre enteros, es decir de dos
n$meros enteros, los divide y nos da el resto de la divisin. Ej.(
M E6 ; I 1 Za que el resto de dividir M entre ; es 1.

&esolucin de operaciones aritm"ticas en t"rminos
matem'ticos
R / 25 6 7 8 A 0 9 A "OD 1 6 C : ; < 0 A 8 A "OD =
Siendo A / = 1 / > C /5
7I 1J [ ; H B W ( B E6 M [ J 1 -# W B H B E6 B
7I 1J [ 1B W ( B [ @# W B H K
7I ; W 1 W K
7 I @
R / 1 6 A 0 C 8 ; 0 9 C : ; 6 2 < 0 A 8 ? 8 1 6 ?
Siendo A / ; 1 / 7 C / @
7 I ; [ - W F H - W ( F1- [ 1# W - H @ H ; [ @
7 I 1 W 1- W - W -K
7I ;B
EDpresiones alfanumricas ( "T#E+." )@
>D6E0D I(9+epe:, 9/pez:# 9+epe/opez:

Si queremos que en el resultado salga un espacio en blanco, tendremos
que indicarlo en alguno de los dos literales, es decir(
>D6E0D I( 9+epe :,9/pez:# 9+epe /pez:

'ambi4n puede ,aber e.presiones de tipo lgico
/signaciones indirectas por teclado de variables en un diagrama de flujo
Se representa con este smbolo(

-;


El valor previo de la variable es destruido por el que se le asigna.
El valor de esta variable no viene dado por el programa sino por un
dispositivo de entrada.
*isualiFacin por pantalla en un diagrama de flujo
Se representa con este smbolo(


>ada representacin, abarcar una lnea en la pantalla.
+odemos indicar uno o ms valores dentro del mismo smbolo.
0o se pueden incluir e.presiones dentro de este smbolo.
Otros tipos de variables
)aria*le Contador:
> I > W 1
> I > W B
/a variable contador aumenta de manera constante cada vez que se
ejecuta.
)aria*le Acumulador:
D I D W V
V es una variable que cambia de valor en cada pasada por esta instruccin,
por tanto cada vez que se ejecuta esta instruccin, la variable D aumenta
de manera 0 constante.
Si V no cambiara de valor, D sera una variable contador.

-@

)aria*le 1andera 9 lag<:
Este tipo de variables muestran el estado del valor de la variable, por
ejemplo, si tenemos dos grupos de personas, pre&erentes o no pre&erentes,
podramos de&inir una variable de tipo Dl&anum4rico con el nombre de
+re&erentes y darla un valor Si, con lo que estaramos declarando que las
personas son pre&erentes.
Este tipo de variables, no tienen por qu4 ser de tipo lgico, ya que pueden
indicar ms de un estado. Ej.(
EstadoXcivil I 9 > 9 (>asado#
9 L : (Liudo#
9 S 9 (Soltero#
En este caso una variable podra de&inirse como( signi&icador de un estado
dentro de un algoritmo.

Estructuras
E.isten tres estructuras bsicas(
Secuencial( es la manera natural de organizar las acciones.
Selectiva
8terativa

Estructuras Selecti+as
+osibilidad de tomar distintos caminos en la ejecucin de las acciones.
+odremos establecer caminos alternativos para la ejecucin.
+odemos distinguir tres tipos(
1. Selectiva simple
-. Selectiva doble
;. Selectiva m$ltiple (Se usa con poca &recuencia debido a su uso en
casos selectivos#


-B

2% Selecti+a Simple:
/a estructura simple se representa de la siguiente &orma(










6entro del rombo se e.presa una condicin lgica que se reduce a un valor
lgico, verdadero o &also.
6entro del rectngulo se e.presa una instruccin.
/as estructuras simples, a di&erencia con las dobles, slo representan
instrucciones en la rama del S8 (Lerdadero#.
3>mo sera su representacin en pseudocdigo5 (en negritas indico las
palabras que &orman a esta e.presin#
si ^condicin_
entonces
operacin
sino
fin si

>uando estas estructuras se ejecutan, se eval$a una condicin, y si es
verdadera el &lujo del algoritmo sigue por la rama del S8 cumpliendo lo que
indique +E7D>8T0, si la condicin resulta ser &alsa seguira por la rama
del 0, no ,aciendo ms que cerrar la condicin, es decir llegar al &in del
misma en %80S8, la cual termina con la condicin indicada primeramente.
+or lo cual puede surgir la pregunta de por qu4 debo indicar la opcin
S80, cuando en realidad no ,ago nada por esa rama, es decir porque no
indico solamente(



-F

si ^condicin_
entonces
operacin
fin si

6ado que produce el mismo resultado que poner S80 sin colocar ninguna
operacin.
/a respuesta es( s, es lo mismo, el problema es que debemos conocer y
,aber practicado con algoritmos para saber que estamos armando
e.presiones equivalentes y que no estamos obviando una condicin o
cerrando mal la instruccin S`.

;% Selecti+a Do*le:
Es el mismo tipo de estructura que la simple, con la di&erencia que en la
rama del 0, tambi4n se ejecuta una instruccin, esta estructura se
representa del siguiente modo(










/a e.presin en pseudocdigo ser(
si ^condicin_
entonces
operacion 1
sino
operacion -
fin si




-M

Ejemplo(
Supongamos que deseamos determinar de dos n$meros enteros que se
ingresan, 3cul de ellos es el mayor5
D continuacin desarrollaremos el algoritmo para resolverlo. /uego
pondremos en prctica el ejemplo mediante la prueba de escritorio con
distintos valores para ambos n$meros, a &in de comprobar la e&iciencia de
nuestro programa.
EAERCICIO ;
Dlgoritmo( prueba 1
LD7
D(E0'E7D
V(E0'E7D
808>8
80"7ESD7 ( 98ngrese un 0ro.:, D#
80"7ESD7 (98ngrese otro 0ro.:, V#
S8 (D ] V#
E0'0>ES ES'7D7( 9El mayor es 9, D#
S80 ES'7D7( 9El mayor es 9, V#
%80 S8
%80

Grueba de escritorio





7% Selecti+a "Bltiple:
E.isten m$ltiples estructuras seguidas con distintos caminos alternativos
posibles. Se representara de la siguiente &orma(






-J














En pseudocdigo , su representacin sera(
SegBn ^variable_ Cacer
valor 1 Dacer
operacion 1
valor - Dacer
operacion -
valor ; Dacer
operacion ;
sino
operacion @
finsegun

En este tipo de estructuras no puede ,aber instrucciones en la rama del
0, salvo en la $ltima rama, como se se2ala en el gr&ico.
Si tras c,equear todas las condiciones dentro de los rombos, todas resultan
ser &alsas, se ejecutara la instruccin que tiene asignada la $ltima rama del
S80, aunque tambi4n puede ocurrir que dic,a rama no tenga asignada
ninguna instruccin, por lo que el programa seguira el &lujo normal del
programa.
Si alguna de las condiciones resultara ser verdadera, se ejecutara la
instruccin correspondiente a su rama de S8, y despu4s saldra de la
estructura para seguir ejecutando el programa.


-N

EAERCICIO 7
Supongamos que deseramos determinar la dosis de aspirina que debe
recibir un paciente de acuerdo a su edad.
Dlgoritmo( Ddministracin de aspirinas
LD7
Edad(entero
808>8
80"7ESD7 ( 9edad del paciente:, edad#
SE"?0 (edad# <D>E7
Entre K y B a2os ,acer
ES'7D7 (90o tomar aspirina:#
Entre F y 1K a2os ,acer
ES'7D7( 9tomar 1 aspirina:#
Entre 11 y FK a2os ,acer
ES'7D7( 9tomar - aspirinas:#
S80 8E+78E87 (9E777:#
%80 SE"?0
%80

Este algoritmo determina la dosis de aspirina que debe recibir un paciente
de acuerdo a su edad
3>mo &unciona este algoritmo5
+ide por pantalla que se le indique la edad del paciente, por eso usamos la
instruccin 80"7ESD7.
"uarda el valor de la edad en el campo E6D6, de&inido como de tipo
E0'E7.
/uego SE"a0 la edad, in&orma por pantalla (porque usa la instruccin
ES'7D7# una leyenda.
Lemos que cada opcin indica un rango posible de edad, dependiendo de
la edad in&ormada le permite cumplir una de ellas.
Si por alg$n motivo ,ubiera ms de una condicin que pueda cumplir,
tomara slo la primera que aparece.
Si ninguna condicin se cumple, por ejemplo que la edad es mayor a FK
a2os, entonces se activa la operacin que indico en la clusula S80.
En esta clusula puede ser que no ,aga nada, pero no puedo dejar de
ponerla. Esto es debido a que si alguna condicin no estuviera
contemplada y &altara esta clusula provocara un error no esperado del
proceso, que es distinto a que si yo le indico al proceso que, en el caso que

;K

deba cumplir la clusula S80, imprima la leyenda E777, es decir puede
,acer una accin.
>ada vez que cumple una de las condiciones, al terminar la misma, se sit$a
en la sentencia inmediatamente posterior a la clusula %80 SE"a0.
%rueba de escritorio






E-emplos de mane-o de estructuras de datos
D &in de avanzar con algunos ejemplos adelantaremos el concepto de
estructuras repetitivas que veremos en ms detalle ms adelante en este
unidad, las mismas e.isten porque muc,as veces, no nos alcanza con lograr
bi&urcar un camino, es decir, condicionar las secuencias de eventos a una o
varias condiciones.
6ebemos tambi4n repetir las mismas operaciones, una cantidad controlada
de veces, y cuando se cumple una condicin terminar con esta repeticin.
Es decir ,ay una clEusula de escape de esa repeticin.
Si no ,ubiera ninguna condicin de escape o la misma estuviera mal
condicionada podra provocar un loop in&inito con errores no esperados.
/o que veremos en este tem es justamente el concepto de repeticin o
loop, la condicin de escape de la misma, los puntos que debemos tener en
cuenta y las palabras que con&orman a las instrucciones que podemos usar
en nuestros algoritmos.
EAE"P$O 2%
+ara ver este tipo de estructura pensemos en el siguiente problema
0os piden calcular el valor de la suma 1W-W;W@W......W1KK.
+or lo visto ,asta a,ora, podemos entender que(
?tilizaremos un >0'D67, de los n$meros desde el 1 al 1KK
Z tambi4n un acumulador Suma para almacenar las sumas parciales

1, 1W-, 1W-W;, etc.
/a representacin por 6iag












/a representacin en pseudocdigo sera(
EAERCICIO ?
Dlgoritmo( >ontarcien
Lar
8nicio
%in





1, 1W-, 1W-W;, etc.
/a representacin por 6iagrama de %lujo del problema sera(
/a representacin en pseudocdigo sera(
EAERCICIO ?
Dlgoritmo( >ontarcien
Lar
>ontador( entero
Suma( entero
8nicio
>ontador I 1.
Suma I K.
"ientras (contador sea menor al n$mero 1KK#
Suma I >ontador W Suma
>ontador I >ontador W 1.
in mientras%
Eostrar(Suma#
$Au Bicimos con este algoritmo'

;1

rama de %lujo del problema sera(
(contador sea menor al n$mero 1KK# Cacer
or W Suma
>ontador I >ontador W 1.

$Au Bicimos con este algoritmo'

;-

1. 6e&inimos dos campos, S?ED y >0'D67 como enteros.
-. /uego los 9808>8D/8YDES:, esto signi&ica, que al comienzo del proceso
nos aseguramos los valores que ambos tienen.
;. /e asignamos un 1 al campo >0'D67
@. /e asignamos un K al campo S?ED.
B. /uego, te presento una de las estructuras repetitivas que ms uso le
daremos, empieza con la palabra E8E0'7DS y en negritas indico las
palabras a utilizar.
/a sinta.is, en general, es(
"IE!TRAS(condicin o clusula de escape# CACER
peracion1
peracin-
bbbb..
bbbbb
peracin
in "ientras
El proceso ejecutar las operaciones que estn entre la clusula
E8E0'7DSb.<D>E7 y la clusula %80E8E0'7DS.
/a repetir tantas veces, ,asta que la condicin de escape se cumpla.
Dl momento que esto ocurra, el proceso se dirigir a la instruccin que este
inmediatamente despu4s de la clusula %80 E8E0'7DS.
En el caso del ejercicio ,asta que contador llegue a 1KK.
Es muy importante que, en este tipo de clusulas, donde se basa en un
valor que es parte del propio proceso repetitivo, que el contador que
realice esta operacin este indicado y sea el mismo que nos re&erimos en la
clusula de escape.
)eamos en un e-ercicio +arios conceptos referidos a asignacin de datos%
>alcula la paga neta de un trabajador conociendo el n$mero de ,oras
trabajadas, la tari&a ,oraria y el porcentaje de retenciones (obra social,
jubilacin, etc.#.
7esolucin(

;;

Se leern los valores de entrada, ,oras, tari&a, tasa. /a salida estar
dada por los valores calculados como +agabruta, 8mpuestos
(retenciones ,ec,as# y +aganeta.
En pseudocdigo(

EAERCICIO =
Algoritmo(>alcularpago
)ar
<oras( entero
'ari&a( entero
'asa( entero
+agabruta( entero
8mpuestos( entero
+aganeta(entero
8nicio
+agabrutaI K
8mpuestos I K
+aganeta I K
Ingresar9c 8ngrese cantidad de ,orasc, <oras#
Ingresar9c 8ngrese 'ari&a por ,orac, 'ari&a#
Ingresar9c 8ngrese 'asa de descuentos por impuestosc, 'asa#
+agabrutaI <orasH'ari&a
8mpuestosI +agabrutaH'asa
+aganetaI+agabruta!8mpuestos
Imprimir9c /a paga bruta ser de c, +agabruta#
Imprimir98mpuestos#
Imprimir9+aganeta#
in

En 6iagrama de &lujo(








;@




















Analicemos los e-emplos:
El pseudocdigo pide que se ingrese los datos de entrada para la posible
ejecucin del algoritmo.
Ingresar teDto, variable( Esta accin permite solicitar la in&ormacin que
precisa, y lo almacena en la variable.
En lenguajes de programacin podemos encontrar esta accin asociada a
las instrucciones I!PUT. ASF. etc%
Preguntar (98ngrese cantidad de ,oras trabajadas:, <oras#
Input (98ngrese cantidad de ,oras trabajadas:, <oras#
AsG 998ngrese cantidad de ,oras trabajadas:, <oras#


;B

D,ora bien, una vez solicitado un dato, en este caso las ,oras trabajadas,
se guarda para luego utilizarlo.
Estos datos ingresados pueden guardarse en constantes o variables,
dependiendo si ese valor es o no modi&icado por el logaritmo
%ormalmente el signi&icado de constante y variable es el mismo que
conocemos en Eatemtica.
/lamaremos a la accin de almacenar el resultado de una e.presin en una
variable asignacin.
6urante la ejecucin del algoritmo, se generarn nuevos datos que
necesitar almacenarlos en alg$n lado.
Estos datos pueden ser constantes (n$mero, nombre, valores lgicos# o el
resultado de operaciones sobre constantes y variables que llamaremos
eDpresiones.
6e&inimos entonces una instruccin que nos permita guardar los nuevos
datos en una variable.
Euc,as veces debemos leer un arc,ivo ,asta que el mismo se termine, es
decir sea &in de arc,ivo (en ingles eo&#, esta condicin se comporta como
un campo lgico, es decir est en on o en o&&.
En nuestros algoritmos podemos preguntar por esta condicin y seg$n nos
indique decidir el proceso a seguir.
Almacenar
variableH eDpresin
Esta accin permite guardar en una variable el resultado de una e.presin.
Ejemplo(
Almacenar +agabrutaI <orasH'ari&a
Cacer +agabrutaI <orasH'ari&a
simplemente +agabrutaI <orasH'ari&a
El resultado de esta accin es asignar a la variable +agabruta el resultado
de la e.presin
<oras H 'ari&a.
En el ejemplo 1 se utilizaron dos variables que se de&inen como variable
contadora y variable acumulativa.
) 8ncrementar >ontador en 1.

;F

El cual lo e.presamos en el lenguaje de algoritmos como(
>ontador I >ontador W1
El nuevo valor de >ontador ser el valor anterior de 4l incrementado en 1.
Si contador tena almacenado el valor ; entonces el nuevo valor ser @.
?na vez incrementado el contador(
) Sumar >ontador a Suma
E.presara Suma I suma W contador
El nuevo valor de Suma ser el valor anterior de ella ms el valor
almacenado en >ontador.
+ara poder comunicar los resultados obtenidos, de&iniremos la siguiente
instruccin(
I"PRI"IR te.to, variable( Esta accin permite in&ormar el1los resultados
obtenidos.
En lenguajes de programacin podemos encontrar esta accin
representada por las instrucciones HRITE. PRI!T. DISP$AI. OUTPUT, etc.
Imprimir99/a paga neta es de :, +aganeta# o
Imprimir9+aganeta#
Escri*ir99/a paga neta es de :, +aganeta# o
Escri*ir(+aganeta#
"ostrar99/a paga neta es de :, +aganeta# o
"ostrar (+aganeta#
Hrite (9/a paga neta es de :, +aganeta# o
Hrite (+aganeta#
El resultado de esta accin es in&ormar el valor almacenado en la variable
+aganeta

Otro e-emplo completo:
>on&ecciona un algoritmo tal que dados - n$meros cualquiera muestre su
suma y su di&erencia.

;M

Dtencin( ...9dados - n$meros cualquiera:... signi&ica que nuestro
algoritmo tiene que 9servir: para cualquier par de n$meros.
EAERCICIO @
Algoritmo ejemplo
)ar
Suma(real
7esta(real
Inicio
Suma/ J
Resta / J
Ingresar998ngrese un n$mero:, 0?E1#
Ingresar998ngrese otro n$mero:, 0?E-#
S?EDI0?E1W0?E-
7ES'DI0?E1!0?E-
Escri*ir 99/a suma es(:, S?ED#
Escri*ir (9/a resta es(:, 7ES'D#
in
+ota:
) Siempre comenzaremos colocando como ttulo Algoritmo y un nombre
que d4 idea de lo que va a ,acerse dentro de 4l.
) >uando queremos que el usuario vea un te.to, ese te.to lo escribiremos
entre comillas.
) /os 9nombres: de las variables (identi&icadores# deben comenzar siempre
con una letra (aunque contengan alg$n carcter num4rico# y no pueden
tener espacios en blanco.
) Este deber estar relacionado con el contenido lgico que poseer, as
como en el ejemplo( +agabruta es una variable que tendr el valor de la
+agabruta del empleado.
) /uego de la palabra D/"78'E, va la zona de declaracin de variables y
constantes.
) En nuestro ejemplo de&inimos dos campos, cada uno como real, pero
tambi4n podamos ,acer lo mismo de la siguiente &orma(
) S?ED, 7ES'D(real
) >olocamos todos los campos del mismo tipo
separados por coma y le asignamos el mismo tipo a
todos de una sola vez.
) /uego de la zona de declaraciones y ante de la zona de proceso debe ir la
palabra Inicio o ComienKo

;J

) Dl terminar el algoritmo escribimos in.
Indentacin
Leamos el siguiente ejemplo de escritura de un parte de un algoritmo(
inicio
leer(nombreXpieza,cantidadXdeXpiezas#
mientras(no sea eo&# ,acer
si (cantidadXdeXpiezas IK#
entonces imprimir(9reponer ( 9,nombreXpieza#
sino
&insi
leer(nombreXpieza,cantidadXdeXpiezas#
&in mientras.
%in

+ero a e&ectos de su proceso sera igual si lo ,ubiera escrito comenzando
todas las instrucciones en la misma columna, por ejemplo la columna 1, y
lo llamaremos a este %7EDX-, quedando en ese caso de la siguiente
manera(
inicio
leer(nombreXpieza,cantidadXdeXpiezas#
mientras(no sea eo&# ,acer
si (cantidadXdeXpiezas IK#
entonces imprimir(9reponer ( 9,nombreXpieza#
sino
&insi
leer(nombreXpieza,cantidadXdeXpiezas#
&in mientras
&in

>omo se ,a mencionado, desde el punto de vista lgico del proceso,
cumplen la misma &uncin tanto el %7EDX1 como el %7EDX-.
+ero, 3qu4 di&erencia vemos entre ambos5
=ue las instrucciones en %7EDX1 parecen que naturalmente quedan
9encerradas: en bloques de menor 9nivel:, es decir nos resulta ms &cil
identi&icarlas al utilizar la 806E0'D>80.
LMu4 es Indentacin5 Es un anglicismo (de la palabra inglesa indentation#
de uso com$n en 8n&ormtica y signi&ica mover un bloque de te.to ,acia la
derec,a insertando espacios o tabuladores para separarlo del te.to
adyacente, lo que en el mbito de la imprenta se ,a denominado siempre
como sangrado o sangra.

;N

En los lenguajes de >omputacin, la indentacin se utiliza para mejorar la
legibilidad del cdigo por parte de los programadores, teniendo en cuenta
que raramente se consideran los espacios en blanco como sentencias de un
programa. Sin embargo, en ciertos lenguajes de programacin como
<asdell, cca, y +yt,on, la indentacin se utiliza para delimitar la
estructura del programa permitiendo establecer bloques de cdigo.
Son &recuentes discusiones entre programadores sobre cmo o dnde usar
la indentacin, si es mejor usar espacios en blanco o tabuladores, ya que
cada programador tiene su propio estilo. Lale aclarar que esta palabra no
est reconocida por la 7eal Dcademia de /engua, y en su lugar se debera
usar SD0"7D6, pero por el uso y costumbre que tiene en la jerga
in&ormtica para nuestro curso la tomamos como vlida, por lo que
siempre debemos intentar identi&icar o marcar los bloques de instruccin
de esta manera, lo cual ayuda a la legibilidad del cdigo.

Estructuras Iterati+as
Vien, a,ora que pro&undizamos un poco ms en la &orma en que
manejamos los datos, podemos ver en ms detalle las estructuras
repetitivas o iterativas.
>onsisten en instrucciones que se van repetir de K a 0 (donde 0 es una
variable o una constante, depende del caso# veces.
0o ,ay que con&undir la idea de bucle con la idea de estructuras selectivas.
'ipos de estructuras iterativas(
) 7E+E'87 E8E0'7DS
) 7E+E'87 <DS'D
) 6ES6E <DS'D
2% Repetir "ientras:
6entro del 7ombo se usa una condicin. El bucle no tiene ramas (aunque
en la representacin pueda parecerlo#, se produce una entrada de bucle o
una salida. Se representa de la siguiente &orma(





@K










/a condicin de un bucle siempre va a ser una condicin lgica que se
reducir a un valor lgico como Lerdadero o %also, de modo que si la
condicin resulta ser verdadera el bucle repite ,asta que la condicin
resulte ser &alsa, entonces el bucle se rompe y se vuelve al &lujo normal del
programa.
Ejemplo(
Si empleramos este ciclo para determinar de un conjunto de personas,
cuntos son mayores de edad, cuntos no lo son, y establecer un promedio
de edades, utilizaremos una variable que controlar el ciclo para
determinar si se contin$a con la carga de individuos o se detiene la misma.
bserva cmo quedara desarrollado el algoritmo* slo representaremos la
zona de 808>8.
EAERCICIO >
8nicio
>ontinuaI:S:
E8E0'7DS (>ontinuaI:S:# ,acer
80"7ESD7 (98ngresar Edad 9, E6D6#
S8 (E6D6 ]I -1# E0'0>ES
Eayores I Eayores W 1
S80
Eenores I Eenores W 1
%80 S8
Suma I Suma W E6D6
80"7ESD7 (9>ontinua S10(:, >ontinua#
%80E8E0'7DS
+romedioISuma1(EayoresWEenores#
Pseudocdigo(
...
mientras ^condicin_
,acer
operacin
&in mientras


@1

ES'7D7 (9/a >antidad de +ersonas Eayores de edad es 9,
Eayores#
ES'7D7 (9/a >antidad de +ersonas Eenores de edad es 9,
Eenores#
ES'7D7 (9El +romedio de edades es 9, +romedio#
%80

Grueba de Escritorio











Repetir Casta:














Pseudocdigo:
....
repetir operacin

,asta ^condicin_

&in repetir


@-

Siendo el rectngulo una instruccin, y el rombo una condicin, la
instruccin se repetir ,asta que la condicin de un valor de %D/S,
entonces se romper la estructura y se volver al &lujo del programa.
Desde Casta:
>aso particular. El n$mero de repeticiones de una o ms instrucciones
vendr marcado por una variable de control. Se puede utilizar dentro de
otra sentencia mayor por ejemplo la sentencia +D7D b..<D>E7

E3presiones Condicionales
Son las e.presiones que utilizamos en los rombos, para deducir si dic,as
e.presiones tienen un valor Lerdadero o un valor &also.
+odemos distinguir dos tipos de e.presiones condicionales(

ENPRESIO!ES DE RE$ACI(!
ENPRESIO!ES $(GICAS

E3presiones de Relacin:
En una e.presin de relacin tenemos uno o ms valores operados por los
operadores correspondientes. >onsiste en consecuencia en dos valores
operados entre s con un operador de relacin. /os operadores son(
OPQ "a,or Rue
OSQ "enor Rue
OP/Q "a,or o igual Rue
OS/Q "enor o igual Rue
O/Q Igual Rue
OSPQ Distinto Rue
Estos operadores, tambi4n pueden operar con caracteres (por medio de
cdigo DS>88#. Ej. (
9D: \ 9V: 'endra un valor lgico de Lerdadero pues el valor DS>88 de D es
menor que el de V ( El cdigo DS>88 est ordenado de acuerdo con el
abecedario.#
Pseudocdigo:
...
+ara
.(desdeI1,asta1K#,acer

operacin

&in mientras

@;

?na e.presin relacional obtiene un valor lgico (LE76D6E7 %D/S#.

E3presiones $gicas:
Lamos a tener valores lgicos operados por operadores lgicos. Sstos son(
0' ( 0o #
D06 ( Z #
7 ( #
-perador +-T@
perador que act$a sobre un solo valor. Este operador tiene la cualidad de
invertir el valor lgico. Ej. (
0' \Lalor /gico]
0' LE76D6E7 ........... 'endra un valor %D/S
0' %D/S....................... 'endra una valor LE76D6E7

-perador /+@
/a operacin D06 vale LE76D6E7 cuando los dos valores son verdaderos,
de lo contrario vale %D/S. Ej. (
\Lalor /gico] D06 \Lalor /gico]
-perador -#@
Es similar a D06 en el sentido de que llevar un valor lgico a izquierda y
derec,a, pero la di&erencia estriba en que 7 devuelve LE76D6E7
cuando cualquiera de los dos valores es LE76D6E7.
/os operadores relacionales tienen prioridad sobre los lgicos, siempre y
cuando ning$n par4ntesis indique lo contrario. /a prioridad de los
operadores lgicos es la siguiente(
1. 0'
-. D06
;. 7
&esumen gr'fico de los operadores lgicos(


@@






6ado un n$mero, imprimir o si es mayor o igual que N y 1 si es menor que
N.
EAERCICIO 5
Dlgoritmo Ej. D
var
0?E( entero
8nicio
8ngresar(c8ngrese un n$meroc, 0?E#
Si (0?E ]I N#
Entonces Eostrar(cKc#
Sino Eostrar (c1c#
in si
%in

Grueba de escritorio




6ado dos n$meros D y V, dise2ar un algoritmo que conteste si D al
cuadrado ms el doble de V es mayor que 1KK.
!ota( En este ejercicio puede notar que la estructura de decisin a veces se
plantea sin el csinoc (pero nunca sin el centoncesc# ya que puede ocurrir
que no se realice ninguna accin cuando la condicin planteada no se
cumpla.
EAERCICIO T
Dlgoritmo Ej. V
var
D,V,7ES?/(E0'E7
8nicio



@B

+reguntar(c8ngrese el n$mero Dc, D#
+reguntar (c8ngrese el n$mero Vc, V#
7ES?/ I DHD W - H V
Si (7ES?/ ] 1KK# entonces
Eostrar (cEl resultado es mayor que 1KKc#
in si
in

Grueba de escritorio





Otro e-emplo:
6ada una caja con pelotas de color rojas, azules y blancas, contar cuntas
pelotas ,ay de cada color y determinar la cantidad total de pelotas que
e.isten en la caja.
En este ejemplo utilizaremos un ciclo incondicional, ya que no se aclaran la
cantidad de pelotas que e.isten dentro de la caja, y usaremos una
estructura de decisin m$ltiple para contar las pelotas por su color.
EAERCICIO 2J
Dlgoritmo Ej. E
var
>0'80?D,cadena
>D0'LE76ES,E0'E7
>D0'7GDS,E0'E7
>D0'DY?/ES,E0'E7
>/7,cadena
8nicio
>0'80?DI:S:
>antverdesI K
>antrojasI K
>antazulesIK
"ientras (>0'80?DI:S:# Dacer
8ngresar (98ngrese color de la pelota:, >/7#
SegBn (>/7# sea
8gual a Lerde


@F

>antLerdesI >antLerdesW1
8gual a 7ojo
>ant7ojasI >ant7ojasW1
8gual a Dzul
>antDzulesI >antDzulesW1
S80 8E+78E87(9E777:#
in segun
+7E"?0'D7 (9>ontinua ingresando pelotas:,>0'80?D#
in "ientras
Eostrar(9/a cantidad de pelotas verdes es de (:,>antLerdes#
Eostrar (9/a cantidad de pelotas rojas es de (:,>ant7ojas#
Eostrar (9/a cantidad de pelotas azules es de (:,>antDzules#
I!

Grueba de escritorio









Se realiza una encuesta entre 1KK personas que votan por los candidatos D
o V. Se pide comunicar los porcentajes obtenidos por los candidatos.

EAERCICIO 22
Dlgoritmo &
Lar
U,entera
L',cadena
>D0'XD,entera
>D0'XV,entera
S?ED, entera
+7>EXD,real


@M

+7>EXV,real
8nicio
>antXaI K
>antXbIK
Para U 9desde 1 Dasta 1KK# Dacer
8ngresar (98ndique el candidato votado:, L'#
Si (L'I:D:#
Entonces >D0'XDI >D0XDW1
Sino >D0'XVI >D0'XVW1
in Si
in Para
S?EDI>D0'XDW>D0'XV
+7>EXDI(>D0'XDH1KK#1S?ED
+7>EXVI(>D0'XVH1KK#1S?ED
Eostrar (9El e del candidato D &ue 9,+7>EXD#
Eostrar (9El e del candidato V &ue 9,+7>EXV#
%in

%rueba de escritorio (como el programa est pensado para 1KK, y es una
cantidad muy grande, tomamos una peque2a muestra para ejempli&icar#.










#esumiendo
<emos visto los conceptos de algoritmos, cmo se relacionan con los datos
y el uso de las instrucciones para poder operar con los mismos. D,ora
veremos una serie de ejercicios para utilizar los conceptos que ,emos
visto(


@J

E-ercicio 2;:
?n algoritmo sirve para resolver un problema, para lo cual necesita
manejar datos( 3podras de&inir qu4 es un dato5
E-ercicio 27:
<emos de&inido una serie de condiciones que debe cumplir un algoritmo,
3podras indicarlas y detallar cada una5
E-ercicio 2?:
>ada dato tiene una relacin con un tipo espec&ico de dato, 3cules son los
tipos de datos que ,emos visto5
E-ercicio 2=:
E.isten instrucciones que nos permiten operar con los datos dentro de los
algoritmos, algunos de ellos necesitan 9clusulas de escape:. 3=u4 signi&ica
esta clusula5 3>undo se utiliza5 8ndica un ejemplo de la misma.
E-ercicio 2@:
'enemos un arc,ivo secuencial que contiene BK registros, donde cada
registro trae el nombre y apellido de un cliente distinto y un campo que
indica la cantidad de producto que ese cliente compr.
Drma un algoritmo que indique la cantidad total que nos compraron los
clientes y el nombre y apellido de aquellos clientes que compraron ms de
de BKK unidades del producto.
EAERCICIO 2>:
Se conocen el precio y la cantidad de un producto.
>alcula( El importe total.
) Si es menor que f1KK.! , in&orma +D" E%E>'8L.
) En caso contrario, in&orma 'D7GE'D.
EAERCICIO 25:
6adas las tres notas de un alumno, en una asignatura, in&orma su
cali&icacin &inal teniendo en cuenta que la misma es(
) D+7VD6 si el promedio es mayor o igual que M
) 7E+7VD6 si el promedio es menor que M
EAERCICIO 2T:
`dem anterior pero la cali&icacin &inal es(

@N

) >E+E0SD E0 68>8EEV7E Z %EV7E7 si el promedio es menor que @
) >E+E0SD E0 68>8EEV7E si el promedio est entre @ y F
) D+7VD6 si el promedio es mayor o igual que M
EAERCICIO ;J:
6ados el n$mero de varones y el de mujeres de un curso, calcula el total de
alumnos.
Si el total supera los ;B alumnos, in&orma >?7S 0?EE7S.
En caso contrario, calcula e in&orma lo que se deber pagar para realizar
una salida con todos, si cada alumno paga fM.!
EAERCICIO ;2:
En un campeonato intercolegial se desea conocer la categora a la que
corresponde cada participante.
Se ingresa el nombre y la edad de cada uno de ellos.
El algoritmo termina cuando el nombre es igual a cYYYc
) 80%D0'8/, para los menores de 11 a2os
) +?VE7, entre los 11 y los 1@ a2os
) G?LE08/, para los mayores de 1@ a2os
8n&orma nombre y categora.
EAERCICIO ;;:
Dl enunciado del problema anterior agrega(
En total participan ;=J alumnos. informa:
a# >untos participantes ,ay en cada categora
b# Edad promedio de los participantes del campeonato.
(Luelve a con&eccionar el algoritmo con la in&ormacin nueva#.
EAERCICIO ;7:
6adas las tres notas de cada uno de los ;K alumnos de un curso, in&orme(
) la cali&icacin &inal de cada uno
) el promedio general del curso

BK

) el n$mero de alumnos reprobados, teniendo en cuenta que la cali&icacin
&inal es(
o SV7ESD/8E0'E si el promedio es mayor o igual que N
o E?Z V?E0 si el promedio es mayor o igual que J y menor que N
o V?E0 si el promedio es mayor o igual que F y menor que J
o 7E"?/D7 si el promedio es mayor o igual que @ y menor que F
o 7E+7VD6 si el promedio es menor que @
EAERCICIO ;?
Escribe un algoritmo que calcule y visualice
) el ms grande,
) el ms peque2o,
) la media de 0 n$meros.
El valor 0 se solicitar al principio del programa y los n$meros sern
introducidos por el usuario.

EAERCICIO ;=
>on&ecciona un algoritmo que muestre la tabla del dos.
EAERCICIO ;@
6ado - productos D y V y 1KK encuestados, cada encuestado puede elegir o
rec,azar cualquiera de los productos. Se pide(
a# >antidad de personas que aceptan ambos productos.
b# >antidad de personas que aceptan el producto D y no el V.
c# >antidad de personas que aceptan el producto V, pero no el D.
d# >antidad de personas que rec,azan los - productos.





B1

1.$- Ejemplos de
tiempo de ejecucin de
algoritmos.
%lasificacin de algoritmos
Seg$n el comportamiento del algoritmo con sus datos de entrada podemos
clasi&icarlos como(
Algoritmo determinista( en cada paso del algoritmo se determina
de &orma $nica el siguiente paso.
?na &orma de ver este tipo de algoritmo es considerarlo como una
mquina, la cual tiene distintos 9estados: seg$n el momento de
ejecucin que consideremos, desde un 9estado inicial: que
comienza con la entrada de datos y que provoca una ejecucin de la
secuencia de estados predeterminados, por lo cual podemos in&erir
que en este tipo de algoritmos siempre obtendremos la misma
salida si partimos de los mismos datos y estados iniciales. ?n
ejemplo de este tipo de algoritmo es el que vemos con las &unciones
matemticas.
Algoritmo no determinista o pro*a*ilUstico: deben decidir en cada
paso de la ejecucin entre varias alternativas y agotarlas todas
antes de encontrar la solucin, por lo cual en este tipo de algoritmo
tenemos que con la misma entrada o&rece muc,os posibles
resultados, no permitiendo saber de antemano el resultado de un
algoritmo no determinista.

%aracter&sticas
'odo algoritmo tiene una serie de caractersticas, que impactan sobre su
e&iciencia, la cual es dependiente de la &orma y uso de una serie de
recursos.
/a e&iciencia es algo &undamental a considerar a la ,ora de implementarlos
en una mquina. Estos recursos son principalmente(

B-

El tiempo( perodo transcurrido entre el inicio y la &inalizacin del
algoritmo.
$a memoria( la cantidad (la medida vara seg$n la mquina# que
necesita el algoritmo para su ejecucin.
bviamente, la capacidad y el dise2o de la mquina pueden a&ectar al
dise2o del algoritmo.
+odemos detectar que un algoritmo puede ser ms e&iciente que otro,
cuando requiera menos recursos (tiempo y memoria# al momento de su
ejecucin. Euc,as veces pensamos que un algoritmo sencillo no es
e&iciente, sin embargo por e.periencia valoro muc,o la sencillez, dado que
se trata de una caracterstica que permite reducir el tiempo de
mantenimiento, &acilita su veri&icacin y prueba* por eso priorizamos la
sencillez sobre intentar ,acer ms e&iciente al mismo pero aumentando su
complejidad.
>omo vimos, su e&iciencia la medimos de acuerdo al uso del tiempo y
memoria, dos de los recursos que impactan en nuestro trabajo.
D,ora bien, podemos indicar que el tiempo de ejecucin depender de(
) /os datos de entrada
) El cdigo, su calidad y complejidad
) /a e&iciencia del cdigo ejecutable, propiedad del compilador
) 'ipo de procesador donde se ejecuta el cdigo
/lamaremos 0 al n$mero de datos de entrada al algoritmo* podemos tratar
a los recursos que utiliza el algoritmo como una &uncin de 0 , &(0#*
relacionando al tiempo de ejecucin con la &uncin indicada, nos permite
obtener una relacin '(n#.

'rincipio de In(arin)a
$efinicin del %rincipio de )nvarian*a
os implementaciones distintas de un mismo algoritmo t5(n) y
t1(n) no diferir&n en su eficiencia en m&s de alguna constante
multiplicativa
t1(n# \I c H t-(n#

B;

c pertenece a los n$meros reales y n su&icientemente grande.
El tiempo de ejecucin de cualquiera de las implementaciones est
acotado por un m$ltiplo constante del tiempo de ejecucin de la otra.
El Principio de In+arianKa nos permite deducir que no e.iste una unidad
que se deba utilizar para e.presar la e&iciencia terica de un algoritmo.
! En su lugar, e.presaremos solamente el tiempo requerido por el
algoritmo, salvo una constante multiplicativa.
! +or este principio, todas las implementaciones de un mismo algoritmo
tienen las mismas caractersticas, aunque la constante multiplicativa pueda
cambiar de una implementacin a otra.
3>mo medimos el tiempo de ejecucin de un algoritmo5(
) +or medio de un elemento &sico (ej. 7eloj#
) >onsiderando las instrucciones a ejecutar y a&ectndolas por el tiempo de
ejecucin de cada una.
D,ora bien, como cada programa puede contener di&erentes sentencias
condicionales, esto quiere decir que la dependencia del tiempo estar dada
por las condiciones que indiquen los datos ingresados. +or lo que
entendemos que seg$n esas condiciones, con alguna combinacin de datos
tendremos el tiempo mnimo de ejecucin, 'min (0# y por otro lado
tendremos otra combinacin de datos dando por resultado el tiempo
m.imo de ejecucin, 'ma. (0#
6e lo cual identi&icamos que(
) 'min(0# es el mejor caso que podramos obtener.
) 'ma. (0# es el peor caso que obtendramos.
D,ora bien, e.istirn una serie mayoritaria de casos que estarn entre
ambos e.tremos, de&iniendo un valor promedio o ms &recuente.
'min(0# \I '(0# \I 'ma. (0#
Ddems de los parmetros anteriores, tambi4n podemos ver que e.isten
algunos &actores 9e.ternos:, como ser(
) >alidad del cdigo que genera el compilador.
) Lelocidad de ejecucin del procesador
Si consideramos que es muy sencillo el cambio de compilador y que
prcticamente la velocidad de procesamiento se duplica a2o a a2o*
debemos realizar nuestro anlisis independizndonos de estos &actores.
'min(n# I Eejor caso
'ma.(n#I +eor caso
'(n# I Lalor promedio


B@

tro &actor es que en aquellos problemas c,icos, el impacto de su tiempo
de ejecucin no es un &actor crtico de los mismos.


1.*- +otacin O
El impacto se pro&undiza a medida que crecemos en el problema a
resolver, por lo cual consideraremos a 0 tendiendo a in&inito.
En ese caso estaremos considerando su comportamiento asinttico.
Dl momento de identi&icar di&erentes relaciones entre &unciones y recursos
podemos agrupar los comportamientos resultantes en 9&amilias de
&unciones:, dependiendo de su comportamiento asinttico y le
asignaremos un 9orden de complejidad, :.
/a notacin !grande no toma en cuenta los &actores constantes, es decir,
ignora si se ,ace una mejor o peor implementacin del algoritmo, adems
de independizarlo de los datos de entrada del algoritmo.
>omo utilidad de aplicar este concepto es encontrar un lmite superior del
tiempo de ejecucin, es decir, el peor caso.

Orden de %omplejidad
+odemos decir que(
<el tiempo de ejecucin del algoritmo es proporcional a una
de las siguientes funciones y adem&s cada jerarqu>a de
orden superior tiene a las inferiores como subconjuntos.=
2V Algoritmos Polinomiales
) ! ( tiempo de ejecucin lineal, el tiempo es directamente proporcional a
la cantidad de datos, ej. si 0 vale 1KK tardar el doble que uno donde 0
vale BK.
) log! ( complejidad logartmica, esto puede suceder en algoritmos con
iteracin o recursin no estructural, ejemplo( b$squedas binarias.

BB

) !Vlog! ( complejidad cuasi!lineal, el tiempo de ejecucin es 0 /og0. Si 0
se duplica, el tiempo de ejecucin es ligeramente mayor del doble, un
ejemplo es el quicdsort.
) !; ( >omplejidad cuadrtica. Suele ser ,abitual cuando se tratan pares de
elementos de datos, como por ejemplo un bucle anidado doble. Si 0 se
duplica, el tiempo de ejecucin aumenta cuatro veces.
) !7 ( >omplejidad c$bica. >omo ejemplo se puede dar el de un bucle
anidado triple. Si 0 se duplica, el tiempo de ejecucin se multiplica por
oc,o.
) !- ( >omplejidad polinmica (j];#. Dl crecer la complejidad del programa
es bastante mala.
;V Algoritmo E3ponencial
) ;! ( >omplejidad e.ponencial. 0o suelen ser muy $tiles en la prctica por
el elevadsimo tiempo de ejecucin. Se dan en sub! programas recursivos
con dos o ms llamadas interna.

#elacin tamao, tiempo de ejecucin
En la siguiente tabla se indica el tiempo de ejecucin para di&erentes casos
y di&erentes &unciones de tiempo t(n#.
>onsideramos que cada unidad, de la &uncin de tiempos del algoritmo,
tarda 1 microsegundo.





>omo conclusin podemos decir que los algoritmos polinomiales son
9buenos: algoritmos.
/os algoritmos e.ponenciales son 9malos: algoritmos.
D,ora veamos otro caso, en el cual de&inimos que cualquier tipo de
algoritmo requerir 1 ,ora en resolver un problema de complejidad 0I1KK


BF

Leamos qu4 ocurre si tenemos el doble de tiempo, es decir - ,oras o que
tenemos un procesador el doble de rpido y analicemos si adems
queremos resolver un problema de complejidad -0
6e esto tenemos la siguiente tabla comparativa de los casos planteados(







Lemos que los logaritmos de complejidad (0# como (0 log 0# tienen un
comportamiento directo entre el tiempo y los datos procesados, al crecer
al doble los datos lleva prcticamente al doble el tiempo de ejecucin.
/os algoritmos logartmicos vemos que en el doble de tiempo permiten
trabajar con una complejidad de datos muc,o mayor que el doble y cuando
llevamos al doble los datos el tiempo de ejecucin crece en una proporcin
muc,o menor.
En los algoritmos de tipo polinmicos el crecimiento del tiempo de
ejecucin a medida que aumenta los datos ,ace que en un momento el
orden del mismo ,ace imposible su utilizacin, sin poder precisar
claramente el lmite. Esto nos lleva a ver porque los programadores
trabajan con algoritmos de complejidad lineal, en algunos casos al poder
aplicar complejidad logartmica permite mejorar en muc,o la e&iciencia del
algoritmo y evitando la complejidad e.ponencial.

Conceptos a tener en cuenta
) ?n programa que se va a ejecutar muy pocas veces, ,ace que nuestro
&oco debe estar en la codi&icacin y depuracin del algoritmo, donde la
complejidad no es el &actor crtico a considerar.
) ?n programa que se utilizar por muc,o tiempo, seguramente ser
mantenido por varias personas en el curso de su vida $til, esto ,ace que los
&actores que debemos considerar son los que se relacionan con su
legibilidad, incluso si la mejora de ella impacta en la complejidad de los
algoritmos empleados.


BM

) ?n programa que $nicamente va a trabajar con datos peque2os (valores
bajos de 0#, el orden de complejidad del algoritmo que usemos suele ser
irrelevante, pudiendo llegar a ser incluso contraproducente.
) ?n programa de baja complejidad en cuanto a tiempo de ejecucin, suele
demandar un alto consumo de memoria* y viceversa. Esto es una situacin
que debemos evaluar y entender como impactan ambos &actores.
) ?n programa orientado al clculo num4rico ,ace que debamos tener en
cuenta ms &actores que su complejidad o incluso su tiempo de ejecucin*
en estos casos debemos considerar la precisin del clculo, el m.imo
error introducido en clculos intermedios, la estabilidad del algoritmo, etc.

%lculo de la complejidad
/os algoritmos bien estructurados combinan las sentencias de alguna de las
&ormas siguientes(
1. sentencias sencillas
-. secuencia (*#
;. decisin (i&#
@. bucles
B. llamadas a procedimientos
Sentencias sencillas
Son las indicadas al principio de esta unidad, como ser, entre otras(
) Sentencias de asignacin
) Entrada1salida
/as mismas, siempre y cuando no trabajen sobre variables estructuradas
cuyo tama2o est4 relacionado con el tama2o 0 del problema.
/a inmensa mayora de las sentencias de un algoritmo requieren un tiempo
constante de ejecucin, siendo su complejidad (1#.
Secuencia 9W<
/a complejidad de una serie de elementos de un programa es del orden de
la suma de las complejidades individuales.
Decisin 9si<

BJ

/a condicin suele ser de (1#, complejidad a sumar con la peor posible,
bien en la rama E0'0>ES, o bien en la rama S80
En decisiones m$ltiples (S80 S8, SE/E>>80D7#, se tomar la peor de las
ramas.
1ucles
En los bucles con contador e.plcito, podemos distinguir dos casos(
) =ue el tama2o 0 &orme parte de los lmites.
) =ue el tama2o 0 no &orme parte de los lmites.
Si el bucle se realiza un n$mero &ijo de veces, independiente de 0,
entonces la repeticin slo introduce una constante multiplicativa que
puede absorberse.
$lamadas a procedimientos
Su complejidad depende del contenido del procedimiento. +or ejemplo, el
clculo de la complejidad asociada a un procedimiento puede complicarse
notablemente si se trata de procedimientos recursivos.
El costo de llamar no es sino una constante que podemos obviar
inmediatamente dentro de nuestros anlisis asintticos.

%ota inferior- +otacin . /0ran Omega1
E.iste una notacin similar para indicar la mnima cantidad de recursos que
un algoritmo necesita para alguna clase de entrada.
/a cota in&erior de un algoritmo, denotada por el smbolo g, pronunciado
9"ran mega: u 9mega:, tiene la siguiente de&inicin(
) T(n) est en el conjunto g(g(n)), si e.isten dos constantes positivas c y n7
tales que IT(n)I h cIg(n)I para todo n J n7.
) Ejemplo( Si T(n)Hc5n19c1n para c5 y c1 ] K, entonces(
Ic5n19c1nI h Ic5 n1I h c5In1I
+or lo tanto, T(n) est en g(n1).




BN

+otacin 2 /3ig-T4eta1
>uando las cotas superior e in&erior son la misma, indicamos esto usando la
notacin i (big!',eta#.
Se dice que un algoritmo es i (B(n)), si est en -(B(n)) y est en g(B(n)).
+or ejemplo, como un algoritmo de b$squeda secuencial est tanto en
-(n), como en g(n) en el caso promedio, decimos que es i(n) en el caso
promedio.
6ada una e.presin aritm4tica que describe los requerimientos de tiempo
para un algoritmo, las cotas in&erior y superior siempre coinciden.

#eglas de simplificacin
?na vez que se determina la ecuacin del tiempo de ejecucin para un
algoritmo, es relativamente sencillo derivar las e.presiones para( OV
grande, g y i%
E.isten algunas reglas sencillas que nos permiten simpli&icar las
e.presiones(
1. Si f(n) est en -(g(n)) y g(n) est en -(B(n)), entonces f(n) est en
-(B(n)).
Esta regla nos dice que si alguna &uncin g(n) es una cota superior para una
&uncin de costo, entonces cualquier cota superior para g(n), tambi4n es
una cota superior para la &uncin de costo.
0ota( <ay una propiedad similar para la notacin g y i%
-. Si f(n) est en -(K g(n)) para cualquier constante KJ7, entonces f(n) est
-(g(n))
El signi&icado de la regla es que se puede ignorar cualquier constante
multiplicativa en las ecuaciones, cuando se use notacin de OVgrande.
;. Si f5(n) est en -(g5(n)) y f1(n) est en -(g1(n)), entonces f5(n) 9 f1(n)
est en -(maD(g5(n),g1(n))).
/a regla e.presa que dadas dos partes de un programa ejecutadas en
secuencia, slo se necesita considerar la parte ms cara.
@. Si f5(n) est en -(g5(n)) y f1(n) est en -(g1(n)), entonces f5(n)f1(n) est
en -(g5(n)g1(n)).

FK

Esta regla se emplea para simpli&icar ciclos simples en programas. Si alguna
accin es repetida un cierto n$mero de veces, y cada repeticin tiene el
mismo costo, entonces el costo total es el costo de la accin multiplicado
por el n$mero de veces que la accin tuvo lugar.
'omando las tres primeras reglas colectivamente, se pueden ignorar todas
las constantes y todos los t4rminos de orden in&erior para determinar la
razn de crecimiento asinttico para cualquier &uncin de costo, ya que los
t4rminos de orden superior pronto superan a los t4rminos de orden
in&erior en su contribucin en el costo total, con&orme n se +uel+e grande.
Ejemplos de clculo del tiempo de ejecucin de un programa.
Leamos el anlisis de un simple enunciado de asignacin a una variable
entera(
a I b*
>omo el enunciado de asignacin toma tiempo constante, est en i(1#.
>onsideremos un simple ciclo 9&or: (
sumIK*
&or(iIK* i\n* iWW#
sum WI n*
/a primera lnea es i(5). El ciclo 9&or: es repetido n veces.
/a tercera lnea toma un tiempo constante tambi4n, por la regla de
simpli&icacin (@#, el costo total por ejecutar las dos lneas que &orman el
ciclo
9&or: es i(n). +or la regla (;#, el costo por el entero &ragmento de cdigo es
tambi4n i(n).
Dnalicemos un &ragmento de cdigo con varios ciclos 9&or:, algunos de los
cuales estn anidados.
sumIK*
&or(jIK* j\n* jWW#
&or(iIK* i\j* iWW#
sumWW*
&or(dIK* d\n* dWW#
D^d_I d!1*

F1

Este cdigo tiene tres partes(
) ?na asignacin, y dos ciclos.
/a asignacin toma tiempo constante, llam4mosla c5.
El segundo ciclo es similar al ejemplo anterior y toma c1nH i(n).
Dnalicemos a,ora el primer ciclo, que es un doble ciclo anidado. En este
caso trabajemos de adentro ,acia &uera.
/a e.presin sum99 requiere tiempo constante, llam4mosle cL.
>omo el ciclo interno es ejecutado j veces, por la regla (@#, tiene un costo
de cLj. El ciclo e.terior es ejecutado n veces, pero cada vez el costo del
ciclo interior es di&erente.
El costo total del ciclo es cL veces la suma de los n$meros 1 a n, es decir
jn iH5 j H n(n95)M1, que es i(n1).
+or la regla (;#, i(c59c1n9cLn1) es simplemente i(n1).
>omparemos el anlisis asinttico de los siguientes &ragmentos de cdigo(
sum1IK*
&or(iIK* i\n* iWW#
&or(jIK* j\n* jWW#
sum1WW*
sum-IK*
&or(iIK* i\n* iWW#
&or(jIK* j\i* jWW#
sum-WW*
El primer &ragmento de ejecuta el enunciado sum599, precisamente n1
veces.
+or otra parte, el segundo &ragmento de cdigo tiene un costo apro.imado
de Nn1.
Ds ambos cdigos tienen un costo de i(n1).



F-

#esumiendo
<emos visto los conceptos de e&iciencia y los &actores que inciden en el
mismo. 'ambi4n identi&icamos distintas 9&amilias: de algoritmos seg$n su
comportamiento. >onocimos que e.isten cotas o lmites en cada caso.
6escribimos el concepto de !"rande, como lmite superior y "ran mega,
como lmite in&erior. +udimos ver cmo utilizar reglas de simpli&icacin
para obtener estos lmites.
D,ora bien, podemos evaluar si los conceptos vistos &ueron claros,
intentando contestar, seg$n nuestro entendimiento, las siguientes
preguntas(
E-ercicio ;>: 3cmo clasi&icaras a los algoritmos seg$n su comportamiento
dependiendo de sus datos de entrada5
E-ercicio ;5: 3cmo describiras el concepto de e&iciencia de un algoritmo5
E-ercicio ;T( si tuvi4ramos dos instalaciones del mismo algoritmo, 3e.iste
alguna relacin entre las di&erencias de e&iciencia de ambos5
E-ercicio 7J: describe el concepto de !"rande
E-ercicio 72: 3qu4 &actores identi&icas para el clculo de la complejidad de
un algoritmo5
E-ercicio 7;: 3qu4 signi&ica >ota 8n&erior o "ran mega5


1.5- 6ogaritmos.
Definiciones
?n algoritmo de un nmero, en una base dada, es el exponente al cual se
debe elevar la base para obtener dic,o n$mero
loga . I y I] ay I . donde a]K y a kI 1
8denti&iquemos a,ora en este ejemplo los conceptos presentados en la
de&inicin(


F;

a( es la base
y( es el exponente
.( es el nmero

Desarrollo
D,ora intentemos pro&undizar con los conceptos vistos anteriormente en el
tem re&erido a la 0'D>8T0 .
En este caso vale una aclaracin( si no lo indicamos tomamos como base a
- para nuestros algoritmos.
'omaremos un algoritmo de tipo logaritmo( (0 log 0# y lo compararemos
con un algoritmo del tipo cuadrtico( (0-#, tomando como re&erencia
para ambos el algoritmo lneas (0#.







+odemos ver en el siguiente gra&ico cmo evolucionan di&erente las dos
&ormas, en donde la logartmica tiene un comportamiento parecido a la
secuencial.









Comportamiento

El algoritmo logartmico
tiene un comportamiento
que lo asemeja al
logaritmo secuencial

F@

D,ora apliquemos lo visto en algunos casos concretos(

DUP$ICACIO!ES SUCESI)AS



/a resolucin de este caso se basa en la ecuacin(



/o cual implica que(


Si por ejemplo quisi4ramos llegar a tener un n I 1KKKK, la cantidad
duplicaciones necesarias seran de apro.. 1;.
D,ora bien, veamos otro caso(

DI)ISIO!ES REPETIDAS POR $A "ITAD.




Similar al caso anterior la respuesta es(


Si partiendo del valor x+ , -uisiera llegar a x+n
.cu'ntas duplicaciones sucesivas /01 deber2a
reali*ar3
45 6+ n

5 + log n

%artiendo de un valor n7 .cu'ntas divisiones
repetidas por las mitad se necesita para obtener n8+
,3

log n


FB

Si tomamos el siguiente ejemplo donde nI@
Dplicando logaritmos vemos que necesitamos dos divisiones para obtener
el resultado esperado, en este caso en el cual n I 1


1.7- 'rolema de la
8s9ueda esttica
?na de las aplicaciones 9naturales: de una computadora es la realizacin
de b$squedas, generalmente sobre estructuras del tipo vectores.
Si los datos que tenemos en la estructura no se pueden modi&icar, decimos
que la b$squeda es esttica.
bviamente entendemos que cuando realizamos una b$squeda y el vector
en el cual lo ,acemos est ordenado, decimos que esa b$squeda es ms
e&iciente a que si no estuviera ordenado.

Tipos de 38s9uedas
+odemos identi&icar - tipos de b$squedas(
1. )nterna( >uando los elementos entre los que buscamos estn
almacenados en memoria (array#.
-. Externa( >uando los datos entre los que buscamos estn almacenados
en un dispositivo e.terno* en este caso la b$squeda se realiza a partir de un
determinado campo denominado campo clave.
En cualquier caso buscar un determinado elemento en un array o en un
arc,ivo es encontrar la posicin del array o del arc,ivo en que se encuentra
almacenado ese elemento, o bien, detectar que dic,o elemento no
pertenece al array o a dic,o arc,ivo en el que se busca.
/os m4todos de b$squeda ms usuales son(
! secuencial o lineal
! binaria o dicotmica
$efinicin(
Una bsqueda est&tica
accede a datos
est&ticos

FF

! por trans&ormacin de claves o <DS<80"

1BsRueda secuencial
Sea D un vector con 0 elementos, para localizar el valor del elemento
buscado dentro de D, se comparar dic,o valor con los di&erentes
miembros de D ,asta encontrar el valor buscado o bien llegar ,asta el &inal
del vector, en el caso de que el elemento no se encuentre en dic,o vector.
EAERCICIO 77
Algoritmo SECUE!CIA$
inicio
l 1
/?" K
mientras ((l \I 0# y (/?"IK## ,acer
si (D(d#IE/EEE0'#
entonces
/?" l
&inXsi
l I l W 1
&inXmientras
si (/?"IK#
entonces escribir(90 E0>0'7D6:#
sino escribir(9 E/EEE0' ES'D E0:,/?"#
&inXsi
fin

1BsRueda secuencial con centinela
Es una mejora del anterior en cuanto a que evita que tengamos que estar
preguntando constantemente si ,emos llegado al &inal del array.
El m4todo consiste en asignar el valor buscado a la posicin 0W1 del array
siendo 0 el n$mero de elementos del array, cuando acabemos si /?" que
es la variable que nos indica la posicin del elemento es igual a 0Wa
signi&icar que el elemento no se encuentra en dic,o array.
El inconveniente de este m4todo es que para poder aplicarlo el array tiene
que tener la capacidad su&iciente para almacenar 0W1 elementos.
Este m4todo se llama centinela, porque al elemento que metemos en la
posicin 0W1 se llama as.


FM

EAERCICIO 7?
Algoritmo SECUE!CIA$ CE!TI!E$A
Inicio
/?" 1
D(0W1# E/EEE0'
mientras (D(/?"# \] E/EEE0'# ,acer
/?" /?"W1
&inXmientras
si (/?"I0W1#
entonces escribir(9 0o encontrado:#
&inXsi
fin

+ara calcular la complejidad, el n$mero m.imo de operaciones que se
realizan, nos &ijamos en el peor caso (el elemento no est4 en el array o que
est4 en la $ltima posicin#.

1BsRueda *inaria o dicotmica
El problema de la b$squeda secuencial es que cuando el n$mero de
elementos es muy grande, el proceso de b$squeda se ,ace muy lento, por
eso vamos a ver este m4todo, que se basa en dividir el espacio de
b$squeda o array en sucesivas mitades ,asta encontrar el elemento
buscado.
El inconveniente es que e.ige que el array est4 ordenado para poder
aplicarlo por ello el primer paso ser ordenarlo.
+DSS
Se compara el elemento buscado con el de la mitad de la lista y si no es
igual se decide en qu4 parte de la lista se seguir buscando.
EAERCICIO 7=
Algoritmo 1USMUEDAX1I!ARIA
inicio
+780 /i(1#
%80D/ /s(n#
E8' (+780W%80D/# 68L -
mientras ((D(E8'# \] E/EEE0'# y (+780 \ %80D/## ,acer
si (E/EEE0' \ D(E8'##
entonces %80D/ E8' ! 1
sino +780 E8' W 1
&inXsi

FJ

E8' (+780W%80D/# 68L -
&inXmientras
si (+780 ] %80D/#
entonces escribir(90o encontrado:#
sino escribir(9Esta en:, E8'#
&inXsi
fin

En el peor de los casos la complejidad sera aquella en la que el elemento
no estuviera en la lista o estuviera en la $ltima mitad a analizar, por tanto,
como m.imo ,ar4 tantas comparaciones como el n$mero de mitades
m.imo en el que puedo dividir la lista.
Si 0 &uera el n$mero m.imo de elementos del array, l sera el n$mero
m.imo de comparaciones s
-
d
I 0 W 1.
l I log
-
(0 W 1#
El caso ms &avorable sera aquel en el que slo tuviera que ,acer una
comparacin, porque el elemento buscado coincidiese con la primera
mitad del array

D W log
-
(0 W 1# I log
-
(0 W 1#
- -

1BsRueda por con+ersin de cla+es: CASCI!G
+ara utilizar este m4todo tampoco ,ace &alta que el array est4 ordenado
pero si e.ige que cada elemento del array tenga asociada una clave.
Entonces, dado un array de 0 posiciones y dado un elemento a buscar en
dic,o array, se trata de convertir la clave de ese elemento a una de las 0
posiciones del array y en esa posicin ser la que investigaremos si est o
no el elemento.
Esta b$squeda e.ige la e.istencia de una &uncin de direccionamiento o
conversin de claves que establezca la correspondencia entre claves y
posiciones del array.
1 \ l \ 0

FN

El inconveniente de este m4todo es que si el rango de claves es muy
grande no sera e&iciente reservar espacio para todo el rango de claves (a
veces no sera ni posible#. 'eniendo en cuenta que cada elemento puede
tener cualquier clave del rango, si reservo menos posiciones de las que
tiene ese rango puede darse el caso de que a ms de un elemento la
&uncin de conversin le ,aga corresponder la misma posicin en el array*
esto se conoce como colisin.
D cada una de las partes que colisionan se denominan S80T08ES. /a
&uncin de conversin tiene que ser tal que produzca el mnimo n$mero de
colisiones posibles.
Ejemplo de aplicacin de un m4todo de <as,ing, pseudocdigo(
Se tiene un listado con los 608 de los alumnos que pueden estar entre el
n$mero -K.KKK.KKK y --.KKK.KKK y un n$mero m.imo de alumnos de BK.
Se tiene una variable denominada 608 que &ue ingresada por pantalla.
Entonces, aplicando el m4todo de 68L8S8T0 +7 ?0 0aEE7 +78E(
BK W el -K e I BK H 1.- I FK, n$mero primo BN


1.:- 6imitaciones del
anlisis O
En nuestro estudio ,emos visto la importancia del anlisis teniendo en
cuenta los conceptos aprendidos, como la relacin que e.iste en la &orma
de identi&icar a los algoritmos con enunciados matemticos. +ero tambi4n
debemos ,acer notar que no ,emos tenido en cuenta elementos como el
uso de la memoria, dado que en nuestros anlisis consideramos a la misma
como un recurso casi in&inito.
tro elemento que no consideramos en nuestros estudios es si los distintos
accesos que consideramos pertenecen a operaciones sobre la memoria o
sobre dispositivos e.ternos como discos.
tro elemento que produce un impacto es, en aquellos algoritmos
complejos, la in&luencia de las constantes que en nuestros casos no las
consideramos.

MK




3=u4 ,emos visto en esta unidad5
) ?na introduccin a la notacin de algoritmos.
) 'emas relacionados a la ejecucin de los algoritmos.
) Dnalizamos el desenvolvimiento de los mismos utilizando la notacin .
) >mo podemos utilizar el concepto de logaritmos en determinados
problemas.
) /as b$squedas estticas, sus caractersticas y di&erencias.
) Z &inalmente las limitaciones que debemos considerar al utilizar esta
metodologa.


3iliograf&a 3sica
Heiss. "%A. (-KKK#. <Estructura de atos en 0ava=. Ddisson measley.

3iliograf&a Ampliatoria
Y $age ernando. (a2o de edicin# <:undamentos de algoritmo y programacin.=
0ueva /ibrera.
) RamireK elipe% (-KKJ# <Entroduccin a la programacin:. Dl&aomega.
) PereK 1erro. (a2o de edicin# 9/lgoritmo y Grogramacin.= 0ueva /ibrera.
) R%C%T% $ee. (-KKM#. <Entroduccin al diseOo y an&lisis de algoritmos.= E4.ico. Ec
"raA <ill.
) Cairo 1% (a2o de edicin# <Cetodolog>a de la Grogramacin.=Editorial.
) Ao,anes Aguilar. (-KKK#. 9%. /lgoritmos, programacin y estructuras de datos.=
Editorial.
) PereK Aulio% (a2o de edicin# <Catem&tica iscreta y /lgoritmos.= Editorial.

"e recomienda ampliar este punto consultando la
bibliograf>a b&sica, >tem 6.P

M1

) Ao,anes Aguilar% (-KKB# </lgoritmo y estructura de datos una perspectiva en %=.
Ec "raA <ill.
www.uesiglo21.edu.ar

También podría gustarte