Sei sulla pagina 1di 175

Pa que luego os quejis

ALGORITMOS Y PROGRAMAS: TEMA 1:


1. 2. 3. 4. $. &. *. ,. -. Sistemas de procesamiento de la informacin. Concepto de algoritmo. Lenguaje de programacin. atos! tipos de datos " operaciones primiti#as. Constantes " #aria%les. '(presiones) tipos " operadores. +unciones internas. La operacin de asignacin. 'ntrada " salida de la informacin.

1. SISTEMAS DE PROCESAMIENTO DE LA INFORMACIN: .n ordenador es una m/quina de procesamiento de informacin. 's una m/quina porque tiene ca%les! c0ips!... ! procesa porque es capa1 de procesar cosas! e informacin porque maneja conjuntos ordenados de datos2. Para procesar la informacin est/ el 0ard3are 4microprocesador! 567!...2! " el soft3are 4que sir#e para manejar el 0ard3are2. 2. CONCEPTO DE ALGORITMO: 'l algoritmo trata de resol#er pro%lemas mediante programas. +ases) - 6n/lisis preliminar o e#aluacin del pro%lema ) 'studiar el pro%lema en general " #er que parte nos interesa. efinicin o an/lisis del pro%lema) 8er que es lo que entra " que es lo que sale! las posi%les condiciones o restricciones! ... ise9o del algoritmo) ise9ar la solucin. - 'l programa) Codificacin del algoritmo en un lenguaje de programacin. - 'jecucin del programa " las prue%as) 8er si el programa 0ace lo que quer:amos. Qu es un alg !"#$ %: 's una formula para resol#er un pro%lema. 's un conjunto de acciones o secuencia de operaciones que ejecutadas en un determinado orden resuel#en el pro%lema. '(isten n algoritmos! 0a" que coger el m/s efecti#o. Caracter:sticas) - ;iene que ser preciso. - ;iene que estar %ien definido. - ;iene que ser finito. La programacin es adaptar el algoritmo al ordenador. 'l algoritmo es independiente seg<n donde lo implemente. &. EL LENG'A(E DE PROGRAMACIN: '(isten diferentes tipos! de %ajo ni#el " de alto ni#el. =nstrucciones en una computadora " sus tipos) .na instruccin es cada paso de un algoritmo! pero que lo ejecuta el ordenador. .n programa es un conjunto de instrucciones que ejecutadas ordenadamente resuel#en un pro%lema.

P>?=@6 1A1*$

Pa que luego os quejis

T") s *e "ns#!u++" nes: - 'AS) Pasar informacin del e(terior al interior del ordenador " al re#s. - 6ritmticoBlgicas) 6ritmticas) C!B!D!... E Lgicas) or! and! F! G! ... - Selecti#as) Permiten la seleccin de una alternati#a en funcin de una condicin. - 5epetiti#as) 5epeticin de un n<mero de instrucciones un n<mero finito de #eces. T") s *e lengua,es: - Lenguaje m/quina) ;odo se programa con 1 " H! que es lo <nico que entiende el ordenador. 8entaja) @o necesita ser traducido. =ncon#eniente) La dificultad! la confusin! para corregir errores! es propia de cada m/quina. e %ajo ni#el o ensam%lador) Se utili1an mnemotcnicos 4a%re#iaturas2. 8entaja) @o es tan dif:cil como el lenguaje m/quina. =ncon#enientes) Cada m/quina tiene su propio lenguaje! necesitamos un proceso de traduccin. 'l programa escrito en ensam%lador se llama programa fuente " el programa que se o%tiene al ensam%larlo se llama programa o%jeto. - Lenguajes de alto ni#el) Los m/s cercanos al lenguaje 0umano. 8entaja) Son independientes de cada maquina 4los compiladores aceptan las instrucciones est/ndar! pero tam%in tienen instrucciones propias2. =ncon#eniente) 'l proceso de traduccin es mu" largo " ocupa m/s recursos. 6pro#ec0a menos los recursos internos. P! +es *e #!a*u++"-n . e,e+u+"-n *e un )! g!a$a es+!"# en un lengua,e a al# n"/el: .samos un editor " o%tenemos el programa fuente! " el compilador es el que traduce el programa al lenguaje m/quina. 'l compilador internamente 0a sido dise9ado para traducir. 'l compilador o%tiene el programa o el fic0ero o%jeto. 'l compilador tiene que %uscar los errores. @ormalmente no sale un ejecuta%le! sino que necesita elementos! li%rer:as! ... 7ediante un linIador juntamos el programa o%jeto " las li%rer:as! " se forma un programa ejecuta%le. Cuando se ejecuta el programa! el cargador lle#a al programa a memoria para que ste pueda ser ejecuta%le. e%%uger) epura el programa ejecut/ndolo paso a paso! #iendo la memoria paso a paso para encontrar el error.

P>?=@6 2A1*$

Pa que luego os quejis

Programa fuente 4'ditor2 Compilador 'rror

Programa o%jeto

Li%rerias

LinIador 'jecuta%les Para traducir puedo utili1ar el compilador o un interprete! con el compilador cojo todo el programa al completo " el interprete lee cada instruccin " lo #a ejecutando. 'l interprete es m/s r/pido! pero menos eficiente. ;odos los lenguajes tienen compiladores! pero no todos tienen interpretes. L=SP 4Lenguaje de inteligencia artificial2 ) Slo tiene interpretes. 0. DATOS1 TIPOS DE DATOS 2 OPERACIONES PRIMITI3AS: 4 Da# : 's un o%jeto o elemento que tratamos a lo largo de di#ersas operaciones. ;ienen 3 caracteristicas) - .n nom%re que los diferencia del resto. - .n tipo que nos determina las operaciones que podemos 0acer con ese dato. - .n #alor que puede #ariar o no a lo largo de la operacin. '(isten diferentes tipos de datos. 4 Ca!a+#e!"s#"+as *e l s #") s: - Cada tipo se representa o almacena de forma diferente en la computadora. Jit)1AHE J"teK, %its. - .n tipo agrupa a los #alores que 0acen las mismas operaciones. - Si tiene definida una relacin de orden es un tipo escalar. - Cardinalidad de un tipo) @<mero de #alores distintos que puede tomar un tipo. Pueden ser finitos 4caracteres2! " si son infinitos el ordenador los toma como finitos porque esta limitado por el tama9o de los %"tes en el que la cifra es almacenada. 4 L s *a# s )ue*en se!: - Simples) .n elemento. - Compuestos) 8arios elementos.

P>?=@6 3A1*$

Pa que luego os quejis

4 L s #") s )ue*en se!: - 'standar) Lue #ienen en el sistema por defecto. - @o estandar) Son los que crea el usuario. 4 L s #") s s"$)les $5s "$) !#an#es s n: - @umricos. - Lgicos. - Caracteres. @umricos) - 'ntero) Su%conjunto finito del conjunto matem/tico de los numros enteros. @o tiene parte decimal. 'l rango de los #alores depende del tama9o que se les da en memoria. - 5eal) Su%conjunto finito del conjunto matem/tico de los n<meros reales. Lle#an signo " parte decimal. Se almacenan en 4 J"tes 4dependiendo de los modificadores2. Si se utili1an n<meros reales mu" grandes! se puede usar notacin cient:fica que se di#ide en mantisa! %ase " e(ponenteE tal que el #alor se o%tiene multiplicando la mantisa por la %ase ele#ada al e(ponente. Lgicos o %ooleanos) - 6quel que slo puede tomar uno de los dos #alores! #erdadero o falso 41AH2. Car/cter) - 6%arca al conjunto finito " ordenado de caracteres que reconoce la computadora 4letras! digitos! caracteres especiales! 6SC==2. ;ipo de cadena o String) Conjunto de caracteres! que #an a estar entre MN. 'l propio lenguaje puede a9adir m/s tipos! o se pueden a9adir modificadores. 'ntero ) =nt Long int 'n algunos lenguajes se definen tipos especiales de fec0a " 0ora! so%re todo en los m/s modernos. 6. CONSTANTES 2 3ARIA7LES: - Constantes) ;ienen un #alor fijo que se le da cuando se define la constante " que "a no puede ser modificado durante la ejecucin. - 8aria%les) 'l #alor puede cam%iar durante la ejecucin del algoritmo! pero nunca #aria su nom%re " su tipo. 6ntes de usar una #aria%le 0a" que definirla o declararla! al 0acerlo 0a" que dar su nom%re " su tipo. 'l nom%re que le damos tiene que ser un nom%re significati#o! #a a ser un conjunto de caracteres que dependiendo del lenguaje 0a" restricciones. ;iene que empe1ar por una letra! " el tama9o depende del lenguaje. =dentificador) Pala%ra que no es propia del lenguaje. 'l #alor de la #aria%le si al declararla no se la iniciali1a! en algunos lenguajes toma una por defecto. 'n cualquier caso el #alor de la #aria%le podemos darle uno incial o podemos ir #ariandolo a lo largo de la ejecucin. Las constantes pueden lle#ar asociados un nom%re o no! si no lo lle#an! se llaman literales. Su #alor 0a" que darlo al definir la constante " "a no puede cam%iar a lo largo de la ejecucin! " en cuanto al tipo! dependiendo de los lenguajes en algunos 0a" que ponerlo! " en otros no 0ace falta ponerlo porque toma el tipo del dato que se le asigna. Const P=K3!141&. Oa" que iniciali1ar todas las #aria%les. F G Oa" que poner algo o%ligatoriamente. P>?=@6 4A1*$

Pa que luego os quejis

P Q Puede lle#ar algo o no lle#arlo. La #entaja de usar constantes con nom%re es que en cualquier lugar donde quiera que #a"a la constante! %asta con poner su nom%re " luego el compilador lo sustituira por su #alor. Las constantes sin nom%res son de #alor constante) $! &! RaS! M0olaN. Cuando una cadena es de tipo car/cter! se encierra entre RS RaS. 5elacin entre #aria%les " constantes en memoria) 6l detectar una #aria%le o una constante con nom%re! automaticamente se reser#a en memoria espacio para guardar esa #aria%le o constante. 'l espacio reser#ado depende del tipo de la #aria%le. 'n esa 1ona de memoria es en la que se guarda el #alor asociado a la #aria%le o constante " cuando el programa use esa #aria%le! ira a esa 1ona de memoria a %uscar su #alor. 8. E9PRESIONES: TIPOS 2 OPERADORES: .na e(presin es una com%inacin de constantes! #aria%les! signos de operacin! parntesis " nom%res especiales 4nom%res de funciones estandar2! con un sentido un:#oco " definido " de cu"a e#aluacin resulta un <nico #alor. ;oda e(presion tiene asociada un tipo que se corresponde con el tipo del #alor que de#uel#e la e(presion cuando se e#alua! por lo que 0a%r/ tantos tipos de e(presiones como tipos de datos. Oa%ra e(presiones numricas " lgicas. @umricas) Tperadores aritmticos. Son los que se utili1an en las e(presiones numricas 4una com%inacin de #aria%les "Ao constantes numricas con operadores aritmticos " que al e#aluarla de#uel#e un #alor numrico. C! B! D! A. Tperacin resto) Lo que de#uel#e es el resto de una di#isin entera. 7od) Pascal. $ mod 3 K 2 U) C. i#isin entera) @os de#uel#e el cociente de una di#isin entera 4en la que no se sacan decimales2. i#) Pascal. $ di# 3 K 1 V) C. Potencia) W $W2. ;odos estos operadores son %inarios 4el operador se situa en medio2! el menos tam%ien puede ser unario 4lle#a un <nico operando2 " significa signo negati#o. 5eglas de precedencia) 'l pro%lema es cuando una e(presin entera seg<n como la e#alue pueda dar diferentes #alores. *D3C4 2$ 4La solucin es aplicar prioridad entre los operadores! de modo que ante la posi%ilidad de usar #arios siempre aplicaremos primero el de ma"or prioridad. Cada lenguaje puede esta%lecer sus propias reglas de prioridad o precedencia de operadores. Si no nos acordamos! siempre podemos poner 4 2. 1X2 W 2X2 D A di# mod 3X2 C B

P>?=@6 $A1*$

Pa que luego os quejis

'ntre dos operaciones que tienen la misma precedencia para resol#er la am%igYedad! 0a" que usar la regla de la asociati#idad. La m/s normal es la de la asociati#idad a i1quierdas 4primero lo de la i1quieda2. E:)!es" nes l-g"+as: O)e!a* !es !ela+" nales . l-g"+ s. .na e(presin lgica es aquella que slo puede de#ol#er dos #alores 48erdadero o +also2. Los #alores que pueden aparecer en una e(presin lgica son de 2 tipos) lgicos " relacionales. La particularidad de las e(presiones lgicas es que mientras en una e(presin numrica por de#ol#er un #alor numrico los operandos solo pueden ser n<meros! en una e(presin lgica los operandos no tienen porque ser %ooleanos aunque se de#uel#a un #alor %ooleano. 'sto es lo que ocurre cuando en la e(presin lgica utili1amos operadores relacionales con lo cual se o%tienen #alores lgicos o %ooleanos a partir de otros que no lo son. 'n cam%io cuando los operadores son lgicos los operandos o%ligatoriamente tam%ien tienen que ser lgicos. Tperadores relacionales) F G K FG en C) ZK F Tperando1G operador F Tperando2G $ G 3 8erdadero [Cmo se e#alua una e(presin relacional\) - Primero se e#alua el primer operando " se sustitu"e por su #alor. - Luego se e#alua el seguno operando " se sustitu"e por su #alor. - +inalmente se aplica el operador relacional " se de#uel#e el #alor %ooleano correspondiente. 443D22C1B$W22 F 42B12 B1, F 1 8erdadero. 'l pro%lema del tipo real) esde la inform/tica! los numeros reales son finitos! "a que tenemos un m/(imo de cifras decimales. Cuando tra%ajamos con un K! matematicamente da un #alor e(acto! pero informaticamente no es e(acto. 1A$ D $ K1 1.HA$.H D$.H FG1.H Soluciones) - La que nos aporte el propio lenguaje de programacin. Se considera un #alor de error. - ;ra%ajar con n<meros enteros siempre que sea posi%le. - .tili1ar las comparaciones FG en #e1 de si es posi%le. - Si 0a" que preguntar por igual! cam%iar la condicin utili1ando #alores a%solutos " un #alor m:nimo de error. Si la diferencia F H.HHHHHHH1 " 6JS 46BJ2F min E son iguales. Tperadores lgicos) 'l pro%lema es que a #eces queremos preguntar o e#aluar por m/s de una condicin al mismo tiempo " para esto estan los operadores lgicos. ] and ^^ P>?=@6 &A1*$

Pa que luego os quejis

T or ZZ @o not ~Z ]! T! son operadores %inarios 4necesitan 2 operandos de tipo logico2. Tperando 1 Tperador Tperando 2 'l @o es unario " se coloca primero el @o! " despues el operando. 'l resultado es lgico " depende de) Tperando 1 Tperando 2 6@ 8 8 8 8 + + + 8 + + + + 'l @o niega ) @T; 8 + Prioridades de los operadores) - Lo m/s prioritario es el @T; - Luego el ] " el T. - F! G K!... ;a%la de prioridades) W @T A di# mod " CBT F! G! K! FG!... ;. F'NCIONES INTERNAS: Son funciones matem/ticas diferentes de las operaciones %/sicas pero que se incorporan al lenguaje " que se consideran estandar. ependen del lenguaje. @ormalmente se encuentran en la li%rer:a de matem/ticas del lenguaje de programacin. +rmulas) 6%s 4(2 6rctan 4(2 Cos 4(2 Sen 4(2 '(p 4(2 Ln 4(2 Log 1H 4(2 5edondeo 4(2 ;runc 4(2 Cuadrado 4(2 5ai1 4(2 <. OPERACIN DE ASIGNACIN: Consiste en atri%uir un #alor a una #aria%le. 'l #alor sera una e(presin 4constante! #aria%le!...2. 1AH + 8

T5 8 8 8 +

P>?=@6 *A1*$

Pa que luego os quejis

Ttros lenguajes K ! )K 8aria%le a la que se le asigna el #alor el #alor que le #amos a asignar. 6$ 'n C 6 K K J Comparacin 6 K J 6signacin 'n Pascal 6)KJ 6signacin 6KJ Comparacin 'l proceso de asignacion se reali1a en 2 fases) - Se e#al<a la e(presin de la parte derec0a de la asignacin o%teniendose un <nico #alor. - Se asigna ese #alor a la #aria%le de la parte i1quierda. Qu es l =ue >a. =ue #ene! en +uen#a%: - 'n la parte i1quierda slo puede 0a%er una #aria%le. - La #aria%le a la que se le asigna el #alor pierde su #alor anterior. - La #aria%le que aparece en la derec0a "a que como se e#alua primero la de la derec0a cuando se tenga que e#aluar el #alor de esa #aria%le se tomara su #alor antiguo. - 'L ;=PT 'L 86LT5 L.' S' TJ;='@' 6L '86L.65 L6 P65;' '5'CO6 ;='@' L.' S'5 'L 7=S7T L.' 'L ;=PT ' L6 865=6JL' ' L6 P65;' =_L.='5 6! 'S 'C=5 6 .@6 865=6JL' STLT S' L' P.' '@ 65 86LT5'S ' S. 7=S7T ;=PT. B 'n Pascal da un error. B 'n C! no da error porque el compilador trunca el numero. 6) entero 62 6 3D6 C 6 K , ?. ENTRADA 2 SALIDA DE LA INFORMACIN: Las dos operaciones %/sicas de cada salida son las de lectura " de escritura. La lectura es equi#alente a la asignacin en cuanto que #a a 0a%er una #aria%le que reci%e un #alor! pero este #alor no resulta de e#aluar ninguna e(presin! sino que el #alor lo #amos a leer de un dispositi#o e(terno de entrada. Leer 4nom%re de la #aria%le2 'l #alor introducido por el dispositi#o e(terno! tiene que ser del mismo tipo del que la #aria%le que se le asigne. La operacin de escritura lo que 0ace es mostrar el #alor de una #aria%le en un dispositi#o e(terno de salida. 'scri%ir 4#aria%le2 La operacin de escritura no es una operacin destructi#o en memoria. 6l pedir un #alor al usuario 0a" que decirle que es lo que se le quiere pedir escri%iendo un mensaje.

P>?=@6 ,A1*$

Pa que luego os quejis

EJERCICIOS: TEMA 1
1. 6 43D2W$ mod 1 C ,D43B$2 F 42C,B1 mod 12 6 43D32 mod 1 C 4B1&22 F 1H 6 B1& F 1H 6 8erdadero 1.1. 6 6 o 43C$D,2 F 3 " 44B&A3 di# 42D2 F 22 6 8erdadero o 43 F 3 " 4HD2 F 22 6 8erdadero o +also " 8erdadero 6 8erdadero o +also 6 8erdadero 2. J 3 mod 2 di# 3 J 1 di# 3 JH 2.1. C 4BJD2 FG ,D3 mod 42 " 4R6SGSJS2 C 4H FG 24 mod 42 " +also C +also " +also C +also 2.2. 6 C o no 43K$2 " 4, FG 3CJ2 6 +also o 8erdadero " 8erdadero 6 +also o 8erdadero 6 8erdadero

P>?=@6 -A1*$

Pa que luego os quejis

RESOLUCIN DE PROBLEMAS CON COMPUTADORA Y HERRAMIENTAS DE PROGRAMACIN: TEMA 2


1. 2. 3. 4. $. &. *. 5esolucin de pro%lemas. 6n/lisis del pro%lema. ise9o del algoritmo. 5esolucin en la computadora. +lujogramas. iagramas @S o de @6SS=BSCO' '576@ Pseudocdigo.

1. RESOL'CIN DE PRO7LEMAS: La resolucin de un pro%lema desde el punto de #ista algor:tmico tiene 3 fases) - 6n/lisis del pro%lema) Comprensin. ise9o del algoritmo) 5esolucin algor:tmica. - 5esolucin en computadora) =mplantacin del algoritmo en un lenguaje de programacin. 2. AN@LISIS DEL PRO7LEMA: 'l o%jeti#o de sta fase es comprender el pro%lema para lo cual como resultado tenemos que o%tener la especificacin de las entradas " salidas del pro%lema. ;iene que quedar claro que entra " que sale. &. DISEAO DEL ALGORITMO: .na #e1 comprendido el pro%lema se trata de determinar que pasos o acciones tenemos que reali1ar para resol#erlo. Como criterios a seguir a la 0ora de dar la solucin algor:tmica 0a" que tener en cuenta) 1. Si el pro%lema es %astante complicado lo mejor es di#idirlo en partes m/s peque9as e intentar di#idirlo en partes m/s peque9as e intentar resol#erlas por separado. 'sta metodolog:a de Mdi#ide " #encer/sN tam%in se conoce con el nom%re de dise9o descendente. 2. Las #entajas de aplicar esto son) - 6l di#idir el pro%lema en mdulos o partes se comprende m/s f/cilmente. - 6l 0acer modificaciones es m/s f/cil so%re un mdulo en particular que en todo el algoritmo. - 'n cuanto a los resultados! se pro%ar/n muc0o mejor compro%ando si cada mdulo da el resultado correcto que si intentamos pro%ar de un golpe todo el programa porque si se produce un error sa%emos en que mdulo 0a sido.

P>?=@6 1HA1*$

Pa que luego os quejis

.na segunda filosof:a a la 0ora de dise9ar algoritmos es el refinamiento por pasos! " es partir de una idea general e ir concretando cada #e1 m/s esa descripcin 0asta que tengamos algo tan concreto para resol#er. Pasamos de lo m/s complejo a lo m/s simple. La !e)!esen#a+"-n *e l s alg !"#$ s: .na #e1 que tenemos la solucin 0a" que implementarla con alguna representacin. Las representaciones m/s usadas son los flujogramas! los diagramas @S " el pseudocdigo. ;am%in la solucin se puede escri%ir en algunos casos en lenguaje natural pero no se 0ace porque es mu" am%iguo! e incluso otras formas de e(presin como frmulas matem/ticas. Es+!"#u!a *el alg !"#$ : 6l escri%ir el algoritmo 0a" que tener en cuenta) - Las acciones o pasos a reali1ar tienen que tener un determinado orden. - 'n cada momento solo se puede ejecutar una accin. entro de las sentencias del algoritmo pueden e(istir pala%ras reser#adas 4pala%ras propias del lenguaje de programacin que tienen para el compilador un determinado significado2. - Si estamos utili1ando pseudocdigo tenemos tam%in que usar la identacin 4aumenta la legi%ilidad del pro%lema para que se pueda leer mejor2. 0. RESOL'CIN EN LA COMP'TADORA: 's 0acer entender nuestro algoritmo a la computadora para que lo pueda 0acer. 1. Codificamos el algoritmo en un leguaje de programacin. 2. 'jecutar el programa antes compilado. 3. Compro%ar los resultados " si no funciona! corregirlo. 6. FL'(OGRAMAS: 's una notacin gr/fica para implementar algoritmos. Se %asa en la utili1acin de unos s:m%olos gr/ficos que denominamos cajas! en las que escri%imos las acciones que tiene que reali1ar el algoritmo. Las cajas est/n conectadas entre s: por l:neas " eso nos indica el orden en el que tenemos que ejecutar las acciones. 'n todo algoritmo siempre 0a%r/ una caja de inicio " otra de fin! para el principio " final del algoritmo. L s sB$C l s: L:neas de flujo) .na l:nea con una flec0a que sir#e para conectar los s:m%olos del diagrama " la flec0a indica la secuencia en la que se #an a ejecutar las acciones. S:m%olo de proceso) =ndica la accin que tiene que reali1ar la computadora. entro escri%imos la accin. 5epresenta las acciones de entrada " salida. acciones de lectura " escritura. entro colocaremos las

P>?=@6 11A1*$

Pa que luego os quejis

Condicin) entro se #a a colocar una condicin. Sir#e para representar estructuras selecti#as " repetiti#as " lo que se 0ace al encontrar ese signo es e#aluar la condicin que 0a" dentro tal que seg<n la condicin sea #erdadera o falsa iremos por caminos distintos.

Principio " fin) algoritmo.

entro del s:m%olo ira la pala%ra inicio o fin del

Su%programa) entro se coloca el nom%re del su%programa al que se llama.

Conectores) @os sir#en cuando un flujograma no me ca%e en una columna de la 0oja " 0a" que seguir en otra columna) - Si es en la misma 0oja) Si es en 0oja distinta)

Los conectores se ponen uno donde termina la columna " otra donde empie1a. 's una aclaracin para entender mejor el cdigo! pero no es parte del cdigo! no se ejecuta.

O#! s sB$C l s: B Pantalla) Cuando una salida es por pantalla.

B ;eclado) Para representar una entrada por teclado.

B =mpresora)

B 'ntradaASalida por disco)

P>?=@6 12A1*$

Pa que luego os quejis

DPro%lema) Lueremos 0allar el producto de #arios n<meros positi#os introducidos por teclado " el proceso termina cuando se meta un n<mero negati#o. 1. =niciar la #aria%le del producto. 2. Leer el primer n<mero. 3. Preguntar si es negati#o o positi#o. 4. Si es negati#o nos salimos " escri%imos el producto. $. Si es positi#o! multiplicamos el n<mero le:do " luego leemos un nue#o n<mero! " se #uel#e al paso 3. =nicio

P1 Leer num

@um GK H

'scri%ir P

P P D num Leer num

+in

P>?=@6 13A1*$

Pa que luego os quejis

6. DIAGRAMAS N4S O DE NASSI4SCDEDERMAN: 's semejante al flujograma! peor sin flec0as " cma%iando algo los s:m%olos de condicin " repeticin. Las cajas #an unidas. FaccinG Condiciones)
Condicin

S= Facc1G 5epetiti#as) 7ientas FcondG FaccionesG

@T Facc2G

FaccionesG 5epetir 0asta FcondG

esde #iK#1 0asta #n FaccionesG

Pro%lema anterior) =nicio P1 Leer num 7ientras num GK H P pDnum Leer num 'scri%ir P +in

P>?=@6 14A1*$

Pa que luego os quejis

8. PSE'DOCDIGO: 's un lenguaje de especificacin de algoritmos! pero mu" parecido a cualquier lenguaje de programacin! por lo que luego su traduccin al lenguaje es mu" sencillo! pero con la #entaja de que no se rige por las normas de un lenguaje en particular. @os centramos m/s en la lgica del pro%lema. 'l pseudocdigo tam%in #a a utili1ar una serie de pala%ras cla#e o pala%ras especiales que #a indicando lo que significa el algoritmo. 1. =nicio " +in) Por donde empie1a " aca%a el algoritmo. Jegin Aend ) Pacal. ` a ) 'n C. 2. S: FcondG 'ntonces Facc1G =f t0en else Sino Facc2G 3.7ientras FcondG A0acer 30ile do 4. 5epetir A 0asta repeat until $. esde A0asta for .. to &. Seg<n sea Case S3it0 Los comentarios #an encerrados entre lla#es. Oa" que utili1ar la identacin. 6lgoritmo Fnom%re algG 8ar Fnom%reG) FtipoG =nicio F=nstruccionesG +in

6lgoritmo Producto 8ar P! num) entero =nicio P1 Leer num 7ientras num GKH 0acer P pDnum Leer num +in mientras

P>?=@6 1$A1*$

Pa que luego os quejis

'scri%ir p +in

EJERCICIOS: TEMA 2
1. 5eali1ar un programa que con#ierta los grados a radianes. 6lgoritmo con#ertir 8ar ?rados! rad) real =nicio 'scri%ir M=ntroduce los gradosN Leer grados Si grados GK 3&H 'ntonces grados grados mod 3&H +in si 5ad grados A 1,H 'scri%ir rad M radiantesN +in 2. 5eali1ar un algoritmo que pida un #alor entero que equi#ale a un n<mero de duros " me calcule a cuantos %illetes de $HHH! 1HHH! monedas de 2HH! 2$! 1. 6lgoritmo cam%io 8ar uros) real =nicio 'scri%ir M=ntroduce los durosN Leer duros uros duros D $ 'scri%ir duros di# $HHH M%illetes de $HHHN uros duros mod $HHH 'scri%ir duros di# 1HHH M%illetes de 1HHHN uros duros mod 1HHH 'scri%ir duros di# 2HH Mmonedas de 2HHN uros duros mod 2HH 'scri%ir duros di# 2$ Mmonedas de 2$N uros duros mod 2$ 'scri%ir duros Mmonedas de 1N +in

P>?=@6 1&A1*$

Pa que luego os quejis

3. 5eali1ar un programa que pida al usuario la #elocidad en mAs " el radio de la circunferencia de la pista! " resultada el programa de#uel#e el tiempo que tarda el atleta en dar 2 #ueltas a la pista! sa%iendo que el atleta descansa 1 minuto cada 1HHH metros. 6lgoritmo recorrido 8ar 8elocidad!radio!tiempo!longitud) entero =nicio 'scri%ir M=ntroduce la #elocidadN Leer #elocidad 'scri%ir M=ntroduce el radioN Leer radio Longitud 4 D 3.141& D radio escanso longitud di# 1HHH ;iempo longitud di# #elocidad C descanso D &H 'scri%ir tiempo +in

P>?=@6 1*A1*$

Pa que luego os quejis

ESTRUCTURA GENERAL DE UN PROGRAMA TEMA 3


1. 2. 3. 4. Concepto de programa. =nstrucciones " tipos. 'lementos %/sicos de un programa. 'structura de algoritmos " programas.

1. CONCEPTO DE PROGRAMA: .n programa es un conjunto de instrucciones que al ser ejecutadas resuel#en un pro%lema. .n programa tiene 3 partes) 1. 'ntrada de datos) @ormalmente se #a a ejecutar a tra#s de instrucciones de lectura! " en lo que se le pide al usuario la informacin que el programa #a a necesitar para ejecutarse " se 0ace a tra#s de lecturas. 2. 6cciones de un algoritmo) Parte en la que se resuel#e el pro%lema usando los datos de entrada. 3. Salida) 7ostrar en un dispositi#o de salida los resultados de las acciones anteriormente reali1adas. Son acciones de escritura. 'n la parte de las acciones a ejecutar se distinguir/n dos partes) eclaracin de #aria%les. - =nstrucciones del programa. 2. INSTR'CCIONES 2 TIPOS: Para que una instruccin se ejecute tiene que ser lle#ada a memoria. 'n cuanto al orden de ejecucin de las instrucciones! el programa puede ser de dos tipos) - Programas lineales) Se #a ejecutando una instruccin m/s otra " el orden de ejecucin es igual al orden de escritura. - Programas no lineales) Las instrucciones no se ejecutan en el mismo orden en el que aparecen escritas! sino que se reali1an saltos que nos mandan de unas instrucciones a otras. @unca se de%en 0acer saltos no lineales. T") s *e "ns#!u++" nes: 1. =nicio " fin. 2. 6signacin) ar un #alor a una #aria%le. 3. Lectura A escritura) =ntroducir o sacar informacin por dispositi#os 'AS. 4. =nstrucciones de %ifurcacin) 6lternan el orden de ejecucin del programa. Salto a otra instruccin que no es la siguiente. 4.1. Jifurcacin incondicional) 'l salto se produce siempre que el programa #a"a a esa instruccin) ?oto =r a. P>?=@6 1,A1*$

Pa que luego os quejis

4.2. Jifurcacin condicional) Se ejecutan un conjunto de instrucciones u otras dependiendo del #alor de#uelto al e#aluar una condicin. 's la que #amos a usar. &. ELEMENTOS 7@SICOS DE 'N PROGRAMA: Qu es la s"n#a:"s *e un lengua,e%: Conjunto de reglas que tenemos que seguir a la 0ora de escri%ir un programa en ese lenguaje tal que si no seguimos esas reglas de sinta(is el compilador da errores. Ele$en# s *el lengua,e *e )! g!a$a+"-n: 1. Pala%ras reser#adas) Son un conjunto de pala%ras especiales que nos sir#en para definir la estructura del programa! " solo se pueden usar para el fin para el que est/n reser#adas. 2. =dentificadores) Son los nom%res que aparecen en el programa dados por el usuario. Son por tanto los nom%res de #aria%les! de constantes! de su%programas " nom%res de tipos creados por el usuario. 3. Caracteres especiales) Sir#en como separadores entre sentencias! por ejemplo el E. 4. =nstrucciones) e 3 tipos! secuenciales! repetiti#as " selecti#as! " pueden aparecer elementos especiales 4%ucles! contadores! interruptores " acumuladores2. 7u+le) .n conjunto de instrucciones que se repiten un n<mero finito de #eces. Lle#a asociado aparte de las instrucciones una condicin que es la que determina cuando se termina un %ucle. 'jecucin de un %ucle 4iteracin2. Los %ucles se pueden anidar unos dentro de otros! " puede 0a%er #arios %ucles al mismo ni#el! pero nunca se entrela1an. C n#a* !) .n elemento cu"o #alor se incrementa o decrementa en un #alor constante en cada iteracin de un %ucle! " se utili1a para controlar la condicin del %ucle. A+u$ula* !) 's una #aria%le que tam%in se suele usar en los %ucles " que se incrementa o decrementa en cada iteracin del %ucle! pero no en una cantidad constante. 6lgoritmo ejemplo 8ar cont! num! sum) entero =nicio Cont H Sum H 7ientras cont FG 3 Leer num Sum sum C num Cont cont C1 +in mientras 'scri%ir suma 'nd In#e!!u)# ! E$a!+a1 Can*e!a FlagG) 's una #aria%le que sir#e como indicador de una determinada informacin " que solo puede tomar uno de dos #alores. 'l #alor de la #aria%le tiene asociado un signo " puede #ariar a lo largo de la ejecucin.

P>?=@6 1-A1*$

Pa que luego os quejis

6lgoritmo ejemplo 8ar cont! num! suma) entero @eg) %oolean =nicio Cont H Sum H @eg falso 7ientras cont FG3 Leer num Si num F H 'ntonces neg #erdadero +in si Sum sum C num Cont cont C 1 +in mientras Si negK#erdadero 'ntonces escri%ir 4MSe 0a le:do negati#osN2 Sino escri%ir 4M@o negati#osN2 +in si +in Si es leer un n<mero negati#o o 0asta 3 n<meros) 7ientras 4cont FG 32 " 4neg K #erdadero2 0. ESCRIT'RA DE ALGORITMOS 2 PROGRAMAS: 'n pseudocdigo el programa tiene dos partes! la ca%ecera " el cuerpo. La ca%ecera contiene el nom%re del algoritmo! " el cuerpo contiene 2 partes. La primera es la 1ona de declaraciones de #ar " const! " la segunda es la 1ona de las instrucciones del programa. 'n la 1ona de instrucciones para que quede m/s legi%le 0a" que usar la identacin " si es necesario 0a" que usar comentarios entre lla#es.

P>?=@6 2HA1*$

Pa que luego os quejis

EJERCICIOS: TEMA 3
1. [Cu/les " cu/ntos son los n<meros primos comprendidos entre 1 " 1HHH\ 6lgoritmo nbprimos Const PrimeroK1 LimiteK1HHH 8ar cont! i! j) entero primo) %oolean =nicio Cont H esde iK primero 0asta limite primo #erdadero j2 mientras 4iGj2 " 4primo K#erdadero2 Si i mod j K H 'ntonces primo falso Sino j j C 1 +in si +in mientras Si primo K #erdadero 'ntonces escri%ir iN M Cont cont C 1 +in si +in desde 'scri%ir M'ntre MprimeroN " MlimiteN 0a" McontN nc primosN +in 2. Calcular el m/(imo de n<meros positi#os introducidos por teclado! sa%iendo que metemos n<meros 0asta que introdu1camos uno negati#o. 'l negati#o no cuenta. 6lgoritmo ma(imo 8ar @um! ma() entero =nicio 7a( H 'scri%ir M=ntrodu1ca nc positi#os " para aca%ar introdu1ca uno negati#oN

