Un algoritmo es una secuencia de pasos lgicos y ordenados con
las cuales le damos solucin a un problema determinado. En la vida diaria cada uno de nosotros disea y realiza algoritmos para solucionar los problemas cotidianos, es as que al levantarnos de la cama ya tenemos en la mente una serie de pasos que debemos seguir para llegar al sitio de estudio o al sitio de trabajo. Una vez en el sitio de estudio, tenemos en nuestra mente una serie de tareas que debemos realizar en unos horarios ya definidos. i quisi!ramos realizar una comida especial, en nuestra mente construimos un algoritmo o serie de pasos que debemos seguir en un orden especfico para que todo nos salga como queremos. i quisi!ramos transcribir estos pasos en una hoja de papel, para que otra persona realizar" las mismas tareas y obtenga el mismo resultado que nosotros, debemos seguir una serie de normas para que esta otra persona nos entienda. #or ejemplo debe estar esctrito en el idioma que ella comprende, se deben enumerar los pasos etc. $as normas que se deben seguir al momento de transcribir el algoritmo depende de quien ser" el encargado de ejecutarlo, por ejemplo si quisieramos escribir la receta para que la ejecute una persona adulta las normas ser"n diferentes a las que debemos seguir si quisieramos escribir la receta para que le ejecute una nia. $% &%'%&(E')(*&% +E $, %$-,'*(., /. Un algoritmo debe ser preciso e indicar el orden de realizacin de cada paso. 0. Un algoritmo debe estar definido. i se sigue el algoritmo dos veces, se debe obtener el mismo resultado cada vez. 1. Un algoritmo debe ser finito. i se sigue el algoritmo. e debe terminar en alg2n momento, o sea debe tener un n2mero finito de pasos. clasificacion de los algoritmos, segun quien los ejecute3 algoritmos para ser ejecutados por personas. algoritmos para ser ejecutados por las computadoras.
#%'(E +E U4 %$-,'*(.,
*4*&*, 5 6*4 Una de las caractersticas de los algoritmos es que deben ser finitos. e debe indicar claramente donde inicia y donde termina. para indicar donde comienza nuestro algoritmo vamos a utilizar la palabra *4*&*, y para indicar donde se termina nuestro algoritmo vamos a utilizar las palabras 6*4 #',-'%.%. ejemplo3 el siguiente algoritmo, que no hace nada slo indica donde inicia y donde termina. inicio
fin programa ejemplo +E&$%'%&*74 +E 8%'*%9$E los datos son una parte muy importante en un algoritmo, pues son ellos el punto de partida y son ellos quienes sufren las transformaciones que dar"n los resultados deseados. Por esta razn el algoritmo debe guardar los datos en un sitio donde los pueda leer y modificar cada vez que lo requiera. los sitios donde el algoritmo guarda los datos los llamaremos E#%&*, +E .E.,'*% y el tamao de estos dependen del tipo de dato que se quiera guardar en ellos. %dem"s si se tienen varios datos se debe tener la posibilidad de diferenciarlos de una manera que no se presenten confusiones asign"ndoles un identificador v"lido y 2nico a estos espacios de memoria. Un espacio de memoria se denomina 8%'*%9$E cuando su contenido puede variar en el tiempo y de &,4(%4(E cuando no se permite que su contenido vari!. $o primero que se hace en al algoritmo es declarar las variables. +onde se separan los espacios de memoria del tamao indicado seg2n el tipo de dato que guardar"n y asign"ndoles un nombre o identificador v"lido, con el cual nos referiremos a la informacin que se guarda en dicho espacio de memoria. para declarar las variables se har" de la siguiente forma3 tipo de dato3 identificador, identificador primero se coloca el tipo de dato seg2n la informacin que se guardar" en los espacios de memoria a crear. dos puntos : 3 : una lista de indentificadores v"lidos separados por coma :,: ejemplo / ejemplo ; ejemplo 0 ejemplo < ejemplo 1 ejemplo = ejemplo > ejemplo ? ejemplo @ ejemplo /A #',9$E.% #',#UE(, E4('%+% +E +%(, cuando un algoritmo requiera que el usuario ingrese datos, se utilizar" la instruccin $EE' y entre par!ntesis la lista de variables donde se guardar"n los datos ingresados por el usuario. leerBidentificador/, identificador0C de esta forma se podr" tener la siguiente instruccin3 leerB D, 5, EC donde se le pide al usuario que entre tres datos el primero de los cuales se guarda en el espacio de memoria que tiene identificador D, el segundo se guardar" en el espacio de memoria que tiene identificador 5 y el tercero se guardar" en el espacio de memoria que tiene identificador E.
EFE.#$, / E4U4&*%+,3 hacer un algoritmo que lea el nombre y la edad de una persona. 8%'*%9$E3 los datos de entrada son 3 4,.9'E3 para guardar el nombre de la persona Btipo cadenaC E+%+3 para guardar la edad de la persona, como en el enunciado no lo especifican lo tomaremos de tipo entero. ED#$*&%&*,4 +E$ %$-,'*(., #imero se definen las variables requeridas y luego se le pide al usuario que ingrese los datos.
EFE.#$, 0 E4U4&*%+,3 hacer un algoritmo que lea la cantidad de dias trabajados y el salario ganado en esos dias. 8%'*%9$E como la cantidad de das trabajados puede contener parte dicimal, se define la variable +*% de tipo real. como salario puede contener parte dicimal, se define la variable %$%'*, de tipo real. ED#$*&%&*,4 +E$ %$-,'*(., #imero se definen las variables requeridas y luego se le pide al usuario que ingrese los datos %$*+% +E +%(, si el algoritmo requiere mostrar la informacin que tiene guardada en variables Bespacio de memoriaC hacia el eGteriorBpara el usuario final C, se utilizar" la instruccin .,('%' y entre par!ntesis la lista de variables donde se guardan los datos que se quieren mostrar. .ostrarB identificador/, identificador0, identificador1C
la instruccin siguiente mostrar" al usuario la informacin que se tiene guardada en la variables D, 5 y E. .,('%' B D, 5, EC tambi!n se puede pasar informacin directamente Bque no esta guardada en variablesC para construir mensajes de la siguiente manera3 .,('%' BH hola como estas H, /01, DC el anterior mensaje mostrar" al usuario un mensaje que contiene la cadena Hhola como estasH, el numero /01 y la informacin contenida en la variable D. ejemplo / ejemplo ; ejemplo 0 ejemplo < ejemplo 1 ejemplo = ejemplo > ejemplo ? ejemplo @ ejemplo /A #',9$E.% #',#UE(, 'E-'E%' $% ,#E'%&*74 +E %*-4%&*74 Es el modo de copiar un valor especfico en una variable o espacio de memoria. $a operacin de asignacin se representa con el smbolo igual :I: $a forma general de una operacin de asignacin es3 variable I valor hay que tener en cuenta que en una variable determinada slo se podr"n guardar datos que correspondan al tipo con el que fue declarada la variable. #or esta razn veamos como realizar la asignacin en cada uno de los tipos de datos. /. %*-4%&*,4 E4 8%'*%9$E 4U.J'*&%B de tipo entero o tipo realC 0. %*-4%&*,4 E4 8%'*%9$E +E (*#, &%+E4% 1. %*-4%&*,4 E4 8%'*%9$E +E (*#, $7-*&, >. %*-4%&*,4 E4 8%'*%9$E +E (*#, &%'%&(E' los siguientes ejemplos son una miscel"nea3 ejemplo / ejemplo ; ejemplo 0 ejemplo < ejemplo 1 ejemplo = ejemplo > ejemplo ? ejemplo @ ejemplo /A #roblemas propuestos 'E-'E%'
%*-4%&*,4 +E 8%$,'E % 8%'*%9$E 4K.E'*&% en una variable num!ricaBdeclarada como entero o real C slo se podr"n guardar datos num!ricos y eGiste dos formas de hacerlo3 /. asignacin de un n2mero Bconstante num!ricaC a una variable num!rica. asumamos que la variable % ha sido declarada de tipo entero, si queremos copiar el valor de @ en ella lo haramos de la siguiente manera. % I @ se copia el valor de @ en la variable %. 0. asignacin del resultado de una eGpresin aritm!tica a una variable num!rica. asumamos que las variable % ha sido declarada de tipo entero y queremos copiar en ella el resultado de la eGpresin aritm!tica @L0 M/ se hara de la siguiente manera. % I @L 0 M/ se eval2a primero la eGpresin aritm!tica y el resultado se guarda en la variable %. En este caso se copia en % el valor de //. es posible que la eGpresin aritm!tica este formada con variables num!ricas, para ilustrarlo asumamos que %, 9 y & han sido declaradas de tipo entero y que en 9 ya hemos copiado un /A B9 I /AC y en & hemos copiado un dos B9 I 0C. si queremos copiar en % lo que tiene 9 mas lo que tiene &, se hara de la siguiente manera. % I 9 M & se eval2a la eGpresin aritm!tica, teniendo en cuenta los contenidos de las variables 9 y &, en este caso el resultado es /0 que se asigna a la variable %. EFE.#$, / E4U4&*%+,3 hacer un algoritmo que lea un entero 4 y muestre el doble del n2mero. 8%'*%9$E se declara 4 de tipo entero, para guardar el dato entrado por el usuario. se declara +,9$E de tipo entero, para guardar el doble del n2mero. ED#$*&%&*,4 +E$ %$-,'*(., se declaran las variables requeridas, se le pide al usuario que entre el dato 4, se calcula el doble del n2mero y se muestra. EFE.#$, 0 E4U4&*%+,3 hacer un algoritmo que lea un entero 4 y muestre el /A N del n2mero. 8%'*%9$E se declara 4 de tipo entero, para guardar el dato entrado por el usuario. se declara # de tipo real, para guardar /A N del n2mero. ED#$*&%&*,4 +E$ %$-,'*(., se declaran las variables requeridas, se le pide al usuario que entre el dato 4, se calcula el /A N del n2mero y se muestra. %*-4%&*,4 +E 8%$,'E % 8%'*%9$E +E (*#, &%+E4% En una variable de tipo cadena se pueden guardar cadenas directamente o el resultado de evaluar una eGpresin de cadena. asumamos que la variable 4,.9'E ha sido declarada de tipo cadena , si queremos copiar en ella el nombre H.araH lo haramos de la siguiente manera. 4,.9'E I H.araH copiara en la variable 4,.9'E el valor de H.ariaH. EFE.#$, / E4U4&*%+,3 hacer un algoritmo que lea el nombre de una persona y muestre el nombre y el mensaje HO,$% 9UE4% 4,&OEH. 8%'*%9$E se declara 4,.9'E de tipo cadena , para guardar el nombre de la persona. ED#$*&%&*,4 +E$ %$-,'*(., se declara la variable requerida, se le pide al usuario que entre 4,.9'E, se muestra el nombre y el mensaje indicado. EFE.#$, 0 E4U4&*%+,3 hacer un algoritmo que lea el nombre y la edad de una persona y muestre el nombre y la edad. 8%'*%9$E se declara 4,.9'E de tipo cadena , para guardar el nombre de la persona. se declara E+%+ de tipo entero , para guardar la edad la persona. ED#$*&%&*,4 +E$ %$-,'*(., se declaran las variables requeridas, se le pide al usuario que entre 4,.9'E y la E+%+. finalmente se muestra el nombre y la edad de la persona. %*-4%&*,4 +E 8%$,'E % 8%'*%9$E $7-*&% En una variable lgica slo se podr"n guardar datos lgicosB HverdaderoH o HfalsoHC o el resultado de evaluar una eGpresin lgica. asumamos que la variable 9%4+E'% ha sido declarada de tipo lgico , si queremos copiar en ella el resultado de la eGpresin lgica 0 P /A , lo haramos de la siguiente manera. 9%4+E'% I 0 P /A copiara en la variable 9%4+E'% el valor de HfalsoH, pues 0 no es mayor que /A.
EFE.#$, / E4U4&*%+,3 hacer un algoritmo que lea el dato 4 de tipo entero y muestre el resultado de la siguiente eGpresion lgica3 4 P /A 8%'*%9$E se declara 4, de tipo entero , para guardar el n2mero que ingresa el usuario. se declara 'E#UE(%, de tipo lgico , para guardar el resultado de la eGpresion . ED#$*&%&*,4 +E$ %$-,'*(., se declaran las variables requeridas. en 'E#UE(% se guarda el resultado de evaluar la eGpresin indicada y final mente se muestra el resultado. EFE.#$, 0 E4U4&*%+,3 hacer un algoritmo que lea el dato 4, de tipo entero y muestre el resultado de la siguiente eGpresin lgica3 4 P /A QQ 4 R @A 8%'*%9$E se declara 4, de tipo entero , para guardar el n2mero que ingresa el usuario. se declara 'E#UE(%, de tipo lgico , para guardar el resultado de la eGpresion . ED#$*&%&*,4 +E$ %$-,'*(., se declaran las variables requeridas. en 'E#UE(% se guarda el resultado de evaluar la eGpresin indicada y final mente se muestra el resultado. *4('U&&*,4E +E +E&**74 $as instrucciones de decisin son necesarias cuando en un algoritmo una o muchas tareas se deben hacer o no, dependiendo de una situacin en particular. esta situacin nos ayudar" a decidir si hacemos o no las tareas indicadas. las instrucciones de decisin que estudiaremos son las b"sicas, la *4('U&&*74 +E +E&**74 * y la *4('U&&*74 +E +E&**74 * 4,. *4('U&&*,4E +E +E&**74 BsiC $a estructura es la siguiente3 *nicio *nstruccin / si eGpresin lgica entonces .......*nstruccin // .......*nstruccin /0 .......*nstruccin /1 fin si *nstruccin n S fin del programa
se eval2a la eGpresin lgica si es verdadera se realizan las instrucciones internas, de lo contrario se salta a la siguiente instruccin fuera de la estructura en este caso a la instruccin n. *4('U&&*,4E +E +E&**74 Bsi T si no C $a estructura es la siguiente3 *nicio *nstruccin / si eGpresin lgica entonces .......*nstruccin // .......*nstruccin /0 .......*nstruccin /1 si no .......*nstruccin 0/ .......*nstruccin 00 .......*nstruccin 01 fin si *nstruccin n S fin del programa e eval2a la eGpresin lgica si es verdadera se realizan las instrucciones internas al si en este caso las instrucciones Bl/,l0,l1,...C y luego se sigue con la instruccin n. i la eGpresin lgica es falsa se realizan las instrucciones internas al si no en este caso las instrucciones B0/, 00, 01C y luego se sigue con la instruccin n. Es de notar que este tipo de instruccin es eGcluyente, o sea que si entra por el si, no entra por el si no. 5 si entra por el si no, no entra por el si. *4('U&&*,4E +E 'E#E(*&*,4 $as instrucciones de repeticin son necesarias cuando en un algoritmo hay que realizar una o muchas tareas varias veces, las instrucciones de repeticin b"sicas son3 el .*E4('% y el #%'%, cada una de las cuales tiene su propia representacin y su propia manera de controlar el n2mero de veces que se repetir" el cicloB instrucciones internas C. estas caractersticas hacen que una instruccin de repeticin sea mas adecuado que la otra en una situacin particular. 'E-'E%' E('U&(U'% .*E4('%B UhileC $a estructura repetitiva mientras es aquella en que las instrucciones internas Bbucle Cse ejecutan mientras se cumple una determinada condicin. $a estructura es la siguiente3 *nicio *nstruccin / mientras eGpresinVlgica haga .......*nstruccin // .......*nstruccin /0 .......*nstruccin /1 fin mientras *nstruccin n S fin del programa &uando se ejecuta la instruccin mientras. $a primera cosa que sucede es que se eval2a la condicin Buna eGpresin lgicaC. i la eGpresin es falsa, ninguna accin del bucleB parte internaC se ejecuta y el programa continua en la siguiente instruccin al bucle. i la eGpresin es verdadera, entonces se ejecuta el cuerpo del bucle. +espu!s de lo cual se eval2a de nuevo la eGpresin booleana. Este proceso se repite una y otra vez mientras la eGpresin lgica BcondicinC sea verdadera. +entro del cuerpo del bucle debe eGistir una instruccin que modifique la eGpresin de tal manera que en alg2n momento haga que su valor sea falso. Es decir que garantice la terminacin del ciclo. #ara controlar el n2mero de repeticiones del ciclo se puede hacer de dos maneras3 /. utilizando una variable contador. 0. utilizando una variable centinela. problemas propuestos 'E-'E%'
E('U&(U'% +E 'E#E(*&*74 #%'% B6,'C #ermite que un grupo de instrucciones se repita cero o mas veces, dependiendo del valor que resulte al evaluar una eGpresin de tipo lgico. $a estructura es la siguiente3 #ara eGpresinVinicio, eGpresinVlgica, eGpresionVincremento .......*nstruccion/ .......*nstruccion0 ......*nstruccion1 ......*nstruccion> S 6in para *nstruccin n S la eGpresinVinicio establece la condicin inicial para la variable de control evaluada en la eGpresin lgica. $a eGpresionVincremento modifica la variable de control. $a eGpresinVlgica es una eGpresin formado con la variable de control, y que sirve para controlar el n2mero de iteraciones del ciclo el cual termina cuando su valor sea falso. EFE.#$, / E4U4&*%+,3 hacer un algoritmo que lea @ enteros dados por el usuario y muestre su suma. +%(,3 43 para guardar el dato que entra el usuario B de tipo enteroC U.% 3 para guardar la suma de los digitosB de tipo enteroC. * 3 para controlar el cicloB de tipo enteroC. ED#$*&%&*,4 +E$ %$-,'*(., se debe definir las variables a utilizar 4, *, U.%. se inicia la variable U.%, se debe hacer antes de comenzar a ingresar los datos. e construye un ciclo para que se repita @ veces y en cada repeticion se lee un dato 4 ,el cual se va acumulando en la variable U.%. al terminar de ingresar todos los datos se muestra el contenido de la variable U.%. EFE.#$, 0 E4U4&*%+,3 hacer un algoritmo que lea @ datos enteros dados por el usuario y muestre la suma de los datos impares. +%(,3 los datos de entrada son 3 +%(,3 para guardar el dato dado por el usuario B de tipo enteroC otros datos3 * 3 para controlar el ciclo. U.% 3 para guardar la sumatoria de los datos imparesB de tipo enteroC. ED#$*&%&*,4 +E$ %$-,'*(., se debe definir las variables a utilizar +%(,, *, U.%. se construye un ciclo para controlado por la variable * para que se repita @ veces. se lee cada dato, si el dato es impar se acumula. al terminar el ciclo se muestra U.%. U9%$-,'*(., cuando un algoritmo crece demasiado, se hace necesario dividirlo en subalgoritmos o mdulos, llamados funciones o procedimientos. Esta divisin nos permite3 /. hacer mas entendible los algoritmos. 0. la deteccin y correccin de problemas se hace mas simple, pues los problemas est"n mas localizados, no es necesario analizar todo el algoritmo, slo el mdulo que esta fallando. 1. permite que los subalgoritmos se especialicen en resolver una tarea especfica, sin importarles como funcionan los dem"s mdulos. esto facilita que varias personas puedan realizar un algoritmo, cada uno de ellos realiza un subalgoritmo especfico. >. si se han construido subalgoritmos, estos se pueden utilizarB llamarC las veces que se necesite. esto es la reutilizacin de los subalgoritmos, para que resolver un problema que ya haba sido resuelto, slo se llama a la solucin. 'E-'E%' 6U4&*74E3 Una funcin es un subalgoritmo que toma uno o m"s valores llamados argumentos y produce un valor llamado resultado Bvalor de la funcin para los argumentos dadosC. +E&$%'%&*,4 +E 6U4&*74E3 $a declaracin de una funcin requiere una serie de pasos que la definen. Una funcin tiene una construccin similar a los algoritmos. $a descripcin de la funcin ser"3 tipo de dato3 nombreVfincin Blista de par"metrosC RaccionesP devolverB eGpresin C fin funcin /. tipo de dato3 indica de que tipo de dato es la informacin que devuelve la funcin. 0. dos puntos : 3 : 1. nombre de la funcin 3 debe ser un identificador v"lido y unico que se utiliza para llamar a la funcin. >. argumentos de dicha funcin. Es una lista de declaraciones de variables se paradas por dos puntosB: 3 :C donde se especifican los datos que requiere la funcin para trabajar. @. %cciones o cuerpo de la funcin3 son las diferentes tareas que realiza la funcin. ;. devolverB eGpresin C3 se indica que dato es el que devolver" la funcion al subalgoritmo que lo llam. <. fin funcion3 para indicar donde termina la funcin. *48,&%&*,4 +E $% 6U4&*74E3 Una funcin puede ser llamada de la siguiente manera3 nombreVfincin B lista de par"metros actualesC la lista de par"metros actuales debe corresponder en tipo y cantidad con la lista de par"metros BformalC definidos en la funcin. Una llamada a la funcin implica los siguientes pasos3 W a cada par"metro formal se le asigna el valor real de su correspondiente par"metro actual. W e ejecuta el cuerpo de acciones de la funcin W e devuelve el valor de la funcin al nombre de la funcin y se retorna al punto de llamada. EFE.#$, / el siguiente algoritmo llama a la funcin sumatoria para calcular y mostrar la sumatoria de los numeros del / al @. 8%'*%9$E * 3 para controlar el ciclo. 3 para guardar la sumatoria del dato * enviado como argumentoB de tipo enteroC. ED#$*&%&*,4 +E$ %$-,'*(., se debe definir las variables a utilizar *, . se construye un ciclo para que se repita @ veces y en cada vez se llama a la funcion sumatoria y se le entrega el valor de *, la respuesta se recibe en la variable . por ultimo se muestra s EFE.#$, 0 el siguiente algoritmo llama a la funcion U.%(,'*% para calcular y mostrar la sumatoria de 1 n2meros dados por el usuario. 8%'*%9$E * 3 para controlar el ciclo. 3 para guardar la sumatoria del dato * enviado como argumentoB de tipo enteroC. 4 3 para guardar el dato dado por el usuarioB de tipo enteroC. ED#$*&%&*,4 +E$ %$-,'*(., se debe definir las variables a utilizar *, . se construye un ciclo para que se repita 1 veces y en cada vez se lee 4,se llama a la funcion sumatoria y se le entrega el valor de 4 y la respuesta se recibe en la variable . por ultimo se muestra s. #',&E+*.*E4(, Un procedimiento es un subalgoritmo que toma uno o m"s valores llamados argumentos, con los cuales ejecuta tareas especficas. +E&$%'%&*,4 +E #',&E+*.*E4(,3 $a declaracin de un procedimiento requiere una serie de pasos que la definen. Un procedimiento tiene una construccin similar a los algoritmos, por consiguiente constar" de una cabecera que comenzar" con nombre del procedimiento y entre par!ntesis una lista de argumentos del procedimiento. % continuacin ir" el cuerpo del procedimiento, que ser" una serie de acciones o instrucciones que conforman el cuerpo del procedimiento. $a descripcin del procedimiento ser"3 nombreVprocedimiento Blista de argumentosC RaccionesP fin procedimiento /. nombre del procedimiento 3 debe ser un identificador v"lido y unico que se utiliza para identificar al procedimiento. 0. lista de argumentos. Es una lista de declaraciones de variables se paradas por dos puntosB: 3 :C donde se especifican los datos que requiere el procedimiento para trabajar. 1. %cciones o cuerpo del procedimiento3 son las diferentes tareas que realiza el procedimiento. >. fin procedimiento3 para indicar donde termina el procedimiento. *48,&%&*,4 +E $, #',&E+*.*E4(,3 Un procedimiento puede ser llamada de la siguiente manera3 nombreVprocedimiento B lista de par"metros actualesC la lista de par"metros actuales debe corresponder en tipo y cantidad con la lista de par"metros BformalC definidos en la funcin. Una llamada a un procedimiento implica los siguientes pasos3 W a cada par"metro formal se le asigna el valor real de su correspondiente par"metro actual. W e ejecuta el cuerpo de acciones del procedimiento. W e regresa a la instruccin siguiente del punto de llamada. EFE.#$, / el siguiente algoritmo llama al procedimiento llamado U.%(,'*% para calcular y mostrar la sumatoria de los numeros del / al @. 8%'*%9$E * 3 para controlar el ciclo. ED#$*&%&*,4 +E$ %$-,'*(., se debe definir la variable a utilizar *. se construye un ciclo para que se repita @ veces y en cada vez se llama al procedimiento U.%(,'*% y se le entrega el valor de *, el procedimiento es el encargado de mostrar la sumatoria. $% (,''E +E O%4,* Oanoi es uno de las aplicaciones cl"sicas para ensear recursion. una funcin o procedimiento es recursivo si en su definicin se llama a si mismo. las torres de hanoi, consiste en un juego que consta de tres torres y 4 discos de diferente tamao. el juego consiste en pasar todos los discos que est"n inicialmente en una torre Bordenados de mayor a menor de abajo hacia arribaC llamada origen y pasarlos a una torre llamada destino, siguiendo las siguientes reglas3 /. slo se puede trasladar un disco a la vez. 0. nunca puede haber en una torre un disco de mayor tamao, sobre otro disco de menor tamao. demostracin %''E-$,3 Un arreglo es una coleccin de datos del mismo tipo, que se almacenan en posiciones consecutivas de memoria y reciben un nombre com2n. #ara referirse a un determinado elemento de un arreglo se deber" utilizar el nombre del arreglo acompaado de un ndice el cual especifica la posicin relativa en que se encuentra el elemento. $os arreglos pueden ser3 unidimensionales BvectoresC. 9idimensionales Bmatrices, tablasC. .ultidimensionalesBtres dimensiones o m"sC. %''%5 U4*+*.E4*,4%$E , 8E&(,'E $os pasos para la utilizacin de un vector sonX / +eclarar el vector3 consiste en establecer el nombre, el tamao y el tipo de los datos que se van a almacenar en el arreglo ejemplo3 hay que diferenciar dos t!rminos 3 tamao del vector B(C3 es el numero m"Gimo de elementos que puede contener el vector. 4umero de elementosB4C3 que indica cuantos elementos hay almacenados en el arreglo en determinado momento. 4ota 4RI(. ( I /AX 'eal3 notasY(Z 0 $lenar el vector con los datos3 e puede hacer en el momento de la declaracin asignando al vector los valores que necesitamos almacenar. Ejemplo. real 3 notasY/AZ I [0.1 , 1.@ , >.0 , 1.1 , 1.A , >.? , >.0 , 1.A , 0.A , /.@ \X recorriendo el arreglo as3 para i I / hasta 4 .......leerB notasYiZ C fin del para 1 manipular la informacin guardada en el vector. #ara esto es necesario recorrer dicha estructura y se puede hacer de la siguiente manera. para i I / hasta 4 ......mostrar B notasYiZ C fin del para las operaciones que se pueden realizar con los arreglos son las siguientes3 T lectura Bllenar el vectorC T escritura Bmostrar el vectorC T asignacin Bdar valor a una posicin especficaC T actualizacin Binsercin , eliminacin, modificacin C T ordenacin . Bburbuja, insercin directa, seleccin directa, selle y quic]sortC. T b2squeda. Bsecuencial , binaria, hashB por clavesC C. ejemplo/, ejemplo0, ejemplo1,problemas propuestos
'E-'E%' 'E-*(', Un registro es un dato estructurado, donde cada uno de sus componentes se denomina campo. $os campos de un registro pueden ser todos de diferentes tipos. #or lo tanto tambi!n podr"n ser registros o arreglos. &ada campo se identifica por un nombre 2nico Bel identificador del campoC3 +E6*4*&*,4 +E 'E-*(', #ara definir un registro se har" de la siguiente manera3 'E-*(',3idVregistro ....tipo/3idVcampo/ ....tipo03idVcampo0 ....tipo13idVcampo1 S fin de la definicin para acceder a un campo determinado de un registro se har" de la siguiente manera3 idVregistro.idVcapo ejemplo/, problemas propuestos
'E-'E%' 8E&(,'E +E 'E-*(', (ambi!n se puede manejar un vector de registros. 'ecuerde que el vector debe contener datos del mismo tipo Ben este caso todos los datos son del tipo registroC. +E6*4*&*,43 para definir un vector de registros proceda de la siguiente manera3 8ectorY @Z 3 idVregistro +onde idVregistro es el identificador que se le dio al registro. ejemplo/, problemas propuestos
.%('*E +E 'E-*(', (ambi!n se puede manejar una matriz de registros. 'ecuerde que la matriz debe contener datos del mismo tipo Ben este caso todos los datos son del tipo registroC. +E6*4*&*,43 para definir una matrizr de registros proceda de la siguiente manera3 idVregistro3.a(Y4ZY.Z +onde idVregistro es el identificador que se le dio al registro. 4 es el n2mero de filas de la matiriz y . es el n2mero de columnas de la matriz. ejemplo/, problemas propuestos $*(% E4$%E%+% Una lista enlazada o encadenada es un conjunto de elementos en los que cada elemento contiene la posicin Bo direccin C del siguiente elemento de la lista. &ada elemento de la lista debe tener al menos dos campos3 un campo que contiene el valor del elemento y un campoB enlace, lin]C que contiene la posicin del siguiente elemento, es decir su coneGin, enlace o encadenamiento. $os elementos de una lista son enlazados por medio de los campo enlaces. $as listas enlazadas se conforman por nodos, como el que se muestra a continuacin. $os componentes de los nodos se llaman campos. Un nodo tiene al menos un campo dato o valor y un enlace o liga Bdireccin o punteroC con el siguiente campo. El ultimo nodo de la lista enlazada tiene como liga un 4U$$, indicando que la lista termina en ese nodo. El enlace o puntero es una variable cuyo valor es la direccin o posicin de otra variable. En las listas enlazadas no es necesario que los elementos de la lista sean almacenados en posiciones fsicas adyacentes, ya que el puntero indica donde se encuentra el siguiente elemento de la lista . $as listas enlazadas son estructuras din"micas, queriendo decir esto que pueden crecer o encogerse durante la ejecucin de un programa, utilizando as slo la memoria que requiere. Una lista enlazada se define por3 W El tipo de sus elementos o nodos W &o de informacin BdatosC W &o enlace o liga BpunteroC W Un puntero de cabecera que permite acceder al primer elemento de la lista, utilizaremos la variable llamada punta. W Un medio para determinar el ultimo elemento de la lista3 liga I null. #ara acceder al campo dato de un registro p utilizaremos la siguiente notacin ] I p.dato asignar" a la variable ] el valor que hay en p.dato si la punta I null quiere decir que la lista esta vaca. #ara pedir un nodo p pcreaVnodoBC para liberar un nodo de la memoria se har" de la siguiente manera3 libereBpC #ara manipular y sacar informacin de la lista es necesario recorrerla y se hace de la siguiente manera3 $as operaciones b"sicas para el manejo de listas enlazadas son3 W *nsertar al principio de la lista un dato dado W mostrar el promedio de los datos de la lista W decir si un dato dado se encuentra o no en la lista. W Eliminar un dato dado de la lista ejemplo/, problemas propuestos 'E-'E%' $*(% *.#$E.E4(E $*-%+% &*'&U$%'E
$as listas simplemente enlazadas no permiten a partir de un elemento dado acceder directamente a cualquiera de los que le preceden. En lugar de almacenar un puntero null en el campo liga del ultimo nodo de la lista, se hace que el ultimo elemento apunte al primero BpuntaC o principio de la lista. $as listas circulares presentan las siguientes ventajas respecto a las listas simplemente enlazadas. +ado un nodo se puede recorrer la lista completa. $as operaciones de concatenacin y divisin de las listas son m"s eficaces con listas circulares. Entre los inconvenientes esta que se pueden presenta ciclos infinitos en los algoritmos. #ara manipular y sacar informacin de la lista es necesario recorrerla y se puede hacer de la siguiente manera3 ejemplo/, problemas propuestos 'E-'E%' $*(% *.#$E.E4(E $*-%+% &*'&U$%' &,4 'E-*(', &%9EE% $a representacin gr"fica de esta lista es la siguiente3
El primer nodo o registro de esta lista se llama registro cabeza. El campo de la informacin del registro cabeza no se utiliza, lo que se seala con el sombreado de dicho campo. Una lista simplemente ligada con registro cabeza vaca se representa de la siguiente manera3 El registro cabeza se utiliza para facilitar las operaciones de recorrer la lista, insertar un registro, borrar un registro etc. #ara manipular y sacar informacin de la lista es necesario recorrerla y se puede hacer de la siguiente manera3 ejemplo/, problemas propuestos 'E-'E%' LISTAS DOBLEMENTE LIGADAS. Estas listas se pueden recorrer de izquierda a derecha y de derecha a izquierda. El registro utilizado es el siguiente3 +onde 3 $* apunta al registro anterior del registro. $+ apunta al registro siguiente del registro. &omo ejemplo se muestra la siguiente lista3 $a propiedad fundamental de las listas doblemente ligadas es3 Bp.$*C.$+ I p I Bp.$+C.$* para recorrer la lista se utiliza el mismo algoritmo utilizado para recorrer una lista simplemente ligada, teniendo en cuanta el sentidos en que se va hacer el recorrido. ejemplo/, problemas propuestos 'E-'E%' PILAS
Una pila es una lista de elementos a la cual se puede insertar o eliminar elementos slo por uno de sus eGtremos. % si el 2ltimo elemento que entra a la pila es el primero que se saca. Es una estructura B$*6,C. $as operaciones que se realizan sobre las pilas son3 %pilar, insertar, push Bponer un elemento en la pila C. +esapilar, quitar, eliminar, pop Bsacar un elemento de la pilaC. un ejemplo cl"sico de pilas consiste en un arrume de platos, donde los platos que se van insertando se colocan en el eGtremo superior y cuando se necesita de un plato se eGtrae el que esta en la parte superior de dicho arrume. $as pilas se pueden representar utilizando arreglos o listas ligadas. regresar PILAS REPRESENTADAS COMO VECTOR
En la representacin de las pilas en arreglos se manejan las siguientes variables3 #ila, (,#E y m"Gimo. #ila 3 nombre del vector que sirve para representar la estructura. tope3 posicin en el vector que indica donde esta el ultimo elemento de la pila. ."Gimo3 tamao del vector o m"Gimo n2mero de elementos de la pila. $os Estados de una pila son3 pila llena pila con algunos elementos pila vacia la representacin gr"fica el la siguiente3 demostracion, regresar PILAS REPRESENTADAS COMO LISTAS LIGADAS En la representacin de las pilas como listas simplemente ligadas. llamaremos a la punta de la lista como pila y las operaciones de apilar y desapilar se realizaran de la siguiente manera3 apilar 3 se debe insertar el elemento al inicio de la lista. desapilar 3 se eGtrae el elemento que esta al inicio de la lista.
COLAS Una cola es una lista de elementos en la cual las operaciones de insercin se efect2an en un eGtremo llamado U$(*., y las operaciones de borrado se efect2an en el otro eGtremo llamado #'*.E', B las colas tambi!n reciben el nombre de estructuras 6*6, primero en entrar primero en salirC. las operaciones que se realizan en una cola son las siguientes3 encolar 3 es insertar un elemento en la cola , recuerde que se hace por el eGtremo llamado ultimo. desencolar3 es eGtraer un elemento de la cola, recuerde que se hace por el eGtremo llamado primero. Un ejemplo cl"sico de una cola es la que hacen las personas esperando ser atendidos en una ventanilla. Una cola se puede representar con un vector, con un vector circular o con una lista. regresar &,$% 'E#'EE4(%+% &,., 8E&(,' En la representacin de las colas en arreglos se manejan las siguientes variables3 &,$%, U$(*.,, #'*.E', y .%D*.,. &,$% 3 nombre del vector que sirve para representar la estructura. U$(*.,3 posicin en el vector que indica donde esta el ultimo elemento de la cola. #'*.E',3 posicin en el vector que indica donde esta el primer elemento de la cola. .%D*.,3 tamao del vector o m"Gimo n2mero de elementos de la &,$%. los diferentes estados de una cola se muestran a continuacin3 &,$% 'E#'EE4(%+% &,., 8E&(,' &*'&U$%' #ara hacer un uso m"s eficiente de la memoria disponible se trata a la cola Bel vector que la representa C como una estructura circular. En la representacin de las colas en arreglos se manejan las siguientes variables3 &,$%, U$(*.,, #'*.E', y .%D*.,. &,$% 3 nombre del vector que sirve para representar la estructura. U$(*.,3 posicin en el vector que indica donde esta el ultimo elemento de la cola. #'*.E',3 posicin en el vector que indica donde esta el primer elemento de la cola. .%D*.,3 tamao del vector o m"Gimo n2mero de elementos de la &,$%. los diferentes estados de una cola se muestran a continuacin3 &,$% 'E#'EE4(%+% &,., $*(% *.#$E.E4(E $*-%+% para manejar la estructura cola como una lista simplemente ligada, se define una lista cuya direccin del primer nodo se guarda en una variable tipo puntero llamada cola y la direccin del 2ltimo nodo se guardar" en una variable de tipo puntero llamada ultimo. $as operaciones de encolar y desencolar se realizar"n de la siguiente manera3 para encolar un dato se actualiza la liga del 2ltimo nodo, agregando de esta manera el nuevo dato al final de la lista. para desencolar un dato se eGtrae el dato al principio de la lista. demostracin, regresar 9U'9UF%/ Es el metodo mas utilizado por los estudiantes principiantes de computacin, por su f"cil comprensin y programacin. pero es probablemente el m!todo mas ineficiente. $a idea b"sica de este algoritmo consiste en comparar pares de elementos adyacentes e intercambiarlos entre s hasta que todos se encuentren ordenados. se realizan B 4T/ C pasadas, transportando en cada una de las mismas el menor o mayor elemento Bseg2n sea el casoC a su posicin ideal. al final de las B4T/C pasadas los elementos del arreglo estar"n ordenados. +E.,('%&*,4 'E-'E%' 9U'9UF%0 Es el metodo mas utilizado por los estudiantes principiantes de computacin, por su f"cil comprensin y programacin. pero es probablemente el m!todo mas ineficiente. $a idea b"sica de este algoritmo consiste en comparar pares de elementos adyacentes e intercambiarlos entre s hasta que todos se encuentren ordenados. se realizan B 4T/ C pasadas, transportando en cada una de las mismas el menor o mayor elemento Bseg2n sea el casoC a su posicin ideal. al final de las B4T/C pasadas los elementos del arreglo estar"n ordenados. +E.,('%&*,4 9U'9UF% &,4 E^%$ Este m!todo es una modificacin del m!todo de burbuja. $a idea central de este algoritmo consiste H en utilizar una marca o seal para indicar que no se ha producido ning2n intercambio en una pasada. H Es decir, se comprueba si el arreglo est" totalmente ordenado despues de cada pasada. H terminando su ejecucin en caso afirmativo. H +E.,('%&*,4 'E-'E%' %&U+*+% Es una optimizacin del m!todo de intercambio directo. $a idea basica de este algoritmo consiste en mezclar las dos formas en que se puede realizar el m!todo de la burbuja. En este algoritmo cada pasada tiene dos etapas. En la primera etapa Bde derecha a izquierdaC se trasladan los elementos m"s pequeos hacia la parte izquierda del arreglo, almacenando en una variable la posicin del ultimo elemento intercambiado. En la segunda etapaBde izquierda a derechaC se trasladan los elementos m"s grandes hacia la parte derecha del arreglo, almacenando en otra variable la posicin del ultimo elemento intercambiado. $as sucesivas pasadas trabajan con los componentes del arreglo comprendidos entre las posiciones almacenadas en las variables. El algoritmo termina cuando en una etapa no se producen intercambios o bien, cuando el contenido de la variable que almacena el eGtremo izquierdo del arreglo es mayor que el contenido del la variable que almacena el eGtremo derechoH +E.,('%&*,4 E$E&&*,4 $a idea b"sica de este algoritmo consiste en buscar el menor elemento del arreglo y colocarlo en la primera posicin. $uego se busca el segundo elemento m"s pequeo del arreglo y se coloca en la segunda posisin. El proceso contin2a hasta que todos los elementos del arreglo hayan sido ordenados. +E.,('%&*,4 'E-'E%' *4E'&*,4 Es el metodo que generalmente utilizan los jugadores de cartas cuando ordenan estas. $a idea central de este algoritmo consiste en insertar un elemento al arreglo a la vez y ubicarlo el la posicion indicada. este proceso se repite desde el segundo hasta el nTesimo elemento. H +E.,('%&*,4 *4E'&*,4 9*4%'*% El m!todo de ordenacin por insercin directa puede mejorarse f"cilmente. #ara ello se recurre a una b2squeda binaria en lugar de una b2squeda secuencial para isertar un elemento en la parte izquierda del arreglo, que ya se encuentra ordenado. El proceso se repite desde el segundo hasta el nTesimo elemento. H +E.,('%&*,4 'E-'E%' _U*&`,'( El metodo de ordenacin quic]sort es actualmente el m"s eficiente y veloz de los m!todos de ordenacin interna. $a idea central de este algoritmo consiste en los siguiente 3 /. e toma un elemento D de una posicin cualquiera del arreglo 0. e trata de ubicar a D en la posicion correcta del arreglo, de tal forma que todos los elementos que se encuentren a su izquierda sean menores o iguales a D y todos los elementos que se encuentren a su derecha sean mayores o iguales a D. 1. se repiten los pasos anteriores pero ahora para los conjuntos de datos que se encuentran a la izquierda y a la derecha de la posicin correcta de D en el arreglo. >. El proceso termina cuando todos los elementos se encuentran en su posicin corcecta en el arreglo. +E.,('%&*,4 OE$$ En el metodo de ordenacin por insercin directa cada elemento se compara para us ubicacin correcta en el arreglo con los elementos que se encuentran en la parte izquierda del mismo. i el elemento a insertar es m"s pequeo que el grupo de elementos que se encuentran a su izquierda, es necesario efectuar entonces varias comparaciones antes de su ubicacin. OE$$ propone que las comparaciones entre elementos se efect2en con saltos de mayor tamao pero con incrementos decrecientes, as, los elementos quedar"n ordenados en el arreglo m"s rapidamente.H +E.,('%&*,4 'E-'E%'