P>?=@6 21A1*$

Pa que luego os quejis

Leer num 7ientras num GKH Si num Gma( 'ntonces ma( num +in si Leer num +in mientras 'scri%ir M'l ma"or n<mero esN ma( +in

3. eterminar cuales son los m<ltiplos de $ comprendidos entre 1 " @. 6lgoritmo multiplos 8ar i) entero =nicio esde iK1 0asta n Si i mod $ KH 'ntonces escri%ir i +in si +in desde +in

P>?=@6 22A1*$

Pa que luego os quejis

INTRODUCCIN A LA PROGRAMACIN ESTRUCTURADA: TEMA 4:


1. 2. 3. 4. $. &. *. ,. ;cnicas de programacin. Programacin modular. Programacin constructora. 'structura secuencial. 'structuras selecti#as. 'structuras repetiti#as. 6nidacin de %ucles " condicionales. Control de datos de entrada.

1. THCNICAS DE PROGRAMACIN: 'l programar con flujogramas o diagramas @S resulta mu" lioso en el momento en que el programa se complica! por eso #amos a utili1ar siempre el pseudocdigo! en el que #amos a utili1ar dos tcnicas de programacin que no se usan por separado! sino que son complementarios. 'stas tcnicas son) Programacin modular) Consiste en di#idir el programa en partes llamadas mdulos! e implementar cada uno de esos mdulos por separado. Programacin estructurada) Cu"o o%jeti#o es 0acer m/s legi%le " lgico la estructura del programa utili1ando para ello solamente tres tipos de estructuras) selecti#as! secuenciales 4condicionales2 " repetiti#as. 2. PROGRAMACIN MOD'LAR: Se %asa en di#idir el programa en partes llamadas mdulos! que se anali1an " codifican de forma independiente " que reali1an una determinada tarea que ser/ en realidad una parte del pro%lema total a resol#er. 'n todo algoritmo o programa e(istir/ un mdulo o programa principal que es al que transfiere el control cuando comien1a la ejecucin del programa! " luego desde l! se #a llamando al resto de los su%programas. Llamar a un su%programa quiere decir transferirle el control! es decir que se comien1a a ejecutar " lo 0ar/ desde el comien1o del su%programa 0asta que se termine " al terminar de#uel#e el control al su%programa que lo llam. entro del su%programa a su #e1 tam%in puedo llamar a otros pero en cualquier caso al final se de#uel#e el control al mdulo que 0ace la llamada. 'l control al programa llamado se de#uel#e a la instruccin siguiente a la que se 0i1o la llamada.

P>?=@6 23A1*$

Pa que luego os quejis

.n mdulo solo tiene acceso a los mdulos a los que llama " a los su%mdulos a los que a su #e1 llaman stos. Los resultados producidos por un mdulo pueden ser utili1ados por otros. @o e(iste un criterio fijo para determinar el tama9o! ni mu" grandes ni mu" peque9os! la idea fundamental es que realicen una <nica cosa " mu" concreta. Los mdulos o su%programas reci%en diferentes nom%res seg<n el lenguaje de programacin " seg<n su tipo. Se llaman procedimientos " funciones 4Pascal! C2! su%rutinas 4%asic! fortran2! secciones 4co%ol2!...

&. PROGRAMACIN ESTR'CT'RADA: La caracter:stica fundamental es que se #a a %asar en el uso <nicamente de tres estructuras de control. Para ello se apo"a en las siguientes filosof:as) 1. 5ecursos a%stractos) Son los recursos con los que no contamos a la 0ora de programar! pero en los que nos apo"amos a la 0ora de solucionarlos. 'stos recursos se tienen que ir transformando en recursos concretos. 2. ise9o descendente 4top do3n2) Se trata de ir descomponiendo el pro%lema en ni#eles o pasos cada #e1 m/s sencillos! tal que la salida de una etapa #a a ser#ir como entrada de la siguiente. 'n las primeras etapas tomamos el punto de #ista e(terno! es decir! que entradas 0a" " que salidas 0a"! " a medida que #amos %ajando de ni#el! lo #amos #iendo de modo interno 4como lo 0ace por dentro2. 3. 'structuras %/sicas de control) Para 0acer cualquier programa siguiendo los anteriores pasos de ra1onamiento! al final codificamos el programa usando tres tipos de secuencias 4repetiti#as! alternati#as " secuenciales2. 6l final todo programa #a a tener una <nica entrada " una <nica salida. esde la entrada tienen que e(istir caminos que nos permiten pasar por todas las partes del programa " lle#arnos a la salida! " finalmente no se #an a permitir los %ucles infinitos. 0. ESTR'CT'RA SEC'ENCIAL: 's cuando una instruccin sigue a otra en secuencia! es decir! la salida de una instruccin es la entrada de la siguiente. +L.dT?5676) =6?5676S @S) PS'. TCe =?T) Leer num @um numD2 'scri%ir num

6. ESTR'CT'RAS SELECTI3AS: Se e#al<a la condicin " en funcin del resultado se ejecuta un conjunto de instrucciones u otro. Oa" tres tipos de selecti#as 4simple! do%le o m<ltiple2)

P>?=@6 24A1*$

Pa que luego os quejis

D Simple) 's la estructura )

S: FcondG entonces FaccionesG fin s: '#aluamos la condicin " si es #erdadera ejecutamos el conjunto de condiciones asociadas al entonces! " si es falso! no 0acemos nada. +L.dT?5676) =6?5676 @S)
FCond1G S= FaccionesG FaccionesG FaccionesG Condicin @T

D o%le) Se e#al<a la condicin " si es #erdad se ejecutan el conjunto de acciones asociadas a la parte entonces! " si es falso se ejecutan el conjunto de acciones asociadas a la parte sino. +L.dT?5676) =6?5676S @S) PS'. TCe =?T) Si @o Cond S: FcondG Si Cond @o 'ntonces FaccionesG 6cc1 6cc2 Sino FaccionesG 6cc1 6cc2 +in si

.na condicin se ejecuta una <nica #e1. D 6lternati#a m<ltiple) Se e#al<a una condicin o e(presin que puede tomar n #alores. Seg<n el #alor que la e(presin tenga en cada momento se ejecutan las acciones correspondientes al #alor. 'n realidad equi#ale a un conjunto de condiciones anidadas. 'n cualquier lenguaje! es Case o S3it0. PS'. TCe =?T) Seg<n sea Fe(presinG F8alor1G) Faccin1G F#alor2G) Faccin2G ................................. PFotroG) FaccionesGQ fin seg<n Ttro) Las acciones asociadas al #alor otro se ejecutan cuando la e(presin no toma ninguno de los #alores que aparecen antes. Tt0er3ise! 'lse. 'l #alor con el que se compara la e(presin! #a a depender de los lenguajes! de lo que sea ese #alor. 'n general ese #alor puede ser un #alor constante! un rango de #alores o incluso otra condicin +L.dT?5676) =?5676S @S) '(pr
81 82 83 84 ...

'(presin
Ttro

81

82

83

84

8$

8&

P>?=@6 2$A1*$

Pa que luego os quejis

Oacer un programa que pueda di%ujar una recta! un punto o un rect/ngulo. 6lgoritmo di%ujo 8ar op) car/cter 'scri%ir 4M=ntroduce una opcinN 1. Punto 2. 5ecta 3. 5ect/nguloN2 Leer op Seg<n sea op M1N) leer ( ......... M2N) leer ( .......... M3N) leer ( .......... MotroN) escri%ir Mopcin errneaN fin seg<n Para un rango de #alores) Leer una nota " escri%ir en pantalla la calificacin) 8ar nota) entero Leer nota Seg<n sea nota 1..4) escri%ir MsuspensoN $..&) escri%ir Mapro%adoN *..,) escri%ir M@ota%leN -) escri%ir MSo%resalienteN 1H) escri%ir M7atricula de 0onorN fin seg<n 'n algunos lenguajes se permite poner una condicin) Seg<n sea nota @ota GK1 " nota FK4) escri%ir MsuspensoN 'n pseudocdigo no se pueden poner condiciones. 8. ESTR'CT'RAS REPETITI3AS:

P>?=@6 2&A1*$

Pa que luego os quejis

'n aquella que contiene un %ucle 4conjunto de instrucciones que se repiten un n<mero finito de #eces2. Cada repeticin del %ucle se llama iteracin. ;odo %ucle tiene que lle#ar asociada una condicin! que es la que #a a determinar cuando se repite el %ucle. Oa" cuatro tipos de %ucles! aunque solo se pueden usar tres) 1. 7ientras 0acer f0ile do 2. 5epetir 0asta repeat until 3. esde for 4. =terar loop ) @o se usa.

M"en#!as >a+e!: Sinta(is) PS'. TCe =?T) 7ientras FcondG 0acer FaccionesG fin mientras

+L.dT?5676) @o Cond Si Facc1G

=6?5676S @S) mientras cond acciones

+uncionamiento) La condicin del %ucle se e#al<a al principio! antes de entrar en l. Si la condicin es #erdadera! comen1amos a ejecutar las acciones del %ucle " despus de la ultima #ol#emos a preguntar pro la condicin. 'n el momento en el que la condicin sea falsa nos salimos del %ucle " ejecutamos la siguiente condicin al %ucle. 6l e#aluarse la condicin antes de entrar en el %ucle al principio! si la condicin al ser e#aluada la primera #e1 es falsa! no entraremos nunca en el %ucle! el %ucle puede que se ejecute H #eces! por tanto usaremos o%ligatoriamente este tipo de %ucle en el caso de que e(ista la posi%ilidad de que el %ucle pueda ejecutarse H #eces. Re)e#"! >as#a: Sinta(is) +L.dT?5676) FaccG @o Cond Si 5epetir FcondG 0asta

=6?5676S @S) acciones

+L.dT?5676) 5epetir FaccionesG 0asta FcondicinG

+uncin)

P>?=@6 2*A1*$

Pa que luego os quejis

Se repite el %ucle 0asta que la condicin sea #erdadera. Se repite mientras la condicin sea falsa. La condicin se e#al<a siempre al final del %ucle! si es falsa #ol#emos a ejecutar las acciones! si es #erdad se sale del %ucle. Como la condicin se e#al<a al final! incluso aunque la primera #e1 "a sea #erdadera! 0a%remos pasado al menos una #e1 por el %ucle. 's decir que cuando un %ucle se tenga que ejecutar como m:nimo una #e1! podremos usar una estructura repetir o mientras! la <nica diferencia que 0a%r/ entre las dos! es que para 0acer lo mismo! las condiciones tienen que ser contrarias. Leer 3 n<meros " dar su suma) Cont H Cont H Suma H suma H 7ientras cont FG 3 repetir Suma suma C num leer num Leer num suma suma C num Cont cont C 1 cont cont C 1 +in mientras 0asta cont K 3 Des*e: 'ste tipo de %ucles se utili1a cuando se sa%e "a antes de ejecutar el %ucle el n<mero e(acto de #eces que 0a" que ejecutarlo. Para ello el %ucle lle#ara asociado una #aria%le que denominamos #aria%le :ndice! a la que le asignamos un #alor inicial " determinamos cual #a a ser su #alor final " adem/s se #a a incrementar o decrementar en cada iteracin de %ucle en un #alor constante! pero esto se #a a 0acer de manera autom/tica! el programador no se tiene que ocupar de incrementar o decrementar esta #aria%le en cada iteracin! sino que #a a ser una operacin impl:cita 4lo 0ace por defecto2. Por tanto en cada iteracin del %ucle! la #aria%le :ndice se actuali1a autom/ticamente " cuando alcan1a el #alor que 0emos puesto como final se termina la ejecucin del %ucle. Sinta(is) PS'. TCe =?T) esde F#ar :ndiceGKF#alor inicialG 0asta F#alor finalG FaccionesG fin desde +L.dT?5676S) 8 8i esde #K#i 0asta #1
8 FG 81

=6?5676S @S)

FsentenciasG

sentencias ##C1

P>?=@6 2,A1*$

Pa que luego os quejis

7u+le + n sal"*a "n#e!na: l ) "#e!a!. Permite la salida del %ucle desde un punto intermedio del mismo siempre que se cumpla la condicion que aparece! entonces nos salimos a la siguiente instruccin del %ucle. =terar Fsent1G salir si FcondG @.@C6 S' .S6 Fsent2G fin iterar

;. ESTR'CT'RAS ANIDADAS: ;anto las estructuras selecti#as como los %ucles se pueden anidar unos dentro de otros. An"*a+"-n *e + n*"+" nales: La #entaja de anidar sentencias condicionales! es que cuando una se cumple no 0a" por que mirar a las que estan de%ajo. ;enemos que tratar anidar la condicion en la parte sino 4else2 en #e1 que en la parte entonces. Si Fcondicion1G 'ntonces Fsentencia1G Sino si Fcondicion2G 'ntonces Fsentencia2G Sino si Fcondicion2G 'ntonces Fsentencia3G +in si +in si +in si 'l case siempre equi#ale a una anidacin de condicionales! pero no al re#es. 7u+les an"*a* s: 6l igual que podemos colocar unas e(presiones dentro de otras! unos %ucles pueden estar dentro de otros! pero nunca pueden cru1arse. 6l anidar %ucles 0a" que tener en cuenta que el %ucle mas interno funciona como una sentencia mas del %loque mas e(terno " por tanto en cada iteracin del %ucle mas e(terno se #an a ejecutar todas las iteraciones del %ucle mas interno por cada iteracin del mas e(terno. Si el %ucle mas e(terno se repite n #eces " el mas interno se repite m #eces! si por cada iteracin del mas e(terno se repite el mas interno! el n<mero total de iteraciones ser/ mDn. Los %ucles que se anidan pueden se de igual o distinto tipo. esde iK1 0asta , esde jK1 0asta $ 'scri%ir MProfesorNiNintrodu1ca su asignatura ncNj Leer asignatura +in desde P>?=@6 2-A1*$

Pa que luego os quejis

+in desde <. CONTROL DE DATOES DE ENTRADA: 1. Cuan* e:"s#e un /al ! +en#"nela =ue *e#e!$"na el F"n *el Cu+le: 'l %ucle se #a a repetir mientras no se lea un determinado #alor. La primera lectura se #a a reali1ar fuera del %ucle! " si la primera #e1 que lo leo "a encuentro ese #alor centinela no podemos entrar en el %ucle " seguir/ a continuacin! sino entramos en el %ucle. Se #a utili1ar una estructura M"en#!as. 2. Le+#u!a se+uen+"al *e un F"+>e! : ;endremos que leer del primero al <ltimo registro del fic0ero. Oa%r/ que usar un M"en#!as! aunque 0a" dos posi%ilidades) Leer fuera del %ucle " al final de %ucle! o leer dentro al principio del %ucle. Se usa una u otra dependiendo del lenguaje. &. Cuan* en un Cu+le saCe$ s el nI$e! e:a+# *e /e+es =ue se !e)"#e el Cu+le: .samos el Des*e...Das#a. 0. C n#! l *e *a# s )a!a n )e!$"#"! *a# s e!! ne s: @o dejar seguir al usuario 0asta que no introdu1ca datos correctos. Oa" que usar un Re)e#"!...Das#a. 5epetir Leer datos Oasta 4datos correctos2 5epetir leer op 0asta 4opGK12 " 4opFK32

P>?=@6 3HA1*$

Pa que luego os quejis

EJERCICIOS: TEMA 4
1. 6l final de curso deseamos sa%er cual 0a sido el alumno de primero con mejor nota media. Se sa%e que este a9o entraron 1$H alumnos " que en primero todos tienen $ asignaturas. ar el nom%re " la nota media. 6lgoritmo notabmedia Const 6lumnosK1$H 6signaturasK$ 8ar @om%re! mejorbalum) cadena @ota! suma! media! acum) real =! j) entero =nicio 6cum H esde iK1 0asta alumnos 0acer Suma H 'scri%ir M=ntrodu1ca el nom%re del alumnoN Leer nom%re esde jK1 0asta asignaturas 0acer 'scri%ir M=ntrodu1ca la nota de la asignaturaN Leer nota Suma suma C nota +in desde 7edia suma A asignaturas Si media G acum 'ntonces acum media 7ejorbalum nom%re +in si +in desde 'scri%ir M'l mejor alumno es Mmejorbalum

P>?=@6 31A1*$

Pa que luego os quejis

'scri%ir MSu nota media es Macum +in

2. Calcular la suma de los di#isores de cada n<mero introducido por teclado. ;erminaremos cuando el n<mero sea negati#o o H. 6lgoritmo di#isores 8ar @umero! i! suma )entero =nicio 'scri%ir M=ntroduce un n<mero! " para aca%ar uno negati#oN Leer n<mero 7ientras numero G H Suma H esde iK1 0asta numero A2 Si numero mod i KH 'ntonces suma suma C i +in si +in desde Suma suma C numero 'scri%ir MLa suma de los di#isores del n<mero es Msuma Leer numero +in mientras +in 3. Se coloca un c/pital C! a un interes =! durante 7 a9os " se desea sa%er en cuanto se 0a%r/ con#ertido ese capital en m a9os! sa%iendo que es acumulati#o. 6lgoritmo interes 8ar =! j! m) entero C! temporal) real =nicio repetir 'scri%ir M=ntroduce el capital! el interes " el tiempoN Leer c! i! m Oasta 4cGH2 " 44iFKH2"4iFK1HH22 " 4m GKH2 P>?=@6 32A1*$

Pa que luego os quejis

esde jK1 0asta m C c D 41C=A1HH2 +in desde 'scri%ir M;ienes McN ptsN +in

4. ada una fec0a en formato diaAmesAa9o determinar el n<mero de d:as " el nom%re del mes de dic0a fec0a! " sacar por pantalla la fec0a con#ertida a formato de dia MdeN mes MdeN a9o. 6lgoritmo fec0a 8ar ia! mes! a9o! nbdias) entero @bmes) cadena =nicio 5epetir 'scri%ir M=ntroduce la fec0a en formato dia mes a9oN Leer dia! mes! a9o Seg<n sea mes 1!H1) nbmes MeneroN nbdias 31 2!H2) nbmes Mfe%reroN si a9o mod 4KH entonces nbdias 2entonces nbdias 2, 3!H3) nbmes Mmar1oN nbdias 31 4!H4) nbmes Ma%rilN nbdias 3H $!H$) nbmes Mma"oN nbdias 31 &!H&) nbmes MjunioN nbdias 3H *!H*) nbmes MjulioN nbdias 31 ,!H,) nbmes MagostoN nbdias 31 P>?=@6 33A1*$

Pa que luego os quejis

-!H-) nbmes Mseptiem%reN nbdias 3H 1H) nbmes Moctu%reN nbdias 31 11) nbmes Mno#iem%reN nbdias 3H 12) nbmes Mdiciem%reN nbdias 31 fin seg<n sea 0asta 4dia FKnbdias2 " 44mes GK12"4mes FK1222 " 4a9o GKH2 escri%ir M'l mes de MnbmesNtiene MnbdiasN diasN escri%ir MLa fec0a es) MnbdiasN de MnbmesN de Ma9o fin

$. ada la siguiente frmula)

X =

44a b2
i =1 n 1 i=2

32 + n

42 + a D 4i 122

6#eriguar el #alor de ( pidiendo al usuario los #alores de n! a! %. 6lgoritmo ecuacion 8ar @! a! %! primer! seg<n! i! j) entero g) real =nicio Primer H Seg<n 1 5epetir 'scri%ir M=ntroduce el #alor de n! a! %N Leer n! a! % Oasta nGKH esde iK1 0asta n Primer 444aB%2Wi h32Cn2Cprimer +in desde esde jK2 0asta nB1 Seg<n 442DaD4iB122Dseg<n2 +in desde g primer A seg<n 'scri%ir ( +in P>?=@6 34A1*$

Pa que luego os quejis

&. ada la siguiente serie matem/tica) a1KH a2KH anKanB1 C 42DanB22 para nGK3 eterminar cual es el #alor " el rango del primer trmino cu"o #alor sea ma"or o igual a 2HHH. 6lgoritmo serie 8ar 61! a2! an! cont) entero =nicio 61 1 62 H 6n a1 C 42Da22 @3 7ientras an F 2HHH 62 a1 61 an 6n a1 C 42Da22 Cont cont C 1 +in mientras 'scri%ir M'l rango es McontN " el resultado esNan fin

P>?=@6 3$A1*$

Pa que luego os quejis

SUBPROGRAMAS: PROCEDIMIENTOS Y FUNCIONES. TEMA 5


1. 2. 3. 4. $. =ntroduccin a los su%programas o su%algoritmos. +unciones. Procedimientos. >m%itos) #aria%les locales " glo%ales. Comunicacin entre su%programas) Paso de par/metros. - ;ipos " mtodos de paso de par/metros. - Paso de par/metros por copia. - Paso de par/metros por referencia. - Paso de par/metros por nom%re. &. +unciones " procedimientos como par/metros. *. 'fectos laterales. ,. 5ecursi#idad. 1. INTROD'CCIN A LOS S'7PROGRAMAS O S'7ALGORITMOS: La programacin modular es una de las tcnicas fundamentales de la programacin. Se apo"a en el dise9o descendente " en la filosof:a de Mdi#ide " #encer/sN! es decir se trata de di#idir el pro%lema dado! en pro%lemas m/s simples en que cada uno de los cuales lo implementaremos en un mdulo independiente. 6 cada uno de estos mdulos es a lo que llamamos su%algoritmos o su%programas. Siempre e(istir/ un mdulo o programa principal que es con el que comien1a la ejecucin de todo el programa! " a partir de l iremos llamando al resto. Cada #e1 que se llama a un su%programa se le pasa la informacin que necesita en la llamada! a continuacin comien1a a ejecutarse el su%programa llamado! " cuando termine su ejecucin! de#uel#e el control a la siguiente instruccin a la de llamada en el programa que lo llam. 'n cuanto a la estructura de un su%programa es igual a la estructura de un programa! #a a tener una informacin de entrada que es la que le pasamos al 0acer la P>?=@6 3&A1*$

Pa que luego os quejis

llamada " que se coloca junto al nom%re del su%programa. espus #a a tener un conjunto de acciones! declarar otras #aria%les propias del su%programa! " al terminar la ejecucin puede que de#uel#a o no resultados al programa que lo llam. Oa" dos tipos fundamentales de su%programas) +unciones " procedimientos. 2. F'NCIONES: esde el punto de #ista matem/tico! una funcin es una operacin que toma uno o #arios operandos! " de#uel#e un resultado. ] desde el punto de #ista algor:tmico! es un su%programa que toma uno o #arios par/metros como entrada " de#uel#e a la salida un In"+ resultado. Pascal) 'n las funciones se puede de#ol#er m/s de un <nico resultado mediante par/metros. C) Se de#uel#e todo por par/metros. 'ste <nico resultado ir/ asociado al nom%re de la funcin. Oa" dos tipos de funciones) - =nternas) Son las que #ienen definidas por defecto en el lenguaje. - '(ternas) Las define el usuario " les da un nom%re o identificador. Para llamar a una funcin se da su nom%re! " entre parntesis #an los argumentos o par/metros que se quieren pasar. De+la!a+"-n *e una Fun+"-n: La estructura de una funcin es semejante a la de cualquier su%programa. ;endr/ una ca%ecera 4con el nom%re " los par/metros2 " un cuerpo4con la declaracin de los par/metros de la funcin " las instrucciones2. S"n#a:"s: +uncion Fnom%rebfuncionG 4nbparametro) tipo! nbparametro) tipo2) tipo funcion 8ar F#aria%les locales funcionG =nicio FaccionesG retorno F#alorG fin Fnom%rebfuncionG La lista de par/metros es la informacin que se le tiene que pasar a la funcin. Los par/metros luego dentro de la funcin los podemos utili1ar igual que si fueran #aria%les locales definidas en la funcin " para cada par/metro 0a" que poner su nom%re " tipo. 'l nom%re de la funcin lo da al usuario " tiene que ser significati#o. 'n las #aria%les locales se declaran las #aria%les que se pueden usar dentro de la funcin. 'ntre las acciones tendr/ que e(istir entre ellas una del tipo retorno <valor>. 'sta sentencia pondr/ fin a la ejecucin de la funcin " de#ol#er/ el #alor de la funcin! es decir! como #alor asociado al nom%re de mismo tipo que el tipo de datos que de#uel#e a la funcin! este #alor por tanto tiene que ser del mismo tipo que el tipo de datos que de#uel#e la funcin! que es el que 0a%remos indicado al declarar la funcin en la parte final de la ca%ecera. @o se permiten funciones que no de#uel#an nada. Los par/metros que aparecen en la declaracin de la funcin se denominan par/metros formales! " los par/metros que "o utili1o cuando llamo a la funcin se denominan par/metros actuales o reales. In/ +a+"-n *e una Fun+"-n: P>?=@6 3*A1*$

Pa que luego os quejis

Para llamar a una funcin se pone el nom%re de la funcin! " entre parntesis los par/metros reales! que podr/n ser #aria%les! e(presiones! constantes!... pero siempre del mismo tipo que los par/metros normales asociados Fnom%rebfuncionG 4par/metros reales2 La funcin puede ser llamada desde el programa principal o desde cualquier otro su%programa. Para llamar a la funcin desde cualquier parte! implica el conocimiento pre#io de que sta funcin e(iste. 6 tra#s de los par/metros reales de la llamada se proporciona a la funcin la informacin que necesita! para ello! al 0acer la llamada lo que se produce es una asociacin autom/tica entre par/metros reales " par/metros formales. 'sta asociacin se reali1a seg<n el orden de la aparicin " de i1quierda " derec0a. Si el par/metro formal " real no son del mismo tipo! en Pascal se produce un error! " en C se transforman los tipos si es posi%le. La llamada a una funcin! s"e$)!e /a a F !$a! )a!#e *e una e:)!es"-n! de cualquier e(presin en la que en el punto en la que se llama a la funcin! pudiera ir colocado cualquier #alor del tipo de datos que de#uel#e la funcin! esto se de%e a que el #alor que de#uel#e una funcin esta asociado a su nom%re. Pas s )a!a >a+e! la lla$a*a a una Fun+"-n: 1. 6l 0acer la llamada " ceder el control a la funcin! se asocia 4asigna el #alor2 de cada par/metro real a cada par/metro formal asociado! siempre por orden de aparicin " de i1quierda a derec0a! por lo que siempre que no coincidan los tipos " el n<mero de par/metros formales " reales! se produce un error. 2. Si todo 0a ido %ien! se ejecutan las acciones de la funcin 0asta que lleguemos a una de tipo retorno <valor> que pondr/ fin a la ejecucin. Pueden e(istir #arias sentencias de retorno en la misma funcin! pero en cada llamada solo se podr/ ejecutar uno. 3. Se le asocia al nom%re de la funcin el #alor retornado " se de#uel#e el control al su%programa que 0i1o la llamada pero sustitu"endo el nom%re de la funcin por el #alor de#uelto. O#!a F !$a *e es)e+"F"+a! el !e# !n *e una Fun+"-n: Se le asigna el #alor de#uelto al nom%re de la funcin. @bfuncion #alor E,e$)l *e Fun+"-n: .na funcin que calcule la mitad del #alor que le paso par/metro. Suponemos que es un #alor entero. +uncion mitad 4n) entero2) real 8ar m) real =nicio 7 nA2 5etorno m +in mitad 6lgoritmo calcbmitad 8ar num) entero =nicio 'scri%ir M=ntroduce un n<mero para 0allar su mitadN Leer num P>?=@6 3,A1*$

Pa que luego os quejis

'scri%ir MLa mitad de MnumN es Mmitad4num2 +in * La !"#$%" &'(' )!*+* &*, ((a-a+a +*&+* !"a *.),*&$%". &. PROCEDIMIENTOS: 'l incon#eniente de una funcin es que solo puede de#ol#er un <nico #alor! por lo que s: nos interesa de#ol#er H o @ #alores! aunque puedo usarlo para de#ol#er un solo #alor! de%o usar un procedimiento. .n procedimiento es un su%programa o un su%algoritmo que ejecuta una determinada tarea! pero que tras ejecutar esa tarea no tienen ning<n #alor asociado a su nom%re como en las funciones! sino que si de#uel#e informacin! lo 0ace a tra#s de par/metros. 6l llamar a un procedimiento! se le cede el control! comien1a a ejecutarse " cuando termina de#uel#e el control a la siguiente instruccin a la de llamada. D"Fe!en+"as en#!e Fun+" nes . )! +e*"$"en# s: 1. .na funcin de#uel#e un <nico #alor " un procedimiento puede de#ol#er H!1 o @. 2. @inguno de los resultados de#ueltos por el procedimiento se asocian a su nom%re como ocurr:a con la funcin. 3. 7ientras que la llamada a una funcin forma siempre parte de una e(presin! la llamada a un procedimiento es una instruccin que por s: sola no necesita instrucciones. 'sta llamada consiste en el nom%re del procedimiento " #a entre parntesis #an los par/metros que se le pasan. 'n algunos lenguajes 4como el C2! se pone delante la pala%ra Llamar a 4Call2 procedimiento 4par/metro2. S"n#a:"s: Procedimiento Fnom%rebprocG 4FtipobpasobparG Fnom%rebparG) tipobpar!...2 8ar F#aria%les localesG) tipo =nicio FsentenciasG fin Fnom%rebprocG La ca%ecera #a a estar formada por el nom%re del procedimiento que ser/ un identificador " que de%e de ser significati#o! " luego entre parntesis los par/metros o la informacin que se le pasa al procedimiento. Para cada par/metro 0a" que indicar el tipo de paso de par/metro. Oa" dos tipos fundamentales de paso de par/metros! por #alor " por referencia! si no ponemos tipo de paso de par/metros! se toma el tipo de paso de par/metros por #alor. 'n el cuerpo del procedimiento donde #an las sentencias "a no 0a%r/ ninguna de tipo Fretorno #alorG! a0ora %ien! si el procedimiento de#uel#e resultados a tra#s de sus par/metros! cosa que solo podr/ 0acer a tra#s de los par/metros que se pasan por referencia! tendr/n que e(istir sentencias de asignacin de #alores a estos par/metros pasados por referencia! a tra#s de los cuales se #an a de#ol#er los resultados. C $ se lla$a a un )! +e*"$"en# : Pllamar a 4Call2Q nom%rebproc 4parbreales2 Pas s )a!a >a+e! la lla$a*a a un )! +e*"$"en# : 1. Se cede el control al procedimiento al que se llama " lo primero que se 0ace al cederle el control es sustituir cada par/metro formal de la definicin por el par/metro actual o real de la llamada asociado a l. 'sta asociacin entre par/metros formales " reales se 0ace de i1quierda a derec0a por orden de colocacin " para que

P>?=@6 3-A1*$

Pa que luego os quejis

se pueda producir esta asociacin tienen que e(istir el mismo n<mero de par/metros formales que reales! " adem/s el tipo tiene que coincidir con el del par/metro formal asociado! sino se cumple alguna de estas condiciones 0a" un error. 2. Si la asociacin 0a sido correcta comien1an a ejecutarse las instrucciones del procedimiento 0asta llegar a la <ltima instruccin. 6l llegar a la instruccin se #uel#en a asociar los par/metros formales que de#uel#en los resultados a los par/metros formales asociados en la llamada! es decir! de esta manera algunos de los par/metros reales de la llamada "a contendr/n los resultados del procedimiento. 3. +inalmente se cede el control a la siguiente instruccin a la que se 0ace la llamada! pero teniendo en cuenta que en esta instruccin " en las siguientes puedo usar "a los par/metros reales en los que se de#ol#ieron los resultados del procedimiento para tra%ajar con ellos.

Procedimiento mitad 4num)entero!entBsal 7)real2 =nicio 7 numA2 +in mitad 6lgoritmo calcbmitad 8ar @) entero 7it) real =nicio 'scri%ir M=ntroduce un n<meroN Leer n 7itad 4n!mit2 'scri%ir MLa mitad esNmit fin 0. @M7ITOS: 3ARIA7LES LOCALES 2 GLO7ALES: Qu es el 5$C"# *e un "*en#"F"+a* !%: 'l /m%ito de un identificador 4#aria%les! constantes! funciones!...2 es la parte del programa en la que se conoce " por tanto se puede usar un identificador. Seg<n el /m%ito 0a" 2 tipos de #aria%les! locales " glo%ales) 1. Local) 6quella que est/ declarada " definida dentro de un su%programa luego su /m%ito coincidir/ con el /m%ito del su%programa en la que este definida. 'sto quiere decir que la #aria%le no tiene ning<n significado! no se conoce " no se puede acceder a ella desde fuera del su%programa " que tiene una posicin de memoria distinta a la de cualquier otra! incluso si es de una #aria%le que tiene el mismo nom%re pero que est/ definida fuera del su%programa. Las #aria%les locales a un su%programa se definen en la parte de la definicin de #aria%les del mismo. Los par/metros formales que se le ponen a un su%programa se comportan dentro de l como si fueran tam%in #aria%les locales a l.

P>?=@6 4HA1*$

Pa que luego os quejis

2. ?lo%ales) Son las que est/n definidas a ni#el del programa! es decir! su /m%ito es el programa o algoritmo principal " todos los su%programas que #an junto con l. 6 esta #aria%le podemos acceder desde cualquiera de los su%programas " el programa principal! sal#o que alguno de esos su%programas tenga definida una #aria%le local con el mismo nom%re que la #aria%le glo%al! en este caso si utili1o el nom%re de esa #aria%le me referir a la local! nunca a la glo%al4"a que tienen 2 1onas de memoria distintas2. Luga! en el =ue se *eF"nen las /a!"aCles gl Cales: 'n algunos lenguajes se define en el programa principal! " esa #aria%le ser/ glo%al! en otros lenguajes se definen fuera del programa principal " fuera de cualquier otro su%programa4antes de empe1ar el programa principal2. 7todo que #amos a usar. 'l pro%lema de usar #aria%les glo%ales es que como todos los su%programas las pueden modificar! puede ser posi%le que 0a"a usos inde%idos cuando un su%programa utili1a una #aria%le glo%al sin sa%er que otro la 0a modificado! por esa ra1n nunca usaremos para pasar informacin entre los su%programas #aria%les glo%ales! sino que usaremos #aria%les de entradaBsalida! sal#o que no nos quede m/s remedio.

P! +e*"$"en# s an"*a* s: La anidacin de procedimientos no se permite en todos los lenguajes " consiste en que dentro de un procedimiento podamos definir o meter el cdigo de otros. Si la anidacin de procedimientos est/ permitida! se plantean m/s pro%lemas en cuanto al /m%ito! desde este punto de #ista! se dice que una #aria%le local se conoce en el procedimiento en el que est/ definida " en todos los procedimientos anidados a l que son los que componen el /m%ito de dic0o procedimiento! sal#o que en alguno de esos procedimientos anidados este definida una #aria%le local con el mismo nom%re en cu"o caso dentro de ese procedimiento siempre nos referiremos a la #aria%le local definida en l porque siempre se considera el /m%ito m/s restringido. PP 8ar 6!J P1 6!C! P2 6 P3 !' P4 !+ P$ P& +!6

865=6JL'S 6 del PP P4!P$

>7J=;T S.JP5T?5676

P>?=@6 41A1*$

Pa que luego os quejis

J del PP 6 del P1 C del P1 del P1 6 del P2 del P3 ' del P3 del P4 + del P4 + del P& 6 del P&

P1!P2!P3!P4!P$!P& P1!P3 P1!P2!P3 P1!P2!P3 P2 P3 P3 P4!P$!P& P4!P$ P& P&

6. COM'NICACIN ENTRE S'7PROGRAMAS: PASO DE PAR@METROS. La mejor forma para lle#ar a ca%o la comunicacin ente su%programas! es el paso de par/metros. ;rataremos de e#itar siempre que sea posi%le el uso de #aria%les glo%ales. Cuando llamamos a una funcin o procedimiento! le pasamos a tra#s de los par/metros la informacin que necesita! " en el caso de un procedimiento tam%in de#ol#emos a tra#s de sus par/metros los resultados. Para ello definiremos el tipo del par/metro a principio del su%programa! que es lo que conocemos como par/metros formales! " al 0acer la llamada pasamos la informacin a tra#s de los par/metros reales. C-$ se eFe+#Ia la + !!es) n*en+"a en#!e )a!5$e#! s F !$ales . !eales%: '(isten 2 mtodos) 1. Correspondencia posicional) 'n este caso se emparejan los par/metros formales " reales por la posicin que ocupan 4orden de declaracin2 " de i1quierda a derec0a. Para que se pueda reali1ar esta asociacin! tiene que 0a%er el mismo n<mero de par/metros formales " reales! " con el mismo tipo. + 4()entero!")real2 8ar a)real + 43!62 2. Correspondencia por nom%re impl:cito) 60ora en la llamada al su%programa se pone e(pl:citamente a que par/metro formal corresponde cada real. 60ora en la llamada ponemos el nom%re del par/metro formal! separado por dos puntos 4)2 " el nom%re del par/metro real que le pasamos! con lo cual "a no importa la posicin en la que coloquemos la informacin. + 4()3!")62 + 4")6!()32 .n lenguaje que permite esto es 6 6. .saremos siempre el primer mtodo 4posicional2.

P>?=@6 42A1*$

Pa que luego os quejis

Pas *e )a!5$e#! s: el modo de paso de par/metros #a a depender el resultado que se o%tenga. 1. T") s *e )a!5$e#! s: Seg<n se usen para meter datos o para o%tener resultados. '(isten 3 tipos) 1. e entrada) Son par/metros que solo aportan informacin de entrada al su%progama en el que pertenecen como par/metros. 6porta el #alor que tienen como entrada al su%programa. 'n el caso de una funcin! todos sus par/metros son de este tipo. Como solo sir#en como entrada! solo pueden ser le:dos! pero no modificados! " aunque se modificasen dentro de un su%programa! fuera no #a a tener efecto esa modificacin. 2. e salida) Se usan solo " e(clusi#amente para de#ol#er resultados a tra#s de ellos. Su #alor al 0acer la llamada al su%programa no nos importa! sino que ese #alor solo #a a tener importancia cuando termina la ejecucin del programa. .n par/metro de este tipo tericamente nunca se puede leer! solo se #a actuali1ar.

e entrada " salida) 'l #alor del par/metro tiene importancia tanto a la entrada como a la salida del su%programa! nos aporta informacin cuando llamamos al su%programa " por otra parte de#ol#emos a tra#s de l resultados cuando terminamos el su%programa! en este caso! tiene sentido tanto leer como actuali1ar el par/metro. Solo 6 6 es un lenguaje que #a a soportar los 3 tipos de paso de par/metro. Se ponen como =n! Tut! =nBTut. 'l resto de los lenguajes solo permiten dos tipos de par/metros! de entrada 4solo para leer datos2 " de entradaBsalida 4para de#ol#er resultados! aunque tam%in se puede usar para leer datos2.

3.

2. M# * s *e )as *e )a!5$e#! s: - Paso de par/metros por copia) - Por #alor. - Por resultado. - Por #alorBresultado. - Paso de par/metros por referencia. - Paso de par/metros por nom%re o nominal. Pas *e )a!5$e#! s ) ! + )"a: La caracter:stica fundamental de este mtodo de paso de par/metros es que el par/metro formal siempre se considera que tiene asociada una direccin de memoria en la que est/ almacenado " que por tanto se comporta igual que una #aria%le local del su%programa en que aparece. 'n este mtodo lo que importa es el #alor del par/metro actual. 1. P ! /al !: @os interesa el #alor del par/metro actual a la entrada! para ello este #alor se copia en la direccin de memoria del par/metro formal asociado. 'n este caso el par/metro real puede se una constante! e(presin o #aria%le! " nunca se #a a usar para de#ol#er resultado a tra#s de l! por esa ra1n precisamente puede ser una constante o una e(presin! porque al no de#ol#er resultados a tra#s de l no

P>?=@6 43A1*$

Pa que luego os quejis

necesita tomar ninguna 1ona de memoria en la que este almacenado! es m/s! incluso si el par/metro actual fuera una #aria%le " la modific/semos dentro del su%programa 4algo que no de%er:amos 0acer2! fuera del su%programa no tendr:a ninguna repercusin esta modificacin! es decir! esa #aria%le ser#ir:a #aliendo lo mismo en el programa desde el que se 0ace la llamada despus " antes de 0acerla. 'l funcionamiento ser:a el siguiente) - 6l 0acer la llamada al su%programa se e#al<a el #alor del par/metro real! " ese es el que se asocia! es decir! el que se guarda o asigna al par/metro formal asociado. - Comen1amos a ejecutar el su%programa " si por casualidad se produce alg<n cam%io en el par/metro formal! el par/metro actual no se #er/ afectado! es decir! su #alor seguir/ siendo el mismo en el su%programa desde donde se llama que antes de 0acer la llamada al su%programa.

6lgoritmo 'j 8ar 6)entero =nicio 63 P 462 'scri%ir 6 +in Procedimiento P4()entero2 =nicio g (D2 'scri%ir ( +in p 'l #alor de 6 ser:a 3 " el de g ser:a &.

3
6 del PP

&
g de P

2. P ! /al !4!esul#a* : 'n el #alorBresultado nos interesa el #alor del par/metro actual tanto a la entrada como a la salida de la ejecucin del su%programa. 'sto quiere decir que se cam%ia el #alor del par/metro formal cam%iar/ tam%in el #alor de su par/metro real asociado! cosa que no ocurr:a antes! " esto supone por tanto que a0ora el par/metro real tiene que tener asociada o%ligatoriamente una direccin de memoria! por lo que siempre tendr/ que ser una #aria%le 4no una constante ni una e(presin2. 'l proceso ser:a el siguiente) B 6l 0acer la llamada al su%programa se e#al<a el par/metro real " su #alor se copia en el par/metro formal asociado " al terminar la ejecucin el #alor del par/metro formal se #uel#e a copiar en el par/metro real asociado. 6lgoritmo 'j 8ar 6)entero =nicio P>?=@6 44A1*$ Se copia

Pa que luego os quejis

63 P 462 'scri%ir 6 +in Procedimiento P4()entero2 =nicio g (D2 'scri%ir ( +in p 'l #alor de la 6 " la g ser:a &.

3 & P.5eal

3 & P.+ormal Se de#uel#e

&. P ! !esul#a* : @os interesa el #alor del par/metro real solamente a la salida o fin de la ejecucin del su%programa en que aparece. 'sto significa que al 0acer la llamada no se copia el #alor del par/metro real en el par/metro formal asociado! sin em%argo a la salida se copia el #alor del par/metro formal en la direccin del par/metro real asociado! esto significa por tanto! que el par/metro real tiene que tener asociada una e(presin que tiene que ser una #aria%le 4no puede ser una constante o una e(presin2.

6lgoritmo ej 8ar 6)entero =nicio 63 P 462 'scri%ir 6 +in Procedimiento P4()entero2 =nicio g1 g (D2 'scri%ir ( +in p 'l #alor de 6 " de g es 2.

@o se copia P.5eal P.+ormal

Se copia a la salida

'n la pr/ctica la ma"or parte de los lenguajes dentro del tipo de paso de par/metro por copia solo #an a soportar el tipo de paso de par/metro por #alor! que se usar/ cuando un par/metro solo lo quiero utili1ar como entrada de informacin al su%programa! pero no para de#ol#er resultados a tra#s de l. Los otros dos tipos de paso de par/metros por copia 4por #alor " por #alorB resultado2! no se implementan normalmente porque los efectos son pr/cticamente iguales que el paso de par/metros por referencia! es decir! cuando quiero usar un par/metro no solo para pasar informacin a tra#s de l sino tam%in para de#ol#er resultados o si lo #o" a usar slo para de#ol#er resultados! utili1ar el paso de par/metros por referencia que #amos a #er a continuacin. Para sim%oli1ar que el tipo de paso de par/metros es por #alor! en la definicin del su%programa no pongo ning<n tipo de paso de par/metros para ese par/metro! es

P>?=@6 4$A1*$

Pa que luego os quejis

decir! no poner ning<n tipo significa que por defecto el tipo de paso de par/metros es por #alor. 'n el caso de las funciones como solamente pueden reci%ir informacin de entrada pero nunca pueden de#ol#er informacin por sus par/metros "a que lo de#uel#en a tra#s de la sentencia retorno " asociado a su nom%re. 'l tipo de paso de sus par/metros #a a ser siempre por #alor.

Pas *e )a!5$e#! s ) ! !eFe!en+"a: 60ora la caracter:stica principal de este tipo de paso de par/metros es que el par/metro formal #a a tener tam%in asignada una direccin de memoria en la que se almacena! pero en esa direccin NO SE G'ARDA S' 3ALOR! sino que se almacena la direccin de su par/metro real asociado! es decir! el par/metro formal apunta al par/metro real que tiene asociado " cualquier modificacin que se efect<e so%re el par/metro formal tendr/ una repercusin directa en el par/metro real asociado "a que lo que modificar/ ser/ el #alor almacenado en la direccin que indica el par/metro formal que es la de su par/metro formal asociado. 'l proceso ser/ por tanto el siguiente) - 6l 0acer la llamada al procedimiento en el par/metro formal que se pasa por referencia! se #a a guardar la direccin del par/metro real asociado para que apunte a l. urante la ejecucin cualquier referencia al par/metro formal se 0ar/ accediendo a la direccin apuntada por dic0o par/metro! es decir! accediendo directamente al par/metro real asociado! por lo que cualquier cam%io en el par/metro formal afectar/ directamente al par/metro real asociado. e esta manera 0a%remos pasado el resultado. Para indicar que el tipo de paso de par/metro es por referencia! #amos a utili1ar la pala%ra cla#e entBsal precediendo al par/metro que se pasa por referencia. 6 estos par/metros tam%in se les llama par/metros #aria%les 4porque su #alor #ar:a2! por eso en Pascal se usa la pala%ra cla#e 8ar para indicarlo. 'n otros lenguajes como C! se usan como par/metros punteros para indicar que son direcciones. 6lgoritmo 'd 8ar 6 apunta =nicio 63 P>?=@6 4&A1*$

Pa que luego os quejis

P1462 'scri%ir 462 +in Procedimiento P14entBsal ()entero2 =nicio g (D2 +in P1 Por #alor el par/metro actual no cam%ia de #alor. Por referencia el par/metro actual puede cam%iar.

3 6 del PP

direccin 6 g del P1

Pas *e )a!5$e#! s ) ! n $C!e: 'n este caso! el par/metro formal se sustitu"e literalmente por el par/metro actual asociado. 'sta sustitucin literal del par/metro formal por el par/metro actual no se produce 0asta que no se usa el par/metro formal. La #entaja es que si no usamos en ning<n momento el par/metro formal dentro del su%programa llamado 4cosa poco pro%a%le2! no se tendr/ que 0acer ning<n tipo de su%stitucin. Pero el gran incon#eniente es que si se usa el par/metro formal! 0a" que ir a %uscar en ese momento la e(presin del par/metro real asociado. 'l paso de par/metro por nom%re es lo que se parece m/s a la su%stitucin de par/metros en una funcin matem/tica. + 4(2K (C2 + 4aC12 K aC1D2 + 4(2K (C2 + 4aC12K a C1 2 JK 4aC12D2 6lgoritmo 'd 8ar 6) entero =nicio 63 P146C12 'scri%ir 462 +in Procedimiento P14entBsal () entero2 =nicio g (D2 +in P1 6l final solo #amos a usar 2 tipos de paso de par/metros! que son los que usan casi todos los lenguajes) Por #alor " por referencia. Por #alor) Solo lo usamos cuando un par/metro solo sir#e para informacin de entrada! no de#ol#emos nada con l. Por eso este paso puede ser una constante! #aria%le o e(presin. Para sim%oli1arlo en la declaracin de #aria%les no ponemos nada. Por referencia) Lo usamos cuando un par/metro lo usamos como entrada de informacin " como salida o solo como salida. Por esta ra1n a0ora s: que se #a a #ariar el par/metro formal " por lo tanto no podemos usar constantes ni e(presiones! solo #aria%les. Lo sim%oli1amos con la pala%ra entBsal. 8. F'NCIONES 2 PROCEDIMIENTOS COMO PAR@METROS: P>?=@6 4*A1*$

Pa que luego os quejis

'n la ma"or parte de los lenguajes se permite tam%in que una funcin o procedimiento pueda ser pasado como par/metro de otro su%programa. 'n este caso! es decir! cuando el par/metro formal es de tipo funcin o procedimiento! pasaremos como par/metro real funciones o procedimientos que tengan la misma definicin que el que 0emos puesto como par/metro formal! " en nuestro caso para indicar que se pasa como par/metro real una funcin o procedimiento! %asta con poner su nom%re. esde el su%programa al que se pasa como par/metro esa funcin o procedimiento podemos llamar en cualquier momento a esa funcin pasada como par/metro que en cada momento podr/ ser una distinta dependiendo del par/metro formal asociado. +uncion Fnom%rebfG 4par)tipoEfuncion FnbfG4()entero!")car/cter2)entero Prodedimiento Fnom%rebfG procedimiento 4()tipo!...2E...

6lgoritmo 'd 8ar #1!#2) entero =nicio 81 1 82 2 P4#1!f1!#22 P4#1!f2!#22 +in Procedimiento P4()enteroEfuncion +46)enteroEJ)car/cter2)enteroEentBsal ")entero2 =nicio g2 ] +4(!SaS2 +in P +uncion +14()enteroE")car/cter2)entero =nicio 'scri%ir " 5etorno 4(C12 +in +uncion +246)enteroEJ)car/cter2)entero =nicio 'scri%ir MOolaN J 5etorno 6 +in +2 'l paso de funciones " procedimientos como par/metros! nos #a a permitir que desde un su%programa podamos llamar a otros! pero teniendo en cuenta que el su%programa llamado no #a a ser uno determinado! sino que #a a depender en cada momento del su%programa pasado como par/metro real! de esta manera el su%programa P>?=@6 4,A1*$

Pa que luego os quejis

puede llamar a un conjunto de n su%programas que cumplan unas determinadas caracter:sticas! pero solo uno en cada momento. @o 0a" que confundir el paso de una funcin como par/metro con la llamada a una funcin cuando aparece como par/metro real en la llamada a un su%programa. Para diferenciarlo! cuando paso una funcin como par/metro solo pondr su nom%re! en cam%io cuando llamo a una funcin para pasar el #alor que de#uel#e como par/metro pondr el nom%re de la funcin " con sus argumentos para indicar que a0: se puede 0acer la llamada. 'sto se puede 0acer porque la llamada a una funcin puede aparecer en cualquier e(presin en la que apareciese cualquier #alor del tipo de datos que de#uel#e. Procedimiento P46)entero2 =nicio 'scri%ir 6 +in P +uncion +4()entero2)entero =nicio 5etorno 4(D22 +in +

6lgoritmo 'd 8ar = =nicio =2 P4+4=22 'sto no es pasar una funcin como par/metro +in ;. EFECTOS LATERALES: .n efecto lateral es cualquier modificacin que un su%programa 4sea funcin o procedimiento2! reali1a en elementos situados fuera de l pero sin 0acer esas modificaciones a tra#s del paso de par/metros. Los efectos laterales siempre 0a" que e#itarlos porque no somos conscientes o no controlamos que se 0an producido. Para reali1ar comunicacin entre su%programas solo se 0ar/ a tra#s del paso de par/metro para e#itar los efectos laterales. Los efectos laterales normalmente se producen por el uso de #aria%les glo%ales o #aria%les locales que a%arcan #arios procedimientos 4esto solo es posi%le si 0a" anidacin de su%programas2. Por lo tanto e#itaremos su uso e(cepto que sea imprescindi%le. 8ar 6)entero 6lgoritmo 'd 8ar J)entero =nicio J1 62 P4J2 'scri%ir 6 P>?=@6 4-A1*$

Pa que luego os quejis

+in Procedimiento P4()entero2 =nicio 6 (C2 +in P <. REC'RSI3IDAD: Se dice que un su%programa es recursi#o cuando se llama a s: mismo. La recursi#idad se #a a poder usar en su%programas que pueden definirse en trminos recursi#os! es decir! en termino de s: mismo! como procesos de alguna manera repetiti#os. La recursi#idad trataremos de e#itarla siempre que sea posi%le! es decir! siempre que lo mismo se pueda solucionar con un %ucle! "a que cada #e1 que un su%programa se llama a s: mismo 0a" que almacenar en la pila del sistema la direccin de retorno de ese su%programa! con lo cual si 0acemos muc0as llamadas recursi#amente iremos llenando la pila del sistema! " se des%ordara aca%ando con la memoria. ;odo programa recursi#o tiene que tener alguna condicin que ponga fin a la recursi#idad! es decir! que el programa deje de llamarse a s: mismo cuando se cumpla la condicin! sino se formar:a un %ucle infinito.

+uncion potencia 4%ase)enteroEe(p)entero2)real 8ar P)real =)entero =nicio P 1 esde iK1 0asta e(p P PD%ase +in desde 5etorno P +in +uncion potencia 4%ase)enteroEe(p)entero2)real =nicio Si e(pKH entonces retorno 1 Sino 5etorno 4%aseDpotencia4%ase!e(pB12 +in potencia

P>?=@6 $HA1*$

Pa que luego os quejis

TEMA 5: EJERCICIOS
1. =mplementar un su%programa que realice la serie de +i%onacci! que es) +i%onacci 412K +i%onacci 422K1 @ G 2 +i%onacci 4n2K +i%onacci 4nB12 C +i%onacci 4nB22 6lgoritmo seriebfi%onacci 8ar =! n) entero =nicio 'scri%ir M=ntroduce un n<meroN Leer n esde iK1 0asta n 'scri%ir MLa serie de fi%onacci de MiN es Mfi%onacci 4i2 +in desde +in +uncion fi%onacci 4num) entero2) entero =nicio Si 4numK12 o 4numK22 'ntonces retorno 1 Sino 5etorno 4fi%onacci 4numB12 C fi%onacci 4numB22 +in si +in fi%onacci 2. =mplementar un su%programa al que pas/ndole como par/metros 2 #alores enteros 7 " @! me calcule el com%inatorio P>?=@6 $1A1*$

Pa que luego os quejis

6lgoritmo com%inatorio 8ar 7!n) entero =nicio 5epetir 'scri%ir M=ntroduce el #alor de 7 " @N Leer m!n Oasta m Gn 'scri%ir M'l com%inatorio es Mfactorial 4m2 di# 4factorial4n2Dfactorial4mBn22 +in +uncion factorial 4num) entero2) real =nicio Si numKH 'ntonces retorno 1 Sino 5etorno 4num D factorial 4numB122 +in si +in factorial

3. =mplementar un su%programa que me 0alle cual es la primera potencia en %ase 2 ma"or que un n<mero que pasamos como par/metro! de#ol#iendo el #alor de dic0a potencia " el e(ponente al que est/ ele#ado. 6lgoritmo ele#ar 8ar @umero! resp1! resp2) entero =nicio 'scri%ir M=ntroduce un n<meroN Leer numero Comprue%a 4numero! resp1! resp22 'scri%ir M2WNresp1NKNresp2N GNnumero +in Procedimiento comprue%a 4num) enteroE entBsal n) enteroE entBsal pot) entero2 =nicio @ 1 7ientras pot F n Pot pot D2 @ nC1 +in mientras +in comprue%a 4. =mplementar un su%programa que calcule recursi#amente en cuanto se con#ierte un capital C al final de @ a9os " a un inters =. +uncion calculo 4c) enteroEi) enteroE n) entero2) real =nicio Si mKH P>?=@6 $2A1*$

Pa que luego os quejis

'ntonces retorno C Sino 5etorno 4cD41CiA1HH2Ccalculo 4c!i!nB12 +in si +in calculo

$. Calcular el primer trmino de la siguiente serie que sea ma"or o igual a un #alor 8 que se le pasa como par/metro " me de#uel#a el lugar que ocupa en la serie " el #alor. 6iKH 6nKnC46nB12Z +uncion factorial 4num) entero2) entero 8ar =! acum) entero =nicio 6cum 1 esde iK1 0asta num 6cum acum D i +in desde 5etorno acum +in factorial Procedimiento serie 4#) enteroE entBsal an) enteroE entBsal n) entero2 8ar 61) entero =nicio 61 H 6n H @1 7ientras an FK 8 @ nC1 6n n C factorial 4a12 61 an +in mientras +in serie P>?=@6 $3A1*$

Pa que luego os quejis

&. Calcular el #alor de la serie donde @ es un #alor que se pasa como par/metro al su%programa que 0ace el c/lculo.
n 1 4 1 + i D 2 i =H i =H n +uncion suma 4n) entero2) real 8ar =! j) entero g! "! acum1! acum2! suma1! suma2) real =nicio 6cum1 H 6cum 2 H esde iKH 0asta n g 1An 6cum1 acum1 C ( +in desde esde jKH 0asta nB1 ] 1 CiDacum1 C " +in desde 5etorno acum2 +in suma *. [Lu se escri%e en pantalla tras la siguiente ejecucin\ 6lgoritmo 'd 8ar 6!J!C) entero =nicio 61 J2 C 6C3 P1 46! JBC! C2 C C h +462 P2 46!C2 P1 4C! J! 62 'scri%ir 6! J! C +in Procedimiento P1 4entBsal () enteroE ") enteroE entBsal 1) entero2 =nicio g " C1 ] ( C1 _"D2 +in P1 Procedimiento P2 4entBsal () enteroE ") entero2 =nicio g ( C1 h" ]3 +in P2 +uncion + 4() entero2) entero =nicio n 1

P>?=@6 $4A1*$

Pa que luego os quejis

g(C3 5etorno 4( h 12 +in + La solucin es 6K,E JK2E CK3

ESTRUCTURAS DE DATOS: ARRAYS. TEMA /


1. 2. 3. 4. $. &. *. ,. =ntroduccin a las estructuras de datos. 6rra"s unidimensionales o #ectores. Tperaciones con arra"s unidimensionales o #ectores. 6rra"s %idimensionales o matrices. 6rra"s multidimensionales. 6lmacenamiento de arra"s en memoria. 6rra"s como par/metros de su%programas. 6rra"s de MpunterosN.

1. INTROD'CCIN A LAS ESTR'CT'RAS DE DATOS: Clasificacin de los tipos de datos seg<n su estructura) B Simples) B 'st/ndar 4entero! real! car/cter! %ooleano2 B @o est/ndar 4enumeracin! su%rango2 B 'structurados) B 'st/ticos 4arra"s! cadena! registros! fic0eros! conjuntos2 B in/micos 4punteros! listas enla1adas! /r%oles! grafos2

Pilas Colas

Los tipos simples son cuando cada dato representa un <nico elemento) B 'st/ndar) 'st/n definidos por defecto por el lenguaje. B @o est/ndar) ;ipos simples definidos por el usuario. Los tipos de datos estructurados! son cu/ndo un dato es una estructura que se constru"en a partir de otros complementos. P>?=@6 $$A1*$

Pa que luego os quejis

'st/ticos) Tcupan un tama9o de memoria fijo! que tengo que definir antes de declararlo. in/micos) La estructura no ocupa un tama9o fijo de memoria! sino que ocupa la memoria que ocupa en cada momento. Se #an a manejar a tra#s del tipo de dato puntero. Puntero) 's una #aria%le cu"o contenido es una direccin de memoria " esa direccin de memoria corresponde a la direccin de memoria de otra #aria%le! que es la #aria%le apuntada. Seg<n el tipo de datos de la #aria%le apuntada #ariar/ el tipo de puntero. 6 tra#s de una #aria%le de tipo puntero podemos esta%lecer la cone(in o enlace entre los elementos que #an a formar la estructura! " seg<n se reali1an estos enlaces #amos a tener diferentes tipos de estructuras 4listas enla1adas! /r%oles! grafos2. Las pilas " las colas son 2 estructuras de datos con un funcionamiento especial! que pueden implementarse con memoria est/tica o din/mica. 2. ARRA2S 'NIDIMENSIONALES: 3ECTORES. .n arra" unidimensional! o lineal! o #ector! es un conjunto finito " ordenado de elementos 0omogneos. 's finito porque tiene un n<mero determinado de elementos. Oomogneo porque todos los elementos almacenados #an a ser del mismo tipo. Trdenado porque #amos a poder acceder a cada elemento del arra" de manera independiente porque #a a 0a%er una forma de referenciar cada elemento. Para referenciar cada elemento de un arra" #amos a usar :ndices 4#alor que directa o indirectamente referencia la posicin del arra"2. Los :ndices tienen que ser de cualquier tipo de datos escalar 4entre los que se puede definir un orden! " que entre 2 elementos consecuti#os no puede 0a%er infinitos elementos2! aunque normalmente como :ndices se #an a utili1ar n<meros enteros. Para referenciar un elemento de un arra" usaremos el nom%re del arra" " entre corc0etes P Q el :ndice que determina la posicin de ese elemento en el arra". 'l rango o longitud de un #ector o arra" lineal es la diferencia entre el :ndice de #alor m/(imo " el :ndice de #alor m:nimo de ese arra" C 1. @ormalmente los :ndices comien1an a enumerarse! es decir! el #alor m:nimo del :ndice es H 1! dependiendo del lenguaje 4en Pascal con 1 " en C con H2. Sin em%argo nadie impide que comiencen en cualquier otro #alor. Los arra"s se almacenan siempre en posiciones consecuti#as de memoria " podemos acceder a cada elemento del arra" de manera independiente a tra#s de los :ndices. .n :ndice no tiene porque ser un #alor constante! sino que puede ser tam%in una #aria%le o una e(presin que al ser e#aluada de#uel#a ese :ndice. 6 la 0ora de definir un arra" siempre 0a%r/ que dar el nom%re del arra"! el rango de sus :ndices " el tipo de los datos que contiene! " para 0acer esa declaracin! se utili1a la siguiente nomenclatura. Fnombarra"G) arra" PL= .. LSQ de FtipoG sueldo) arra" P1 .. ,Q de real sueldo) arra" P1--H .. 1--*Q de real sueldo P1--2Q 1HHHHH =) entero = 1--2 Sueldo P=Q Sueldo P=C2Q

P>?=@6 $&A1*$

Pa que luego os quejis

&. OPERACIONES CON ARRA2S 'NIDIMENSIONALES O 3ECTORES: 1. 6signacin de un dato a una posicin concreta del arra") Fnombarra"GPindiceQ #alor 1 2 3 4 8entas P3Q ,HHHHH $ & * , 1H 11 12

2. Lectura " escritura de datos) leer Fnombarra"GPindiceQ escri%ir Fnombarra"GPindiceQ desde iK1 0asta 12 escri%ir M=ntroduce las #entas del mesNi leer #entas PiQ fin desde desde iK1 0asta 12 escri%ir M8entas del mesNiNKN#entas PiQ fin desde

3. 5ecorrido o acceso secuencial de un arra") B Consiste en pasar por todas las posiciones del arra" para procesar su informacin. esde iK1 0asta 12 8entas PiQ #entas PiQ C 1HHHHHH +in desde 4. 6ctuali1acin de un arra") 1c2 69adir datos) 's un caso especial de la operacin de inserccin de un elemento en un arra"! pero el elemento lo metemos despus de la <ltima posicin que contiene informacin #/lida en el arra". Para que esto se pueda 0acer es necesario que si actualmente el arra" tiene i posiciones de informacin #/lida! tenga un tama9o de al menos iC1 para que pueda a9adir otro elemento a continuacin de i. Fnombarra"GPiC1Q #alor 2c2 =nsercin de datos) Consiste en introducir un elemento en el interior de un arra" para lo cual ser/ necesario despla1ar todos los elementos situados a la derec0a del que #amos a insertar una posicin a la derec0a con el fin de conser#ar el orden relati#o entre ellos. Para que se pueda insertar un nue#o elemento en el arra" si "a e(isten @ elementos con informacin en el arra"! el arra" tendr/ que tener un tama9o de cmo m:nimo @C1 para poder insertar el elemento. C ' + d 7 T M?N P>?=@6 $*A1*$

Pa que luego os quejis

Siendo i la posicin en la que tengo que insertar el nue#o elemento " @ el n<mero de elementos #/lidos en el arra" en el momento de la insercin " siempre suponiendo de @C1! el algoritmo de insercin ser/) esde iK@ 0asta i 6P=C1Q 6P=Q +in desde 6PiQ #alor 3c2 Jorrar datos) Para eliminar un elemento de un arra" si ese elemento est/ posicionado al final del arra"! no 0a" ning<n pro%lema! simplemente si el tama9o del arra" era @! a0ora 0a" que considerar que el tama9o del arra" es @B1. Si el elemento a %orrar ocupa cualquier otra posicin entonces tendr que despla1ar todos los elementos situados a la derec0a del que quiero %orrar una posicin 0acia la i1quierda para que el arra" quede organi1ado. C ' + d 7 T Jorrar d. Suponiendo que el n<mero de elementos #alidos actualmente es @ " que quiero %orrar el elemento de la posicin i. esde iKi 0asta @B1 6P=Q 6P=C1Q +in desde Para indicar que el n<mero de elementos #alidos es @! podr:amos indicarlo como @ @B1. 0. ARRA2S 7IDIMENSIONALES O MATRICES: 'n un arra" unidimensional o #ector cada elemento se referencia por un :ndice! en un arra" %idimensional cada elemento se #a a referenciar por 2 :ndices! " a0ora la representacin lgica "a no #a a ser un #ector! sino una matri1. .n arra" %idimensional de 7D@ elementos es un conjunto de 7D@ elementos! todos del mismo tipo! cada uno de los cuales se referencia a tra#s de 2 su%:ndices. 'l primer su%:ndice podr/ #ariar entre 1 " 7 si 0emos empe1ado a numerar los :ndices por 1! " el segundo :ndice #ariar/ entre 1 " @! si 0emos empe1ado a numerar los :ndices por el 1. ] m/s en general podemos definir un arra" de 2 dimensiones de la siguiente manera. Fnombarra"G) arra" PL=1..LS2!L=2..LS2Q de FtipoG F#arbarra"GP= ! dQ L=1 FK = FK LS1 L=2 FK d FK LS2 'l tama9o del arra" ser/ 4LS1BL=1 C12D4LS2BL=2 C12 8entas de cada mes de 1--H a 1--$) 8entas) arra" P1--H..1--$!1..12Q de real &D12K*2 La representacin lgica de un arra" %idimensional es una matri1 de dimensiones 7D@ donde 7 es el n<mero de filas de la matri1 " @ es el n<mero de columnas! es decir! la 1X dimensin indicar:a las filas " la 2X dimensin indicar:a las columnas! es decir! al intentar acceder a un elemento =!d estar:amos accediendo al elemento que ocupa la fila = " la columna d.

P>?=@6 $,A1*$

Pa que luego os quejis

'n memoria! sin em%argo todos los elementos del arra" se almacenan en posiciones contiguas pero nosotros lo #emos como una matri1.
1 1--H 1--1 1--2 1--3 1--4 1--$ 2 3 4 $ & * , 1H 11 12

8entas P1--3!3Q 'n memoria estar:a almacenado todo seguido)

Mane, *e $a#!"+es: B Para poner a H todos los elementos de la matri1. 7) arra" P1..@!1..7Q de entero 8ar i!j entero esde iK1 0asta n esde jK1 0asta 7 7 Pi!jQ H +in desde +in desde B Para poner a H solo los elementos de la fila =) esde iK1 0asta @ 7 Pi!jQ H +in desde 6. ARRA2S M'LTIDIMENSIONALES: .n arra" multidimensional es un arra" de 3 m/s dimensiones. Si tenemos un arra" de @ dimensiones! cada dimensin de tama9o d1!d2!..!d@! el n<mero de elementos del arra" ser/ d1Dd2D..Dd@! " para acceder a un elemento concreto del arra" utili1aremos @ :ndices! cada uno de los cuales referenciar/ a una posicin dentro de una dimensin! siempre seg<n el orden de declaracin. 'n memoria! el arra" se sigue almacenando en posiciones consecuti#as. La declaracin de un arra" multidimensional ser:a) @ombarra") arra" PL=1..LS1!L=2..LS2!L=3..LS3!L=@..LS@Q de tipo @ombarra" P=1!=2!=3!=@Q L=1 FK =1 FK LS2 P>?=@6 $-A1*$

Pa que luego os quejis

L=@ FK =2 FK LS@ 8. ALMACENAMIENTO DE ARRA2S EN MEMORIA: .n arra" en memoria siempre se almacena en posiciones contiguas a partir de la direccin %ase de comien1o del arra" que me la dan cuando "o declaro una #aria%le del tipo arra". 'l tama9o que ocupa el arra" en memoria es el producto del n<mero de sus elementos por el tama9o de cada uno de ellos. 6rra" P1..1HHQ de car/cter 1 %"te D 1HH elementos K 1HH %"tes 'n el caso de un arra" %idimensional! tam%in se seguir/ almacenando en posiciones contiguas de memoria! " su tama9o ser/ el producto de sus elementos pro el tama9o. 60ora! la forma en la que est/n almacenados esos elementos #a a depender de que el arra" se almacene fila a fila o columna a columna! que tam%in se conoce como almacenamiento por orden de fila ma"or o por orden de columna ma"or. C1 C2 ..... Cm C1 C2 ... Cm +1 +2 +3

6) arra" P1..@!1..7Q de FtipoG +ila 1!1 1!2 1!3 ..... 1!7 2!1

2!2

2!3

....

2!7 @!1 @!2 ...

@!m

Como 0allar la direccin %ase en la que comien1a a almacenarse un determinado elemento de un arra") B .nidimensionales) =546P=Q2K irbJase C 4=B12 D ;ama9o @<mero elemento K 3 ;ama9o K $ irbJase K 1HH 6P3Q comien1a en la direccin 11H B Jidimensionales) - Trden de fila ma"or ir46Pi!jQ2K irbJase C P44=B12D72C4dB12QD;ama9o - Trden de columna ma"or ir46Pi!jQ2K irbJase C P44dB12D@2C4=B12QD;ama9o ;. ARRA2S COMO PAR@METROS DE S'7PROGRAMAS: .n arra" es tam%in un tipo de datos estructurado! " se puede pasar como par/metro a un su%programa! pero el pro%lema es que no sa%emos como indicar si su paso es por #alor o por referencia. 'n principio! el paso de un arra" siempre tiene sentido que sea por referencia 4que se modifique " tenga repercusin en el e(terior2! " si es por #alor solo ser#ir:a para leer informacin. La ma"or parte de los lenguajes de programacin! pasan los arra"s por referencia 4si se modifica el arra" se nota en el e(terior2. @osotros tam%in lo 0aremos as:. P>?=@6 &HA1*$

Pa que luego os quejis

Si paso el arra" " no quiero modificarlo! con no modificarlo %asta. 's distinto pasar un arra" como par/metro a pasar una posicin del arra"! si paso el arra" entero como par/metro! el par/metro formal asociado ser/ un arra" con la misma estructura que el par/metro real! pero si lo que quiero pasar es un elemento de una posicin concreta del arra"! el par/metro formal asociado no ser/ del tipo arra"! sino que ser/ del tipo de datos que contenga el arra"! porque cada elemento de un arra" es un elemento independiente que se puede usar por separado. 'n el caso de que pasemos un arra" entero como par/metro! el par/metro formal asociado! tendr/ que ser un arra" de la misma estructura que tiene el mismo tipo de datos " el mismo tama9o. 'n C! el par/metro formal asociado tiene que ser del mismo tipo de datos! pero no 0ace falta que sea del mismo tama9o. Para pasar un arra" como par/metro real! utili1are el nom%re del arra"! en cam%io si pasamos una posicin concreta! usar el nom%re " el :ndice. 'n C! el nom%re de un arra" indica su direccin de comien1o en memoria! " por eso siempre se pasa por referencia. Siempre #amos a pasar los arra"s por referencia! sin la pala%ra cla#e entBsal. Como en las funciones no se pasan los par/metros por referencia! lo mejor es no pasar los arra"s como par/metros de las funciones. Procedimiento Fnom%rebpG 4FnombparG)arra" PL=1..LS1Q de FtipoGE ...2 8ar 6) arra" PL=1..LS1Q de FtipoG @ombp 4arra"2 Slo se pasa el nom%re. <. ARRA2S DE LP'NTEROSM: 'n realidad lo que #amos a e(plicar con este concepto es la posi%ilidad de que desde un arra" se apunte a la posicin de otro arra". Lue unos arra"s sir#an para referenciar a otros. Qu es un )un#e! %: .n puntero es una #aria%le que contiene una direccin en la que est/ almacenado un elemento que llamamos apuntado. esde este punto de #ista! un :ndice indirectamente tam%in es un puntero porque indirectamente indica una posicin del arra"! pero no lo es directamente porque no almacena una direccin. esde este punto de #ista! si un arra" contiene #alores de :ndices! es decir! que cada posicin de ese arra" lo que 0ace es apuntar a la posicin de otro arra"! entonces decimos que es un arra" de punteros! aunque en realidad la definicin mas correcta es que es un arra" de :ndices a otro arra". Cu5n* es I#"l usa! un a!!a. *e Bn*"+e%: =maginemos que tenemos una compa9:a que quiere tener almacenados los datos de sus empleados organi1ados por 1onas. =maginemos que 0a" 4 1onas. _1 g 6 ] _2 f _3 O d _4 C i L

Podemos almacenar esta informacin de distintas formas)

P>?=@6 &1A1*$

Pa que luego os quejis

.n arra" %idimensional 4D@! en donde 4 son las 1onas " @ es el n<mero m/(imo de empleados que 0a" por 1ona. 'l incon#eniente es la perdida de espacio. .sar un arra" unidimensional o #ector donde estn todos los datos seguidos. 'l incon#eniente es que no tengo los empleados ordenados por 1onas. .sar un arra" unidimensional! " entre cada 2 1onas meter en la posicin que #a entre ellas una marca especial para indicar que paso de 1ona. 'l incon#eniente es que para pasar a una 1ona tengo que pasar por todas las anteriores. .sar un arra" de :ndices) .n arra" con la informacin de los empleados. Ttro arra" de :ndices que contendr/ tantas posiciones como 1onas 0a"a. 'n cada posicin de cada 1ona almacenar el :ndice en donde comien1a el primer empleado de esa 1ona en el arra" de empleados.

_onas 1 4 $ *

'mpleados g 6 ] f O d C i L

D Listar todos los empleados de la 1ona 3) esde iK1onaP3Q 0asta 1onaP4QB1 'scri%ir 'mpleados PiQ +in desde D @<mero de empleados) _ona P4Q h _ona P3Q

P>?=@6 &2A1*$

Pa que luego os quejis

EJERCICIOS: TEMA /
1. Oa" unos multicines con $ salas! " cada sala con 1HH personas distri%uidas en 2H asientos " $ filas. Si "o pido entrada para una sala! implementar un programa que me diga si 0a" sitio en la sala. 6lgoritmo cines Const SalasK$ 6sientosK2H +ilasK$ 8ar @bsalas!j!I) entero 7arca) %oolean 6) arra" P1..salas!1..asientos!1..filasQ de entero =nicio Pedirbdatos 4nbsalas2 7ientras nbsalas FG H 7arca falso dH i1 5epetir Si j G asientos 'ntonces j 1 i IC1 P>?=@6 &3A1*$

Pa que luego os quejis

+in si Si 4jKasientos2 " 4IGKfilas2 'ntonces escri%ir MSala llenaN 7arca #erdadero Sino si a Pnbsalas!j!IQKH 'ntonces aPnbsalas!j!IQ 1 'scri%ir M6sientoNjNfilaNI 7arca #erdadero +in si +in si Oasta 4aPnbsalas!j!IQK12 " 4marcaK#erdadero2 Pedirbdatos 4nbsalas2 +in mientras +in Procedimiento pedirbdatos 4entBsal s) entero2 =nicio 5epetir 'scri%ir M['n qu sala quieres entrar\N Leer s Oasta 4sGKH2 " 4sFKsalas2 +in pedirbdatos 2. [Lu escri%e este programa\ 6lgoritmo Prin 8ar atos) arra" P1..1HQ de entero i) entero inicio desde iK1 0asta 1H datos PiQ i fin desde P1 4datos!datosP3Q2 esde iK1 0asta 1H 'scri%ir datos PiQ +in desde +in Procedimiento P1 4a) arra" P1..1HQ de enteroE entBsal () entero2 =nicio gH esde iK1 0asta 1H g ( C aPiQ +in desde +in P1 D Solucin) 1! 2! $$! 4! $! &! *! ,! -! 1H.

P>?=@6 &4A1*$

Pa que luego os quejis

3. ada una matri1 6 de 7D@ elementos! actuali1arla tal que la matri1 resultante tenga di#ididos a los elementos de la diagonal principal por la suma de los elementos que no forman parte de ella. 6lgoritmo di#bmatri1 8ar 6) arra" P1..7!1..@Q de real Suma) real =nicio Pedirbdatos 4a2 Sumar 4a!suma2 'scri%ir 4a2 +in Procedimiento pedirbdatos 4matri1) arra" P1..7!1..@Q de real2 8ar =!j) entero =nicio esde iK1 0asta 7 esde jK1 0asta @ 'scri%ir M=ntroduce el elementoNiN!Nj Leer aPi!jQ +in desde +in desde +in pedirbdatos Procedimiento sumar 4matri1) arra" P1..7!1..@Q de realE entBsal s) real2 8ar =!j) entero =nicio SH esde iK1 0asta 7 esde jK1 0asta @ Si iF G j 'ntonces s s C matri1 Pi!jQ +in si +in desde +in desde +in sumar Procedimiento escri%ir 4matri1) arra" P1..7!1..@Q de realE s) real2 8ar =!j) entero =nicio esde iK1 0asta 7 esde jK1 0asta @ Si iKj 'ntonces escri%ir aPi!jQAs Sino escri%ir aPi!jQ +in si +in desde +in desde P>?=@6 &$A1*$

Pa que luego os quejis

+in escri%ir 4. ;engo guardado en una estructura los alumnos de nuestra escuela! sa%iendo que 0a" 3 cursos! 7 alumnos por curso " @ asignaturas por alumno! determinar mediante su%programas) 1. Cual es la nota media de un determinado curso. 2. Cuantos apro%ados " suspensos 0a" en una determinada asignatura. 3. Cual es el alumno de la escuela con mejor nota media. 6lgoritmo escuela Const CursosK3 6lumnosK7 6signaturasK@ ;ipo atoKarra" P1..cursos!1..alumnos!1..asignaturasQ de real 8ar @ota) dato =nicio Pedirbdatos 4nota2 7ediabcurso 4nota2 6pbsusp 4nota2 7ediabalum 4curso2 +in Procedimiento pedirbdatos 4n) datos2 8ar =!j!I) entero =nicio esde iK1 0asta cursos esde jK1 0asta alumnos esde IK1 0asta asignaturas 5epetir 'scri%ir M@ota del alumnoNjNasignaturaNINcursoNi Leer nPi!j!IQ Oasta 4nPi!j!IGKH2 " 4nPi!j!IQ FK1H2 +in desde +in desde +in desde +in pedirbdatos Procedimiento mediabcurso 4n) dato2 8ar d!I!resp) entero 7edia!suma) entero =nicio Suma H.H 5epetir 'scri%ir M[ e qu curso quieres 0acer la media\N Leer resp Oasta 4respFK12 " 4respFKcursos2

P>?=@6 &&A1*$

Pa que luego os quejis

esde jK1 0asta alumnos esde IK1 0asta asignaturas Suma)Ksuma C nPresp!j!IQ +in desde +in desde 7edia suma AalumnosDasignatura 'scri%ir MLa nota media del cursoNrespNesNmedia +in mediabcurso

Procedimiento apbsusp 4n)dato2 8ar Susp!ap!i!j) entero =nicio Susp H 6p H 5epetir 'scri%ir M[Lu asignatura quieres #er\N Leer asig Oasta 4asigGK12 " 4asigFKasignaturas2 esde iK1 0asta cursos esde jK1 0asta alumnos Si nPi!j!asigQ GK$ 'ntonces ap ap C 1 Sino susp susp C 1 +in si +in desde +in desde 'scri%ir M'n la asignaturaNasigN0a"NapNapro%adosN 'scri%ir M'n la asignaturaNasigN0a"NsuspNsuspensosN +in apbsusp Procedimiento mediabalum 4n) dato2 8ar =!j!alum!curs) entero Suma!media!ma"or) real P>?=@6 &*A1*$

Pa que luego os quejis

=nicio 7a"or H.H esde iK1 0asta cursos esde jK1 0asta alumnos Suma H.H esde IK1 0asta asignaturas Suma suma C nPi!j!IQ +in desde 7edia suma A asignaturas Si media G ma"or 'ntonces ma"or media Curs i 6lum j +in si +in desde +in desde 'scri%ir M'l alumno con ma"or media es elNalumNdel cursoNcurs 'scri%ir M" su nota es deNma"or +in mediabalum

$. 7ultiplicar 2 matrices de dimensiones 7D@ " PDL. 6lgoritmo multiplicarbmatrices ;ipo 7atri11Karra" P1..7!1..@Q de entero 7atri12Karra" P1..P!11..LQ de entero 5esultadoKarra" P1..7!1..LQ de entero 8ar 7at1) matri11 7at2) matri12 5) resultado =nicio Pedirbdatos 4mat1!mat22 7ultiplicar 4mat1!mat2!r2 8isuali1ar 4r2 +in Procedimiento pedirbdatos 4m1) matri11E m2) matri122 8ar =!j) entero =nicio esde iK1 0asta 7 esde jK1 0asta @ 'scri%ir M=ntroduce el elementoNiN!NjNde la matri1 1N Leer m1Pi!jQ P>?=@6 &,A1*$

Pa que luego os quejis

+in desde +in desde esde iK1 0asta P esde jK1 0asta L 'scri%ir M=ntroduce el elementoNiN!Nde la matri1 2N Leer m2Pi!jQ +in desde +in desde +in pedirbdatos Procedimiento multiplicar 4m1) matri11E m2) matri12E entBsal resul) resultado2 8ar +ila!i!j!acum) entero =nicio esde filaK1 0asta @ esde iK1 0asta P 5esulPfila!iQ H esde jK1 0asta L 5esulPfila!iQ resulPfila!iQCm1Pfila!jQDm2Pj!iQ +in desde +in desde +in desde +in multiplicar Procedimiento #isuali1ar 4resul) resultado2 8ar =!j) entero =nicio esde iK1 0asta 7 esde jK1 0asta L 'scri%ir resulPi!jQ +in desde +in desde +in #isuali1ar &. 5esol#er la siguiente serie) X =
m n

i D a[ i ! j ] D j
i =1 j =1

b[ n! j ]
j =2

n 1

6lgoritmo serie ;ipo 7atri11K arra" P1..7!1..@Q de entero 7atri12K arra" P1..@!1..@Q de entero 8ar Suma1!suma2!suma3) entero g) real

P>?=@6 &-A1*$

Pa que luego os quejis

=nicio Sumas 4suma1!suma2!suma32 5esultado 4suma1!suma2!suma3!(2 'scri%ir M'l resultado esN(2 +in Procedimiento sumas 4s1) enteroEs2) enteroEs3) entero2 8ar =!j) entero =nicio esde iK1 0asta 7 S2 H esde jK1 0asta @ S2 s2 C aPi!jQDj +in desde S1 s1 C =Ds2 +in desde S3 H esde jK2 0asta @B1 S3 s3 C %Pn!jQ +in desde +in sumas Procedimiento resultado 4s1) enteroE s2) enteroE s3) enteroE entBsal ") real2 =nicio ] s1Ds2As3 +in resultado *. .na empresa consta de $ departamentos con 2H empleados cada departamento! si tengo todas las #entas en una estructura! determinar) - 8entas de un determinado departamento en un determinado mes. - 8entas de un determinado empleado en un determinado departamento. - Cual es el departamento con m/s #entas. 6lgoritmo empresa Const K$ 'K2H 7K12 ;ipo 7atri1K arra" P1..d!1..e!1..mQ de real 8ar 8entas) matri1 Cantidad) real epartamentos) entero =nicio Pedirbdatos 4#entas2 epbmes 4#entas2

P>?=@6 *HA1*$

Pa que luego os quejis

epbempleado 4#entas2 7ejorbdep 4#entas2 +in Procedimiento pedirbdatos 4a) matri12 8ar =!j!I) entero =nicio esde iK1 0asta esde jK1 0asta ' esde IK1 0asta 7 'scri%ir M8entas del departamentoNiNempleadoNjNmesNIN Leer aPi!j!IQ +in desde +in desde +in desde +in pedirbdatos

Procedimiento depbmes 4a) matri12 8ar ep!j!mes) entero 8) real =nicio 8 H.H 5epetir 'scri%ir M epartamentoN Leer dep Oasta 4dep GK12 " 4dep FKd2 5epetir 'scri%ir M7esN Leer mes Oasta 4mes GK12 " 4mes FK122 esde jK1 0asta ' 8 8 C aPdep!j!mesQ +in desde 'scri%ir MLas #entas del departamentoNdepNen el mesNmesNsonN# +in depbmes Procedimiento depbempleado 4a) matri12 8ar ep!empleado!I) entero 8) real =nicio P>?=@6 *1A1*$

Pa que luego os quejis

8 H.H 5epetir 'scri%ir M'mpleadoN Leer empleado Oasta 4empleado GK12 " 4empleado FK'2 5epetir 'scri%ir M epartamentoN Leer dep Oasta 4dep GK12 " 4dep FKd2 esde IK1 0asta 7 8 8 C aPdep!empleado!IQ +in desde 'scri%ir MLas #entas del empleadoNempleadoNdel departamentoNdepNsonN# +in depbempleado

Procedimiento mejorbdep 4a) matri12 8ar =!j!I!dep) entero 7a"or!#) real =nicio 7a"or H.H esde iK1 0asta 8H esde jK1 0asta ' esde IK1 0asta 7 8 8 C aPi!j!IQ +in desde +in desde Si # G ma"or 'ntonces ma"or # ep i +in si +in desde 'scri%ir M'l mejor departamento es elNdepNconNma"or +in mejorbdep ,. ado un arra" 6 de 7D@ elementos donde los elementos son n<meros enteros! 0allar la direccin de comien1o del elemento 4c del arra" sa%iendo que se almacena a partir de la direccin 12HH " que en nuestra m/quina los enteros ocupan 2 %"tes.

P>?=@6 *2A1*$

Pa que luego os quejis

ir 641!42K 12HH C 3D2 K12H& -. ado un arra" de 4 D $ elementos que contiene caracteres! sa%iendo que se almacena a partir de la posicin $HH! en que posicin comien1a a almacenarse el elemento 6P3!$Q. ir 6P3!$Q K $HH C 42D$C42D1 K $14 'n orden de fila ma"or ir 6P3!$Q K $HH C 44D4C22D1 K $1, 'n orden de columna ma"or

LAS CADENAS DE CARACTERES TEMA 0


1. duego de caracteres. 2. Cadena de caracteres. 3. atos de tipo car/cter. 4. Tperaciones con cadenas. 1. ('EGO DE CARACTERES: 'n principio se programa%a todo con H " 1! pero como esto costa%a muc0o! apareci la necesidad de crear un lenguaje semejante al 0umano para entendernos m/s f/cilmente con la computadora! " para ello aparecen los juegos de caracteres. 'l juego de caracteres es una especie de alfa%eto que usa la m/quina. Oa" 2 juegos de caracteres principales) - 6SC==) 'l que m/s se usa. - 'JC =C) Creado por =J7. Oa" 2 tipos de 6SC==! el %/sico " el e(tendido. 'n el 6SC== %/sico! cada car/cter se codifica con * %its! por lo que e(isten 2W*K12, caracteres. 'n el 6SC== e(tendido! cada car/cter ocupa , %its 41 %"te2 por lo que e(istir/n 2W,K 2$& caracteres! numerados del H al 2$$. 'n el 'JC =C! cada car/cter ocupa tam%in , %its. 'n cualquiera de los 2 juegos! e(isten 4 tipos de caracteres) - 6lfa%ticos) Letras ma"<sculas " min<sculas.

P>?=@6 *3A1*$

Pa que luego os quejis

@umricos) @<meros. 'speciales) ;odos los que no son letras " n<meros! que #ienen en el teclado. Control) @o son imprimi%les " tienen asignados caracteres especiales. Sir#en para de terminar el fin de l:nea! fin de te(to. 8an del 12, al 2$$. .n juego de caracteres es una ta%la que a cada n<mero tiene asociado un n<mero. 2. CADENA DE CARACTERES: 's un conjunto de H m/s caracteres. 'ntre estos caracteres puede estar incluido el %lanco. 'n pseudocdigo! el %lanco es el %. Las cadenas de caracteres se delimitan con do%les comillas M M! pero en algunos lenguajes se delimitan con R R. Las cadenas de caracteres se almacenan en posiciones contiguas de memoria. La longitud de una cadena es el n<mero de caracteres de la misma. Si 0u%iese alg<n car/cter que se utili1ara como especial para se9alar el fin de cadena! no se considerar:a en la longitud. Si una cadena tiene longitud H! la llamamos cadena nula por lo que no tiene ning<n car/cter! pero esto no quiere decir que no tenga ning<n car/cter #/lido! por que puede 0a%er alg<n car/cter especial no imprimi%le que forme parte de la cadena. .na su%cadena es una cadena e(tra:da de otra.

&. DATOS DE TIPO CAR@CTER: 1. Constantes) .na constante de tipo cadena es un conjunto de H o m/s caracteres encerrados entre M M. Si dentro de la cadena quiero poner como parte de la cadena las M! las pongo 2 #eces. 'sto depende del lenguaje. MOolaNN6diosN OolaN6dios 'n algunos lenguajes 0a" un car/cter de escape. 'n C! el car/cter de escape es la V. .na constante de tipo car/cter es un solo car/cter encerrado entre comillas simples. 2. 8aria%les) Oa" que distinguir entre una #aria%le de tipo car/cter " una #aria%le de tipo cadena! el contenido de una #aria%le de tipo cadena es un conjunto de H m/s caracteres encerrados entre M M! mientras que una #aria%le de tipo car/cter es un solo car/cter encerrado entre R R. F !$as *e al$a+ena$"en# *e +a*enas en $e$ !"a: 1. 6lmacenamiento est/tico) La longitud de la cadena se tiene que definir antes de ser usada " siempre #a a tener esa longitud! almacen/ndose en posiciones contiguas de memoria. Si la cadena no ocupa todo el espacio! el resto se rellena con %lancos! " esos %lancos se consideran parte de la cadena. 'sto es mu" deficiente " no se usa casi en ning<n lenguaje. 2. 6lmacenamiento semiest/tico)

P>?=@6 *4A1*$

Pa que luego os quejis

6ntes de usar la cadena! 0a" que declarar la longitud m/(ima que puede tener " ese es el espacio que se reser#a en memoria para almacenar la cadena! siempre en posiciones contiguas. La longitud real de la cadena durante la ejecucin puede #ariar aunque siempre tiene que ser menor que el m/(imo de la cadena. Puesto que la cadena no tiene porque ocupar la longitud m/(ima! para determinar que parte ocupa realmente esa cadena! se pueden utili1ar diferentes mtodos. Pascal lo que 0ace es reser#ar los 2 primeros %"tes de la 1ona de memoria en que guardamos la cadena para indicar el primero la longitud m/(ima que puede tener la cadena " el segundo la longitud actual. 1H 4 O T L 6 1 2 3 4 $ & * , - 1H Ttros lenguajes como C! utili1an un car/cter especial que indica el fin de cadena tal que los caracteres que utili1an parte de la cadena son todos los almacenados 0asta encontrar ese car/cter especial. O T L 6 VT H 1 2 3 4 $ & * , La diferencia entre almacenar un solo car/cter en un tipo car/cter o en un tipo cadena! ser:a la siguiente) C RaS C MaN

3. 6lmacenamiento din/mico) @o 0a" que definir la longitud de la cadena antes de usarla! ni siquiera la m/(ima. Para esto! se utili1a la memoria din/mica! " para esta%lecer el n<mero de elementos de la cadena usaremos listas enla1adas en las que cada nodo de la lista contara un car/cter de la cadena " se enla1ar:a mediante punteros. La informacin no tiene que estar almacenada en posiciones contiguas de memoria. O T L 6

0. OPERACIONES CON CADENAS: 6l igual que con cualquier tipo de datos! podemos 0acer operaciones de entrada " salida 4leer " escri%ir2. 8ar cad) cadena Leer 4cad2 'scri%ir 4cad2 6parte de estas instrucciones! la ma"or parte de los lenguajes permiten reali1ar operaciones especiales con las #aria%les de tipo cadena. La ma"or parte de los lenguajes tienen operaciones de tratamiento de cadenas! " esas operaciones #ienen en li%rer:as e(ternas. Las )e!a+" nes $5s usa*as s n:

P>?=@6 *$A1*$

Pa que luego os quejis

L ng"#u* *e una +a*ena: 's una funcin a la que se le pasa una cadena como par/metro " como resultado de#uel#e su longitud. +uncion longitud 4c)cadena2) entero C $)a!a+"-n *e +a*enas: Las cadenas se pueden comparar entre si usando los s:m%olos de comparacin. 'sto se puede reali1ar porque lo que #o" a comparar son los #alores 6SC== asociados a cada car/cter. 'n el caso de que se comparen 2 cadenas de diferente longitud tal que la cadena de menor longitud tiene @ caracteres " estos @ caracteres coinciden con los @ primeros caracteres de la cadena m/s larga! se considera ma"or la cadena m/s larga. P'P' G P6P6 P'P'S G P'P' 'n la ma"or parte de los lenguajes! 0a" una funcin que 0ace la comparacin. 'n C es la funcin strcmp 4C1!C22. +uncion comparacion 4C1)cadenaEC2)cadena2) entero 'sta funcin de#uel#e) - H si C1KC2 - .n positi#o si C1 G C2 - .n negati#o si C1 F C2

C n+a#ena+"-n: Lo que permite es unir #arias cadenas en una sola! manteniendo el orden de los caracteres que se unen. 'n pseudocdigo se usa el s:m%olo ^) C1^C2 C1KNOolaN C2KN6diosN C3KC1^C2KNOola6diosN Procedimiento concatenacion 4entBsal C1)cadenaEC2)cadena2 - Se de#uel#e en C1 la concatenacin C1^C2. SuC+a*enas: '(trae parte de una cadena. Se pueden usar 3 procedimientos) Procedimiento su%cadena 4c)cadenaEinicio)enteroElongitud)enteroEentBsal s)cadena2 - Si inicio es negati#o! o es ma"or que longitud! se de#uel#e la cadena nula. - Si inicioClongitud es ma"or que el tama9o de la cadena! de#uel#o desde inicio 0asta de fin de la cadena. Procedimiento su%cadena 4c)cadenaEinicio)enteroEfin)enteroEentBsal s)cadena2 - Si fin es menor que inicio! de#uel#e la cadena nula. - Si fin es ma"or que la longitud de la cadena! se de#uel#e desde inicio 0asta el fin de la cadena. Procedimiento su%cadena 4c)cadenaEinicio)enteroEentBsal s)cadena2

P>?=@6 *&A1*$

Pa que luego os quejis

S #a desde el inicio 0asta el final de la cadena.

Inse!+"-n: Consiste en meter una cadena dentro de otra a partir de una determinada posicin. Procedimiento insertar 4entBsal C1)cadenaEC2)cadenaEinicio)entero2 C1KNPepeN C2KN@uriaN =nsertar 4C1!C2!32K Pe@uriape - Si inicio es ma"or que la longitud de C1 o inicio es menor que H! no se inserta nada. 7 !!a* : Consiste en %orrar de una cadena una su%cadena que forma parte de ella. Oa" que dar la posicin de inicio " final de la su%cadena que quiero %orrar. Procedimiento %orrar 4entBsal C1)cadenaEinicio)enteroEfin)entero2 - Si fin es menor que inicio! o inicio es ma"or que la longitud de la cadena! no se %orra nada. Procedimiento %orrar 4entBsal C1)cadenaEinicio)enteroEfin)entero2 C1KNCasa a1ulN Jorrar 4C1!3!$2 C1KNCaa1ulN

In#e!+a$C" : Consiste en su%stituir la aparicin de una su%cadena dentro de una cadena! por otra su%cadena. Para eso la primera su%cadena tiene que aparecer en la otra. Procedimiento intercam%io 4entBsal C1)cadenaES1)cadenaES2)cadena2 C1KNCasa a1ulN S1KNasaN S2KNasitaN C1KNCasita a1ulN Si S1 no est/ en C1! no se cam%ia nada. C n/e!s"-n *e +a*enas a nI$e! s: 's una funcin que se le pasa una cadena caracteres numricos " de#uel#e el n<mero asociado. +uncion #alor 4c)cadena2) entero =KN234N 8ar i) entero =K #alor 4C12 de#uel#e 234. C n/e!s"-n *e nI$e! s a +a*enas: 's un procedimiento al que se le pasa un n<mero " lo con#ierte a una cadena. Procedimiento con#bcad 4n)enteroEentBsal c)cadena2 =K234 P>?=@6 **A1*$

Pa que luego os quejis

Con#bcad 4i!C12 de#uel#e M234N Fun+"-n =ue *e/uel/e el +a!5+#e! ASCII *e un nI$e! : +uncion con#bcar 4n)entero2) car/cter Fun+"-n =ue *e/uel/e el nI$e! as +"a* *e un +a!5+#e! ASCII: +uncion 6SC== 4c)car/cter2) entero Las cadenas #an a estar almacenadas en arra"s de caracteres donde el car/cter de fin de cadena es el j.

EJERCICIOS: TEMA 0
Los ejercicios de este tema #an a consistir en implementar funciones " procedimientos relacionados con el manejo de las su%cadenas.

+uncion numero 4c)car/cter2)entero =nicio Seg<n sea C RHS) retorno H R1S) retorno 1 R2S) retorno 2 R3S) retorno 3 R4S) retorno 4 R$S) retorno $ R&S) retorno & R*S) retorno * R,S) retorno , R-S) retorno fin seg<n sea fin numero +uncion caract 4n) entero2)car/cter P>?=@6 *,A1*$

Pa que luego os quejis

=nicio Seg<n sea C H) retorno RHS 1) retorno R1S 2) retorno R2S 3) retorno R3S 4) retorno R4S $) retorno R$S &) retorno R&S *) retorno R*S ,) retorno R,S -) retorno R-S fin seg<n sea fin caract +uncion longitud 4c)cadena2) entero #ar l) entero =nicio LH 7ientras cPLC1Q F G RjS L LC1 +in mientras 5etorno L +in longitud

+uncion 8alor 4c)cadena2) entero 8ar Cif!num!i) entero =nicio Cif longitud 4c2 Si cif G H 'ntonces num H esde iK1 0asta Cif @um numCnumero 4cPiQD1HW4cifBi2 +in desde 5etorno 4num2 Sino retorno 4B12 +in si +in #alor Procedimiento con#bcad 4n) enteroE entBsal c) cadena2 8ar Cif!au() entero =nicio Cif 1 6u( @ 7ientras 4au( G1H2 P>?=@6 *-A1*$

Pa que luego os quejis

6u( au( di# 1H Cif cif C 1 +in mientras esde iKcif 0asta 1 CPiQ caract4n mod 1H2 @ n di# 1H +in desde CPcifC1Q RjS +in con#bcad Procedimiento %orrar 4entBsal c)cadenaEinicio)enteroEfin)entero2 8ar =!f) entero =nicio Si 4inicio GH2 " 4inicio FK fin2 " 4inicio FK longitud4c22 'ntonces i inicio + fin C1 7ientras 4i FKfin2 " 4cPfQ F G RjS2 CPiQ cPfQ = iC1 + fC1 +in mientras CPiQ RjS +in si +in %orrado

Procedimiento su%cadena 4c1)cadenaEinicio)enteroElongitud)enteroEentBsal c2) cadena2 8ar =!I) entero =nicio Si 4inicio FKH2 o 4inicio G longitud 4c122 'ntonces c2P1Q RjS Sino i inicio i1 7ientras 4i FKinicio C longitud2 " 4c1PiQ F G RjS2 C2PIQ c1PiQ i IC1 = iC1 +in mientras C2PIQ RjS +in si +in su%cadena +uncion comparacion 4c1)cadenaEc2)cadena2)entero 8ar =) entero =nicio P>?=@6 ,HA1*$

Pa que luego os quejis

=1 7ientras 4c1PiQKc2PiQ2 " 4c1PiQF G RjS2 " 4c2PiQ F G RjS2 = =C1 +in mientras Si c1PiQKc2PiQ 'ntonces retorno 4H2 Sino retorno4ascii 4c1PiQ2B ascii 4c2PiQ22 +in si +in comparacion

+uncion %usqueda 4c) cadenaEs1) cadena2) entero 8ar =!pos!I) entero 'ncontrado) %ooleano =nicio =1 'ncontrado falso 7ientras 4cPiQ F GSjS2 " 4encontradoKfalso2 Si cPiQ K sPiQ 'ntonces pos i i1 7ientras 4cPiQKsPIQ2 " 4cPiQ FGSjS2 " 4sPIQF GSjS = =C1 i IC1 +in mientras Si sPIQKSjS 'ntonces encontrado #erdadero Sino = pos C1 Pos H +in si

P>?=@6 ,1A1*$

Pa que luego os quejis

Sino = =C1 +in si +in mientras 5etorno 4pos2 +in %usqueda Procedimiento %orrar 4entBsal c)cadenaEini)enteroEfin)entero2 8ar =!j) entero =nicio = ini + fin C 1 7ientras cPfQ FGSjS CPiQ cPfQ =iC1 +in mientras C PiQ RjS +in %orrar

Procedure insertar 4entBsal c)cadenaEs)cadenaEpos)entero2 8ar P!j!i) entero =nicio P pos d1 7ientras sPjQFGSjS esde i longitud 4c2 C1 0asta P CPiC1Q cPiQ +in desde CPpQ sPjQ d jC1 P pC1 +in mientras +in insertar Procedimiento intercam%io 4entBsal c)cadenaEc2)cadenaEc3)cadena2 8ar =!pos) entero

P>?=@6 ,2A1*$

Pa que luego os quejis

=nicio =1 7ientras c1PiQ FGSjS Si c1PiQKc2PiQ 'ntonces pos %uscar4c1!c22 Si pos FG H 'ntonces %orrar 4c1!pos!posClongitud4c22B12 =nsertar 4c1!c3!pos2 = pos C longitud4c32 Sino = i C1 +in si Sino = =C1 +in si +in mientras +in intercam%io

FICHEROS O ARCHI1OS: TEMA 2


1. 2. 3. 4. $. &. *. ,. 'l tipo registro de datos. @ocin de arc0i#o. ;erminolog:a de arc0i#os. ;ipos de soporte. ;ipos de organi1aciones de fic0eros. Tperaciones so%re fic0eros. ;ratamiento de fic0eros secuenciales. +ic0eros de te(to.

1. EL TIPO REGISTRO DE DATOS: 'l tipo registro de datos es un tipo estructurado de datos. .n tipo registro #a a estar formado por datos que pueden ser de diferentes tipos. 6 cada uno de esos datos lo denominamos campos! " el tipo de estos campos pueden ser uno estandar o uno definido por el usuario! que puede ser cualquier cosa. La sinta(is que usaremos para definir un tipo registro es la siguiente)

P>?=@6 ,3A1*$

Pa que luego os quejis

;ipo FnombtipobregistroG K registro Fcampo1G) FtipoG Fcampo2G) FtipoG Fcampo3G) FtipoG fin registro .na #e1 definida una estructura de tipo registro! "a puede pasar a declarar #aria%les de ese tipo. 8ar Fnomb#arG) FnombtipobregistroG tipo alumno K registro @=) arra" P1..,Q de caracteres @om%re) arra" P1..1HHQ de caracteres @ota) real +in registro 8ar 61!62) alumno Para declarar una #aria%le de un tipo registro! %asta con poner) 8ar Fnomb#arG ) FnombtipobregG Para acceder a un campo concreto de una #aria%le de tipo registro! utili1amos el operador punto. Fnomb#arG.FnombcampoG c.nom%re Pepe ] con ese #alor puedo tra%ajar igual que tra%ajar:a con cualquier #alor del mismo tipo que ese campo.

;ipo cliente K registro @=) arra" P1..,Q de caracteres @om%re) Cadena Saldo) 5eal +in registro 8ar C) cliente Jorrar 4c.nom%re!3!$2 C.saldo $C3D,HHH Al$a+ena$"en# *e !eg"s#! s en $e$ !"a: 'l tama9o que ocupa una #aria%le de tipo registro en memoria es el que resulta de la suma del tama9o de cada uno de sus campos! " esa informacin tam%in estar/ almacenada de manera contigua " seg<n el orden en que 0a"amos declarado los campos. 2. NOCIN DE ARCDI3O: Las estructuras anteriores se almacena%an en memoria principal! " el pro%lema es que la informacin se pierde al apagar el ordenador. La #entaja es que los accesos P>?=@6 ,4A1*$

Pa que luego os quejis

son m/s r/pidos. Para resol#er esto est/n los dispositi#os de almacenamiento secundario. F"+>e! : 's un conjunto de datos estructurados en una coleccin de unidades elementales denominadas registros! que son de igual tipo " que a su #e1 est/n formados por otras unidades de ni#el m/s %ajo denominados campos. ;odos son del mismo tipo. &. TERMINOLOGNA CON FICDEROS: - Ca$) : 's una unidad elemental de informacin que representa un atri%uto de una entidad. Se define con un nom%re! un tama9o " un tipo de datos. - Reg"s#! l-g"+ : 's un conjunto de campos relacionados lgicamente que pueden ser tratados como unidad en el programa. esde el punto de #ista de programacin simplemente es una estructura de tipo registro. - A!+>"/ F"+>e! : 's un conjunto de registros del mismo tipo " organi1ados de tal forma que esos datos pueden ser accedidos para a9adir! %orrar o actuali1ar. - Cla/e *e un F"+>e! : 's un campo o conjunto de campos que sir#e para identificar un registro " distinguirla del resto del fic0ero. - Reg"s#! FBs"+ Cl =ue: 's la cantidad de datos que se transfieren en una operacin de 'AS entre el dispositi#o e(terno " la memoria. esde este punto de #ista! un registro f:sico puede estar compuesto por H!1!2!... registros lgicos. 'l n<mero de registros lgicos que 0a" por cada registro f:sico! es decir! que se transfiere en una operacin de 'AS! es lo que se denomina factor de %loqueo. 'se factor de %loqueo puede ser F1!K1!G1) - Si es F1! quiere decir que el registro lgico ocupa m/s que el f:sico! se transfiere menos de un registro lgico en cada operacin de 'AS. - Si es K1! significa que el tama9o del registro lgico " el f:sico es el mismo! " se transfiere un registro lgico en cada operacin de 'AS. - Si es G1! lo m/s normal! en cada operacin de 'AS se transfiere m/s de un registro lgico. C-$ n s "n#e!esa =ue sea el Fa+# ! *e Cl =ue %: esde un punto de #ista! cuanto ma"or sea el factor de %loqueo m/s registros lgicos se transferir/n! menos operaciones 0a%r/ que 0acer " se tardar/ menos en procesar el fic0ero. Seg<n esto cuanto ma"or sea mejor. Por otra parte! cada #e1 que se transfiere informacin de 'AS! se deja en una 1ona de memoria especial llamada buffer. Cuanto ma"or sea el tama9o de %loqueo! ma"or ser/ el %uffer " menos memoria me quedar/ para el resto de la informacin. 6l final 0a" que lograr un equili%rio para determinar el tama9o idneo. 7ases *e *a# s: 's un conjunto de datos relacionados almacenados internamente en un conjunto de fic0eros.

0. TIPOS DE SOPORTE: Los soportes de almacenamiento secundario son en los que almaceno la informacin! " pueden ser de 2 tipos)

P>?=@6 ,$A1*$

Pa que luego os quejis

Secuenciales) Para acceder a un registro o dato concreto dentro de l! tengo que pasar pre#iamente por todos los registros anteriores a l. 'l ejemplo es una cinta magntica. irecciona%les) 's posi%le acceder directamente a una direccin concreta de soporte. 'l ejemplo es un disco.

6. TIPOS DE ORGANIOACIONES DE FICDEROS: O!gan"Pa+"-n *e a!+>"/ s: 8iene determinada por 2 caracter:sticas) - 7todo de organi1acin) ;cnica que utili1o para colocar la informacin de los registros dentro del dispositi#o. - 7todo de acceso) Conjunto de programas que me permiten acceder a la informacin que pre#iamente 0e almacenado " #an a depender muc0o del mtodo de organi1acin) - 6cceso directo) Para acceder a un acceso concreto no 0a" que pasar por los anteriores. 'l soporte tiene que ser direcciona%le. - 6cceso secuencial) Para acceder a un registro 0a" que pasar por todos los anteriores! " esto es posi%le si el soporte es secuencial! aunque tam%in puedo 0acerlo en uno direcciona%le. M# * s *e !gan"Pa+"-n: Oa" 3 tipos de organi1acin) - Secuencial irecta - Secuencial inde(ada B Secuencial) Los registros se #an gra%ando en un dispositi#o unos detr/s de otros consecuti#amente! sin dejar 0uecos " seg<n el orden en que son gra%ados o guardados. 6l final para determinar el fin de fic0ero se usa la marca 'T+ 4'nd Tf +ile2. B irecta) Se puede acceder a un registro directamente. Para ello son necesarias 2 cosas) 1c2 Lue cada registro tenga asociada una cla#e que lo identifique. 2c2 ;iene que e(istir una funcin especial llamada funcin de direccionamiento que sea capa1 de con#etir la cla#e a una direccin f:sica real en el dispositi#o! que es a la que accederemos para locali1ar la informacin %uscada. 'n la pr/ctica en realidad 0a" un paso intermedio entre la cla#e " la direccin f:sica que es la direccin relati#a a registro. Suponiendo un fic0ero de n registros lgicos numerados de H a nB1! este #alor asociado al registro es lo que ser:a su direccin relati#a a registro! es decir! que lo que tiene que e(istir es una funcin que con#ierta la cla#e a direccin relati#a a registro! " luego una funcin que con#ierta la direccin relati#a a registro a direccin f:sica! donde la direccin f:sica tendr/ 8olumen! Cilindro! Pista " 5egistro! " esta funcin puede ser por ejemplo el procedimiento de di#isiones sucesi#as. Para reali1ar este procedimiento! primero 0a" que decir el n<mero de #ol<menes! el n<mero de cilindros! el n<mero de pistas " el n<mero de registros que 0a". espus 0a" que reali1ar sucesi#as di#isiones) 55 nc registros

P>?=@6 ,&A1*$

Pa que luego os quejis

51
5egistros

C1 52
Pistas

nc pistas C2 53
Cilindros

nc cilindros C3
8olumen

8olumen ) C3 Cilindro) 53 Pista) 52 5egistros) 51

'mpe1ando a contar desde H.

;enemos un dispositi#o con $ #ol<menes! 3 cilindros por #olumen! 4 pistas por cilindro " 2H registros por pista. [ nde est/ el registro 1HH1\ 1HH1 1 2H $H 2 4 12 H

3 4

Solucin 4H21 4H22! seg<n empecemos a numerar por H o por 1. 'l pro%lema est/ en como con#ertir la cla#e de un registro a direccin relati#a a registro! si en un soporte como m/(imo podemos almacenar n registros la direccin relati#a a registro ir/ de H a nB1 luego 0a%r/ que con#ertir la cla#e a uno de estos #alores. 'n cualquier caso suele ocurrir que el rango de cla#es 4conjunto de todas las cla#es posi%les que se pueden dar2 es menor que n! "a que en la pr/ctica el espacio reser#ado es menor que el rango de n porque no usamos todo el espacio. Seg<n esto puede ocurrir que a diferentes cla#es les correspondan la misma direccin relati#a a registro " por tanto la misma direccin f:sica para almacenarse. 6 estos registros se les denomina sinnimos! " cuando esto ocurre 0a%r/ que almacenar a los registros que tienen la misma posicin en un lugar aparte reser#ado para guardar los sinnimos. 'l /rea reser#ada se puede colocar en #arios sitios dentro de un dispositi#o. Por ejemplo si el rango de cla#es #a de H a ---! " la cla#e es 11-1--43 una forma de almacenarla! ser:a cogiendo los 3 <ltimos n<meros -43. 'n cualquier caso la funcin que con#ierta una cla#e a direccin relati#a a registro ser/ tal que produ1ca el menor n<mero de colisiones de sinnimos posi%les. B Secuencial inde(ada) 'n esta organi1acin tam%in se puede acceder a un registro directamente! pero a0ora lo 0ar mediante in#estigacin jer/rquica de :ndices. Para que se pueda aplicar esta organi1acin! o%ligatoriamente los registros tienen que tener asociados una cla#e. 'n un arc0i#o con esta organi1acin se distinguen 3 /reas) - 6rea de datos - 6rea de :ndices - 6rea de e(cedentes

P>?=@6 ,*A1*$

Pa que luego os quejis

Cuando se crea el fic0ero la informacin se #a guardando en el /rea de datos " al mismo tiempo se #an creando :ndices en el /rea de :ndices para poder luego locali1ar esos datos. espus de la creacin del fic0ero la informacin se almacena en el /rea de e(cedentes " se #a actuali1ando tam%in el /rea de :ndices. T") s *e Bn*"+es: - =ndice de pista) 's el de m/s %ajo ni#el " es o%ligatorio. Oa" un :ndice de pista por cada pista del cilindro! " este :ndice contiene 2 entradas o #alores. 'l primero determina cual es el #alor de la cla#e m/s alta almacenada en esa pista! " el segundo determina cual es la cla#e del primer registro de e(cedente de esa pista. - =ndice de cilindro) 's el de siguiente ni#el " tam%in es o%ligatorio. ;iene una entrada por cada cilindro " en esa entrada contendr/ la cla#e m/s alta de los registros almacenados en ese cilindro. - =ndice maestro) @o es o%ligatorio. Solo se usa cuando el :ndice de cilindro ocupa m/s de 4 pistas. ;iene una entrada por cada pista del :ndice de cilindros " contendr/ la cla#e m/s alta de los registros a los que referencian todos los cilindros de esa pista. 'j) 2 pistas A cilindro " 2 registros A pista Pista 1 6rea de :ndices 12 3$ &H Pista 2

12 1$

2H

3$

42

&H

6rea de datos

, C1

1H 12

14 2H C2

3H

3$

3, 42 C3

$H &H

6rea de e(cedentes

1$

1*

1&

Para %uscar el registro 3H! 0a" que ir mirando si 3H es FK que el registro con el que lo comparamos. Si llega el 1$! lo metemos en el /rea de e(cedentes porque no ca%e. 8. OPERACIONES CON FICDEROS: 1. C!ea+"-n +a!ga *e un F"+>e! : Consiste en meter los datos por primera #e1 en un fic0ero que no e(iste. Para ello 0a" que determinar el espacio que 0a" que reser#ar para el fic0ero " el mtodo de acceso. 2. Re !gan"Pa+"-n *e un F"+>e! : Consiste en crear un fic0ero nue#o a partir de uno que "a e(iste. Con#iene reorgani1arlo cuando "a resulta ineficiente su uso porque 0a" demasiadas colisiones de sinnimos o muc0os registros que "a no e(isten. &. Clas"F"+a+"-n *e un F"+>e! : P>?=@6 ,,A1*$

Pa que luego os quejis

Consiste en ordenar los registros por uno o #arios campos. 'n los sistemas grandes! el propio sistema operati#o "a soporta operaciones que reali1an la organi1acin 4ST5;2. 0. Des#!u++"-n *e un F"+>e! : estruccin de un fic0ero) Significa eliminar toda la informacin que contiene el fic0ero. 6. Reun"-n Fus"-n *e un F"+>e! : Crear un fic0ero a partir de #arios. 8. R #u!a es#all"* *e un F"+>e! : & 6 partir de un fic0ero crear #arios. ;. Ges#"-n *e un F"+>e! : Para tra%ajar con un fic0ero lo primero que tengo que 0acer es crearlo. Para crear un fic0ero tengo que dar un nom%re que es con el que le #a a guardar en el dispositi#o. Pero para manejar ese fic0ero dentro de un programa tendr que asignarle una #aria%le de tipo de fic0ero que luego tendr que asociar con el nom%re f:sico del fic0ero para poder tra%ajar con l. 6 parte de esto! tam%in puedo dar el tama9o del fic0ero! su organi1acin " el tama9o de su %loque o registro f:sico! aunque estos 3 <ltimos par/metros! solo ser/ necesario darlos para sistemas grandes. 6ntes de crear el fic0ero tengo que definir la estructura de su registro para luego al definir la #aria%le que #a a referenciar el fic0ero determinar que fic0ero #a a contener ese tipo de registro. .n fic0ero se crea cuando reali1amos la operacin de apertura del mismo! aunque 0a" lenguajes en los que 0a" que especificar 2 cosas 4creacin " apertura2! " en otros si al a%rirlo e(iste se crea. 6l crear un fic0ero si "a e(iste! #a a depender del lenguaje! en unos da error " en otros se mac0aca lo que "a e(iste. 'n la operacin de apertura si "a e(iste de fic0ero! depende de la forma de apertura que ese fic0ero que "a e(ist:a sea mac0acado o permane1ca. e cualquier forma en la operacin de a%rir tenemos que indicar la #aria%le de tipo fic0ero que nos #a a ser#ir para tra%ajar con ese fic0ero en el programa! a continuacin " entre M M el nom%re real de ese fic0ero en el dispositi#o! " finalmente el modo de apertura del fic0ero. 6%rir 4Fnombfic0G!NnombrealN!FmodobapertG2 Los modos de apertura! dependen del lenguaje de programacin " del modo de organi1acin. Se distinguen 3 modos de apertura) - 7odo de entrada o lectura. - 7odo de salida o escritura. - 7odo de entradaAsalida o lecturaAescritura. 6PP'@ ) '(iste en algunos lenguajes. Para declarar una #aria%le de tipo fic0ero! 0a" que usar una #aria%le de tipo fic0ero que es) +ic0ero de FtipobregG. ;ipo alumno) registro Codbalum) entero ireccion) cadenaP3HQ @ota) real +in registro 8ar f) fic0ero de alumno P>?=@6 ,-A1*$

Pa que luego os quejis

6%rir 4+!Nc)Vestudiantes.datN!FmodoG2 - 7odo de entrada) 'se fic0ero lo #o" a usar para leer informacin de l pero no lo #o" a modificar. Para que un fic0ero se a%ra en este modo pre#iamente tiene que e(istir " si no es as:! nos dar/ un error. - 7odo de escritura) .tili1o un fic0ero para escri%ir informacin en l. 6l a%rirlo no 0ace falta que e(ista! si "a e(istiese! depende del lenguaje! pero normalmente se mac0aca lo que 0a" 4lo que #amos a 0acer2. - 7odo de entradaAsalida) 8o" a 0acer operaciones de consulta " actuali1acin de la informacin. - 7odo 6PP'@ ) 'n pseudocdigo no lo #amos a usar. 6ppend significa a9adir! " se utili1a para escri%ir en un fic0ero pero a9adiendo la informacin al final del mismo. 'n algunos lenguajes tam%in e(iste la operacin 5'S';! que lo que me 0ace es posicionarme al principio del fic0ero. 5eset 4F#arbfic0G2 'n todo momento! e(istir/ un puntero que me indica en que posicin del fic0ero esto" situado. 6l a%rir un fic0ero normalmente sea cual sea el modo de apertura me #o" a quedar situado al comien1o del fic0ero! sal#o que use el modo de apertura 6ppend! qu me posicionar:a al final del fic0ero. 6 medida que #o" 0aciendo operaciones en el fic0ero! este #alor se #a actuali1ando. Cerrar un fic0ero) Luiere decir des0acer la cone(in entre la #aria%le del programa que esto" usando para manejar el fic0ero " el fic0ero real que est/ en el dispositi#o. Cerrar 4F#arbfic0G2 Siempre que se aca%e de tra%ajar con un fic0ero o que queramos cam%iar el modo de tra%ajar con ese fic0ero! primero lo cerraremos " si queremos #ol#er a tra%ajar con l! lo #ol#emos a a%rir. N'NCA DA2 Q'E DE(AR 'N FICDERO A7IERTO. 'n algunos lenguajes e(iste la operacin %orrar un fic0ero " lo que 0ace es eliminar f:sicamente el fic0ero. 6parte de todo esto tam%in e(isten otras relacionadas con su actuali1acin! que son las altas! las %ajas " las modificaciones. Las consultas son una operacin de mantenimiento del fic0ero. Al#a: Consiste en a9adir un registro al fic0ero. Si en el fic0ero los registros tienen alg<n campo cla#e! lo primero que 0a" que compro%ar al dar una alta es que no e(ista "a otro registro con la misma cla#e. 7a,a: Consiste en eliminar un registro del fic0ero. La %aja puede ser f:sica o lgica. - +:sica) Cuando elimino f:sicamente el registro del fic0ero. - Lgica) Cuando al registro lo marc de una manera especial para indicar que "a no es #/lido pero no lo elimino f:sicamente. 6 rasgos del tratamiento de la informacin es como si "a no e(istiera. 'n fic0eros secuenciales no se permite la modificacin de la informacin tal que para dar de %aja a un registro de un fic0ero! lo que 0a" que 0acer es crear otro fic0ero con todos los registros menos el que queremos eliminar. P>?=@6 -HA1*$

Pa que luego os quejis

'n el resto de las organi1aciones normalmente se da la %aja lgica 4con una marca2 " cuando tengo muc0os registros marcados como %aja lgica reorgani1o el fic0ero 4%aja f:sica2. Si los registros contienen cla#e para dar de %aja a un registro tendr que dar su cla#e mirar lo primero si e(iste " solo en ese caso lo podr %orrar. Reglas "$) !#an#"s"$as: - Para dar la alta a un registro con cla#e! primero 0a" que #er si no 0a" ning<n registro con esa cla#e. - Pa!a *a! la Ca,a a un !eg"s#! : 1. Da. =ue Cus+a! s" el !eg"s#! e:"s#e. 2. M s#!a! la "nF !$a+"-n ) ! )an#alla . )e*"! la + nF"!$a+"-n *el usua!" . M *"F"+a+"-n: 7odificar un registro consiste en cam%iar la informacin que contiene! es decir! cam%iar el #alor de uno o m/s de sus campos. 'n el caso de la organi1acin secuencial como no se pueden modificar directamente! lo que 0a" que 0acer es a partir de la informacin que "a e(iste crear otro fic0ero con todos los registros menos el que quiero modificar! que lo gra%ar con la informacin que quiera. 6lgunos lenguajes que soportan la organi1acin secuencial s: permiten 0acer la modificacin del registro en el mismo fic0ero 4como el C2. Cuando se modifican registros de un fic0ero con campos cla#e en el registro! 0a" que tener en cuenta que lo que jamas se puede modificar es el #alor del campo cla#e! porque 0acer eso es como 0acer un alta. C nsul#as: Las consultas lo <nico que 0ace es leer informacin del fic0ero " mostrarme la informacin. Para 0acer una consulta 0a" que dar 2 cosas) - Criterio con el que consulto) Contendr/ el campo o campos por los que quiero consultar " el #alor que tienen que tener esos campos. - =nformacin que quiero mostrar) 6 la 0ora de mostrar la informacin! decir que campos quiero mostrar. ;. TRATAMIENTO DE FICDEROS SEC'ENCIALES: O)e!a+" nes C5s"+as: 1. efinir la estructura del fic0ero. 2. 6pertura del fic0ero. 3. ;ratamiento de los registros. - 'scri%ir 4F#arbfic0G!F#arbregG2 - Leer 4F#arbfic0G!F#arbregG2 Los fic0eros secuenciales no se pueden modificar en una posicin concreta! por esa ra1n cada #e1 que se quiere dar un alta! %aja o modificacin de un registro! como no se puede 0acer directamente! tendr que usar un fic0ero au(iliar tal que si es un alta! en el nue#o fic0ero tendr toda la informacin del fic0ero antiguo m/s el nue#o registro! si es dar de %aja! copio en el nue#o fic0ero todo lo que 0a%:a en el anterior fic0ero menos el

P>?=@6 -1A1*$

Pa que luego os quejis

registro que quiero %orrar! " si quiero modificar un registro! copio toda la informacin " al llegar al registro a modificar! lo copio "a modificado. C nsul#as: ;odo tratamiento de fic0eros! lo #o" a 0acer en un %ucle! " el final de fic0ero lo se9ala la marca 'T+. La primera lectura la #o" a 0acer fuera del %ucle! " las siguientes al final del %ucle! " el %ucle terminar/ cuando se lee la marca 'T+. @ormalmente! en cualquier lenguaje e(iste "a implementada una funcin que dice s: 0emos llegado al final del fic0ero pero que lo que 0ace es %uscar la marca 'T+. 6%rir 4F#arbfic0G!NnomN!entradaASalida2 Leer 4F#arbfic0G!F#arbregG2 7ientras no eof 4F#arbfic0G2 Fproceso con registroG leer 4F#arbfic0G!F#arbregG2 +in mientras 'n Pascal la marca de fin de fic0ero est/ f:sicamente en el fic0ero! mientras que en C! se compara el tama9o del fic0ero con la del puntero del fic0ero! " si coinciden quiere decir que es el fin del fic0ero. P! Cle$as =ue ) *e$ s en+ n#!a!: 1. Si el fic0ero est/ clasificado por 2 campos " #o" a 0acer un tratamiento de l! normalmente tendr que 0acer 2 %ucles anidados " apro#ec0ar que estn clasificados por campos. 2. Si el fic0ero est/ clasificado por un campo! para %uscar los fic0eros por ese campo! 0acemos un solo %ucle apro#ec0ando que est/n clasificados por ese campo. 3. Si enfrento 2 fic0eros! si uno est/ clasificado " otro no! leer en el %ucle m/s e(terno el que no est/ clasificado! " en el m/s interno el que est/ clasificado! apro#ec0ando que estn ordenados. 4. Si ninguno est/ clasificado! da igual el orden de los %ucles! porque en los 2 tendr que %uscar 0asta el final. $. Si lo que me piden es sacar informacin a tra#s de un campo que no es el campo de clasificacin pero que se sa%e el n<mero de #alores concretos que puede tomar ese campo! utili1aremos una estructura del tipo arra". ;enemos un fic0ero con datos de alumnos +las"F"+a* s ) ! +u!s . nI$e! *e alu$n ! teniendo en cuenta que los alumnos se empie1an a numerar por 1. La informacin por alumno es curso! n<mero! nom%re " nota. eterminar cuantos alumnos apro%ados 0a" en cada curso. ;ipo alumno ) registro Curso) entero @umbal) entero @om) cadena @ota) real +in registro 6lgoritmo clase 8ar +bal) fic0ero de alumno

P>?=@6 -2A1*$

Pa que luego os quejis

5bal) alumno 6pro%) entero Cur) entero =nicio 6%rir 4fbal!Nalumnos.datN!entrada2 Leer 4fbal!rbal2 7ientras no eof 4fbal2 6pro% H Cur rbal.curso 7ientras cur K rbal.curso Si 4rbal.nota GK $2 " 4no eof4fbal22 'ntonces apro% apro% C 1 +in si Leer 4fbal!rbal2 +in mientras 'scri%ir M'n el cursoNcurN0an apro%adoNapro% +in mientras Cerrar 4fbal2 +in

;enemos un fic0ero de empleados clasificado por el n<mero de empleado " un fic0ero de %ajas no clasificado que contiene los n<meros de los empleados que se 0an dado de %aja. T%tener un tercer fic0ero que contenga a los empleados que realmente 0a" en la empresa. ;ipo empleado) registro @umbemp) entero @om%re) cadena Sueldo) real +in registro 6lgoritmo %aja 8ar +bebini!fbebfin) fic0ero de empleado P>?=@6 -3A1*$

Pa que luego os quejis

+b%aja) fic0ero de entero 5bebini!rbebfin) empleado 5b%) entero =nicio 6%rir 4fbebini!N'mpleado1.datN!entrada2 6%rir 4fbebfin!N'mpleado2.datN!salida2 Leer 4fbebini!rbebini2 7ientras no eof 4fbebini2 6%rir 4fb%!NJajas.datN!entrada2 Leer 4fb%!rb%2 7ientras rb% FG rbebini.numbemp2 " no eof 4fb%2 Leer 4fb%!rb%2 +in mientras Si eof 4fb%2 'ntonces escri%ir 4fbebfin!rbebfin2 +in si Cerrar 4fb%2 Leer 4fbebini!rbebini2 +in mientras Cerrar 4fbebini2 Cerrar 4fbebfin2 +in

;enemos un fic0ero de clientes no clasificados " la cla#e del fic0ero de clientes es el .@.=. " un fic0ero de morosos que contiene el .@.=. " que est/ clasificado. Lueremos o%tener un listado de los clientes no morosos. Leer 4fbc!rbc2 7ientras no eof 4fc2 6%rir 4fm!N7orosos.datN!entrada2 Leer 4fbm!rbm2 7ientras rbc. @= G rbm " no eof 4fbm2 Leer 4fbm!rbm2 +in mientras Si rbc. @= FG rbm 'ntonces escri%ir rbc.nom%re +in si

P>?=@6 -4A1*$

Pa que luego os quejis

Cerrar 4fbm2 Leer 4fbc!rbm2 +in mientras ;enemos un fic0ero de #entas que tiene el n<mero de #enta! total de #enta " n<mero de #endedor! sa%emos que en nuestra empresa tra%ajan $ #endedores numerados del 1 al $. Lueremos sa%er el total #endido por cada #endedor. ;ipo #enta) registro Codb#enta) entero ;otal) real 8endedor) entero +in registro 6lgoritmo #entas 8ar +b#) fic0ero de #enta 5b#) #enta 8end) arra" P1..$Q de real =) entero =nicio esde iK1 0asta $ 8endPiQ H +in desde 6%rir 4fb#!N#entas.datN!entrada2 Leer 4fb#!rb#2 7ientras no eof 4fb#2 8endPrb#.#endedorQ #endPrb#.#endedorQ C rb#.total Leer 4fb#!rb#2 +in mientras Cerrar 4fb#2 esde iK1 0asta $ 'scri%ir M'l #endedorNiN0a #endidoN#endPiQ +in desde +in

LA++es *"!e+# M en a!+>"/ s se+uen+"ales: '(isten lenguajes que tienen funciones que simulan el acceso directo a un registro dentro de un fic0ero secuencial 4en Pascal SeeIE en C fseeI2! a estas funciones le indicamos el n<mero de registro 4en Pascal2 o el n<mero de %"tes 4en C2! " nos acceden directamente a esa posicin. Sin em%argo es simulado! porque internamente esa funcin #a a 0acer una %<squeda secuencial 0asta que 0a"a llegado al n<mero de registro o al n<mero de %"tes. Man#en"$"en# *e F"+>e! s + n !gan"Pa+"-n *"!e+#a: - 6lta) Primero 0a" que #er que no e(iste el registro! " si no e(iste se da de alta. Para #er si e(iste o no e(iste! a partir de la cla#e del registro que quiero dar de alta! calculo con la funcin de direccionamiento la posicin en la que

P>?=@6 -$A1*$

Pa que luego os quejis

tendr:a que meter ese registro. Si esa posicin est/ ocupada! no lo do" de alta " si no lo meto all:. Jaja) Para #er si e(iste! 0ago igual que antes. Si e(iste lo marco como %aja lgica! " cuando se reorganice el fic0ero! lo do" como %aja f:sica real. 7odificacin) Para #er si e(iste! 0ago igual que antes. Si e(iste lo modifico " lo #uel#o a gra%ar en la misma posicin. Consultas) ;ienen sentido las consultas de registros en particular con una determinada cla#e 4a tra#s de la funcin de direccionamiento2! pero no las %<squedas secuenciales.

Man#en"$"en# *e F"+>e! s + n !gan"Pa+"-n se+uen+"al "n*e:a*a: 's igual que en organi1acin directa! pero a la 0ora de locali1ar un registro! en #e1 de aplicar una funcin de direccionamiento a su cla#e! utili1amos su cla#e para in#estigar a tra#s de los :ndices en donde #a a estar situado. Las altas si las do" cuando el fic0ero se crea! se gra%an en el /rea de datos! " si el fic0ero "a e(ist:a se gra%an en el /rea de e(cedentes. 'n las consultas tienen sentido tanto las consultas de un registro en particular como las consultas secuenciales a tra#s de una cla#e porque #an a estar todas seguidas. @o 0a" que confundir organi1acin secuencial inde(ada! con fic0eros inde(ados o de :ndices! que son un tipo especial de fic0eros asociados a un fic0ero secuencial pero independiente de l! que me agili1an las %<squedas en el fic0ero secuencial en el que est/n inde(ados. Suelen utili1arse en %ases de datos domsticas.

<. FICDEROS DE TE9TO: Son un tipo de fic0eros especiales! en cuanto a lo que podemos leer de ellos " escri%ir son cadenas de caracteres. Sin em%argo tienen significados distintos seg<n el lenguaje! " su o%jeti#o es que podemos tra%ajar con cadenas de caracteres. + ) +ic0ero de te(to C ) Cadena escri%ir 4+! C2 leer 4+! C2

P>?=@6 -&A1*$

Pa que luego os quejis

EJERCICIOS: TEMA 2
1. ;enemos un arra" con la informacin de nuestros productos! por cada producto almacenamos su cdigo! descripcin! stocI actual " stocI m:nimo. Se trata de o%tener otro arra" que contenga los productos de los que 0alla que 0acer pedidos porque su stocI sea inferior al m:nimo! tal que al pro#eedor le tenemos que dar como datos la identificacin del producto " la cantidad que pedimos! que coincidir/ con el stocI m:nimo. @ormalmente tra%ajamos con 1HH productos. ;ipo producto K registro Codigo) entero P>?=@6 -*A1*$

Pa que luego os quejis

escripcin) cadena StocI) entero StocIbmin) entero +in registro Pedido K registro Codigo) entero Cantidad) entero +in registro Listabproducto K arra" P1..1HHQ de producto Listabpedido K arra" P1..1HHQ de pedido 6lgoritmo almacen 8ar Prod) listabproducto Ped) listabpedido =!j) entero =nicio d1 esde iK1 0asta 1HH Si prodPiQ.stocI F prodPiQ.stocIbmin 'ntonces pedPjQ.codigo prodPiQ.codigo PedPjQ.cantidad prodPiQ.stocIbmin d jC1 +in si +in desde +in

2.

ado un arra" que contiene la informacin de los alumnos de una clase de 1HH alumnos! " teniendo en cuenta que de cada uno de ellos almacenamos su n<mero de e(pediente! nom%re " nota media. Oallar la media de todos los alumnos de esa clase " dar otra opcin que pida el nom%re de un alumno " me de su nota si este alumno e(iste.

;ipo alumno K registro '(pediente) entero @om%re) cadena 7edia) real +in registro Lista K arra"P1..1HHQ de alumno

P>?=@6 -,A1*$

Pa que luego os quejis

6lgoritmo notas 8ar 6lum) lista Tp!i) entero 7arca) %ooleano =nicio Presentar 4op2 7ientras 4op FGH2 Seg<n sea op 1) escri%ir MLa media de la clase esNnotabmedia 4alum2 2) escri%ir M=ntroduce un nom%reN leer nom%re marca falso i1 repetir si comparar 4alumPiQ.nom%re!nom%re2 K #erdadero entonces marca K #erdadero sino i iC1 fin si 0asta 4i G 1HH2 o 4marcaK#erdadero2 si marca K #erdadero entonces escri%ir MLa nota deNnom%reNesNalumPiQ.media sino escri%ir M'l alumno no e(isteN fin si fin seg<n sea presentar 4op2 fin mientras fin

3. ;enemos un arra" con la indicacin de cada producto! stocI! descripcin " fec0a. Oallar una opcin que nos sir#a iterati#amente para 0acer pedidos de productos " que termina cuando pidamos el producto H. Por cada pedido se da el identificador de producto que se pide! " la cantidad de producto! " lo que nos dice es si 0a" cantidad suficiente! respondiendo MPedido suministradoN " actuali1ando el stocI! " si el producto solicitado no e(iste o no 0a" suficiente cantidad! mostrar/ un mensaje de error e(plicando la causa. ;ipo tbfec0a K registro ia) entero 7es) entero 6nno) entero +in registro Producto K registro P>?=@6 --A1*$

Pa que luego os quejis

Codigo) entero escripicion) cadena StocI) entero +ec0a) tbfec0a +in producto Lista K arra"P1..1HQ de producto 6lgoritmo pedidos 8ar Prod) lista Codigo!cantidad!i) entero 7arca) %ooleano =nicio 'scri%ir M=ntroduce el codigoN Leer codigo 'scri%ir M=ntroduce la cantidadN Leer cantidad 7ientras codigo FG H =1 7arca falso 5epetir Si codigo K prodPiQ.codigo 'ntonces marca #erdadero Sino i iC1 +in si Oasta 4marca K #erdadero2 o 4i G 1HH2 Si marca K falso 'ntonces escri%ir M@o e(iste el productoN Sino si prodPiQ.stocI F cantidad 'ntonces escri%ir M@o 0a" cantidad suficienteN Sino prodPiQ.stocI prodPiQ.stocI h cantidad 'scri%ir Mpedido suministradoN +in si +in si +in mientras +in funcion notabmedia 4a) lista2) real #ar i) entero acum) real inicio acum H desde iK1 0asta 1HH acum acum C aPiQ.nota fin desde retorno 4acumA1HH2 fin notabmedia funcion comparacion 4c1)cadena!c2)cadena2) %ooleano #ar P>?=@6 1HHA1*$

Pa que luego os quejis

i) entero inicio i1 mientras 4c1PiQKc2PiQ2 " 4c1PiQFGSjS2 " 4c2PiQFGSjS2 i iC1 fin mientras si c1PiQKc2PiQ entonces retorno #erdadero sino retorno falso fin si fin comparacion Procedimiento presentar 4entBsal opcion) entero2 =nicio 5epetir 'scri%ir MH. SalirN 'scri%ir M1. Oallar nota mediaN 'scri%ir M2. Oallar la nota de un alumnoN 'scri%ir M=ntroduce una opcinN Leer opcion Oasta 4opcion GKH2 " 4opcion FK22 +in presentar

4. ;enemos un fic0ero de facturas. 'n la factura #iene el n<mero de cliente al que pertenece la factura! el n<mero de factura! el importe de la factura " un campo pagado que ser/ %ooleano. 'l fic0ero est/ clasificado pro n<mero de cliente " de factura. ise9ar un programa que o%tenga por pantalla para cada cliente el total que nos de%e! " al final me d el total de lo que la empresa no 0a co%rado. ;ipo factura) registro @umbcl) entero @umbfact) entero =mporte) real Pagado) %oolean +in registro 6lgoritmo facturas 8ar P>?=@6 1H1A1*$

Pa que luego os quejis

+ic0) fic0ero de factura +act) factura ;otal!deuda) real Cliente) entero =nicio 6%rir 4fic0!Nfacturas.datN!entrada2 Leer 4fic0!fact2 ;otal H 7ientas no eof 4fic02 euda H Cliente fact.numbcl 7ientras 4cliente K fact.numbcl2 " no eof 4fic02 Si fact.pagado K falso 'ntonces deuda deuda C fact.importe ;otal total C fact.importe +in si Leer 4fic0!fact2 +in mientras 'scri%ir M'l clienteNclienteNde%eNdeuda +in mientras 'scri%ir MLa empresa no 0a co%radoNtotal +in

$. ;enemos un fic0ero de empleados que contiene el departamento! cdigo de empleado! nom%re! categor:a " sueldo. Oa" 12 categor:as numeradas del H al 11. Por cada departamento sacar el n<mero total de empleados que tiene " el sueldo medio por departamento. Lo mismo 0acerlo por categor:as. 'l fic0ero est/ clasificado por cdigo de departamento " empleado. ;ipo emp) registro Codbdep) entero Codbemp) entero @om%bemp) cadena Categoria) entero Sueldo) real +in registro Cat) registro Sueldo) real P>?=@6 1H2A1*$

Pa que luego os quejis

'mp) entero +in registro 6lgoritmo empleados 8ar +bemp) fic0ero de emp 5bemp) emp ;bdep) real @bdep!i!d) entero C) arra" PH..11Q de cat =nicio esde iKH 0asta 11 CPiQ.sueldo H CPiQ.empleado H +in desde 6%rir 4fbemp!Nempleados.datN!entrada2 Leer 4fbemp!rbemp2 7ientras no eof 4fbemp2 rbemp.codbdep ;bdep H @bdep H 7ientras 4dKrbemp.codbdep2 " no eof 4fbemp2 ;bdep tbdep C rbemp.sueldo @bdep nbdep C 1 CPrbemp.categoriaQ.sueldo cPrbemp.categoriaQ.sueldo C rbemp.sueldo CPrbemp.categoriaQ.emp cPrbemp.categoriaQ.emp C 1 Leer 4fbemp!rbemp2 +in mientras 'scri%ir M'l sueldo medio del departamentoN d M esN tbdep A nbdep +in mientas esde i K H 0asta 11 'scri%ir M'l sueldo de la categor:aNiNesNcPiQ.sueldoAcPiQ.emp +in desde Cerrar 4fbemp2 +in &. Para controlar los stocIs de un almacn tenemos) - .n fic0ero MalmacnN! no clasificado que contiene las e(istencias de cada producto en almacn! " sa%emos que 0a" un m/(imo de *$H productos. Cada registro tiene el cdigo de producto41..*$H2! la cantidad en stocI de ese producto " el nom%re del producto - .n fic0ero MpedidosN que contiene todos los pedidos que se solicitan al almacn. Cada pedido contiene el n<mero de pedido! el cdigo de producto que se pide " la cantidad que se pide. 'ste fic0ero est/ clasificado por n<mero de pedido. T%tener un fic0ero de stocI actuali1ado a partir de los pedidos! pudindose dar) 1. 'l producto que se pide e(iste en el almacn " que la cantidad que se pide sea menor o igual a la que 0a". Slo se actuali1a el fic0ero.

P>?=@6 1H3A1*$

Pa que luego os quejis

2. 'l producto e(iste! pero la cantidad que nos piden es ma"or que la que 0a". ?uardaremos la informacin del pedido en el fic0ero MdenegadosN que tiene el cdigo del producto! la cantidad pedida " la cantidad que 0a%:a en stocI. 3. 'l cdigo de producto no e(iste. 7ostramos por pantalla un mensaje que ponga MCdigo de producto erroneoN. Cada producto aparece como m/(imo una #e1. ;ipo alm) registro Prod) entero StocI) entero +in registro Ped) registro @bped) entero Prod) entero Cant) entero +in registro en) registro Prod) entero StocI) entero Cant) entero +in registro 6lgoritmo almacn 8ar +ba!fbal) fic0ero de alum +bd) fic0ero de den +bp) fic0ero de pedidos 5ba) alm 5bp) ped 5bd) den =nicio 6%rir 4fbp!Npedidos.datN!entrada2 6%rir 4fbn!Nalmacenbn.datN!salida2 6%rir 4fbd!Ndenegados.datN!salida2 Leer 4fbp!rbp2 7ientras no eof 4fbp2 6%rir 4fba!Nalmacen.datN!entrada2 Leer 4fba!rba2 7ientras 4rbp.prod FG rba.prod2 " no eof 4fba2 Leer 4fba!rba2 +in mientras Si rbp.prod K rba.prod 'ntonces si rbp.cantidad F rba.stocI 'ntonces rban.prod rba.prod 5ban.stocI rba.stocI h rbp.cantidad 'scri%ir 4fban!rban2 Sino rbd.prod rba.prod 5bd.cant rbp.cant 5bd.stocI rba.stocI 'scri%ir 4fbd!rbd2 +in si Sino escri%ir M'rror. @o e(iste el productoNrbp.producto P>?=@6 1H4A1*$

Pa que luego os quejis

+in si Cerrar 4fba2 Leer 4fbp!rbp2 +in mientras Cerrar 4fbp2 Cerrar 4fbd2 Cerrar 4fban2 6ctuali1arbalmacen 4fba!fban2 +in Procedimiento actuali1arbalmacen 4f1) fic0ero de almacenE f2) fic0ero de almacen2 8ar 51!r2) alm +3) fic0ero de alm =nicio 6%rir 4f1!Nalmacen.datN!entrada2 6%rir 4f3!Nalm.actN!salida2 Leer 4f1!r12 7ientras no eof 4f12 6%rir 4f2!Nalmacenbn.datN!entrada2 Leer 4f2!r22 7ientras 4r1.prod FG r2.prod2 " no eof 4f22 Leer 4f2!r22 +in mientras Si r1.prod K r2.prod 'ntonces escri%ir 4f3!r22 Sino escri%ir 4f3!r12 +in si Cerrar 4f22 +in mientras Cerrar 4f12 Cerrar 4f32 +in

ORDENACIN3 B4S5UEDA E INTERCALACIN INTERNA: TEMA 6


1. =ntroduccin. 2. Trdenacin) - 7todo de la %ur%uja. - 7todo de insercin. - 7todo de seleccin. - 7todo de LuicI S0ort. 3. J<squeda)

P>?=@6 1H$A1*$

Pa que luego os quejis

- J<squeda secuencial. - J<squeda %inaria. - J<squeda por con#ersin de cla#es o Oas0ing. 4. =ntercalacin. 1. INTROD'CCIN: 6 la 0ora de tratar datos! muc0as #eces nos con#iene que estn ordenados. 'stos mtodos nos pueden resultar eficientes cuando 0acemos las %<squedas. 2. ORDENACIN: Consiste en organi1ar un conjunto de datos en un orden determinado seg<n un criterio. La ordenacin puede ser interna o e(terna) - =nterna) La 0acemos en memoria con arr"as. 's mu" r/pida. - '(terna) La 0acemos en dispositi#os de almacenamiento e(terno con fic0eros. Para determinar lo %ueno que es un algoritmo de ordenacin 0a" que #er la complejidad del algoritmo 4cantidad de tra%ajo de ese algoritmo2! se mide en el n<mero de operaciones %/sicas que reali1a un algoritmo. La operacin %/sica de un algoritmo es la operacin fundamental! que es la comparacin. M# * *e la Cu!Cu,a: La filosof:a de este mtodo es ir comparando los elementos del arra" de 2 en 2 " si no est/n colocados correctamente intercam%iarlos! as: 0asta que tengamos el arra" ordenado. Oa" que comparar la posicin 1 " la 2 " si no est/n ordenadas las intercam%io. Luego la 2 " la 3 " as: sucesi#amente 0asta que comparo las <ltimas posiciones. Con esta primera pasada lograremos que quede ordenado el <ltimo elemento del arra". ;ericamente! en cada pasada iremos colocando un elemento! " tendr:amos que 0acer n h1 pasadas. Si en una pasada no se 0acen cam%ios! el arra" "a est/ ordenado.

Procedimiento %ur%uja 4datos) arra" P1..@Q de FtipoG2 8ar Trdenado) %ooleano =! d) entero 6u() FtipoG =nicio Trdenado falso =1 7ientras 4ordenado K falso2 " 4i FG n h 12 Trdenado #erdadero P>?=@6 1H&A1*$

Pa que luego os quejis

d= esde j K 1 0asta n h 1 Si datos PjQ G datos Pj C 1Q 'ntonces au( datos PjQ atos PjQ datos Pj C 1Q atos PjQ au( Trdenado falso +in si +in desde ==C1 +in mientras +in M# * *e "nse!+"-n: Se supone que se tiene un segmento inicial del arra" ordenado! " 0a" que ir aumentando la longitud de segmento 0asta que coincide con la longitud del arra". Para ello insertaremos el siguiente elemento en el lugar adecuado dentro del segmento ordenado. 'sto se 0ace mo#iendo cada elemento del segmento ordenado a la derec0a 0asta que se encuentre uno menor o igual al elemento que queremos colocar en el segmento o 0asta que no tenemos elementos! " lo coloco en esa posicin. Para arrancar este mtodo se parte de que el segmento ordenado inicial este es la primera posicin. Procedimiento insercion 4datos) arra" P1..@Q de FtipoG2 8ar =! d) entero 6u() FtipoG =nicio esde i K 2 0asta @ 6u( datos PiQ dih1 7ientras 4j G H2 " 4au( F datosPjQ2 atosPj C 1Q datosPjQ djh1 +in mientras atos Pj C 1Q au( +in desde +in M# * *e la sele++"-n: Se trata de %uscar el elemento m/s peque9o " colocarlo en la primera posicin! despus el segundo m/s peque9o " colocarlo en la segunda posicin! " as: sucesi#amente 0asta que el arra" este ordenado. Para ello #amos a recorrer el arra"! " por cada elemento %uscamos a la derec0a de esa posicin cual es el m/s peque9o! " lo intercam%io con el elemento que esto" e(aminando. Procedimiento selecccion 4datos) arra"P1..@Q de FtipoG2

P>?=@6 1H*A1*$

Pa que luego os quejis

8ar =!j!pos) entero 6u() FtipoG =nicio esde i K 1 0asta @B1 6u( datosPiQ Pos i esde j K iC1 0asta @ Si datosPjQ F au( 'ntonces pos j 6u( datosPjQ +in si +in desde atosPposQ datosPiQ atosPiQ au( +in desde +in M# * *e !*ena+"-n !5)"*a Qu"+QS> !#: Consiste en di#idir la lista inicial en otras dos que ordenamos por separado recursi#amente. Para ello! se elige un elemento de la lista al que llamamos pi#ote! tal que a la derec0a del pi#ote #a a quedar lo m/s grande! " a la i1quierda lo m/s peque9o! es decir! que el pi#ote quedar/ colocado en su posicin. Procedimiento LuicIS0ort 4ini) enteroE fin) enteroE datos) arra"P1..@Q de FtipoG2 =nicio Si ini F fin 'ntonces su%listas 4ini!fin!pi#ote!datos2 LuicIs0ort 4ini!pi#oteB1!datos2 LuicIs0ort 4pi#oteC1!fin!datos2 +in si +in

Procedimiento su%listas 4ini)enteroEfin)enteroEentBsal pi#ote)enteroE datos)arra"P1..@Qde FtipoG2 =nicio Pi#ote ini 6u( datosPiniQ esde i K pi#oteC1 0asta fin Si datosPiQ F au( 'ntonces pi#ote pi#ote C 1

P>?=@6 1H,A1*$

Pa que luego os quejis

6u(2 datosPiQ atosPiQ datosPpi#oteQ atosPpi#oteQ au(2 +in si +in desde atosPiniQ datosPpi#oteQ atosPpi#oteQ au( +in &. 7RSQ'EDAS: Oa" 2 tipos de %<squedas! internas que se 0acen en memoria " e(ternas que se 0acen en fic0eros. Cuando %uscamos en un fic0ero! normalmente lo 0acemos a tra#s de una cla#e. ado un determinado #alor! se trata de #er si e(iste un elemento con ese #alor en el arra" de fic0eros donde se %usca! tal que se de#uel#e si est/ o no. '(isten 3 mtodos de %<squeda) - Secuencial. - Jinaria o dicotnica. - Por transformacin de cla#es o Oas0ing. 7Is=ue*a se+uen+"al: Se puede aplicar para %<squedas internas " e(ternas! " 0a" que ir pasando secuencialmente por todos los elementos de la estructura 0asta encontrar el elemento o aca%ar la lista. Procedimiento %bsecuencial 4datos) arra"P1..@Q de FtipoGE elem) FtipoG2 8ar =) entero =nicio =1 7ientras 4i FK @2 " 4datosPiQ FG elem2 ==C1 +in mientras Si datosPiQ K elem 'ntonces escri%ir M'lemento encontrado en la posicinNi Sino escri%ir M'lemento no encontradoN +in si +in

7Is=ue*a se+uen+"al + n +en#"nela: Se trata de optimi1ar en cierto modo la %<squeda secuencial normal! lo que 0acemos es a9adir al final del arra" el elemento que quiero %uscar por lo que siempre lo encontrare. Si encuentro el elemento en una posicin distinta de @C1 significa que no est/ en la estructura. La #entaja es que en la condicin del mientras no tengo que preguntar

P>?=@6 1H-A1*$

Pa que luego os quejis

si se aca%a la estructura! me a0orro una condicin! el incon#eniente es que tiene que so%rar espacio al final del arra". Procedimiento %bsecbcentineal 4datos) arra"P1..@C1Q de FtipoGE elem) FtipoG2 8ar =) entero =nicio atosPnC1Q elem =1 7ientras datosPiQ FG elem = iC1 +in mientras Si i FG nC1 'ntonces escri%ir M'lemento encontrado en la posicinNi Sino escri%ir M'lemento no encontradoN +in si +in 7Is=ue*a C"na!"a *"+ #-n"+a: Para que se pueda aplicar es que la lista en la que queremos %uscar el elemento este pre#iamente ordenada. Se trata de di#idir el espacio de %<squeda en sucesi#as mitades 0asta encontrar el elemento %uscado o 0asta que "a no pueda 0acer m/s mitades. Primero 0allamos el :ndice de la mitad del arra" " miramos si el elemento coincide con l! sino coincide a#eriguamos donde de%er:a estar el elemento %uscado! si en la lista de la derec0a o de la i1quierda! " dentro de esa mitad 0ago lo mismo sucesi#amente. Procedimiento %b%inaria 4datos)arra" P1..@Q de FtipoGE elem)FtipoGE ini)enteroE fin) entero2 8ar mit) entero =nicio mit 4iniCfin2 di# 2 mientras 4ini F fin2 " 4elem FG datosPmitQ2 si elem F datosPmitQ entonces fin mit h 1 sino ini mit C 1 fin si fin mientras si ini F fin entonces escri%ir M'lemento encontrado en la posicinN mit sino escri%ir M'lemento no encontradoN fin si fin 7Is=ue*a ) ! #!ansF !$a+"-n *e +la/es Das>"ng: 's necesario que lo que se %usque sea por un determinado campo cla#e. Se trata de con#ertir ese campo cla#e en una direccin real! si estamos en un arra"! en un posicin del arra" " si estamos en un fic0ero! en un registro del fic0ero. Lo que 0ace que se con#ierta la cla#e en una direccin real es la funcin de direccionamiento. '(isten diferentes tipos de funciones de direccionamiento) P>?=@6 11HA1*$

Pa que luego os quejis

La m/s usada es la funcin mdulo! que consiste en di#idir la cla#e entre el n<mero de elementos m/(imos de la estructura " coger el resto como direccin real de almacenamiento 4el :ndice si es un arra"! o una direccin relati#a si es un fic0ero2. 'ntruncamiento) 's la parte de la cla#e como :ndice. Plegamiento) i#idir la cla#e en partes iguales de tama9o! que #a a ser igual al n<mero de cifras del tama9o del arra"! luego sumarlas " coger las <ltimas cifras de la suma. 7itad del cuadrado) 's el cuadrado de la cla#e " despus coger las cifras centrales.

'l pro%lema de estos casos! es que cuando el rango de cla#es es ma"or que el n<mero de posiciones de la estructura! est/ el pro%lema de que a diferentes cla#es les corresponde la misma posicin! as: que cuando se produce el segundo sinnimo 0a" que #er donde se manda. Para e#itar esto! tratar que la funcin de direccionamiento produ1ca el menor n<mero de colisiones posi%les. Para solucionar el pro%lema de los sinnimos) ejar tanto espacio como rango de cla#es. 's ilgico. - Si se trata de un arra"! que por cada posicin dejemos una posicin m/s. - La mejor solucin es la tcnica de encadenamiento! que consiste en que de cada posicin del arra" salga un puntero a una lista enla1ada que enlace a todos los elementos que de%er:an ir posicionados en esa posicin o :ndice del arra".

0. INTERCALACIN: Consiste en juntar #arias listas ordenadas en una sola lista que quede ordenada. Procedimiento fusion 4a1) ;1E a2) ;2E a3) ;32 8ar =!j!I!l) entero P>?=@6 111A1*$

Pa que luego os quejis

=nicio =1 d1 i1 7ientras 4iFKn2 " 4jFKm2 Si a1PiQ F a2PjQ 'ntonces a3PIQ a1PiQ ==C1 Sino a3PIQ a2PjQ ddC1 +in si iiC1 +in mientras Si i F n 'ntonces desde LKi 0asta m i I C1 63PIQ a2PlQ +in desde Sino desde LKj 0asta n i IC1 63PIQ a1PlQ +in desde +in si +in

ORDENACIN3 B4S5UEDA Y FUSIN E7TERNA: TEMA 18


1. 6rc0i#os ordenados. 2. +usin o me1cla de arc0i#os ordenados. P>?=@6 112A1*$

Pa que luego os quejis

3. Particin de arc0i#os. 4. Clasificacin de arc0i#os. 1. ARCDI3OS ORDENADOS: .n arc0i#o se puede ordenar por un campo o un conjunto de campos. La ma"or parte de los sistemas disponen de una funcin ST5; para ordenar. 2. F'SIN O MEOCLA DE ARCDI3OS ORDENADOS: ados 2 arc0i#os 6 " J que tienen la misma estructura " clasificados por el mismo campo o campos! se trata de o%tener otro arc0i#o C que tenga la misma estructura de los 2 anteriores " que tam%in queda clasificado por el mismo criterio. Procedimiento fusion 46) tbfic0E J) tbfic0E C) tbfic02 8ar 51! r2) FtipoG =nicio 6%rir 4C!Nfic0.salN!salida2 6%rir 46!Nfic01N!entrada2 6%rir 4J!Nfic02N!entrada2 Leer 46!r12 Leer 4J!r22 7ientras no eof 462 " no eof 4J2 Si r1.info F r2.info 'ntonces escri%ir 4C!r12 Leer 46!r12 Sino escri%ir 4C!r22 Leer 4J!r22 +in si +in mientras Si eof 462 'ntonces leer 4J!r22 mientras no eof 4J2 'scri%ir 4C!r22 Leer 4J!r22 +in mientras Sino leer 46!r12 mientras no eof 462 'scri%ir 4C!r12 Leer 46!r12 +in mientras +in si Cerrar 462 Cerrar 4J2 Cerrar 4C2 +in &. F'SIN DE ARCDI3OS: Se trata de di#idir un arc0i#o en #arios. Oa" diferentes criterios de particin) Pa!#"+"-n ) ! + n#en"* : Se reparten los registros entre #arios registros seg<n el #alor de uno o m/s campos. F 81 +1

P>?=@6 113A1*$

Pa que luego os quejis

K 81 +2 G 81 +3 Procedimiento partbcont 4fic0) tbfic0E entBsal fic01! fic02! fic03) tbfic02 8ar 5) FtipoG =nicio 6%rir 4fic0!N+N!entrada2 6%rir 4fic01!N+1N!salida2 6%rir 4fic02!N+2N!salida2 6%rir 4fic03!N+3N!salida2 Leer 4fic0!r2 7ientras no eof 4fic02 Si r.info F 81 'ntonces escri%ir 4f1!r2 Sino si r.info G 81 'ntonces escri%ir 4f3!r2 Sino escri%ir 4f2!r2 +in si +in si Leer 4fic0!r2 +in mientras Cerrar 4fic02 Cerrar 4f12 Cerrar 4f22 Cerrar 4f32 +in Pa!#"+"-n ) ! nI$e! F", *e !eg"s#! s ) ! se+uen+"as + n +las"F"+a+"-n "n#e!na: Se trata de o%tener a partir de un fic0ero #arios! tal que todos tengan un n<mero fijo de registros e(cepto el <ltimo. Si el fic0ero inicial tiene g registros " quiero o%tener como resultado ] fic0eros! cada fic0ero tendr/ gA] registros. Se trata de ir le"endo secuencias de gA] registros del fic0ero + " se #uelcan a un arra"! clasificar esas secuencias internamente! " cuando estn clasificadas! las #uelco a otro fic0ero. 'l pro%lema es que se usa arra"s para la ordenacin interna! " a #eces el n<mero de fic0eros dependen del tama9o m/(imo del arra". +) 3 - $ 14 2 3H 1 +1) 3 $ +2) 2 14 3H +3) 1 Pa!#"+"-n ) ! se+uen+"as s"n +las"F"+a+"-n "n#e!na: Se trata de o%tener fic0eros a partir de uno dado! todos con el mismo tama9o! pero los fic0eros no tienen por que estar clasificados. @osotros marcamos el tama9o del %loque donde #a"a a clasificar la informacin. etermino tam%in el n<mero m/(imo de fic0eros que quiero tener. P>?=@6 114A1*$

Pa que luego os quejis

Leer secuencias de @ registros del fic0ero inicial " los ir gra%ando en los fic0eros resultantes de la particin. 0. CLASIFICACIN DE ARCDI3OS: 's o%ligatorio que e(ista una cla#e. Si el fic0ero fuese peque9o se lle#an todos los registros a un arra" " los clasifico! pero esto no es lo m/s usual! por lo que se usa la clasificacin e(terna. Clas"F"+a+"-n ) ! $eP+la *"!e+#a: 8amos a usar 2 fic0eros au(iliares +1 " +2. 'l fic0ero + lo organi1amos gra%ando en + secuencias de registros ordenados cada #e1 m/s grandes. Primero leemos las secuencias de un registro de + " las gra%o alternati#amente en +1 " +2. Luego leo las secuencias de un registro! una de +1 " otra de +2! " las gra%o ordenadas en +. 8uel#o a leer en + con el do%le de secuencia que antes " los gra%o en +1 " +2! " repetimos todas las fases duplicando en cada pasada el tama9o de la secuencia 0asta que el tama9o o%tenido sea igual que el del fic0ero. 6 cada tratamiento de + se le llama pasada! " el n<mero de pasadas m/(imo! ser/ =! tal que el tratamiento se repetir/ 0asta que 2 ele#ado a = GK n<mero de registros. 'n cada pasada para clasificar la secuencia que leemos de +1 " +2! utili1amos el mtodo de fusin e(terna. +) 3 - $ 14 2 3H 1 12 1H +1) 3 A $ A 2 A 1 A 1H +2) - A 14 A 3H A 12 +) 3 - $ 14 2 3H 1 12 1H +1) 3 - A 2 3H A 1H +2) $ 14 A1 12 +) 3 $ - 14 1 2 12 3H 1H +1) 3 $ - 14 A 1H +2) 1 2 12 3H +) 1 2 3 $ - 12 14 3H A 1H +1) 1 2 3 $ - 12 14 3H +2) 1H +) 1 2 3 $ - 1H 12 14 3H

Clas"F"+a+"-n ) ! $eP+las *e se+uen+"as e=u"/alen#es: Se parece al mtodo anterior porque tam%in se intenta coger secuencias de registros m/s grandes! pero a0ora usamos 4 fic0eros au(iliares " en #e1 de empe1ar le"endo secuencias de un registro! 0acemos secuencias de @ registros! que la primera

P>?=@6 11$A1*$

Pa que luego os quejis

#e1 clasificamos internamente! por lo que el #alor de @ #endr/ limitado por el tama9o del arra". Primero leemos del arc0i#o inicial + secuencias de @ registros que clasificamos internamente " que gra%amos alternati#amente en +1 " +2. espus leo secuencias de @ registros de +1 " +2 alternati#amente! " por cada par de secuencias le:das las fusiono " las gra%o alternati#amente "a ordenadas en +3 " +4. Las secuencias de 2@ registros de +3 " +4 las fusiono " la secuencia 4@ o%tenida "a ordenada la gra%o alternati#amente en +1 " +2. 5epito esto 0asta que todos los fic0eros estn #ac:os menos 1! " la informacin de ese fic0ero la gra%o al fic0ero inicial. +) 3 - $ 14 2 3H 1 12 1H +1) 3 $ - A 1 1H 12 +2) 2 14 3H +1) 8acio +2) 8acio +3) 2 3 $ - 14 3H +4) 1 1H 12 +1) 1 2 3 $ - 12 14 3H 8uelco +1 al fic0ero inicial +. +2) 8acio +3) 8acio +4) 8acio

ESTRUCTURAS DIN9MICAS LINEALES DE DATOS: LISTAS ENLA:ADAS. PILAS Y COLAS: TEMA 11

P>?=@6 11&A1*$

Pa que luego os quejis

1. 2. 3. 4. $. &. *. ,. -.

=ntroduccin a las estructuras din/micas de datos. Listas. Listas enla1adas. Procesamiento de listas enla1adas simples. Listas circulares con ca%ecera. Listas do%lemente enla1adas. Pilas. Colas. o%les colas o %icolas.

1. INTROD'CCIN A LAS ESTR'CT'RAS DIN@MICAS DE DATOS: Las #entajas de las estructuras din/micas de datos son) 1. @o 0a" que definir el tama9o antes de usarla! sino que la #o" utili1ando seg<n la necesito. 2. Los elementos que forman est/ estructura no est/n situados en forma contigua en memoria! " esos elementos se relacionan entre s: mediante campos enlace o puntero! " a cada uno de esos elementos lo llamamos nodo de la estructura. .n puntero es un dato cu"o contenido es una direccin de memoria que es en la que est/ almacenado el dato al que apunta.

Las estructuras din/micas pueden ser lineales o no lineales seg<n que desde un elemento se pueda acceder solamente a otro o a #arios. De+la!a+"-n *e l s )un#e! s en *"s#"n# s lengua,es: 'n C) FtipoG DF#arbpG =nt Dp 'n Pascal) F#arbtipobpunteroG) WFtipoG P) Winteger 'n pseudocdigo) F#arbtipobpunteroG) puntero a FtipoG P) puntero a entero A++e*e! a un +a$) *e un !eg"s#! : 'n C) P nom%re 'n Pascal) pW.nom%re 'n pseudocdigo) p nom%re 2. LISTAS: .na lista es una coleccin lineal de elementos. Oa" 2 formas de almacenarla. Con arra"s 4usando memoria est/tica2! en donde la relacin de los elementos de la lista #iene dada porque ocupa posiciones contiguas de memoria. P>?=@6 11*A1*$

Pa que luego os quejis

e forma enla1ada con memoria din/mica. Se conoce como listas enla1adas! " la relacin entre los elementos de la lista se mantiene mediante campos de enlace o punteros. &. LISTAS ENLAOADAS: 's una coleccin lineal de elementos llamados @T TS! donde el orden entre los nodos se esta%lece mediante punteros! " por ser simple! adem/s desde un nodo solo puedo acceder al siguiente directamente. .na lista enla1ada tiene 2 partes) - Los nodos que forman la lista. Cada nodo #a a tener dos campos. .no de informacin que ser/ del tipo de los elementos que contiene la lista " un campo de enlace que es de tipo puntero! " que contendr/ la direccin de memoria en la que est/ almacenado el siguiente nodo. 6l primer campo de informacin lo llamamos =@+T! " el nodo lo llamamos S=?. - La segunda parte de la lista ser/ una #aria%le de tipo puntero a los nodos de la lista que contiene la direccin del primer nodo de la lista. Por esa ra1n a esa #aria%le la podemos llamar CT7ien1o. ;ipo nodo) registro =nfo) FtipoG Sig) puntero a nodo +in registro 8ar Com) puntero a nodo 'l <ltimo nodo de la lista tendr/ en su campo de enlace el #alor nodo 4@ull!@il2! que quiere decir que no apunta a ninguna direccin " gr/ficamente se sim%oli1a con)

;ipo nodo) registro =nfo) car/cter Sig) puntero a nodo +in registro Los nodos de la lista pueden estar en cualquier 1ona de memoria! no tienen que estar en posiciones consecuti#as.

0. PROCESAMIENTO DE LISTAS ENLAOADAS SIMPLES: Para poder procesar una lista! se necesita la estructura de sus nodos " la #aria%le de comien1o. Tperaciones) P>?=@6 11,A1*$

Pa que luego os quejis

=nsertar un elemento. Jorrar un elemento. 5ecorrer la lista. Juscar un elemento.

La forma m/s normal de representar listas enla1adas es usar memoria din/mica. .na lista enla1ada tam%in se puede simular usando arra"s 4memoria est/tica2! pero es poco eficiente. Para ello utili1ar:a 2 arra"s del mismo tama9o " con la misma numeracin de :ndices! tal que en un arra" guardar:a los campos de informacin de la lista! " para cada campo de informacin en la posicin correspondiente en el otro arra" guardar:a el :ndice del siguiente elemento a ese nodo. 's decir en ese segundo arra" guardar:a los campos enlace mediante #alores de :ndice.

6dem/s de los 2 arra"s! tengo que tener una #aria%le que contenga el :ndice del primer elemento de la lista. 'l <ltimo elemento! tiene en el campo de enlace el #alor H. =nfo 1 2 3 4 $ & * = , 1H _ 3 1H H O . 6 $ Sig

Re+ !!"* e una l"s#a enlaPa*a: Consiste en paras por todos sus nodos " procesarlos. ;ipo nodo) registro =nfo) FtipoG Sig) puntero a nodo P>?=@6 11-A1*$

Pa que luego os quejis

+in registro 6lgoritmo recorrido 8ar Com) puntero a nodo =nicio 5ecorrer 4com2 +in Procedimiento recorrer 4prin) puntero a nodo2 8ar Ptr) puntero a nodo =nicio Si prin K @il 'ntonces escri%ir MLista #aciaN Sino ptr prin 7ientras ptr FG nil ptrsig FG nil `procesar ptrinfoa ptr ptrsig fin mientras posicionarme en el <ltimo nodo fin si . fin 7us=ue*a *e un n * : Se trata de locali1ar un nodo que cumpla una determinada condicin 4por ejemplo que su campo de informacin #alga un #alor determinado2. 6 la 0ora de 0acer las %<squedas tendremos en cuenta si la lista est/ ordenada o no! " si est/ ordenada por el criterio de %<squeda tendr que apro#ec0arlo. ;ipo nodo) registro =nfo) FtipoG Sig) puntero a nodo +in registro 6lgoritmo %usqueda 8ar P!com) puntero a nodo 'lem) FtipoG =nicio Juscar 4com!elem!p2 +in Procedimiento %uscar 4prin) puntero a nodoE e) FtipoGE entBsal pos) puntero a nodo2 =nicio Pos prin 7ientras 4posinfo FG '2 " 4pos FG @=L2 Pos possig +in mientras +in 7Is=ue*a *e un n * !*ena* as+en*en#e$en#e: ;ipo nodo) registro =nfo) FtipoG Sig) puntero a nodo +in registro P>?=@6 12HA1*$

Pa que luego os quejis

6lgoritmo %usqueda 8ar P!com) puntero a nodo 'lem) FtipoG =nicio Juscar 4com!elem!p2 +in Procedimiento %uscar 4prin) puntero a nodoE e)FtipoGEentBsal pos) puntero a nodo2 =nicio Pos prin 7ientras 4e G posinfo2 " 4pos FG @=L2 Pos possig +in mientras Si posinfo FG e 'ntonces pos @=L +in si +in T!a#a$"en# *e la $e$ !"a *"n5$"+a: Siempre que se 0ace una insercin en una estructura din/mica! tenemos que coger de memoria tantos %"tes de memoria din/mica como ocupa el nodo de la estructura din/mica! " cuando %orramos un elemento! tendremos que li%erar la memoria ocupada por ese elemento. Para conseguir este manejo! todos los lenguajes de programacin tienen 2 instrucciones que permiten reser#ar memoria " li%erar memoria din/mica! " asignar en el caso de la reser#a la memoria a un puntero! " en el caso de la li%eracin se li%era la memoria asignada a un puntero. Pascal ) @'f ! =SPTS' C ) 76LLTC ! +5'' CCC ) @'f ! 'L';' La instruccin de reser#a de memoria lle#ara un <nico argumento! que ser/ el tipo de datos para el que se 0ace la reser#a de memoria! " seg<n el tama9o de ese tipo! esa instruccin sa%r/ el n<mero de %"tes que tiene que reser#ar. ] lo que de#uel#e es un puntero al comien1o de la 1ona que se 0a reser#ado. 'ste #alor de#uelto ser/ el que tenemos que asignar a un puntero al tipo de datos para el que se 0ace la reser#a. La funcin li%erar memoria lle#a un <nico argumento que es el tipo puntero! " lo que 0ace es li%erar la memoria asignada a ese puntero! para lo cual es imprescindi%le que a ese puntero pre#iamente se le 0a"a 0ec0o una asignacin de memoria din/mica con al funcin de reser#a. 8ar p) puntero a FtipoG P K resbmem 4FtipoG2 Li%bmem 4F#arbpunteroG2

@osotros #amos a simular el tratamiento de la memoria din/mica de la siguiente forma) 8amos a suponer que todas las posiciones li%res de memoria est/n enla1adas entre s: a tra#s de una lista enla1ada! a la que #amos a llamar =SP 4lista de memoria disponi%le2! donde la primera posicin de esa lista #iene apuntada por la #aria%le =SP.

P>?=@6 121A1*$

Pa que luego os quejis

Cada #e1 que queremos 0acer una insercin en una estructura din/mica! cogeremos la primera posicin de =SP! " se la asignaremos al puntero que #a a contener a ese elemento. ] cuando queramos %orrar un elemento de una estructura din/mica para indicar que li%eramos la memoria utili1ada por ese elemento! lo que 0aremos ser/ insertarlo en el =SP! pero siempre al comien1o. Seg<n esto! todo %orrado en el =SP equi#aldr/ a una instruccin de reser#a de memoria en cualquier lenguaje! " toda insercin en el =SP! equi#aldr/ a la instruccin de li%erar memoria en cualquier lenguaje. O/e!Fl S . 'n*e!Fl S: La memoria del ordenador tiene un tama9o limitado! por lo que la memoria din/mica tam%in tendr/ un tama9o limitado! es decir! que puede ser que se nos agote. 'sta situacin! se conoce como T8'5+LTf. Siempre que se 0aga una instruccin de reser#a de memoria! tendremos que compro%ar antes si nos queda memoria li%re. 'so en cualquier lenguaje ocurre cuando la instruccin de reser#ar de memoria de#uel#e el #alor @=L. Si =SP K @il 'ntonces escri%ir M@o 0a" memoriaN =gual se 0ace para %orrar un elemento de una estructura din/mica! para %orrarlo! esa estructura tiene que tener al menos un elemento. Si no lo tiene e intentamos %orrarlo! se produce un .@ '5+LTf. Por esto! lo primero que tenemos que pro%ar en una estructura din/mica! es preguntar si tiene algo. Si comien1o K @il 'ntonces escri%ir MLista 8aciaN Si slo manejo una estructura din/mica! pregunto por =SP! si tra%ajo con #arias estructuras din/micas cada una de un tipo! 0a%r/ tantas =SP como estructuras din/micas. Inse!+"-n en una l"s#a enlaPa*a: 6ntes de reali1ar cualquier proceso de insercin! tendr que #er si me queda memoria disponi%le. Si es posi%le 0acer la insercin! lo primero ser/ reser#ar la memoria para el elemento que quiero reser#ar. Para nosotros ser/ coger el primer elemento de =SP. 'n segundo lugar! asignaremos los #alores correctos al elemento que #amos a insertar! es decir! asignaremos al campo de informacin del nue#o elemento con la informacin! " despus actuali1amos el campo de enlace.

6 la 0ora de asignar un #alor al campo de enlace! lo primero ser/ locali1ar la posicin en la que tenemos que locali1ar el siguiente elemento! " se pueden dar los siguientes casos)

P>?=@6 122A1*$

Pa que luego os quejis

1. =nsercin al comien1o de la lista) Se modifica el #alor de la #aria%le comien1o. 2. =nsercin en cualquier otro lugar de la lista! incluido el final) 'n este caso! tendremos que conocer tam%in el nodo que #a a estar delante de la posicin de insercin! "a que a la 0ora de insertar ese nue#o elemento! #a a ocurrir que el nodo de la posicin anterior a la de insercin apunte al nue#o elemento! " que el nue#o apunte al nodo de la posicin a la que insertamos. 6 la 0ora de locali1ar la posicin de insercin depender/ de la aplicacin en particular. Como ejemplo de insercin! #amos a dar la insercin en una lista ordenada ascendentemente por el campo de informacin) ;ipo nodo) registro =nfo) FtipoG Sig) puntero a nodo +in registro Procedimiento insercion 4entBsal com) puntero a nodoE elem)FtipoG2 8ar Lug! Lugp! nue#o) puntero a nodo =nicio Si =SP K @il 'ntonces escri%ir M@o 0a" memoria disponi%leN Sino nue#o =SP =SP =SPS=? @ue#oinfo elem Si 4com K @il2 o 4elem F cominfo2 'ntonces nue#osig Com Com nue#o Sino lugp com Lug comsig 7ientras 4elem G luginfo2 " 4lug FG @il2 Lugp lug Lug lugsig +in mientras @ue#osig lug Lugpsig nue#o +in si +in si +in

7 !!a* en una l"s#a enlaPa*a:

P>?=@6 123A1*$

Pa que luego os quejis

Se trata de %orrar un nodo que contenga una determinada informacin de una lista enla1ada simple! aunque el criterio de %orrado podr:a ser otro en lugar del campo de informacin. Siempre que se 0ace un %orrado de una estructura din/mica! en general! lo primero es compro%ar que la estructura no est/ #ac:a! " una #e1 determinado esto! tendr que locali1ar el nodo a %orrar. Se pueden dar 2 casos) - 'l nodo a %orrar sea el primero. - Lue el nodo a %orrar ocupe cualquier otra posicin. Si es el del comien1o! cam%iar/ la #aria%le de comien1o de la lista porque a0ora tendr/ que apuntar al siguiente elemento! al de comien1o. Si el elemento ocupa cualquier otra posicin! tendr que locali1ar la posicin del elemento " de su predecesor! porque para desenla1arlo de la lista! el predecesor tendr/ que apuntar al elemento que le sigue al nodo a %orrar. +inalmente! una #e1 desenla1ado el nodo! 0a%r/ que li%erar la memoria que ocupa%a. 'so en cualquier lenguaje equi#ale a 0acer la operacin de li%erar memoria! " en pseudocdigo ser:a insertar el elemento al principio de =SP. Procedimiento %orrar 4entBsal com) puntero a nodoE elem) FtipoG2 8ar Lug! lugp) puntero a nodo =nicio Si com K @il 'ntonces escri%ir MLista #aciaN Sino lugp nil Lug com 7ientras 4elem G luginfo2 " 4lug FG @il2 Lugp lug Lug lugsig +in mientras Si elem FG luginfo 'ntonces escri%ir M@o e(iste el nodo a %orrarN Sino Si lugp K @il 'ntonces com comsig Sino lugpsig lugsig +in si Lugsig =SP =SP lug +in si +in si +in

P>?=@6 124A1*$

Pa que luego os quejis

6. LISTAS CIRC'LARES CON CA7ECERA: .na lista con ca%ecera! en general es una lista enla1ada simple normal! pero en la que el primer nodo es un nodo especial que no sir#e para guardar informacin #/lida! sino solamente para marcar que es el primer nodo.

Ca%ecera Oa" dos tipos de listas enla1adas con ca%ecera) - Listas enla1adas con ca%ecera " tierra) 'l primer nodo #a a ser la ca%ecera! " el <ltimo apunta a nil. @o se utili1a porque perdemos un nodo " no tienen #entajas. - Listas circulares con ca%ecera) Se caracteri1an porque tienen un nodo ca%ecera! " adem/s el <ltimo nodo apunta al nodo ca%ecera.

'n cualquier lista enla1ada con ca%ecera el primer nodo con informacin <til es el siguiente a comien1o 4Comsig2. 'n una lista circular con ca%ecera! la #entaja que presenta respecto a una normal! es que en las inserciones " %orrados no 0a" que suponer ning<n caso especial! pues todos los nodos! incluido el primero <til! tienen un predecesor. 6l recorrer la lista completa! empe1aremos %uscando la informacin por el siguiente a comien1o! " sa%emos que 0emos llegado al final de la lista cuando el siguiente al puntero que recorre la lista sea comien1o. 7Is=ue*a en una l"s#a +"!+ula! + n +aCe+e!a: Procedimiento %usqueda 4com) puntero a nodoE elem)FtipoG2 8ar Ptr) puntero a nodo =nicio Ptr comsig 7ientras 4ptrinfo FG elem2 " 4ptr FG com2 Ptr ptrsig +in mientras Si ptrsig K com 'ntonces escri%ir M'lemento no encontradoN +in si +in

Inse!+"-n en una l"s#a +"!+ula! + n +aCe+e!a: Procedimiento insercion 4com) puntero a nodoE elem) FtipoG2 P>?=@6 12$A1*$

Pa que luego os quejis

8ar Lug!lugp!nue#o) puntero a nodo =nicio Si =SP K @il 'ntonces escri%ir M@o 0a" memoriaN Sino nue#o =SP =SP =SPsig @ue#oinfo 'lem Lugp com Lug comsig 7ientras 4elem G luginfo2 " 4lug FG com2 Lugp lug Lug lugsig +in mientras @ue#osig lug Lugpsig nue#o +in si +in 7 !!a* en una l"s#a +"!+ula! + n +aCe+e!a: Procedimiento %orrado 4com) puntero a nodoE elem)FtipoG2 8ar Lug!lugp) puntero a nodo =nicio Si comKcomsig 'ntonces escri%ir MLista #aciaN Sino lugp com Lug comsig 7ientras 4luginfo FG elem2 " 4lug FG com2 Lugp lug Lug lugsig +in mientras Si lug K com 'ntonces escri%ir M'lemento no encontradoN Sino lugpsig lugsig Lugsig =SP =SP lug +in si +in si +in

8. LISTAS DO7LEMENTE ENLAOADAS: P>?=@6 12&A1*$

Pa que luego os quejis

Las listas enla1adas simples se caracteri1an porque desde un nodo solo puedo acceder al siguiente a ese nodo! por lo que solo puedo acceder al siguiente a ese nodo! por lo que solo puedo recorrer la lista en un sentido! de principio a fin. Las listas do%les se caracteri1an porque desde un nodo podemos acceder directamente tanto al siguiente como al anterior a ese. 's decir! por cada nodo tendremos 2 campos enlace! uno para enla1ar un nodo con el siguiente! " otro para enla1ar a un nodo con el nodo anterior a l. e esta manera! la lista la podemos recorrer en los 2 sentidos! de principio a fin! mo#indonos con el enlace al nodo siguiente o de fin a principio mo#indonos con el enlace al nodo anterior. Para que se pueda 0acer este segundo recorrido! adem/s de una #aria%le comien1o para cada lista! que contiene la direccin del primer nodo de la lista! necesitaremos tam%in otra #aria%le especial que denominaremos fin o final! que apunta al <ltimo nodo de la lista. Seg<n esto! la estructura de una lista do%lemente enla1ada! ser/ la siguiente) - Cada lista tendr/ 2 #aria%les! comien1o " final! del tipo puntero a nodo do%le! que contendr/n respecti#amente la direccin al primer " <ltimo nodo de la lista. - La estructura de cada nodo ser/) ;ipo nodobdo%le) registro =nfo) FtipoG Sig) puntero a nodobdo%le 6nt) puntero a nodobdo%le +in registro =@+T ant sig 'l campo siguiente del <ltimo nodo tendr/ #alor @=L! " el campo anterior del primer nodo tam%in tendr/ #alor @=L! para indicar que no 0a" nada antes del primer nodo.

La caracter:stica de una lista do%lemente enla1ada #ac:a es que el comien1o " el final son iguales " apuntan a @=L. P>?=@6 12*A1*$

Pa que luego os quejis

Si 4com K final2 " 4com K @il2

Lista do%lemente enla1ada con un solo elemento) Si 4com K final2 " 4com FG @il2

Para implementar la insercin " el %orrado de una lista do%lemente enla1ada! #amos a suponer que la lista de espacio disponi%le tiene la forma de una lista do%lemente enla1ada. Re+ !!"* *e una l"s#a * Cle$en#e enlaPa*a: Para pasar por todos los nodos de la lista! podemos 0acerlo igual que una lista enla1ada simple! solo que a0ora la podemos recorrer la lista 0acia delante con el campo S=?! " 0acia atr/s con el campo 6@;. Re+ !!"* >a+"a *elan#e: Procedimiento recorridobadelante 4com) puntero a nodo do%le2 8ar Ptr) puntero a nodo do%le =nicio Ptr Comien1o 7ientras 4ptr FG @il2 `Procesar P;5.=@+Ta ptr ptrsig fin mientras fin Re+ !!"* >a+"a a#!5s: Procedimiento recorridobadelante 4com) puntero a nodo do%le2 8ar Ptr) puntero a nodo do%le =nicio Ptr +inal 7ientras 4ptr FG @il2 `Procesar P;5.=@+Ta ptr ptrant fin mientras +in 7Is=ue*a en una l"s#a * Cle$en#e enlaPa*a:

P>?=@6 12,A1*$

Pa que luego os quejis

's e(actamente igual que en una lista enla1ada simple! solo que a0ora puedo %uscar el elemento %uscado desde el comien1o " mo#indome con S=? o desde el final " mo#indome con 6@;. Si tengo una idea de por donde #a a estar el elemento! empe1are por donde sea mejor. Procedimiento %usqueda 4com) puntero a do%le nodoE final) puntero a do%le nodoE elem) FtipoGE entBsal lug) puntero a do%le nodo2 8ar Ptr! lug) puntero a do%le nodo =nicio Lug nil Ptr final 7ientras 4ptr FG nil2 " 4elemento G ptrinfo2 Ptr ptrant +in mientras Si 4ptr FG nil2 " 4elemento ptrinfo2 'ntonces lug ptr +in si +in Inse!+"-n en una l"s#a * Cle$en#e enlaPa*a: Lo primero es #er si me queda espacio disponi%le en memoria din/mica! si me queda! reser#o memoria para un nue#o elemento " meto la informacin que quiero en su campo de informacin! " lo siguiente es actuali1ar sus campos de enlace. Casos particulares) - =nsercin al comien1o si la lista est/ #ac:a. - =nsercin al comien1o si la lista no est/ #ac:a. - =nsercin al final. - =nsercin en medio de la lista.

P>?=@6 12-A1*$

Pa que luego os quejis

Procedimiento insercion 4entBsal com) puntero a nodobdo%leE entBsal final) puntero a nodobdo%leE elem) FtipoG2 #ar lug! nue#o) puntero a nodobdo%le =nicio si =SP K @il entonces escri%ir M@o 0a" memoriaN sino nue#o =SP =SP =SPSig @ue#oinfo elem Si com K nil 'ntonces nue#osig @=L @ue#oant @=L Com nue#o +inal nue#o Sino si elem F cominfo 'ntonces nue#osig com @ue#oant nil Comant nue#o Com nue#o Sino lug comsig 7ientras 4elem G luginfo2 " 4lug FG @il2 Lug lugsig +in mientras Si lug FG nil 'ntonces nue#osig lug @ue#oant lugant Lugantsig nue#o Lugant nue#o Sino nue#osig nil @ue#oant final +inalsig nue#o +inal nue#o +in si +in si +in si +in si +in 7 !!a* en una l"s#a * Cle$en#e enlaPa*a: Primero 0a" que #er si la lista tiene alg<n elemento! " si tiene alg<n elemento! 0a%r/ que %uscar si el elemento que queremos %uscar e(iste en la lista! " si e(iste! %usco en que posicin se encuentra. Casos particulares) - Jorrado del primer nodo. - Jorrado del <ltimo nodo. - Jorrado de cualquier nodo. espus de todo esto! 0a%r/ que li%erar la memoria del nodo. P>?=@6 13HA1*$

Pa que luego os quejis

Procedimiento %orrado 4entBsal com) puntero a nodobdo%leE entBsal final) puntero a nodobdo%leE elem) FtipoG2 #ar lug) puntero a nodobdo%le inicio si com K @il entonces escri%ir MLista #aciaN sino lug com mientras 4luginfo FG elem2 " 4lug FG nil2 lug lugsig fin mientras si lug K @il entonces escri%ir M@o encontradoN sino si lug K com entonces com comsig si com K @il entonces final nil sino comant nil fin si sino si lug FG final entonces lugantsig lugsig lugsigant lugant sino lugantsig nil final lugant fin si fin si lugsig =SP =SP lug fin si fin si fin ;. PILAS: .na pila es una estructura lineal de datos con la caracter:stica especial de que a0ora! no podemos 0acer las inserciones " las eliminaciones en cualquier lugar! sino que o%ligatoriamente las tenemos que 0acer por un e(tremo de la lista. 'se e(tremo lo llamamos cima de la pila. 'sto supone que se procesen los elementos de la pila en orden in#erso a su entrada en la estructura! es decir! el primer elemento de la pila que usare ser/ el <ltimo que 0a entrado 4L=+T2. Con una pila podemos 0acer dos operaciones %/sicas! P.SO 4meter2 " PTP 4sacar2. 6parte de estas dos funciones se pueden definir otras como la de pila #ac:a o top! que me dice cual es elemento que est/ en la cima de la pila pero sin sacarlo. Se puede implementar con memoria est/tica 4arra"s2 o con memoria din/mica 4listas enla1adas2.

P>?=@6 131A1*$

Pa que luego os quejis

Si utili1o un arra"! tendr que definir cual es el tama9o m/(imo del arra"! que ser/ el de la pila! " aparte tendr definida una #aria%le cima que tendr/ en cada momento el :ndice que corresponde al elemento del arra" que est/ en la cima de la pila. Pila K arra" P1..ma(bpilaQ de FinfoG Cima) entero Para se9alar que la cima est/ #ac:a! cima es igual a H porque no tiene que apuntar a ning<n elemento. I$)le$en#a+"-n *e una )"la + n $e$ !"a es#5#"+a: 6lgoritmo prinbpila Const 7a(bpila K Fma(bpilaG 8ar P) arra" P1..ma(bpilaQ de FinfoG C) entero 'lem) FinfoG =nicio CH Leer 4elem2 Si pilab#acia 4C2 K #erdadero 'ntonces escri%ir MPila #aciaN Sino sacar 4pila!c!elem2 'scri%ir M'lemento sacadoNelem +in si +in +uncion pilab#acia 4cima) entero2) %ooleano =nicio Si cima K H 'ntonces retorno #erdadero Sino retorno falso +in si +in Procedimiento meter 4entBsal pila) arra"P1..ma(bpilaQ de FinfoGE cima) enteroE elem)FinfoG2 =nicio si cima K ma(bpila entonces escri%ir MPila llenaN sino cima cima C 1 pilaPcimaQ elem fin si +in +uncion cimabpila 4pila) arra"P1..ma(bpilaQ de FinfoGE cima) entero2)FinfoG =nicio 5etorno pilaPcimaQ +in

P>?=@6 132A1*$

Pa que luego os quejis

Procedimiento sacar 4entBsal pila) arra"P1..ma(bpilaQ de FinfoGE cima) enteroE entBsal e) FinfoG2 =nicio ' cimabpila 4cima!pila2 Cima cima h 1 +in I$)le$en#a+"-n *e una )"la + n $e$ !"a *"n5$"+a: ;ipo nodo) registro =nfo) FtipoG Sig) puntero a nodo +in registro 6lgoritmo manejobpila 8ar Cima) puntero a nodo 'lem) FtipoG =nicio Cima nil 7eter 4cima!elem2 Si pilab#acia 4cima2 'ntonces escri%ir M@o 0a" memoriaN Sino sacar 4cima!elem2 'scri%ir M'lemento sacadoNelem +in si +in +uncion pilab#acia 4cima) puntero a nodo2) %ooleano =nicio Si cima K nil 'ntonces retorno #erdadero Sino retorno falso +in si +in Procedimiento poner 4entBsal cima) puntero a nodoE elem) FtipoG2 8ar @ue#o) puntero a nodo =nicio Si =SP K nil 'ntonces escri%ir M@o 0a" memoriaN Sino nue#o =SP =SP =SPsig @ue#oinfo elem @ue#osig cima Cima nue#o +in si P>?=@6 133A1*$

Pa que luego os quejis

+in

+uncion cimabpila 4cima) puntero a nodo2)FtipoG =nicio 5etorno cimainfo +in Procedimiento sacar 4entBsal cima) puntero a nodoE entBsal elem) FtipoG2 8ar Jorrado) puntero a nodo =nicio 'lem cimabpila 4cima2 Jorrado cima Cima cimasig Jorradosig =SP =SP %orrado +in A)l"+a+" nes *e las )"las: .n ejemplo t:pico de uso de pilas! es en las llamadas entre funciones. 'n este caso! el sistema operati#o utili1a una pila en donde #a guardando la direccin de retorno de cada una de estas llamadas. <. COLAS: .na cola tam%in es una lista lineal de elementos! en la que las inserciones se 0acen por un e(tremo de la lista! " los %orrados por otro. Las inserciones se 0acen por el final " los %orrados por el principio. 'sto significa que es una estructura del tipo +=+T. Sea cual sea la implementacin! siempre tendr/n que e(istir 2 #aria%les! frente " final! que apunten al comien1o " al fin de la cola respecti#amente. Podemos implementar una cola con memoria est/tica 4arra"s2 " con memoria din/mica 4listas enla1adas2. Si implementamos la cola con arra"s! tendremos un arra" llamado cola! que contiene el tipo de informacin que contiene la cola! " aparte dos #alores! frente " final! cu"o #alor ser#ir/ como el :ndice que indica que elemento est/ al frente " al final de la cola. La cola estar/ #ac:a cuando frente " final no apunten a ning<n :ndice del arra"! " esto ser/ cuando frente " final #algan H si el arra" se empie1a a numerar a partir del 1. 6parte de la funcin que me dice si la cola est/ #ac:a! tendr que implementar funciones de sacar " meter un elemento. Para insertar un elemento en una cola! 0a%r:a que incrementar el #alor en la #aria%le final! " despus introducir en la cola del final el elemento. Para eliminar un elemento de una cola! %astar:a primero #er que elemento est/ al frente de la cola! " para eliminarlo aumentar el frente en una unidad. Si solo consideramos esta posi%ilidad! es decir! manejar el arra" solo incrementando! no lo estar:amos utili1ando eficientemente! porque podr:amos llegar al caso en que 0a%iendo posiciones li%res al comien1o del arra" no pudisemos usarlas cuando el final alcan1ase el m/(imo :ndice del arra". P>?=@6 134A1*$

Pa que luego os quejis

Para e#itar esto! el arra" que implementa la cola! lo #amos a tratar como un arra" circular 4suponemos que despues de la posicin @ del arra"! #iene la posicin 12. 'sto quiere decir que si la cola no est/ llena! despus de final K 7a(! #iene final K 1! " al sacar el elemento de la cola! si no est/ #ac:a! despus de frente K @! #endr/ frente K 1! " si despus de sacar el elemento la cola queda #ac:a! actuali1aremos frente " final a H. Si frente es igual a final " son distintos de H antes de sacar un elemento! quiere decir que ese elemento es el <ltimo. 6ntes de insertar un elemento! tendr que #er si la cola est/ llena 4frente K 1 " final K 7a( o frente K final C 12. I$)le$en#a+"-n *e + las + n $e$ !"a es#5#"+a: ;ipo datos) arra" P1..ma(bcolaQ de FtipoG 6lgoritmo manejobcola 8ar Cola) datos +rente! final) entero 'lem! result) FtipoG =nicio +rente H +inal H 7eterbcola 4frente!final!cola!elem2 Si colab#acia 4frente!final2 K #erdadero 'ntonces escri%ir MCola #ac:aN Sino sacarbcola 4frente!final!cola!result2 'scri%ir M'lemento sacadoNresult +in si +in +uncion colab#acia 4frente) enteroE final) entero2) %oolean =nicio Si 4frente K H2 " 4final K H2 'ntonces retorno #erdadero Sino retorno falso +in si +in

P>?=@6 13$A1*$

Pa que luego os quejis

Procedimiento meterbcola 4entBsal cola)datosE entBsal frente)enteroE entBsal final)enteroE 'lem) FtipoG2 =nicio Si 44frente K 12 " 4final K 7a(bcola22 o frente K final C 1 'ntonces escri%ir MCola llenaN Sino si colab#acia 4frente!final2 K #erdadero 'ntonces frente 1 +inal 1 Sino si final K 7a(bcola 'ntonces final 1 Sino final final C 1 +in si +in si ColaPfinalQ elem +in si +in Procedimiento sacarbcola 4entBsal cola)datosE entBsal frente)enteroE entBsal final)enteroE 'lem) FtipoG2 =nicio 'lem colaPfrenteQ Si frente K final 'ntonces frente H +inal H Sino si frente K 7a(bcola 'ntonces frente 1 Sino frente frente C 1 +in si +in si +in I$)le$en#a+"-n *e + las + n $e$ !"a *"n5$"+a: +uncion colab#acia 4com) puntero a nodobdo%le2) %ooleano =nicio Si com K nil 'ntonces retorno #erdadero Sino retorno falso +in si +in

P>?=@6 13&A1*$

Pa que luego os quejis

Procedimiento meterbcola 4entBsal com) puntero a nodobdo%leE entBsal final) puntero a nodobdo%leE elem) FtipoG2 #ar nue#o) puntero a nodobdo%le =nicio Si =SP K nil 'ntonces escri%ir M@o 0a" memoriaN Sino nue#o =SP =SP =SPsig @ue#oinfo elem @ue#oant final @ue#osig nil +inalsig nue#o +inal nue#o Si colab#acia 4frente2 K #erdadero 'ntonces frente nue#o +in si +in si +in Procedimiento sacarbcola 4entBsal com) puntero a nodobdo%leE entBsal final) puntero a nodobdo%leE result) FtipoG2 #ar ptr) puntero a nodobdo%le =nicio 5esult cominfo Ptr com Com comsig Si com K nil 'ntonces final nil Sino comant nil +in si Ptrsig =SP =SP ptr +in A)l"+a+" nes *e las + las: Las colas se suelen utili1ar en los procesos por lotes " en la utili1acin de recursos del sistema. Cuando un proceso quiere usar un recurso " otro lo est/ usando! tendr/ que ponerse en la cola! " se ir/ asignando el recurso seg<n el orden en que se 0a pedido. 6 #eces! la utili1acin de recursos por parte de los procesos! nos interesa que ciertos procesos tengan ma"or prioridad que otros! incluso aunque lleguen m/s tarde! " para ello utili1ar:amos las colas de prioridades. P>?=@6 13*A1*$

Pa que luego os quejis

Cada elemento de la cola! tendr/ otro campo que indique su prioridad! tal que a la 0ora de sacar un elemento de la cola! saco el del frente! " a la 0ora de insertar un elemento en la cola! tendr en cuenta la prioridad del elemento que quiero insertar! " para ello se inserta en la cola por orden de prioridad! " si 0a" mas elementos que tienen la misma prioridad que el que queremos insertar! los procesamos seg<n su orden de llegada! es decir! que lo colocamos como el <ltimo de los elementos con esa prioridad. DO7LES COLAS O 7ICOLAS: .na %icola es una lista lineal de elementos en la que las inserciones " %orrados es pueden 0acer por cualquiera de sus e(tremos. 8a a 0a%er 2 #aria%les! i1quierda " derec0a! que apuntan a sus e(tremos. Oa" 2 tipos especiales de %icolas) e entrada restringida) Lue permite inserciones solo por un e(tremo " %orrados por los dos. e salida restringida) Lue permite inserciones por cualquier e(tremo " %orrado solo por uno. Se pueden implementar con memoria est/tica o din/mica.

P>?=@6 13,A1*$

Pa que luego os quejis

EJERCICIOS: TEMA 11
1. ise9ar un algoritmo que coloque el primer nodo de una lista enla1ada como pen<ltimo! pero cam%iando solo los campos enlace. La lista es una lista enla1ada do%le. Procedimiento resultado 4entBsal com) ptrba nodoE entBsal final) ptrba nodo2 8ar Prin) puntero a nodo =nicio Si 4com K final2 o 4comsig K final2 'ntonces escri%ir M@o se puede 0acer el cam%ioN Sino prin com Comsig final Comant finalant +inalantsig com +inalant com Com prinsig Comant nil +in si +in ada una cadena de caracteres C1! en un arra" de longitud m/(ima @! " con el fin de cadena RjS! " dada otra cadena C2 almacenada en una lista enla1ada simple! que cada nodo de la lista contiene una letra. Se trata de que pasandole a un su%programa 2 cadenas! determinar cuantas #eces aparece C1 en C2. +uncion compara 4c1) cadenaE c2) ptrba nodo2) entero 8ar =ni!p) puntero a nodo =!res) entero =nicio 5es H P C2 7ientras 4pFG nil2 Si 4pinfo K c1PiQ2 'ntonces ini P =1 7ientras 4pinfo K c1PiQ2 " 4c1PiQ FG RjS2 " 4p FG nil2 =iC1 P psig +in mientras Si c1PiQ K RjS 'ntonces res res C 1

2.

P>?=@6 13-A1*$

Pa que luego os quejis

Sino p inisig +in si Sino p psing +in si +in mientras +in 3. ada una lista do%lemente enla1ada que contiene en cada nodo un d:gito decimal 4H..-2! determinar el #alor que se o%tiene si consideramos la informacin de cada nodo de la lista como los trminos de un polinomio! donde el trmino de menor grado es el <ltimo nodo " el de m/(imo grado es el del comien1o! e#aluando el polinomio para un #alor que se le pasa como par/metro. +uncion pot 4%ase) enteroE e(p) entero2) real 8ar =) entero 6cum) real =nicio 6cum 1 esde i K 1 0asta e(p 6cum acum D %ase +in desde 5etorno acum +in +uncion polinomio 4fin) ptrba nodobdo%leE () entero2) real 8ar 5es) real P) puntero a nodobdo%le =nicio '(p H 5es H P final 7ientras p FG nil 5es res C 4cinfo D pot 4(!e(p2 P pant '(p e(p C 1 +in mientras 5etorno res +in

P>?=@6 14HA1*$

Pa que luego os quejis

4. ;enemos almacenado en un fic0ero de productos el stocI de cada uno de ellos en el almacn. Cada registro tiene identificador! nom%re! stocI actual " stocI m:nimo. =terati#amente! 0asta que se introdu1ca un identificador de producto igual a H! se ir/n 0aciendo pedidos o entregas pidindonos el identificador! la cantidad " si es pedido o entrega! " con ellos iremos actuali1ando la cantidad de productos en almacn. 6l final quiero tener el fic0ero actuali1ado. Para ello! utili1aremos una lista enla1ada como estructura au(iliar. ;ipo producto) registro =ndentificador) entero @om%re) cadena StocIbact) entero StocIbmin) entero +in registro @odo) registro =nfo) producto Sig) puntero a nodo +in registro 8ar Com! ptr) puntero a nodo 5eg) producto +ic0) fic0ero de producto =d!cant) entero Car) car/cter =nicio Com nil 6%rir 4fic0!Ndatos.datN!entrada2 Leer 4fic0!reg2 7ientras no eof 4fic02 =nsertar 4com!reg2 Leer 4fic0!reg2 +in mientras Cerrar 4fic02 'scri%ir M=dentificadorN Leer 4id2 7ientras id FG H 'scri%ir MCantidadN Leer cant 'scri%ir MPedidoA'ntregaN Leer car 7odifica 4com!id!cant!car2 'scri%ir M=dentificadorN

P>?=@6 141A1*$

Pa que luego os quejis

Leer id +in mientras 6%rir 4fic0!Ndatos.datN!salida2 Ptr com

7ientras com FG nil 'scri%ir 4fic0!cominfo2 Com comsig Ptrsig =SP =SP ptr Ptr com +in mientras Cerrar 4fic02 +in Procedimiento insertar 4entBsal com) puntero a nodoE elem) producto2 8ar Lug!lugp!nue#o) puntero a nodo =nicio Si =SP K @il 'ntonces escri%ir M@o 0a" memoriaN Sino nue#o =SP =SP =SPSig @ue#oinfo elem Si com K nil 'ntonces nue#osig com Com nue#o Sino lugp com Lug comsig 7ientras 4elem.identificador G luginfo2 " 4lug FG nil2 Lugp lug Lug lugsig +in mientras @ue#osig lug Lugpsig nue#o +in si +in si +in

P>?=@6 142A1*$

Pa que luego os quejis

Procedimiento modifica 4prim) ptrba nodoE d) enteroE c) enteroE caract) car/cter2 8ar Ptr) puntero a nodo =nicio Si prin K nil 'ntonces escri%ir MLista #aciaN Sino ptr prin 7ientras 4ptr FG nil2 " 4id FG ptrinfo.identificador2 Ptr ptrsig +in mientras Si ptr K nil 'ntonces escri%ir M'l producto no e(isteN Sino si 4caract K RPS2 o 4caract K RpS2 'ntonces ptrinfo.cantidad ptrinfo.cantidad C c Sino si ptrinfo.cantidad GK c 'ntonces ptrinfo.cantidad ptrinfo.cantidad h c Sino escri%ir M@o 0a" cantidad suficienteN +in si +in si +in si +in si +in

P>?=@6 143A1*$

Pa que luego os quejis

$.

adas 2 listas enla1adas simples! L1 " L2! ordenadas en ascendente! actuali1ar las 2 listas de modo que L2 quede #ac:a " L1 contenga a todos los elementos de L2! menos a los repetidos. @o %orrar elementos! 0a" que enla1arlos. Procedimiento juntar 4entBsal com1) ptrba nodoE entBsal com2) ptrba nodo2 8ar P1!a1! au(! %orrado) puntero a nodo =nicio Si com2 FG nil 'ntonces si com1 K nil 'ntonces com1 com2 Sino si 4com2info F com1info2 " 4com2 FG nil2 'ntonces au( com2 Com2 com2sig 6u(sig com1 Com1 au( Sino a1 com1 P1 com1sig 7ientras 4p1 FG nil2 " 4com2 FG nil2 Si 4com2info F p1info2 'ntonces a1 p1 P1 p1sig Sino si 4com2info K p1info2 'ntonces %orrado com2 Com2 com2sig Jorradosig =SP =SP %orrado Sino au( com2 61sig com2 Com2sig P1 Com2 au(sig 61 a1sig +in si +in si +in mientas Si com2 FG nil 'ntonces a1sig com2 Com2 nil +in si

P>?=@6 144A1*$

Pa que luego os quejis

+in si +in si +in si +in

&. =mplementar una cola usando listas enla1adas simples) Procedimiento meter 4entBsal com) ptrba nodoE entBsal final) ptrba nodoE e) FtipoG2 8ar @ue#o) ptrba nodo =nicio Si =SP K nil 'ntonces escri%ir M@o 0a" memoriaN Sino nue#o =SP =SP =SPsig @ue#osig @il Si com K nil 'ntonces com nue#o +inal nue#o Sino finalsig nue#o +inal nue#o +in si +in si +in Procedimiento sacar 4entBsal com)ptrba nodoE entBsal final)ptrba nodoE entBsal e)FtipoG2 8ar Jorrado) puntero a nodo =nicio ' cominfo Jorrado com Com comsig Si com K nil 'ntonces final nil +in si Jorradosig =SP =SP %orrado +in

P>?=@6 14$A1*$

Pa que luego os quejis

*. =mplementar una cola de prioridades con listas enla1adas simples) Procedimiento meter 4entBsal com) ptrba nodoE e) FtipoGE p) entero2 8ar Lugp! lug! nue#o) puntero a nodo =nicio Si =SP K nil 'ntonces escri%ir M@o 0a" memoriaN Sino nue#o =SP =SP =SPsig @ue#oinfo e @ue#oprioridad p Lugp nil Lug com 7ientras 4lug FG nil2 " 4p GK lugprior2 Lugp lug Lug lugsig +in mientras Si lugp K nil 'ntonces nue#osig com Com nue#o Sino lugpsig nue#o @ue#osig lug +in si +in si +in Procedimiento sacar 4entBsal com)ptrba nodoE entBsal e)FtipoG2 8ar Jorrado) puntero a nodo =nicio ' cominfo Jorrado com Com comsig Jorradosig =SP =SP %orrado +in P>?=@6 14&A1*$

Pa que luego os quejis

,. =mplementar una cola de prioridades como lista de listas) ;ipo nodobprior) registro Prior) entero Prinp) ptrba nodobinfo Sig) ptrba nodobpr +in registro @odobinfo) registro =nfo) FtipoG 'nl) ptrba nodobinfo +in registro Procedimiento meter 4entBsal com)ptrba nodobpriorE elem)FtipoGE p) entero2 8ar @ue#oi! lugi) puntero a nodobinfo @ue#op! ptr! ptra) puntero a nodobprior =nicio Si 4 =SPP K nil2 " 4 =SP= K nil2 'ntonces escri%ir M@o 0a" memoriaN Sino nue#oi =SP= =SP= =SP=enl @ue#oiinfo elem @ue#osig @=L Ptra nil Ptr com 7ientras 4ptr FG nil2 " 4p G ptrprior2 Ptra ptr Ptr ptrsig +in mientras Si 4p K ptrprior2 'ntonces lugi ptrprinp 7ientras 4lugisig FG nil2 Lugi lugienl +in mientas Lugisig nue#o Sino nue#op =SPP P>?=@6 14*A1*$

Pa que luego os quejis

=SPP =SPPsig @ue#opprior p @ue#opsig ptr @ue#opprinp nue#oi Si 4ptra K nil2 'ntonces com nue#op Sino ptrasig nue#op +in si +in si +in si +in

Procedimiento sacar 4entBsal com) ptrba nodobpriorE entBsal e)FtipoG2 8ar Jori) ptrba nodobinfo Jorp) ptrba nodobprior =nicio ' comprinpinfo Jori comprinp Comprinp comprinpenl Jorienl =SP= Si comprinp K nil 'ntonces %orp com Com comsig Jorpsig =SPP =SPP %orp +in si +in

P>?=@6 14,A1*$

Pa que luego os quejis

9RBOLES Y GRAFOS: ESTRUCTURAS DE DATOS NO LINEALES: TEMA 12


1. 2. 3. 4. $. &. *. >r%oles. >r%oles %inarios. >r%oles %inarios de %<squeda. 6plicaciones de los /r%oles %inarios. ?rafos. Tperaciones con grafos. 6plicaciones de los grafos.

1. @R7OLES: Los /r%oles est/n dentro de las estructuras de datos no lineales! que consisten en que desde un nodo tengo acceso a #arios elementos. .n /r%ol es un conjunto finito de elementos llamados nodos! que guardan entre s: una relacin jer/rquica tal que siempre #a a e(istir un nodo ra:1 diferenciado del resto! " los restantes parten de l! formando conjuntos disjuntos cada uno de los cuales es a su #e1 otro /r%ol. 6 cada uno de esos /r%oles se les llama su%/r%oles del ra:1. .n /r%ol #ac:o es aquel que no tiene ning<n nodo 45ai1 K @=L2. 6 J C ' = + ? d O i L

Te!$"n l gBa *e l s 5!C les: - 5a:1) @odo esencial de que parten todos los dem/s. 's el <nico que no tiene antecesor. - @odo) Cada uno de los elementos del /r%ol. P>?=@6 14-A1*$

Pa que luego os quejis

Ooja o nodo terminal) @odo que no tiene ning<n otro su%/r%ol de%ajo de l. Oijo) Cada nodo que no es 0oja tiene de%ajo de l a otros su%/r%oles. Padre) ;odo nodo e(cepto el ra:1! que tiene asociado un predecesor del que desciende. Oermano) 5elacin entre los nodos 0ijos del mismo padre. @odo interno) 'l que tiene alg<n 0ijo. @i#el) Cada nodo de un /r%ol tiene asociado un n<mero de ni#el. 'l del ra:1 es el H! " a partir de a0: se #a aumentando de 1 en 1. Camino entre 6 " J) Sucesin de enlaces o nodos por los que 0a" que pasar para llegar de 6 a J. 5ama) Camino que termina en una 0oja. Profundidad de un /r%ol) 's el n<mero m/(imo de nodos de la rama m/s larga del /r%ol. 'qui#ale al n<mero m/(imo de ni#eles C 1. Peso) @<mero de 0ojas que tiene un /r%ol. Josque) Coleccin de 2 o m/s /r%oles.

2. @R7OLES 7INARIOS: Son un conjunto finito de elementos llamados nodos que contienen un nodo ra:1 " donde cada nodo puede tener H!1! 2 0ijos. 6 cada su%ar%ol se le denomina su%ar%ol i1quierdo " su%ar%ol derec0o. Te!$"n l gBa: os /r%oles %inarios son similares si tienen los nodos colocados igual. - >r%oles %inarios equi#alentes o copias) ;ienen la misma estructura " los mismos contenidos. - >r%oles %inarios equili%rados) 6quellos que en la altura entre su /r%ol i1quierdo " derec0o se diferencian como m/(imo en una unidad. - >r%oles %inarios completos) 6quellos en que cada nodo del /r%ol tiene H 2 0ijos! el n<mero m/(imo de 0ijos de un determinado ni#el i ser/ 2 ele#ado a i. - >r%ol lleno) Cuando todos los ni#eles est/n completos. Re)!esen#a+"-n *e 5!C les C"na!" s: Se pueden representar con memoria est/tica o din/mica. Con memoria din/mica la estructura de un nodo #a a tener el campo info " otros 2 nodos que referncien al 0ijo i1quierdo " derec0o de cada nodo. Re)!esen#a+"-n *e 5!C les C"na!" s + n )un#e! s: Cada nodo #a a tener un registro que contiene el campo de informacin " 2 campos de tipo puntero. =@+T =_L ;ipo nodobar%ol) registro =nfo) FtipoG =1q!der) ptrba nodobar%ol +in registro P>?=@6 1$HA1*$ '5

Pa que luego os quejis

6 parte de los nodos! los /r%oles tienen una #aria%le especial llamada ra:1! que es de tipo puntero a nodobar%ol " apunta al nodo que est/ al comien1o del /r%ol. 5ai1

=SPb65 #a a ser una lista enla1ada simple en la que las inserciones " %orrados los 0acemos por el comien1o " como campo de enlace #amos a usar el nodo i1quierdo. Re+ !!"* *e l s 5!C les C"na!" s: 's pasar por todos sus nodos. Para recorrer un /r%ol lo podemos 0acer de 3 formas! seg<n el momento en el que procesemos el nodo ra:1. Las 3 formas se llaman ) Preorden! =norden! Posorden. 'n cualquiera de las tres! siempre se recorre primero el su%/r%ol i1quierdo! " luego el derec0o! " se diferencian en el momento en el que recorremos el ra:1. - Preorden) La ra:1 se procesa primero! luego el i1quierdo " luego el derec0o. - =norden) Primero la ra:1! luego el i1quierdo " luego el derec0o. - Posorden) Primero el i1quierdo! luego el derec0o " luego la ra:1. Preorden) 6! J! ! '! ?! C! + =norden) ! J! '! ?! 6! +! C Posorden) ! ?! '! J! +! C! 6 4 Re+ !!"* *e un 5!C l C"na!" : Los ar%oles son estructuras recursi#as! por lo que los algoritmos m/s eficientes con /r%oles son los recursi#os. Procedimiento preorden 4rai1) ptrba nodobar2 =nicio Si rai1 FG nil 'ntonces `procesar rai1info2 Preorden 4rai1i1q2 Preorden 4rai1der2 +in si +in Procedimiento inorden 4rai1) ptrba nodobar2 =nicio Si rai1 FG nil 'ntonces inorden 4rai1i1q2 `procesar rai1info2 P>?=@6 1$1A1*$

Pa que luego os quejis

inorden 4rai1der2 +in si +in Procedimiento posorden 4rai1) ptrba nodobar2 =nicio Si rai1 FG nil 'ntonces posorden 4rai1i1q2 Posorden 4rai1der2 `procesar rai1info2 +in si +in

;am%in se puede recorrer un /r%ol %inario con un algoritmo no recursi#o) 6lgoritmo inorden 8ar Pila) arra"P1..7a(Q de puntero a nodobar Cima) entero 5ai1! ptr) puntero a nodobar =nicio Cima 1 PilaPcimaQ @il Ptr rai1 7ientras 4ptr FG nil2 Cima cima C 1 PilaPcimaQ ptr Ptr ptri1q +in mientras Ptr pilaPcimaQ Cima cimaB1 7ientras 4ptr FG nil2 `procesar ptrinfoa si ptrder FG nil entonces ptr ptrder mientras ptr FG nil cima cima C 1 pilaPcimaQ ptr ptr ptri1q fin mientras fin si ptr pilaPcimaQ cima cima h 1 fin mientras +in

P>?=@6 1$2A1*$

Pa que luego os quejis

&. @R7OLES 7INARIOS DE 7RSQ'EDA: Son un tipo especial de /r%oles %inarios que se caracteri1a porque los elementos del /r%ol son todos distintos " adem/s est/n colocados de tal manera que el recorrido en =norden de ese /r%ol da lugar a que los elementos se procesen ordenados seg<n un determinado campo de informacin! para ello es necesario que todos los nodos del /r%ol cumplan la siguiente regla) Lue todo lo que est/ a la i1quierda de un nodo tenga un #alor menor que el resto del nodo! " todo lo que esta a la derec0a tenga un #alor ma"or. 2$ 1, 3$ 12 11 14 1$ 21 1& 22 3H 32 3* 3, 4H

5ecorrido inorden) 11!12!14!1$!1&!1,!21!22!2$!3H!32!3$!3*!3,!4H. 4 7Is=ue*a *e un ele$en# : ado un elemento! mirar si se encuentra o no en el /r%ol! #o" a de#ol#er un puntero a ese elemento " a su padre. Procedimiento %uscar 4rai1) ptrba nodobarE entBsal act) ptrba nodobarE entBsal pad) ptrba nodobarE e)FtipoG2 =nicio Pad @il 6ct rai1 7ientras 4act FG nil2 " 4actinfo FG e2 Pad act Si 4e F actinfo2 'ntonces act acti1q Sino act actder +in si +in mientras Si act FG nil 'ntonces escri%ir M'lemento encontradoN Sino escri%ir M'lemento no encontradoN +in si +in 4 Inse!+"-n en un 5!C l C"na!" : Primero 0a" que #er que no 0a"a otro elemento igual en el /r%ol! " despus 0a%r/ que colocar el elemento a la i1quierda de su padre si es menor que l o al derec0a si es ma"or. Alg !"#$ n !e+u!s"/ : Procedimiento insercion 4entBsal rai1) ptrba nodobarE elem)FtipoG2 8ar Ptr!pad!nue#o) ptrba nodobar =nicio Juscar 4rai1!ptr!pad!elem2 Si ptr FG nil 'ntonces escri%ir M'l elemento "a e(isteN P>?=@6 1$3A1*$

Pa que luego os quejis

Sino si =SP K @il 'ntonces escri%ir M@o 0a" memoriaN Sino nue#o =SP =SP =SP=_L @ue#oinfo elem @ue#oi1q nil @ue#oder nil Si P6 K nil 'ntonces rai1 nue#o Sino si elem F padinfo 'ntonces padi1q nue#o sino Padder nue#o fin si fin si fin si fin si +in Alg !"#$ !e+u!s"/ : Procedimiento insercion 4entBsal ptr) ptrba nodobarE elem)FtipoG2 =nicio Si ptr FG nil 'ntonces si elem F ptrinfo 'ntonces insercion 4ptri1q!elem2 Sino si elem G ptrinfo 'ntonces insercion 4ptrder!elem2 Sino escri%ir M'l elemento "a e(isteN +in si +in si Sino ptr =SP =SP =SPi1q Ptrinfo elem Ptri1q nil Ptrder nil +in si +in 4 7 !!a* en un 5!C l C"na!" : Si el nodo a %orrar slo tiene un 0ijo! lo sustituimos por ese " "a se aca%o. Pero si el nodo a %orrar tiene 2 0ijos! 0a" que %uscar cual es el sucesor de ese nodo 4estar/ a la derec0a del m/s a la i1quierda2 " el padre de ese sucesor. Sustituir el nodo a %orrar por su sucesor. 6l final 0a" que poner como 0ijos del sucesor 4que es el que 0a sustituido al nodo %orrado2 a los 0ijos del nodo %orrado. B Alg !"#$ n !e+u!s"/ : Procedimiento %orrar 4entBsal rai1) ptrba nodobarE elem)FtipoG2 8ar Ptr! pad) ptrba nodobar =nicio P>?=@6 1$4A1*$

Pa que luego os quejis

Juscar 4rai1!ptr!pad!elem2 Si ptr K nil 'ntonces escri%ir M'l elemento no e(isteN Sino si 4ptri1q FG nil2 " 4ptrder FG nil2 'ntonces %orrarb2b0 4rai1!ptr!pad2 Sino %orrarbH1b0 4rai1!ptr!pad2 +in si Ptri1q =SP =SPi1q ptr +in si +in

Procedimiento %orrarb2b0 4entBsal rai1) ptrba nodobarE entBsal) ptrba nodobarE pad) ptrba nodobar2 8ar Suc!padsuc!0ijosuc) ptrba nodobar =nicio Padsuc ptr Suc ptrder 7ientras suci1q FG nil Padsuc suc Suc suci1q +in mientras Oijosuc sucder Si padsuci1q K suc 'ntonces padsuci1q 0ijosuc Sino padsucder 0ijosuc +in si Si pad K nil 'ntonces rai1 suc Sino si padi1q K ptr 'ntonces padi1q suc Sino padder suc +in si +in si Suci1q ptri1q Sucder ptrder +in Procedimiento %orrarbH1b0 4entBsal rai1) ptrba nodobarE entBsal ptr) ptrba nodobarE Pad) ptrba nodobar2 8ar Oijo) ptrba nodobar P>?=@6 1$$A1*$

Pa que luego os quejis

=nicio Si ptri1q FG nil 'ntonces 0ijo ptri1q Sino 0ijo ptrder +in si Si pad K nil 'ntonces rai1 0ijo Sino si ptr K padi1q 'ntonces padi1q 0ijo Sino padder 0ijo +in si +in si +in

4 Alg !"#$ !e+u!s"/ : Procedimiento %orrar 4ptr) ptrba nodobarE elem)FtipoG2 =nicio Si ptr FG nil 'ntonces si elem F ptri1q 'ntonces %orrar 4ptri1q! elem2 Sino si elem G ptrder 'ntonces %orrar 4ptrder! elem2 Sino si ptri1q K @il 'ntonces ptr ptri1q Sino si ptrder K @il 'ntonces ptr ptri1q Sino eliminar 4ptrder! ptr2 +in si +in si +in si Ptri1q =SP =SP ptr +in si Sino escri%ir M'l nodo no e(isteN +in si +in Procedimiento eliminar 4entBsal suc) ptrba nodobarE entBsal ptr) ptrba nodobar2 =nicio Si suci1q FG nil 'ntonces eliminar 4suci1q! ptr2 Sino ptrinfo sucinfo

P>?=@6 1$&A1*$

Pa que luego os quejis

Ptr suc +in si +in 0. APLICACIONES DE LOS @R7OLES 7INARIOS: - .na de las aplicaciones m/s importantes es dentro de la inteligencia artificial! " m/s concretamente en el /rea de reconocimiento de patrones. Se trata de utili1ar los /r%oles para reali1ar clasificaciones. La cla#e est/ en asignar a cada nodo del /r%ol un significado " a cada rama! una respuesta que nos a"ude a determinar el sentido de la %<squeda. - ;ransformacin de una notacin alge%raica a otra) Prefija! infija! posfija 4Ca%!aC%!a%C2. Para ello la ra:1 del /r%ol de%e de ser un signo " para las ramas o su%/r%oles! otra e(presin o un operando. - Para implementar el algoritmo de Oodman de compresin " codificacin.

6. GRAFOS: 'l grafo es una estructura de datos no lineal! tal que a0ora desde un nodo podemos apuntar a #arios! pero a su #e1 un nodo puede ser apuntado desde otros. Te!$"n l gBa *e l s g!aF s: .n grafo se compone por un conjunto 8 de #rtices " un conjunto 6 de aristas. Cada arista se identifica con un par de #rtices que indican los #rtices a los que une la arista. Los #rtices de una arista son entre s: nodos ad"acentes. - ?rado de un nodo) @<mero de aristas que contiene a ese nodo. - ?rado de un grafo) @<mero de #rtices de ese grafo. Si el grado de un nodo es H! se dice que es un nodo aislado. - Camino) .n camino C de longitud @ de un nodo 81 a un nodo 82! se define como la secuencia de nodos por los que 0a" que pasar para llegar del nodo 81 a 82. La longitud de ese camino es el n<mero de aristas que comprende ese camino. 'l camino es cerrado si empie1a " termina en el mismo nodo. 'l camino es simple si todos los nodos de dic0o camino son distintos a e(cepcin de los de los e(tremos que pueden ser iguales.
2 1 4 & $ 3

C 41!&2 1!4!& Caminos simples 1!4!$!& 1!4!3!4!$!&

6ristas especiales) - Jucles) 's una arista cu"os e(tremos son idnticos. - 6rista m<ltiple) os o m/s aristas que conectan los mismos nodos. T") s *e g!aF s:

P>?=@6 1$*A1*$

Pa que luego os quejis

?rafo conectado o cone(o) '(iste un camino simple entre 2 cualesquiera de sus nodos. ?rafo desconectado) 6quel en que e(isten nodos que no est/n unidos por ning<n camino. ?rafo dirigido) Cada arista tiene asignada una direccin 4identificada por un par ordenado2. ?rafo no dirigido) La arista est/ definida por un par no ordenado. ?rafo sencillo) 6quel que no tiene ni %ucles ni aristas m<ltiples. ?rafo m<ltiple o multigrafo) Permite la e(istencia de aristas m<ltiples o %ucles. ?rafo completo) Cada nodo del grafo es ad"acente a todos los dem/s. ?rafo etiquetado con peso ponderado) 6quel en el que a cada arista del grafo #a asociado un #alor que es lo que llamamos peso de la lista. Se usa para indicar algo! como la longitud de la arista o la importancia de la arista! ... Peso de un camino) La suma de los pesos de las aristas del camino.

Re)!esen#a+"-n *e l s g!aF s: Oa" 2 formas de representar los grafos! con memoria est/tica " con memoria din/mica) Con memoria est/tica) - 7atri1 de ad"acencia) 's una matri1 7 de @D@ elementos donde @ es el n<mero de nodos del grafo! donde cada posicin 74i!j2 :ndica si 0a" una cone(in o no entre el nodo que aparece asociado a la posicin = de la matri1 " el nodo que aparece asociado a la matri1 d. Si lo que quiero es representar un grafo ponderado en #e1 de poner H " 1! pondremos H si no esta conectado " el #alor de la arista si e(iste cone(in. Si el grafo no es dirigido resulta una matri1 simetrica. Las potencias de la matri1 de ad"acencia 7 ele#ado a i nos indican en las posiciones que tiene #alor 1 que e(iste un camino de longitud i entre los nodos asociados a las posiciones =! d de esa matri1.
estino

1 2 3 4 $ &
Trigen

1 H H 1 H H H

2 H H 1 H H H
2

3 H H H H H H

4 1 H 1 H 1 H

$ H H H H 1 H

& H H H H 1 H

3 1 4

P>?=@6 1$,A1*$

Pa que luego os quejis

$ &

Con memoria din/mica) 8amos a utili1ar 2 listas enla1adas! una es la lista de nodos 4formada por todos los #rtices " aristas del grafo. Cada nodo de esa lista tendr/ la siguiente informacin) - =nfo) =nformacin del nodo. - Sig) Puntero que enla1a con el siguiente nodo de la lista de nodos. - 6d") 6punta al primer elemento de la lista de ad"acencia. La lista de ad"acencia contiene o enla1a a todas las aristas que parten de ese nodo. 'l conjunto de todas las listas de ad"acencia! forman una lista de listas. La lista de ad"acencia se implementa como otra lista enla1ada en la que cada nodo de esa lista contiene 2 campos) es 4destino2) 's un campo puntero al nodo destino de la lista. - 'nl 4enlace2) 's un campo puntero que apunta al siguiente nodo o arista de la lista de ad"acencia de ese nodo.

1
Sig 2 6d" es 'nl

2
3 4

3 4 ;ipo #ertice) registro =nfo) FtipoG Sig) ptrba #ertice 6d") ptrba arista +in registro ;ipo arista es) ptrba #ertice 'nl) ptrba arista 4D 'l peso de la arista ir:a aqu: D2 +in registro Para manejar la memoria disponi%le #amos a tener 2 listas) - 6 =SP) 6punta al primer nodo que enla1a a los nodos de tipo arista disponi%le.

P>?=@6 1$-A1*$

Pa que luego os quejis

@ =SP) 6punta la primer nodo que enla1a a los nodos de tipo #rtices. @os mo#emos con el campo sig.

8. OPERACIONES CON GRAFOS: 4 7Is=ue*a *e un n * : Lo que se trata es de locali1ar un nodo que contiene una determinada informacin! para ello le pasamos la informacin al procedimiento " nos de#uel#e la posicin si lo encuentra o @il si no lo encuentra. Procedimiento Juscarbnodo 4elem)FtipoGEentBsal ptr)ptrba #erticeE prin) ptrba #ertice2 =nicio Ptr prin 7ientras 4ptrinfo FG elem2 " 4ptr FG nil2 Ptr ptrsig +in mientras +in

4 7Is=ue*a *e una a!"s#a: Se trata de %uscar una arista dados sus campos de informacin origen " destino. e#uel#e un puntero a la lista de aristas que apunta a esa arista o @il si no e(iste. Procedimiento %uscarbarista 4prin) ptrba #eriticeE orig)FtipoGE des)FtipoGE entBsal ptr) ptrba aristaE entBsal p1) ptrba #erticeE entBsal p2) ptrba #ertice2 =nicio Juscarbnodo 4prin!orig!p12 Si p1 K nil 'ntonces escri%ir M@o e(iste el nodo origenN Sino %uscarbnodo 4prin!des!p22 Si p2 K nil 'ntonces escri%ir M@o e(iste el nodo destinoN Sino ptr p1ad" 7ientras 4ptr FG nil2 " 4ptrdes FG p22 Ptr ptrenl +in mientras +in si +in si +in 4 Inse!+"-n *e un n * : Primero de%emos mirar si no e(iste un nodo que contenga esa informacin " para insertar el nodo lo insertamos por el principio. Procedimiento insertarbnodo 4entBsal prin) ptrba #erticeE elem) FtipoG P>?=@6 1&HA1*$

Pa que luego os quejis

8ar @ue#o) ptrba #erticeE =nicio Si @ =SP K @il 'ntonces escri%ir M@o 0a" memoriaN Sino nue#o @ =SP @ =SP @ =SPSig @ue#oinfo elem @ue#oad" @il @ue#osig prin Prin nue#o +in si +in

4 Inse!+"-n *e una a!"s#a: Primero 0a" que compro%ar si e(isten los nodos origen " destino! luego 0a" que compro%ar que no e(iste una arista igual en esa direccin " para insertarla! como el orden no importa se inserta por el principio. Procedimiento insertarbarista 4prin) ptrba #erticeE orig)FtipoGE dest)FtipoGE entBsal p1) ptrba #erticeE entBsal p2) ptrba #ertice2 8ar @ue#o! pa) ptrba arista =nicio Si 6 =SP K @il 'ntonces escri%ir M@o 0a" memoriaN Sino %uscarbarista 4prin!orig!des!pa!p1!p22 Si pa FG nil 'ntonces escri%ir MLa arista "a e(isteN Sino @ue#o 6 =SP 6 =SP 6 =SPSig @ue#odest p2 @ue#oenl p1ad" P1ad" nue#o +in si +in si +in 4 7 !!a* *e una a!"s#a:

P>?=@6 1&1A1*$

Pa que luego os quejis

Procedimiento %orrarbarista 4prin) ptrba #erticeE orig)FtipoGE des)FtipoGE p1) ptrba #erticeE p2) ptrba #ertice2 8ar 6ct! ant! pa) ptrba arista =nicio Juscarbarista 4prim!or!dest!pa!p1!p22 Si pa K nil 'ntonces escri%ir MLa arista "a e(isteN Sino ant nil 6ct p1ad" 7ientras 4actdest FG p22 " 4act FG nil2 6nt act 6ct actenl +in mientras 6ntenl actenl Si ant K nil 'ntonces p1ad" p1ad"enl Sino antenl actenl +in si 6ctenl 6 =SP 6 =SP act +in si +in 4 7 !!a* *e un n * : Primero 0a" que compro%ar si e(iste el nodo " despus se %orran todas sus aristas. Procedimiento %orrarbnodo 4entBsal prin) ptrba #erticeE info)FtipoG2 8ar Ptr! p1! p2! act! ant) ptrba #ertice Pa! %orrado) ptrba arista =nicio Jorrarbnodo 4prin!elem!ptr2 Si ptr K nil 'ntonces escri%ir M@o e(iste el nodo a %orrarN Sino act prin 7ientras act FG nil Jorrarbarista 4prin!actinfo!elem2 6ct actsig +in mientras 6ctenl 6 =SP 6 =SP ptrad" STLT '@ PS'. TCe =?T Ptrad" @il Jorrado ptrad" 7ientras %orrado FG nil Jorrarbarista 4prin!elem!%orradodestinoinfo2 P>?=@6 1&2A1*$

'@ C.6LL.='5

Pa que luego os quejis

Jorrado %orradoenl +in mientras 6ntnil 6ctprin 7ientras 4act FG nil2 " 4actinfo FG elem2 6nt ant 6ct actsig +in mientras Si ant K nil 'ntonces prin prinsig Sino antsig actsig +in si 6ctsig @ =SP @ =SP act +in si +in

L'@?.6d'

;. APLICACIONES DE LOS GRAFOS: - Se pueden representar transformaciones de estado con los grafos. - Sir#en en di#ersos campos de in#estigacin para encontrar el mtodo m/s corto " que cueste lo menos posi%le. - Para el /lge%ra se utili1a la matri1 de ad"acencia.

EJERCICIOS: TEMA 12
1. 'n un /r%ol %inario de %<squeda! dar todos los elementos inferiores a uno dado con informacin elem. Procedimiento %uscar 4rai1) ptrba nodobarE entBsal ptr) ptrba nodobarE elem) FtipoG2 =nicio Ptr rai1 7ientras 4ptrinfo FG elem2 " 4ptr FG nil2 Si ptrinfo G elem 'ntonces ptr ptrder Sino ptr ptri1q +in si +in mientras +in Procedimiento inorden 4ptr) ptrba nodobar2 =nicio Si ptr FG nil 'ntonces inorden 4ptri1q2 'scri%ir 4ptrinfo2 =norden 4ptrder2 P>?=@6 1&3A1*$

Pa que luego os quejis

+in si +in Procedimiento inferiores 4rai1) ptrba nodobarE elem) FtipoG2 8ar Ptr) ptrba nodobar =nicio Juscar 4rai1!ptr!elem2 Si ptr K nil 'ntonces escri%ir M'l elemento no e(isteN Sino inorden 4ptri1q2 +in si +in 2. Listar en orden descendente el #alor de todos los nodos de un /r%ol %inario de %<squeda. Procedimiento decreciente 4p) ptrba nodobar2 =nicio Si p FG nil 'ntonces decreciente 4pder2 'scri%ir pinfo ecreciente 4pi1q2 +in si +in

3. 'ncontrar el m/(imo #alor de un /r%ol %inario de %<squeda. Procedimiento %uscabma( 4rai1) ptrba nodobar2 8ar Ptr) ptrba nodobar =nicio Ptr rai1 7ientras ptrder FG nil Ptr ptrder +in mientras 'scri%ir ptrinfo +in 4. Jorrar el elemento menor de un /r%ol %inario de %<squeda. Procedimiento %orrarbmin 4entBsal rai1) ptrba nodobar2 8ar Pad! ptr) ptrba nodobar =nicio Si rai1 K nil 'ntonces escri%ir M>r%ol #acioN Sino pad nil Ptr rai1

P>?=@6 1&4A1*$

Pa que luego os quejis

7ientras ptri1q FG nil Pad ptr Ptr ptri1q +in mientras Si pad K nil 'ntonces rai1 ptrder Sino padi1q ptrder +in si Ptri1q =SP =SP ptr +in si +in

$. 'ncontrar el segundo elemento ma"or de un /r%ol %inario de %<squeda. Procedimiento osbma"or 4rai1) ptrba nodobar2 8ar Pad!ma(!ma(2) ptrba nodobar =nicio Si rai1 K nil 'ntonces escri%ir M>r%ol #acioN Sino pad nil 7a( rai1 7ientras ptrder FG nil Pad ma( 7a( ma(der +in mientras Si ptri1q K nil 'ntonces si pad FG nil 'ntonces escri%ir M'l segundo ma"or esN padinfo +in si Sino ma(2 ptri1q 7ientras ma(2der FG nil 7a(2 ma(2der P>?=@6 1&$A1*$

Pa que luego os quejis

+in mientras 'scri%ir M'l segundo ma"or esN ma(2info +in si +in si +in &. 69adir un %ucle en el nodo con informacin elem. Procedimiento insb%ucle 4prin) ptrba #erticeE elem) FtipoG2 8ar Ptr) ptrba #ertice @ue#o) ptrba arista =nicio Juscarbnodo 4prin!elem!ptr2 Si ptr K nil 'ntonces escri%ir M@o e(iste el nodoN Sino nue#o 6 =SP 6 =SP 6 =SPsig @ue#oder ptr @ue#oenl ptrad" Ptrad" nue#o +in si +in

*.

ado un grafo! determinar si un nodo con informacin elem es un nodo fuente 4que no le lleguen aristas2 Procedimiento nodobfuente 4prin) ptrba #erticeE elem) FtipoG2 8ar Ptr! pn) ptrba #ertice +uente) %oolean Pa) ptrba arista =nicio Juscarbnodo 4prin!elem!ptr2 Si ptr K nil 'ntonces escri%ir M'l nodo no e(isteN Sino si ptrad" K nil 'ntonces escri%ir M@odo sin aristas de origenN Sino fuente #erdadero Pn prin 7ientras 4pn FG nil2 " 4fuente K #erdadero2 Pa pnad" 7ientras 4pa FG nil2 " 4fuente K #erdadero2 Si padest K ptr 'ntonces fuente falso

P>?=@6 1&&A1*$

Pa que luego os quejis

Sino pa paenl +in si +in mientras Pn pnsig +in mientras Si fuente K #erdadero 'ntonces escri%ir MSi es un nodo fuenteN Sino escri%ir M@o es un nodo fuenteN +in si +in si +in si +in

,.

ado un grafo en que cada arista tiene un peso asociado! determinar que aristas del grado pesan m/s de 1HH! dando la informacin del nodo origen " destino. ;ipo aristabpeso) registro es) ptrba #ertice 'nl) ptrba aristabpeso +in registro Procedimiento arbpeso 4prin) ptrba #ertice2 8ar Pn) ptrba #ertice Pa) ptrba aristabpeso =nicio Pn prin 7ientras pn FG nil Pa pnad" 7ientras pa FG nil Si papeso G 1HH 'ntonces escri%ir MTrigenN pninfo Sino escri%ir M estinoN padesinfo +in si P>?=@6 1&*A1*$

Pa que luego os quejis

Pa paenl +in mientras Pn pnsig +in mientras +in

TABLAS DE DECISIN: TEMA 13


1. 2. 3. 4. Lu es una ta%la de decisin. ;ipos de ta%las. Construccin de ta%las. Con#ersin de ta%las a programas.

1. Q'H ES 'NA TA7LA DE DECISIN: .na ta%la de decisin es una 0erramienta que me #a a ser#ir para representar de manera m/s f/cil la lgica de un pro%lema cuando est/ es mas o menos complicada. Para ello se trata de identificar en el pro%lema las acciones que 0a" que ejecutar " las condiciones que se tienen que cumplir para ejecutar esas acciones. Las acciones normalmente las #amos a identificar a tra#s de los #er%os! " las condiciones #an a ser las condicionales 4si!...2. La ta%la #a a tener 4 partes) Conjunto de condiciones o entradas 'ntrada de condiciones com%inacin de condiciones

P>?=@6 1&,A1*$

Pa que luego os quejis

Conjunto de acciones o salidas

'jecucin de acciones salida de acciones

Conjunto de condiciones) Son las condiciones que inter#ienen en el pro%lema. 'ntrada de condiciones) Son las com%inaciones posi%les entre los #alores de las condiciones. S=! @T! 6 =?.6L. Conjunto de acciones) 6%arca todas las acciones que se tienen que ejecutar cuando se cumplen un conjunto dado de condiciones. Salida de ejecucin) Se determina cuando se ejecuta cada accin. Qu es una !egla *e *e+"s"-n%: 's una com%inacin de un estado en la entrada de condiciones " de una o m/s acciones asociadas en la parte de la salida de acciones asociadas en la parte de la salida de acciones siendo @ el n<mero de condiciones " consider/ndolas como %inarias 4S=A@T2 0a%r/ un n<mero m/(imo de 2 ele#ado a @ reglas. Cada regla equi#ale desde el parte de #ista de programacin a una estructura si.. entonces! " en cada momento solo se puede cumplir una regla. Las ta%las de decisin las podemos usar para controlar la lgica de control de un programa! en los manuales de usuario para controlar un programa! para sa%er cuando se actuali1a un fic0ero!...

'jemplo) Si me 0acen fijo me compro un corsa! si me 0acen fijo " me su%en el sueldo me compro un familiar! " si me toca la loter:a me compro un J7f. C1) +ijo A no fijo C2) Salario A no salario C3) Loter:a A no loter:a +ijo Salario Loter:a @o coc0e Corsa +amiliar J7f S S S S S @ g g g S @ S S @ @ g 61) @o compro un coc0e 62) Compro un corsa 63) Compro un familiar 64) Compro un J7f @ S S g @ S @ g @ @ S g @ @ @ g

2. TIPOS DE TA7LAS: - SegIn el )lan#ea$"en# : P>?=@6 1&-A1*$

Pa que luego os quejis

- Propias) Solo tienen reglas simples! solo 0a" S= A @T. - =mpropias) Son las que tienen reglas compuestas 4S=A@TA=@ =+'5'@C=62. SegIn en#!a*as: - Limitadas) Cuando las reglas son S A @ A B A g 4Si se ejecuta para las acciones2. - '(tendidas) Cuando los #alores que toman las condiciones son diferentes de S= A @T! " las acciones son distintas de si se ejecuta o no se ejecuta.

'n cualquier caso! siempre se puede traducir una ta%la mi(ta a una ta%la limitada. Cada condicin dar/ igual a tantas condiciones simples como #alores pueda tomar! " para cada accin tantas acciones como estados pueda tomar. La #entaja de las ta%las mi(tas " e(tendidas es que se #e mejor a primera #ista! el incon#eniente es que son m/s dif:ciles de programar. SegIn el #!a#a$"en# : - 6%iertas) Cuando desde una ta%la se 0ace referencia a otra ta%la! pero luego no se #uel#e a la inicial. - Cerradas) Lo mismo que la anterior! pero se #uel#e a la original. - Jucles) Cuando una ta%la se llama a s: misma.

T") s *e !eglas: @ormalmente las reglas de una ta%la se consideran como reglas 6@ ! se tienen que cumplir todos los #alores de las condiciones para que se ejecute la opcin asociada a esa regla. Si se implementa como reglas T5! significa que con que se cumpla una sola regla! se ejecuta la accin asociada. Las reglas 'LS' se 0acen cuando un conjunto de reglas de una ta%la dan todas lugar a la misma accin! entonces se asocian todas como una regla 'LS'.

&. CONSTR'CCIN DE TA7LAS: Primero locali1amos las condiciones en el enunciado! despus las acciones " las reglas entre las acciones " las condiciones. espus comprue%o que la ta%la sea correcta. Lue no ocurran) - 5edundancias) Poner la misma regla m/s de una #e1. - Completa) Lue no falte alguna regla. - Contradictoria) Lue la misma accin de lugar a cosas contradictorias. espus se mira a #er si se puede simplificar la ta%la! a9adiendo si es posi%le indiferencias 4cada una sustitu"e a 2 reglas2. .na ta%la se puede simplificar si 0a" 2 reglas que dan lugar a la misma accin o conjunto de acciones " solo se diferencia en el estado o #alor de una de sus condiciones! entonces sustitu"o esas 2 reglas por una sola! que tenga para esa condicin el #alor de indiferencia. +ijo Salario Loter:a @o coc0e Corsa S S S S S @ S @ S S @ @ g P>?=@6 1*HA1*$ @ S S g @ S @ g @ @ S g @ @ @ g

Pa que luego os quejis

+amiliar J7f

g g g

0. CON3ERSIN DE TA7LAS A PROGRAMAS: Primero 0a" que #er si se puede simplificar la ta%la. Oa" 2 formas de 0acer la con#ersin) - Programacin directa) Lue cada regla equi#ale a una sentencia condicional. 's mu" ineficiente. - Pasar la ta%la de decisin a flujograma mediante el siguiente el mtodo) 1. Para cada regla al final de su columna ponemos el n<mero de reglas simples a las que equi#ale. Cada indiferencia de una regla equi#ale a 2 reglas simples. 2. Para cada condicin al final de su fila 0allamos un coeficiente que resulta de la suma de los #alores de las reglas para las que esa condicin #alga indiferente! cuanto menor sea ese #alor! m/s importante es esa regla! porque #a a tener menos reglas para las que esa condicin es indiferente. 3. 'lijo la condicin con menor #alor en su coeficiente! si 0a" #arias condiciones que tienen el mismo #alor en su coeficiente " adem/s es el menor! 0allo un segundo coeficiente que se o%tiene por la diferencia en #alor a%soluto de la diferencia entre el n<mero de S= " @T en #alor a%soluto de esas condiciones! " elijo la que tenga la diferencia ma"or! " si sigue 0a%iendo empate cojo cualquiera de ellas. 4. Para la regla elegida o%tengo otras 2 ta%las! que se caracteri1an porque no contienen "a a la condicin por la que 0e di#idido las ta%las! " una ta%la contiene las reglas para las que esa condicin contiene #alor S=! " la otra contiene las reglas para las que la condicin es @T! " para las reglas con condicin indiferencia las pongo en las 2 ta%las! " con las 2 ta%las #uel#o a 0acer otra #e1 lo mismo 0asta que no se pueda di#idir m/s! " cada #e1 que se 0ace una di#isin pago la condicin en el flujograma.

'jemplo anterior) +ijo Salario Loteria @o coc0e Corsa +amiliar J7f +ijo S= Salario Loteria @o coc0e Corsa +amiliar B S S @ g @ @ g 2 H S B S S S @ g g 2 1 1 4 S @ @ g @ B B g H & 4

P>?=@6 1*1A1*$

Pa que luego os quejis

J7f +ijo @T Salario Loteria @o coc0e Corsa +amiliar J7f

g 2

B B g

Si Si Loteria J7f Si +amiliar Salario @o Corsa @o

+ijo @o coc0e

@o

Si no fijo 'ntonces escri%ir M@o coc0eN Sino si loteria 'ntonces escri%ir MJ7fN Sino si salario 'ntonces escri%ir M+amiliarN Sino escri%ir MCorsaN +in si +in si +in si

P>?=@6 1*2A1*$

Pa que luego os quejis

EJERCICIOS: TEMA 13
1. ado un fic0ero de empleados ordenado por n<mero de empleado con el formato! n<mero de empleado! antigYedad! se(o! categor:a! se trata de 0allar mediante ta%las de decisin que prima reci%e cada empleado sa%iendo que) 6) 7ujeres que son jefes. J) 7ujeres empleadas con antigYedad " 0om%res empleados. C) Oom%res que son jefes. ) Sin prima. 'l resto. Oacer la ta%la de decisin " el flujograma. S S S g S @ S g g S S @ g S @ @ g g @ S S g @ S @ @ @ S @ @ @ g

6ntiguedad 7ujer defe 6 J C

P>?=@6 1*3A1*$

Pa que luego os quejis

6ntiguedad 7ujer defe 6 J C

B S S g

B @ S g

S B @ g

@ S @

@ @ @ g

4 2 H

2 defe S= 6ntiguedad 7ujer 6 J C B S g

2 B @ g

2 4 H

g 1

2 defe @T 6ntiguedad 7ujer 6 J C S B g

2 @ S @ @ g H 2

g 1

defe 7ujer J 6 C 7ujer J 6ntiguedad

Si jefe 'ntonces si mujer 'ntonces escri%ir M6N Sino escri%ir MCN +in si Sino si antigYedad 'ntonces escri%ir MJN

P>?=@6 1*4A1*$

Pa que luego os quejis

Sino si mujer 'ntonces escri%ir M N Sino escri%ir MJN +in si +in si +in si

P>?=@6 1*$A1*$

Potrebbero piacerti anche