Sei sulla pagina 1di 175

ALGORITMOS Y PROGRAMAS:

TEMA 1:
1. Sistemas de procesamiento de la informacin.
2. Concepto de algoritmo.
3. Lenguaje de programacin.
4. Datos, tipos de datos y operaciones primitivas.
. Constantes y varia!les.
". #$presiones% tipos y operadores.
&. 'unciones internas.
(. La operacin de asignacin.
). #ntrada y salida de la informacin.
1. SISTEMAS DE PROCESAMIENTO DE LA INFORMACIN:
*n ordenador es una m+,uina de procesamiento de informacin. #s una
m+,uina por,ue tiene ca!les, c-ips,... , procesa por,ue es capa. de procesar cosas, e
informacin por,ue maneja conjuntos ordenados de datos/.
0ara procesar la informacin est+ el -ard1are 2microprocesador, 345,.../, y el
soft1are 2,ue sirve para manejar el -ard1are/.
2. CONCEPTO DE ALGORITMO:
#l algoritmo trata de resolver pro!lemas mediante programas.
'ases%
- 4n+lisis preliminar o evaluacin del pro!lema% #studiar el pro!lema en
general y ver ,ue parte nos interesa.
- Definicin o an+lisis del pro!lema% 6er ,ue es lo ,ue entra y ,ue es lo ,ue
sale, las posi!les condiciones o restricciones, ...
- Dise7o del algoritmo% Dise7ar la solucin.
- #l programa% Codificacin del algoritmo en un lenguaje de programacin.
- #jecucin del programa y las prue!as% 6er si el programa -ace lo ,ue
,uer8amos.
Qu es un alg!"#$%:
#s una formula para resolver un pro!lema. #s un conjunto de acciones o
secuencia de operaciones ,ue ejecutadas en un determinado orden resuelven el
pro!lema. #$isten n algoritmos, -ay ,ue coger el m+s efectivo.
Caracter8sticas%
- 9iene ,ue ser preciso.
- 9iene ,ue estar !ien definido.
- 9iene ,ue 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 nivel y de alto nivel.
;nstrucciones en una computadora y sus tipos%
*na instruccin es cada paso de un algoritmo, pero ,ue lo ejecuta el ordenador.
*n programa es un conjunto de instrucciones ,ue ejecutadas ordenadamente resuelven
un pro!lema.
0<=;>4 1?1&
T")s *e "ns#!u++"nes:
- #?S% 0asar informacin del e$terior al interior del ordenador y al rev@s.
- 4ritm@ticoAlgicas% 4ritm@ticas% B,A,C,... D Lgicas% or, and, E, F, ...
- Selectivas% 0ermiten la seleccin de una alternativa en funcin de una
condicin.
- 3epetitivas% 3epeticin de un n:mero de instrucciones un n:mero finito de
veces.
T")s *e lengua,es:
- Lenguaje m+,uina% 9odo se programa con 1 y G, ,ue es lo :nico ,ue entiende
el ordenador.
6entaja% >o necesita ser traducido.
;nconveniente% La dificultad, la confusin, para corregir errores, es propia de
cada m+,uina.
- De !ajo nivel o ensam!lador% Se utili.an mnemot@cnicos 2a!reviaturas/.
6entaja% >o es tan dif8cil como el lenguaje m+,uina.
;nconvenientes% Cada m+,uina tiene su propio lenguaje, necesitamos un
proceso de traduccin.
#l programa escrito en ensam!lador se llama programa fuente y el programa ,ue se
o!tiene al ensam!larlo se llama programa o!jeto.
- Lenguajes de alto nivel% Los m+s cercanos al lenguaje -umano.
6entaja% Son independientes de cada ma,uina 2los compiladores aceptan las
instrucciones est+ndar, pero tam!i@n tienen instrucciones propias/.
;nconveniente% #l proceso de traduccin es muy largo y ocupa m+s recursos.
4provec-a 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 y o!tenemos el programa fuente, y el compilador es el ,ue
traduce el programa al lenguaje m+,uina. #l compilador internamente -a sido dise7ado
para traducir.
#l compilador o!tiene el programa o el fic-ero o!jeto. #l compilador tiene ,ue
!uscar los errores.
>ormalmente no sale un ejecuta!le, sino ,ue necesita elementos, li!rer8as, ...
5ediante un linHador juntamos el programa o!jeto y las li!rer8as, y se forma un
programa ejecuta!le.
Cuando se ejecuta el programa, el cargador lleva al programa a memoria para
,ue @ste pueda ser ejecuta!le.
De!!uger% Depura el programa ejecut+ndolo paso a paso, viendo la memoria
paso a paso para encontrar el error.
0<=;>4 2?1&
0rograma fuente 2#ditor/
Compilador
#rror

0rograma o!jeto Li!rerias
LinHador
#jecuta!les
0ara traducir puedo utili.ar el compilador o un interprete, con el compilador cojo
todo el programa al completo y el interprete lee cada instruccin y lo va ejecutando.
#l interprete es m+s r+pido, pero menos eficiente.
9odos los lenguajes tienen compiladores, pero no todos tienen interpretes.
L;S0 2Lenguaje de inteligencia artificial/ % Slo tiene interpretes.
0. DATOS1 TIPOS DE DATOS 2 OPERACIONES PRIMITI3AS:
4 Da#: #s un o!jeto o elemento ,ue tratamos a lo largo de diversas operaciones.
9ienen 3 caracteristicas%
- *n nom!re ,ue los diferencia del resto.
- *n tipo ,ue nos determina las operaciones ,ue podemos -acer con ese dato.
- *n valor ,ue puede variar o no a lo largo de la operacin.
#$isten diferentes tipos de datos.
4 Ca!a+#e!"s#"+as *e ls #")s:
- Cada tipo se representa o almacena de forma diferente en la computadora.
Iit%1?GD IyteJ( !its.
- *n tipo agrupa a los valores ,ue -acen las mismas operaciones.
- Si tiene definida una relacin de orden es un tipo escalar.
- Cardinalidad de un tipo% >:mero de valores distintos ,ue puede tomar un
tipo.
0ueden ser finitos 2caracteres/, y si son infinitos el ordenador los toma como
finitos por,ue esta limitado por el tama7o de los !ytes en el ,ue la cifra es
almacenada.
4 Ls *a#s )ue*en se!:
- Simples% *n elemento.
- Compuestos% 6arios elementos.
0<=;>4 3?1&
4 Ls #")s )ue*en se!:
- #standar% Kue vienen en el sistema por defecto.
- >o estandar% Son los ,ue crea el usuario.
4 Ls #")s s"$)les $5s "$)!#an#es sn:
- >um@ricos.
- Lgicos.
- Caracteres.
>um@ricos%
- #ntero% Su!conjunto finito del conjunto matem+tico de los num@ros enteros.
>o tiene parte decimal. #l rango de los valores depende del tama7o ,ue se
les da en memoria.
- 3eal% Su!conjunto finito del conjunto matem+tico de los n:meros reales.
Llevan signo y parte decimal. Se almacenan en 4 Iytes 2dependiendo de los
modificadores/. Si se utili.an n:meros reales muy grandes, se puede usar
notacin cient8fica ,ue se divide en mantisa, !ase y e$ponenteD tal ,ue el
valor se o!tiene multiplicando la mantisa por la !ase elevada al e$ponente.
Lgicos o !ooleanos%
- 4,uel ,ue slo puede tomar uno de los dos valores, verdadero o falso 21?G/.
Car+cter%
- 4!arca al conjunto finito y ordenado de caracteres ,ue reconoce la
computadora 2letras, digitos, caracteres especiales, 4SC;;/.
9ipo de cadena o String% Conjunto de caracteres, ,ue van a estar entre LM.
#l propio lenguaje puede a7adir m+s tipos, o se pueden a7adir modificadores.
#ntero % ;nt Long int
#n algunos lenguajes se definen tipos especiales de fec-a y -ora, so!re todo en
los m+s modernos.
6. CONSTANTES 2 3ARIA7LES:
- Constantes% 9ienen un valor fijo ,ue se le da cuando se define la constante y
,ue ya no puede ser modificado durante la ejecucin.
- 6aria!les% #l valor puede cam!iar durante la ejecucin del algoritmo, pero
nunca varia su nom!re y su tipo.
4ntes de usar una varia!le -ay ,ue definirla o declararla, al -acerlo -ay ,ue dar
su nom!re y su tipo. #l nom!re ,ue le damos tiene ,ue ser un nom!re significativo, va a
ser un conjunto de caracteres ,ue dependiendo del lenguaje -ay restricciones. 9iene ,ue
empe.ar por una letra, y el tama7o depende del lenguaje.
;dentificador% 0ala!ra ,ue no es propia del lenguaje.
#l valor de la varia!le si al declararla no se la iniciali.a, en algunos lenguajes
toma una por defecto. #n cual,uier caso el valor de la varia!le podemos darle uno incial
o podemos ir variandolo a lo largo de la ejecucin.
Las constantes pueden llevar asociados un nom!re o no, si no lo llevan, se
llaman literales. Su valor -ay ,ue darlo al definir la constante y ya no puede cam!iar a
lo largo de la ejecucin, y en cuanto al tipo, dependiendo de los lenguajes en algunos
-ay ,ue ponerlo, y en otros no -ace falta ponerlo por,ue toma el tipo del dato ,ue se le
asigna. Const 0;J3,141".
Nay ,ue iniciali.ar todas las varia!les.
E F Nay ,ue poner algo o!ligatoriamente.
O P 0uede llevar algo o no llevarlo.
0<=;>4 4?1&
La ventaja de usar constantes con nom!re es ,ue en cual,uier lugar donde ,uiera
,ue vaya la constante, !asta con poner su nom!re y luego el compilador lo sustituira por
su valor.
Las constantes sin nom!res son de valor constante% , ", QaR, L-olaM.
Cuando una cadena es de tipo car+cter, se encierra entre QR QaR.
3elacin entre varia!les y constantes en memoria%
4l detectar una varia!le o una constante con nom!re, automaticamente se
reserva en memoria espacio para guardar esa varia!le o constante. #l espacio reservado
depende del tipo de la varia!le.
#n esa .ona de memoria es en la ,ue se guarda el valor asociado a la varia!le o
constante y cuando el programa use esa varia!le, ira a esa .ona de memoria a !uscar su
valor.
8. E9PRESIONES: TIPOS 2 OPERADORES:
*na e$presin es una com!inacin de constantes, varia!les, signos de operacin,
par@ntesis y nom!res especiales 2nom!res de funciones estandar/, con un sentido
un8voco y definido y de cuya evaluacin resulta un :nico valor.
9oda e$presion tiene asociada un tipo ,ue se corresponde con el tipo del valor
,ue devuelve la e$presion cuando se evalua, por lo ,ue -a!r+ tantos tipos de
e$presiones como tipos de datos. Na!ra e$presiones num@ricas y lgicas.
>um@ricas% Speradores aritm@ticos.
Son los ,ue se utili.an en las e$presiones num@ricas 2una com!inacin de
varia!les y?o constantes num@ricas con operadores aritm@ticos y ,ue al evaluarla
devuelve un valor num@rico.
B, A, C, ?.
Speracin resto% Lo ,ue devuelve es el resto de una divisin entera.
5od% 0ascal. mod 3 J 2
T% C.
Divisin entera% >os devuelve el cociente de una divisin entera 2en la ,ue no se sacan
decimales/.
Div% 0ascal. div 3 J 1
U% C.
0otencia% V V2.
9odos estos operadores son !inarios 2el operador se situa en medio/, el menos
tam!ien puede ser unario 2lleva un :nico operando/ y significa signo negativo.
3eglas de precedencia%
#l pro!lema es cuando una e$presin entera seg:n como la evalue pueda dar
diferentes valores.
&C3B4 2
4)
La solucin es aplicar prioridad entre los operadores, de modo ,ue ante la
posi!ilidad de usar varios siempre aplicaremos primero el de mayor prioridad.
Cada lenguaje puede esta!lecer sus propias reglas de prioridad o precedencia de
operadores. Si no nos acordamos, siempre podemos poner 2 /.
1W/ V
2W/ C ? div mod
3W/ B A
#ntre dos operaciones ,ue tienen la misma precedencia para resolver la
am!igXedad, -ay ,ue usar la regla de la asociatividad. La m+s normal es la de la
asociatividad a i.,uierdas 2primero lo de la i.,uieda/.
0<=;>4 ?1&
E:)!es"nes l-g"+as: O)e!a*!es !ela+"nales . l-g"+s.
*na e$presin lgica es a,uella ,ue slo puede devolver dos valores 26erdadero
o 'also/. Los valores ,ue pueden aparecer en una e$presin lgica son de 2 tipos%
lgicos y relacionales.
La particularidad de las e$presiones lgicas es ,ue mientras en una e$presin
num@rica por devolver un valor num@rico los operandos solo pueden ser n:meros, en
una e$presin lgica los operandos no tienen por,ue ser !ooleanos aun,ue se devuelva
un valor !ooleano. #sto es lo ,ue ocurre cuando en la e$presin lgica utili.amos
operadores relacionales con lo cual se o!tienen valores lgicos o !ooleanos a partir de
otros ,ue no lo son.
#n cam!io cuando los operadores son lgicos los operandos o!ligatoriamente
tam!ien tienen ,ue ser lgicos.
Speradores relacionales%
E
F
J
EF en C% YJ

E Sperando1F operador E Sperando2F


F 3 6erdadero
ZCmo se evalua una e$presin relacional[%
- 0rimero se evalua el primer operando y se sustituye por su valor.
- Luego se evalua el seguno operando y se sustituye por su valor.
- 'inalmente se aplica el operador relacional y se devuelve el valor !ooleano
correspondiente.
223C2/B1AV2/ E 22A1/
A1( E 1 6erdadero.
#l pro!lema del tipo real%
Desde la inform+tica, los numeros reales son finitos, ya ,ue tenemos un m+$imo
de cifras decimales. Cuando tra!ajamos con un J, matematicamente da un valor e$acto,
pero informaticamente no es e$acto.
1? C J1
1.G?.G C.G EF1.G
Soluciones%
- La ,ue nos aporte el propio lenguaje de programacin. Se considera un valor
de error.
- 9ra!ajar con n:meros enteros siempre ,ue sea posi!le.
- *tili.ar las comparaciones EF en ve. de si es posi!le.
- Si -ay ,ue preguntar por igual, cam!iar la condicin utili.ando valores
a!solutos y un valor m8nimo de error.
Si la diferencia E G.GGGGGGG1 y 4IS 24AI/E min D son iguales.
Speradores lgicos%
#l pro!lema es ,ue a veces ,ueremos preguntar o evaluar por m+s de una
condicin al mismo tiempo y para esto estan los operadores lgicos.
\ and ]]
S or YY
>o not ~Y
0<=;>4 "?1&
\, S, son operadores !inarios 2necesitan 2 operandos de tipo logico/.
Sperando 1 Sperador Sperando 2
#l >o es unario y se coloca primero el >o, y despues el operando.
#l resultado es lgico y depende de%
Sperando 1 Sperando 2 4>D S3
6 6 6 6
6 ' ' 6
' 6 ' 6
' ' ' '
#l >o niega %
>S9 1?G
6 '
' 6
0rioridades de los operadores%
- Lo m+s prioritario es el >S9
- Luego el \ y el S.
- E, F J,...
9a!la de prioridades%
V >S
? div mod y
B A S
E, F, J, EF,...
;. F'NCIONES INTERNAS:
Son funciones matem+ticas diferentes de las operaciones !+sicas pero ,ue se
incorporan al lenguaje y ,ue se consideran estandar. Dependen del lenguaje.
>ormalmente se encuentran en la li!rer8a de matem+ticas del lenguaje de programacin.
'rmulas%
4!s 2$/
4rctan 2$/
Cos 2$/
Sen 2$/
#$p 2$/
Ln 2$/
Log 1G 2$/
3edondeo 2$/
9runc 2$/
Cuadrado 2$/
3ai. 2$/
<. OPERACIN DE ASIGNACIN:
Consiste en atri!uir un valor a una varia!le. #l valor sera una e$presin
2constante, varia!le,.../.
Stros lenguajes J , %J
6aria!le a la ,ue se le asigna el valor el valor ,ue le vamos a asignar.
4
0<=;>4 &?1&
#n C 4 J J I Comparacin
4 J I 4signacin
#n 0ascal 4%JI 4signacin
4JI Comparacin
#l proceso de asignacion se reali.a en 2 fases%
- Se eval:a la e$presin de la parte derec-a de la asignacin o!teniendose un
:nico valor.
- Se asigna ese valor a la varia!le de la parte i.,uierda.
Qu es l =ue >a. =ue #ene! en +uen#a%:
- #n la parte i.,uierda slo puede -a!er una varia!le.
- La varia!le a la ,ue se le asigna el valor pierde su valor anterior.
- La varia!le ,ue aparece en la derec-a ya ,ue como se evalua primero la de la
derec-a cuando se tenga ,ue evaluar el valor de esa varia!le se tomara su
valor antiguo.
- #L 9;0S D#L 64LS3 K*# S# SI9;#># 4L #64L*43 L4 0439#
D#3#CN4 9;#># K*# S#3 #L 5;S5S K*# #L 9;0S D# L4
643;4IL# D# L4 0439# ;^K*;#3D4, #S D#C;3 4 *>4 643;4IL#
SSLS S# L# 0*#D#> D43 64LS3#S D# S* 5;S5S 9;0S.
A #n 0ascal da un error.
A #n C, no da error por,ue el compilador trunca el numero.
4% entero
4 2
4 3C4 B 4 J (
?. ENTRADA 2 SALIDA DE LA INFORMACIN:
Las dos operaciones !+sicas de cada salida son las de lectura y de escritura. La
lectura es e,uivalente a la asignacin en cuanto ,ue va a -a!er una varia!le ,ue
reci!e un valor, pero este valor no resulta de evaluar ninguna e$presin, sino ,ue el
valor lo vamos a leer de un dispositivo e$terno de entrada.
Leer 2nom!re de la varia!le/
#l valor introducido por el dispositivo e$terno, tiene ,ue ser del mismo tipo del
,ue la varia!le ,ue se le asigne.
La operacin de escritura lo ,ue -ace es mostrar el valor de una varia!le en un
dispositivo e$terno de salida.
#scri!ir 2varia!le/
La operacin de escritura no es una operacin destructivo en memoria.
4l pedir un valor al usuario -ay ,ue decirle ,ue es lo ,ue se le ,uiere pedir
escri!iendo un mensaje.
0<=;>4 (?1&
EJERCICIOS: TEMA 1
1. 4 23C2V mod 1 B (C23A/ E 22B(A1 mod 1/
4 23C32 mod 1 B 2A1"// E 1G
4 A1" E 1G
4 6erdadero
1.1. 4 4 o 23BC(/ E 3 y 22A"?3 div 4/C2 E 2/
4 6erdadero o 43 E 3 y 2GC2 E 2/
4 6erdadero o 'also y 6erdadero
4 6erdadero o 'also
4 6erdadero
2. I 3 mod 2 div 3
I 1 div 3
I G
2.1. C 2AIC2 EF (C3 mod 4/ y 2Q4RFRIR/
C 2G EF 24 mod 4/ y 'also
C 'also y 'also
C 'also
2.2. 4 C o no 23J/ y 2( EF 3BI/
4 'also o 6erdadero y 6erdadero
4 'also o 6erdadero
4 6erdadero
0<=;>4 )?1&
RESOLUCIN DE PROBLEMAS CON COMPUTADORA Y
HERRAMIENTAS DE PROGRAMACIN:
TEMA 2
1. 3esolucin de pro!lemas.
2. 4n+lisis del pro!lema.
3. Dise7o del algoritmo.
4. 3esolucin en la computadora.
. 'lujogramas.
". Diagramas >S o de >4SS;ASCN#D#354>
&. 0seudocdigo.
1. RESOL'CIN DE PRO7LEMAS:
La resolucin de un pro!lema desde el punto de vista algor8tmico tiene 3 fases%
- 4n+lisis del pro!lema% Comprensin.
- Dise7o del algoritmo% 3esolucin algor8tmica.
- 3esolucin en computadora% ;mplantacin del algoritmo en un lenguaje de
programacin.
2. AN@LISIS DEL PRO7LEMA:
#l o!jetivo de @sta fase es comprender el pro!lema para lo cual como resultado
tenemos ,ue o!tener la especificacin de las entradas y salidas del pro!lema. 9iene ,ue
,uedar claro ,ue entra y ,ue sale.
&. DISEAO DEL ALGORITMO:
*na ve. comprendido el pro!lema se trata de determinar ,ue pasos o acciones
tenemos ,ue reali.ar para resolverlo.
Como criterios a seguir a la -ora de dar la solucin algor8tmica -ay ,ue tener en
cuenta%
1. Si el pro!lema es !astante complicado lo mejor es dividirlo en partes m+s
pe,ue7as e intentar dividirlo en partes m+s pe,ue7as e intentar resolverlas
por separado. #sta metodolog8a de Ldivide y vencer+sM tam!i@n se conoce
con el nom!re de dise7o descendente.
2. Las ventajas de aplicar esto son%
- 4l dividir el pro!lema en mdulos o partes se comprende m+s f+cilmente.
- 4l -acer modificaciones es m+s f+cil so!re un mdulo en particular ,ue en todo
el algoritmo.
- #n cuanto a los resultados, se pro!ar+n muc-o mejor compro!ando si cada
mdulo da el resultado correcto ,ue si intentamos pro!ar de un golpe todo el
programa por,ue si se produce un error sa!emos en ,ue mdulo -a sido.
*na segunda filosof8a a la -ora de dise7ar algoritmos es el refinamiento por
pasos, y es partir de una idea general e ir concretando cada ve. m+s esa descripcin
-asta ,ue tengamos algo tan concreto para resolver. 0asamos de lo m+s complejo a lo
m+s simple.
La !e)!esen#a+"-n *e ls alg!"#$s:
0<=;>4 1G?1&
*na ve. ,ue tenemos la solucin -ay ,ue implementarla con alguna
representacin. Las representaciones m+s usadas son los flujogramas, los diagramas >S
y el pseudocdigo.
9am!i@n la solucin se puede escri!ir en algunos casos en lenguaje natural pero
no se -ace por,ue es muy am!iguo, e incluso otras formas de e$presin como frmulas
matem+ticas.
Es+!"#u!a *el alg!"#$:
4l escri!ir el algoritmo -ay ,ue tener en cuenta%
- Las acciones o pasos a reali.ar tienen ,ue tener un determinado orden.
- #n cada momento solo se puede ejecutar una accin.
- Dentro de las sentencias del algoritmo pueden e$istir pala!ras reservadas
2pala!ras propias del lenguaje de programacin ,ue tienen para el compilador un
determinado significado/.
- Si estamos utili.ando pseudocdigo tenemos tam!i@n ,ue usar la identacin
2aumenta la legi!ilidad del pro!lema para ,ue se pueda leer mejor/.
0. RESOL'CIN EN LA COMP'TADORA:
#s -acer entender nuestro algoritmo a la computadora para ,ue lo pueda -acer.
1. Codificamos el algoritmo en un leguaje de programacin.
2. #jecutar el programa antes compilado.
3. Compro!ar los resultados y si no funciona, corregirlo.

6. FL'(OGRAMAS:
#s una notacin gr+fica para implementar algoritmos. Se !asa en la utili.acin
de unos s8m!olos gr+ficos ,ue denominamos cajas, en las ,ue escri!imos las acciones
,ue tiene ,ue reali.ar el algoritmo.
Las cajas est+n conectadas entre s8 por l8neas y eso nos indica el orden en el ,ue
tenemos ,ue ejecutar las acciones.
#n todo algoritmo siempre -a!r+ una caja de inicio y otra de fin, para el
principio y final del algoritmo.
Ls sB$Cls:
L8neas de flujo% *na l8nea con una flec-a ,ue sirve para conectar los
s8m!olos del diagrama y la flec-a indica la secuencia en la ,ue se van a ejecutar las
acciones.
S8m!olo de proceso% ;ndica la accin ,ue tiene ,ue reali.ar la
computadora. Dentro escri!imos la accin.
3epresenta las acciones de entrada y salida. Dentro colocaremos las
acciones de lectura y escritura.
Condicin% Dentro se va a colocar una condicin. Sirve para
representar estructuras selectivas y repetitivas y lo ,ue se -ace
al encontrar ese signo es evaluar la condicin ,ue -ay dentro
tal ,ue seg:n la condicin sea verdadera o falsa iremos por
caminos distintos.
0<=;>4 11?1&
0rincipio y fin% Dentro del s8m!olo ira la pala!ra inicio o fin del
algoritmo.
Su!programa% Dentro se coloca el nom!re del su!programa al ,ue
se llama.
Conectores% >os sirven cuando un flujograma no me ca!e en una columna de la -oja y
-ay ,ue seguir en otra columna%
- Si es en la misma -oja%
- Si es en -oja distinta%
Los conectores se ponen uno donde termina la columna y otra donde empie.a.
#s una aclaracin para entender mejor el cdigo, pero no es parte
del cdigo, no se ejecuta.
O#!s sB$Cls:
A 0antalla% Cuando una salida es por pantalla.
A 9eclado% 0ara representar una entrada por teclado.
A ;mpresora%
A #ntrada?Salida por disco%
0<=;>4 12?1&
C0ro!lema%
Kueremos -allar el producto de varios n:meros positivos introducidos por
teclado y el proceso termina cuando se meta un n:mero negativo.
1. ;niciar la varia!le del producto.
2. Leer el primer n:mero.
3. 0reguntar si es negativo o positivo.
4. Si es negativo nos salimos y escri!imos el producto.
. Si es positivo, multiplicamos el n:mero le8do y luego leemos un nuevo n:mero, y se
vuelve al paso 3.
;nicio
0 1
Leer num
>um FJ G #scri!ir 0
0 0 C num 'in
Leer num
0<=;>4 13?1&
6. DIAGRAMAS N4S O DE NASSI4SCDEDERMAN:
#s semejante al flujograma, peor sin flec-as y cma!iando algo los s8m!olos de
condicin y repeticin. Las cajas van unidas.
EaccinF
Condiciones%
Condicin
S; >S
Eacc1F Eacc2F
3epetitivas%
5ientas EcondF EaccionesF Desde viJv1 -asta vn
EaccionesF
3epetir -asta EcondF EaccionesF
0ro!lema anterior%
;nicio
0 1
Leer num
5ientras num FJ G
0 pCnum
Leer num
#scri!ir 0
'in
0<=;>4 14?1&
8. PSE'DOCDIGO:
#s un lenguaje de especificacin de algoritmos, pero muy parecido a cual,uier
lenguaje de programacin, por lo ,ue luego su traduccin al lenguaje es muy sencillo,
pero con la ventaja de ,ue no se rige por las normas de un lenguaje en particular. >os
centramos m+s en la lgica del pro!lema.
#l pseudocdigo tam!i@n va a utili.ar una serie de pala!ras clave o pala!ras
especiales ,ue va indicando lo ,ue significa el algoritmo.
1. ;nicio y 'in% 0or donde empie.a y aca!a el algoritmo.
Iegin ?end % 0acal.
_ ` % #n C.
2. S8 EcondF
#ntonces Eacc1F ;f t-en else
Sino Eacc2F
3.5ientras EcondF ?-acer 1-ile do
4. 3epetir ? -asta repeat until
. Desde ?-asta for .. to
". Seg:n sea Case
S1it-
Los comentarios van encerrados entre llaves.
Nay ,ue utili.ar la identacin.
4lgoritmo Enom!re algF
6ar
Enom!reF% EtipoF
;nicio
E;nstruccionesF
'in
4lgoritmo 0roducto
6ar
0, num% entero
;nicio
0 1
Leer num
5ientras num FJG -acer
0 pCnum
Leer num
'in mientras
#scri!ir p
'in
0<=;>4 1?1&
EJERCICIOS: TEMA 2
1. 3eali.ar un programa ,ue convierta los grados mayores de 3"Ga a radianes.
4lgoritmo convertir
6ar
=rados, rad% real
;nicio
#scri!ir L;ntroduce los gradosM
Leer grados
Si grados FJ 3"G
#ntonces
rad grados div 3"G
de lo contrario
#scri!ir L el grado no es mayor de 3"GaM
'in si

#scri!ir rad L radiantesM
'in
2. 3eali.ar un algoritmo ,ue de el numero de !illetes de GGG, 1GGG, monedas de 2GG, si
un duro e,uivale a 2GGG
4lgoritmo cam!io
6ar
Duros% real
;nicio
#scri!ir L;ntroduce los durosM
Leer duros
Duro 2GGG
Duros duros div GGG
#scri!ir duros div GGG L!illetes de GGGM
Duros duros div 1GGG
#scri!ir duros div 1GGG L!illetes de 1GGGM
Duros duros div 2GG
#scri!ir duros div 2GG Lmonedas de 2GGM
Duros duros div 2
#scri!ir duros div 2 Lmonedas de 2M
Duros duros div 1
#scri!ir duros Lmonedas de 1M
'in

0<=;>4 1"?1&
3. promedio de nota estudiante si es mayor 3.2 un mensaje apro!ado de lo contrario
perdio
4lgoritmo recorrido
6ar
n1,n2,n3% real
;nicio
#scri!ir L;ntroduce la nota1M
Leer n1.
#scri!ir L;ntroduce la nota2M
Leer n2.
#scri!ir L;ntroduce la nota3M
Leer n3,
0romedio 2n1Bn2Bn3/?3
Si2promedioF3.2/
;mprimirM apro!M
De lo contrario
;mprimirM no apro!M

'in
0<=;>4 1&?1&
ESTRUCTURA GENERAL DE UN PROGRAMA
TEMA 3
1. Concepto de programa.
2. ;nstrucciones y tipos.
3. #lementos !+sicos de un programa.
4. #structura de algoritmos y programas.
1. CONCEPTO DE PROGRAMA:
*n programa es un conjunto de instrucciones ,ue al ser ejecutadas resuelven un
pro!lema.
*n programa tiene 3 partes%
1. #ntrada de datos% >ormalmente se va a ejecutar a trav@s de instrucciones de
lectura, y en lo ,ue se le pide al usuario la informacin ,ue el programa va a
necesitar para ejecutarse y se -ace a trav@s de lecturas.
2. 4cciones de un algoritmo% 0arte en la ,ue se resuelve el pro!lema usando los
datos de entrada.
3. Salida% 5ostrar en un dispositivo de salida los resultados de las acciones
anteriormente reali.adas. Son acciones de escritura.
#n la parte de las acciones a ejecutar se distinguir+n dos partes%
- Declaracin de varia!les.
- ;nstrucciones del programa.
2. INSTR'CCIONES 2 TIPOS:
0ara ,ue una instruccin se ejecute tiene ,ue ser llevada a memoria. #n cuanto al
orden de ejecucin de las instrucciones, el programa puede ser de dos tipos%
- 0rogramas lineales% Se va ejecutando una instruccin m+s otra y el
orden de ejecucin es igual al orden de escritura.
- 0rogramas no lineales% Las instrucciones no se ejecutan en el mismo
orden en el ,ue aparecen escritas, sino ,ue se reali.an saltos ,ue nos
mandan de unas instrucciones a otras.
>unca se de!en -acer saltos no lineales.
T")s *e "ns#!u++"nes:
1. ;nicio y fin.
2. 4signacin% Dar un valor a una varia!le.
3. Lectura ? escritura% ;ntroducir o sacar informacin por dispositivos #?S.
4. ;nstrucciones de !ifurcacin% 4lternan el orden de ejecucin del programa. Salto a
otra instruccin ,ue no es la siguiente.
0<=;>4 1(?1&
4.1. Iifurcacin incondicional% #l salto se produce siempre ,ue el programa vaya a
esa instruccin% =oto ;r a.
4.2. Iifurcacin condicional% Se ejecutan un conjunto de instrucciones u otras
dependiendo del valor devuelto al evaluar una condicin.
#s la ,ue vamos a usar.
&. ELEMENTOS 7@SICOS DE 'N PROGRAMA:
Qu es la s"n#a:"s *e un lengua,e%:
Conjunto de reglas ,ue tenemos ,ue seguir a la -ora de escri!ir un programa en
ese lenguaje tal ,ue si no seguimos esas reglas de sinta$is el compilador da errores.
Ele$en#s *el lengua,e *e )!g!a$a+"-n:
1. 0ala!ras reservadas% Son un conjunto de pala!ras especiales ,ue nos sirven para
definir la estructura del programa, y solo se pueden usar para el fin para el ,ue est+n
reservadas.
2. ;dentificadores% Son los nom!res ,ue aparecen en el programa dados por el usuario.
Son por tanto los nom!res de varia!les, de constantes, de su!programas y nom!res
de tipos creados por el usuario.
3. Caracteres especiales% Sirven como separadores entre sentencias, por ejemplo el D.
4. ;nstrucciones% De 3 tipos, secuenciales, repetitivas y selectivas, y pueden aparecer
elementos especiales 2!ucles, contadores, interruptores y acumuladores/.
7u+le% *n conjunto de instrucciones ,ue se repiten un n:mero finito
de veces. Lleva asociado aparte de las instrucciones una condicin
,ue es la ,ue determina cuando se termina un !ucle. #jecucin de un
!ucle 2iteracin/. Los !ucles se pueden anidar unos dentro de otros, y
puede -a!er varios !ucles al mismo nivel, pero nunca se entrela.an.
Cn#a*!% *n elemento cuyo valor se incrementa o decrementa en
un valor constante en cada iteracin de un !ucle, y se utili.a para
controlar la condicin del !ucle.
A+u$ula*!% #s una varia!le ,ue tam!i@n se suele usar en los !ucles
y ,ue se incrementa o decrementa en cada iteracin del !ucle, pero no
en una cantidad constante.
4lgoritmo ejemplo
6ar cont, num, sum% entero
;nicio
Cont G
Sum G
5ientras cont EF 3
Leer num
Sum sum B num
Cont cont B1
'in mientras
#scri!ir suma
#nd
In#e!!u)#! E$a!+a1 Can*e!a FlagG% #s una varia!le ,ue sirve
como indicador de una determinada informacin y ,ue solo puede
0<=;>4 1)?1&
tomar uno de dos valores. #l valor de la varia!le tiene asociado un
signo y puede variar a lo largo de la ejecucin.
4lgoritmo ejemplo
6ar cont, num, suma% entero
>eg% !oolean
;nicio
Cont G
Sum G
>eg falso
5ientras cont EF3
Leer num
Si num E G
#ntonces neg verdadero
'in si
Sum sum B num
Cont cont B 1
'in mientras
Si negJverdadero
#ntonces escri!ir 2LSe -a le8do negativosM/
Sino escri!ir 2L>o negativosM/
'in si
'in
Si es leer un n:mero negativo o -asta 3 n:meros%
5ientras 2cont EF 3/ y 2neg J verdadero/
0. ESCRIT'RA DE ALGORITMOS 2 PROGRAMAS:
#n pseudocdigo el programa tiene dos partes, la ca!ecera y el cuerpo. La
ca!ecera contiene el nom!re del algoritmo, y el cuerpo contiene 2 partes.
La primera es la .ona de declaraciones de var y const, y la segunda es la .ona de
las instrucciones del programa.
#n la .ona de instrucciones para ,ue ,uede m+s legi!le -ay ,ue usar la
identacin y si es necesario -ay ,ue usar comentarios entre llaves.
0<=;>4 2G?1&
EJERCICIOS: TEMA 3
1. ZCu+les y cu+ntos son los n:meros primos comprendidos entre 1 y 1GGG[
4lgoritmo nbprimos
Const
0rimeroJ1
LimiteJ1GGG
6ar
cont, i, j% entero
primo% !oolean
;nicio
Cont G
Desde iJ primero -asta limite
primo verdadero
j 2
mientras 2iFj/ y 2primo Jverdadero/
Si i mod j J G
#ntonces primo falso
Sino j j B 1
'in si
'in mientras
Si primo J verdadero
#ntonces escri!ir iM L
Cont cont B 1
'in si
'in desde
#scri!ir L#ntre LprimeroM y LlimiteM -ay LcontM na primosM
'in
2. Calcular el m+$imo de n:meros positivos introducidos por teclado, sa!iendo ,ue
metemos n:meros -asta ,ue introdu.camos uno negativo. #l negativo no cuenta.
4lgoritmo ma$imo
6ar
>um, ma$% entero
;nicio
0<=;>4 21?1&
5a$ G
#scri!ir L;ntrodu.ca na positivos y para aca!ar introdu.ca uno negativoM
Leer num
5ientras num FJG
Si num Fma$
#ntonces ma$ num
'in si
Leer num
'in mientras
#scri!ir L#l mayor n:mero esM ma$
'in
3. Determinar cuales son los m:ltiplos de comprendidos entre 1 y >.
4lgoritmo multiplos
6ar
i% entero
;nicio
Desde iJ1 -asta n
Si i mod JG
#ntonces escri!ir i
'in si
'in desde
'in
0<=;>4 22?1&
INTRODUCCIN A LA PROGRAMACIN ESTRUCTURADA:
TEMA 4:
1. 9@cnicas de programacin.
2. 0rogramacin modular.
3. 0rogramacin constructora.
4. #structura secuencial.
. #structuras selectivas.
". #structuras repetitivas.
&. 4nidacin de !ucles y condicionales.
(. Control de datos de entrada.
1. THCNICAS DE PROGRAMACIN:
#l programar con flujogramas o diagramas >S resulta muy lioso en el momento en ,ue
el programa se complica, por eso vamos a utili.ar siempre el pseudocdigo, en el ,ue
vamos a utili.ar dos t@cnicas de programacin ,ue no se usan por separado, sino ,ue
son complementarios.
#stas t@cnicas son%
0rogramacin modular% Consiste en dividir el programa en partes llamadas
mdulos, e implementar cada uno de esos mdulos por separado.
0rogramacin estructurada% Cuyo o!jetivo es -acer m+s legi!le y lgico la
estructura del programa utili.ando para ello solamente tres tipos de
estructuras% selectivas, secuenciales 2condicionales/ y repetitivas.
2. PROGRAMACIN MOD'LAR:
Se !asa en dividir el programa en partes llamadas mdulos, ,ue se anali.an y
codifican de forma independiente y ,ue reali.an una determinada tarea ,ue ser+ en
realidad una parte del pro!lema total a resolver.
#n todo algoritmo o programa e$istir+ un mdulo o programa principal ,ue es al
,ue transfiere el control cuando comien.a la ejecucin del programa, y luego desde @l,
se va llamando al resto de los su!programas.
Llamar a un su!programa ,uiere decir transferirle el control, es decir ,ue se
comien.a a ejecutar y lo -ar+ desde el comien.o del su!programa -asta ,ue se termine y
al terminar devuelve el control al su!programa ,ue lo llam. Dentro del su!programa a
su ve. tam!i@n puedo llamar a otros pero en cual,uier caso al final se devuelve el
0<=;>4 23?1&
control al mdulo ,ue -ace la llamada. #l control al programa llamado se devuelve a la
instruccin siguiente a la ,ue se -i.o la llamada.
*n mdulo solo tiene acceso a los mdulos a los ,ue llama y a los su!mdulos a
los ,ue a su ve. llaman @stos. Los resultados producidos por un mdulo pueden ser
utili.ados por otros.
>o e$iste un criterio fijo para determinar el tama7o, ni muy grandes ni muy
pe,ue7os, la idea fundamental es ,ue realicen una :nica cosa y muy concreta.
Los mdulos o su!programas reci!en diferentes nom!res seg:n el lenguaje de
programacin y seg:n su tipo. Se llaman procedimientos y funciones 20ascal, C/,
su!rutinas 2!asic, fortran/, secciones 2co!ol/,...
&. PROGRAMACIN ESTR'CT'RADA:
La caracter8stica fundamental es ,ue se va a !asar en el uso :nicamente de tres
estructuras de control. 0ara ello se apoya en las siguientes filosof8as%
1. 3ecursos a!stractos% Son los recursos con los ,ue no contamos a la -ora de
programar, pero en los ,ue nos apoyamos a la -ora de solucionarlos. #stos
recursos se tienen ,ue ir transformando en recursos concretos.
2. Dise7o descendente 2top do1n/% Se trata de ir descomponiendo el pro!lema
en niveles o pasos cada ve. m+s sencillos, tal ,ue la salida de una etapa va a
servir como entrada de la siguiente. #n las primeras etapas tomamos el punto
de vista e$terno, es decir, ,ue entradas -ay y ,ue salidas -ay, y a medida ,ue
vamos !ajando de nivel, lo vamos viendo de modo interno 2como lo -ace por
dentro/.
3. #structuras !+sicas de control% 0ara -acer cual,uier programa siguiendo los
anteriores pasos de ra.onamiento, al final codificamos el programa usando
tres tipos de secuencias 2repetitivas, alternativas y secuenciales/.
4l final todo programa va a tener una :nica entrada y una :nica salida.
Desde la entrada tienen ,ue e$istir caminos ,ue nos permiten pasar por todas las
partes del programa y llevarnos a la salida, y finalmente no se van 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*cS=3454% D;4=3454S >S% 0S#*DSCdD;=S%
Leer num
>um numC2
#scri!ir num
6. ESTR'CT'RAS SELECTI3AS:
0<=;>4 24?1&
Se eval:a la condicin y en funcin del resultado se ejecuta un conjunto de
instrucciones u otro. Nay tres tipos de selectivas 2simple, do!le o m:ltiple/%
C Simple% #s la estructura % S8 EcondF
entonces EaccionesF
fin s8
#valuamos la condicin y si es verdadera ejecutamos el conjunto de condiciones
asociadas al entonces, y si es falso, no -acemos nada.
'L*cS=3454% D;4=3454 >S%

ECond1F Condicin
S; >S
EaccionesF
EaccionesF EaccionesF
C Do!le% Se eval:a la condicin y si es verdad se ejecutan el conjunto de acciones
asociadas a la parte entonces, y si es falso se ejecutan el conjunto de acciones asociadas
a la parte sino.
'L*cS=3454% D;4=3454S >S% 0S#*DSCdD;=S%
Si >o
Cond S8 EcondF
Si Cond >o #ntonces EaccionesF
4cc1 4cc2 Sino EaccionesF
4cc1 4cc2 'in si
*na condicin se ejecuta una :nica ve..
C 4lternativa m:ltiple% Se eval:a una condicin o e$presin ,ue puede tomar n valores.
Seg:n el valor ,ue la e$presin tenga en cada momento se ejecutan las acciones
correspondientes al valor. #n realidad e,uivale a un conjunto de condiciones anidadas.
#n cual,uier lenguaje, es Case o S1it-.
0S#*DSCdD;=S%
Seg:n sea Ee$presinF
E6alor1F% Eaccin1F
Evalor2F% Eaccin2F
.................................
OEotroF% EaccionesFP
fin seg:n
- Stro% Las acciones asociadas al valor otro se ejecutan cuando la e$presin no toma
ninguno de los valores ,ue aparecen antes. St-er1ise, #lse.
#l valor con el ,ue se compara la e$presin, va a depender de los lenguajes, de lo ,ue
sea ese valor. #n general ese valor puede ser un valor constante, un rango de valores o
incluso otra condicin
'L*cS=3454% D;=3454S >S%
#$pr #$presin
61 62 63 64 ... Stro
0<=;>4 2?1&
61 62 63 64 6 6"
Nacer un programa ,ue pueda di!ujar una recta, un punto o un rect+ngulo.
4lgoritmo di!ujo
6ar op% car+cter
#scri!ir 2L;ntroduce una opcinM
1. 0unto
2. 3ecta
3. 3ect+nguloM/
Leer op
Seg:n sea op
L1M% leer $
.........
L2M% leer $
..........
L3M% leer $
..........
LotroM% escri!ir Lopcin errneaM
fin seg:n
0ara un rango de valores%
Leer una nota y escri!ir en pantalla la calificacin%
6ar nota% entero
Leer nota
Seg:n sea nota
1..4% escri!ir LsuspensoM
.."% escri!ir Lapro!adoM
&..(% escri!ir L>ota!leM
)% escri!ir LSo!resalienteM
1G% escri!ir L5atricula de -onorM
fin seg:n
#n algunos lenguajes se permite poner una condicin%
Seg:n sea nota
>ota FJ1 y nota EJ4% escri!ir LsuspensoM
#n pseudocdigo no se pueden poner condiciones.
8. ESTR'CT'RAS REPETITI3AS:
0<=;>4 2"?1&
#n a,uella ,ue contiene un !ucle 2conjunto de instrucciones ,ue se repiten un
n:mero finito de veces/. Cada repeticin del !ucle se llama iteracin. 9odo !ucle tiene
,ue llevar asociada una condicin, ,ue es la ,ue va a determinar cuando se repite el
!ucle.
Nay cuatro tipos de !ucles, aun,ue solo se pueden usar tres%
1. 5ientras -acer e-ile do
2. 3epetir -asta repeat until
3. Desde for
4. ;terar loop % >o se usa.
M"en#!as >a+e!:
Sinta$is%
0S#*DSCdD;=S% 'L*cS=3454% D;4=3454S >S%
5ientras EcondF -acer >o
EaccionesF Cond mientras cond
fin mientras Si
Eacc1F
acciones
'uncionamiento%
La condicin del !ucle se eval:a al principio, antes de entrar en @l. Si la
condicin es verdadera, comen.amos a ejecutar las acciones del !ucle y despu@s de la
ultima volvemos a preguntar pro la condicin. #n el momento en el ,ue la condicin sea
falsa nos salimos del !ucle y ejecutamos la siguiente condicin al !ucle.
4l evaluarse la condicin antes de entrar en el !ucle al principio, si la condicin
al ser evaluada la primera ve. es falsa, no entraremos nunca en el !ucle, el !ucle puede
,ue se ejecute G veces, por tanto usaremos o!ligatoriamente este tipo de !ucle en el caso
de ,ue e$ista la posi!ilidad de ,ue el !ucle pueda ejecutarse G veces.
Re)e#"! >as#a:
Sinta$is%
'L*cS=3454% D;4=3454S >S% 'L*cS=3454%
acciones 3epetir
EaccF EaccionesF
-asta EcondicinF
>o Si 3epetir EcondF -asta
Cond
'uncin%
0<=;>4 2&?1&
Se repite el !ucle -asta ,ue la condicin sea verdadera. Se repite mientras la
condicin sea falsa. La condicin se eval:a siempre al final del !ucle, si es falsa
volvemos a ejecutar las acciones, si es verdad se sale del !ucle.
Como la condicin se eval:a al final, incluso aun,ue la primera ve. ya sea
verdadera, -a!remos pasado al menos una ve. por el !ucle.
#s decir ,ue cuando un !ucle se tenga ,ue ejecutar como m8nimo una ve.,
podremos usar una estructura repetir o mientras, la :nica diferencia ,ue -a!r+ entre las
dos, es ,ue para -acer lo mismo, las condiciones tienen ,ue ser contrarias.
Leer 3 n:meros y dar su suma%
Cont G Cont G
Suma G suma G
5ientras cont EF 3 repetir
Suma suma B num leer num
Leer num suma suma B num
Cont cont B 1 cont cont B 1
'in mientras -asta cont J 3
Des*e:
#ste tipo de !ucles se utili.a cuando se sa!e ya antes de ejecutar el !ucle el
n:mero e$acto de veces ,ue -ay ,ue ejecutarlo. 0ara ello el !ucle llevara asociado una
varia!le ,ue denominamos varia!le 8ndice, a la ,ue le asignamos un valor inicial y
determinamos cual va a ser su valor final y adem+s se va a incrementar o decrementar
en cada iteracin de !ucle en un valor constante, pero esto se va a -acer de manera
autom+tica, el programador no se tiene ,ue ocupar de incrementar o decrementar esta
varia!le en cada iteracin, sino ,ue va a ser una operacin impl8cita 2lo -ace por
defecto/.
0or tanto en cada iteracin del !ucle, la varia!le 8ndice se actuali.a
autom+ticamente y cuando alcan.a el valor ,ue -emos puesto como final se termina la
ejecucin del !ucle.
Sinta$is%
0S#*DSCdD;=S%
Desde Evar 8ndiceFJEvalor inicialF -asta Evalor finalF
EaccionesF
fin desde
'L*cS=3454S% D;4=3454S >S%
6 6i
Desde vJvi -asta v1
6 EF 61 EsentenciasF
sentencias
v v B 1
0<=;>4 2(?1&
7u+le +n sal"*a "n#e!na: l) "#e!a!.
0ermite la salida del !ucle desde un punto intermedio del mismo siempre ,ue se
cumpla la condicion ,ue aparece, entonces nos salimos a la siguiente instruccin
del !ucle.
;terar
Esent1F
salir si EcondF >*>C4 S# *S4
Esent2F
fin iterar
;. ESTR'CT'RAS ANIDADAS:
9anto las estructuras selectivas como los !ucles se pueden anidar unos dentro de
otros.
An"*a+"-n *e +n*"+"nales:
La ventaja de anidar sentencias condicionales, es ,ue cuando una se cumple no
-ay por ,ue mirar a las ,ue estan de!ajo. 9enemos ,ue tratar anidar la condicion en la
parte sino 2else/ en ve. ,ue en la parte entonces.
Si Econdicion1F
#ntonces Esentencia1F
Sino si Econdicion2F
#ntonces Esentencia2F
Sino si Econdicion2F
#ntonces Esentencia3F
'in si
'in si
'in si
#l case siempre e,uivale a una anidacin de condicionales, pero no al reves.
7u+les an"*a*s:
4l igual ,ue podemos colocar unas e$presiones dentro de otras, unos !ucles
pueden estar dentro de otros, pero nunca pueden cru.arse. 4l anidar !ucles -ay ,ue
tener en cuenta ,ue el !ucle mas interno funciona como una sentencia mas del !lo,ue
mas e$terno y por tanto en cada iteracin del !ucle mas e$terno se van 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 veces y el mas interno se repite m veces, si
por cada iteracin del mas e$terno se repite el mas interno, el n:mero total de
iteraciones ser+ mCn.
Los !ucles ,ue se anidan pueden se de igual o distinto tipo.
Desde iJ1 -asta (
Desde jJ1 -asta
#scri!ir L0rofesorMiMintrodu.ca su asignatura naMj
Leer asignatura
'in desde
0<=;>4 2)?1&
'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 va a repetir mientras no se lea un determinado valor. La primera
lectura se va a reali.ar fuera del !ucle, y si la primera ve. ,ue lo leo ya encuentro ese
valor centinela no podemos entrar en el !ucle y seguir+ a continuacin, sino entramos
en el !ucle.
Se va utili.ar una estructura M"en#!as.
2. Le+#u!a se+uen+"al *e un F"+>e!:
9endremos ,ue leer del primero al :ltimo registro del fic-ero. Na!r+ ,ue usar un
M"en#!as, aun,ue -ay dos posi!ilidades% Leer fuera del !ucle y 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. Cn#!l *e *a#s )a!a n )e!$"#"! *a#s e!!nes:
>o dejar seguir al usuario -asta ,ue no introdu.ca datos correctos. Nay ,ue usar
un Re)e#"!...Das#a.
3epetir 3epetir
Leer datos leer op
Nasta 2datos correctos/ -asta 2opFJ1/ y 2opEJ3/
0<=;>4 3G?1&
EJERCICIOS: TEMA 4
1. 4l final de curso deseamos sa!er cual -a sido el alumno de primero con mejor nota
media. Se sa!e ,ue este a7o entraron 1G alumnos y ,ue en primero todos tienen
asignaturas. Dar el nom!re y la nota media.
4lgoritmo notabmedia
Const
4lumnosJ1G
4signaturasJ
6ar
>om!re, mejorbalum% cadena
>ota, suma, media, acum% real
;, j% entero
;nicio
4cum G
Desde iJ1 -asta alumnos -acer
Suma G
#scri!ir L;ntrodu.ca el nom!re del alumnoM
Leer nom!re
Desde jJ1 -asta asignaturas -acer
#scri!ir L;ntrodu.ca la nota de la asignaturaM
Leer nota
Suma suma B nota
'in desde
5edia suma ? asignaturas
Si media F acum
#ntonces acum media
5ejorbalum nom!re
'in si
'in desde
#scri!ir L#l mejor alumno es Lmejorbalum
0<=;>4 31?1&
#scri!ir LSu nota media es Lacum
'in
2. Calcular la suma de los divisores de cada n:mero introducido por teclado.
9erminaremos cuando el n:mero sea negativo o G.
4lgoritmo divisores
6ar
>umero, i, suma %entero
;nicio
#scri!ir L;ntroduce un n:mero, y para aca!ar uno negativoM
Leer n:mero
5ientras numero F G
Suma G
Desde iJ1 -asta numero ?2
Si numero mod i JG
#ntonces suma suma B i
'in si
'in desde
Suma suma B numero
#scri!ir LLa suma de los divisores del n:mero es Lsuma
Leer numero
'in mientras
'in
3. Se coloca un c+pital C, a un interes ;, durante 5 a7os y se desea sa!er en cuanto se
-a!r+ convertido ese capital en m a7os, sa!iendo ,ue es acumulativo.
4lgoritmo interes
6ar
;, j, m% entero
C, temporal% real
;nicio
repetir
#scri!ir L;ntroduce el capital, el interes y el tiempoM
Leer c, i, m
Nasta 2cFG/ y 22iEJG/y2iEJ1GG// y 2m FJG/
0<=;>4 32?1&
Desde jJ1 -asta m
C c C 21B;?1GG/
'in desde
#scri!ir L9ienes LcM ptsM
'in
4. Dada una fec-a en formato dia?mes?a7o determinar el n:mero de d8as y el nom!re del
mes de dic-a fec-a, y sacar por pantalla la fec-a convertida a formato de dia LdeM mes
LdeM a7o.
4lgoritmo fec-a
6ar
Dia, mes, a7o, nbdias% entero
>bmes% cadena
;nicio
3epetir
#scri!ir L;ntroduce la fec-a en formato dia mes a7oM
Leer dia, mes, a7o
Seg:n sea mes
1,G1% nbmes LeneroM
nbdias 31
2,G2% nbmes Lfe!reroM
si a7o mod 4JG
entonces nbdias 2)
entonces nbdias 2(
3,G3% nbmes Lmar.oM
nbdias 31
4,G4% nbmes La!rilM
nbdias 3G
,G% nbmes LmayoM
nbdias 31
",G"% nbmes LjunioM
nbdias 3G
&,G&% nbmes LjulioM
nbdias 31
(,G(% nbmes LagostoM
nbdias 31
0<=;>4 33?1&
),G)% nbmes Lseptiem!reM
nbdias 3G
1G% nbmes Loctu!reM
nbdias 31
11% nbmes Lnoviem!reM
nbdias 3G
12% nbmes Ldiciem!reM
nbdias 31
fin seg:n sea
-asta 2dia EJnbdias/ y 22mes FJ1/y2mes EJ12// y 2a7o FJG/
escri!ir L#l mes de LnbmesMtiene LnbdiasM diasM
escri!ir LLa fec-a es% LnbdiasM de LnbmesM de La7o
fin
. Dada la siguiente frmula%
4veriguar el valor de $ pidiendo al usuario los valores de n, a, !.
4lgoritmo ecuacion
6ar
>, a, !, primer, seg:n, i, j% entero
f% real
;nicio
0rimer G
Seg:n 1
3epetir
#scri!ir L;ntroduce el valor de n, a, !M
Leer n, a, !
Nasta nFJG
Desde iJ1 -asta n
0rimer 222aA!/Vi g3/Bn/Bprimer
'in desde
Desde jJ2 -asta nA1
Seg:n 222CaC2iA1//Cseg:n/
'in desde
f primer ? seg:n
#scri!ir $
'in
0<=;>4 34?1&

=
=
+
+
=
1
2
1
// 1 2 C 2 2
/ 3 / 22
n
i
n
i
i
i a
n b a
X
". Dada la siguiente serie matem+tica%
a1JG
a2JG
anJanA1 B 22CanA2/ para nFJ3
Determinar cual es el valor y el rango del primer t@rmino cuyo valor sea mayor o igual a
2GGG.
4lgoritmo serie
6ar
41, a2, an, cont% entero
;nicio
41 1
42 G
4n a1 B 22Ca2/
> 3
5ientras an E 2GGG
42 a1
41 an
4n a1 B 22Ca2/
Cont cont B 1
'in mientras
#scri!ir L#l rango es LcontM y el resultado esMan
fin
0<=;>4 3?1&
SUBPROGRAMAS: PROCEDIMIENTOS Y FUNCIONES.
TEMA 5
1. ;ntroduccin a los su!programas o su!algoritmos.
2. 'unciones.
3. 0rocedimientos.
4. <m!itos% varia!les locales y glo!ales.
. Comunicacin entre su!programas% 0aso de par+metros.
- 9ipos y m@todos de paso de par+metros.
- 0aso de par+metros por copia.
- 0aso de par+metros por referencia.
- 0aso de par+metros por nom!re.
". 'unciones y procedimientos como par+metros.
&. #fectos laterales.
(. 3ecursividad.
1. INTROD'CCIN A LOS S'7PROGRAMAS O S'7ALGORITMOS:
La programacin modular es una de las t@cnicas fundamentales de la
programacin. Se apoya en el dise7o descendente y en la filosof8a de Ldivide y
vencer+sM, es decir se trata de dividir el pro!lema dado, en pro!lemas m+s simples en
,ue cada uno de los cuales lo implementaremos en un mdulo independiente. 4 cada
uno de estos mdulos es a lo ,ue llamamos su!algoritmos o su!programas.
Siempre e$istir+ un mdulo o programa principal ,ue es con el ,ue comien.a la
ejecucin de todo el programa, y a partir de @l iremos llamando al resto.
Cada ve. ,ue se llama a un su!programa se le pasa la informacin ,ue necesita
en la llamada, a continuacin comien.a a ejecutarse el su!programa llamado, y cuando
termine su ejecucin, devuelve el control a la siguiente instruccin a la de llamada en el
programa ,ue lo llam.
#n cuanto a la estructura de un su!programa es igual a la estructura de un
programa, va a tener una informacin de entrada ,ue es la ,ue le pasamos al -acer la
0<=;>4 3"?1&
llamada y ,ue se coloca junto al nom!re del su!programa. Despu@s va a tener un
conjunto de acciones, declarar otras varia!les propias del su!programa, y al terminar la
ejecucin puede ,ue devuelva o no resultados al programa ,ue lo llam.
Nay dos tipos fundamentales de su!programas% 'unciones y procedimientos.
2. F'NCIONES:
Desde el punto de vista matem+tico, una funcin es una operacin ,ue toma uno
o varios operandos, y devuelve un resultado. \ desde el punto de vista algor8tmico, es
un su!programa ,ue toma uno o varios par+metros como entrada y devuelve a la salida
un In"+ resultado.
0ascal% #n las funciones se puede devolver m+s de un :nico resultado mediante
par+metros.
C% Se devuelve todo por par+metros.
#ste :nico resultado ir+ asociado al nom!re de la funcin. Nay dos tipos de
funciones%
- ;nternas% Son las ,ue vienen definidas por defecto en el lenguaje.
- #$ternas% Las define el usuario y les da un nom!re o identificador.
0ara llamar a una funcin se da su nom!re, y entre par@ntesis van los
argumentos o par+metros ,ue se ,uieren pasar.
De+la!a+"-n *e una Fun+"-n:
La estructura de una funcin es semejante a la de cual,uier su!programa. 9endr+
una ca!ecera 2con el nom!re y los par+metros/ y un cuerpo2con la declaracin de los
par+metros de la funcin y las instrucciones/.
S"n#a:"s:
'uncion Enom!rebfuncionF 2nbparametro% tipo, nbparametro% tipo/% tipo funcion
6ar Evaria!les locales funcionF
;nicio
EaccionesF
retorno EvalorF
fin Enom!rebfuncionF
La lista de par+metros es la informacin ,ue se le tiene ,ue pasar a la funcin.
Los par+metros luego dentro de la funcin los podemos utili.ar igual ,ue si fueran
varia!les locales definidas en la funcin y para cada par+metro -ay ,ue poner su
nom!re y tipo.
#l nom!re de la funcin lo da al usuario y tiene ,ue ser significativo.
#n las varia!les locales se declaran las varia!les ,ue se pueden usar dentro de la
funcin.
#ntre las acciones tendr+ ,ue e$istir entre ellas una del tipo retorno <valor>.
#sta sentencia pondr+ fin a la ejecucin de la funcin y devolver+ el valor de la funcin,
es decir, como valor asociado al nom!re de mismo tipo ,ue el tipo de datos ,ue
devuelve a la funcin, este valor por tanto tiene ,ue ser del mismo tipo ,ue el tipo de
datos ,ue devuelve la funcin, ,ue es el ,ue -a!remos indicado al declarar la funcin en
la parte final de la ca!ecera.
>o se permiten funciones ,ue no devuelvan nada.
Los par+metros ,ue aparecen en la declaracin de la funcin se denominan
par+metros formales, y los par+metros ,ue yo utili.o cuando llamo a la funcin se
denominan par+metros actuales o reales.
In/+a+"-n *e una Fun+"-n:
0<=;>4 3&?1&
0ara llamar a una funcin se pone el nom!re de la funcin, y entre par@ntesis los
par+metros reales, ,ue podr+n ser varia!les, e$presiones, constantes,... pero siempre del
mismo tipo ,ue los par+metros normales asociados
Enom!rebfuncionF 2par+metros reales/
La funcin puede ser llamada desde el programa principal o desde cual,uier otro
su!programa.
0ara llamar a la funcin desde cual,uier parte, implica el conocimiento previo de
,ue @sta funcin e$iste.
4 trav@s de los par+metros reales de la llamada se proporciona a la funcin la
informacin ,ue necesita, para ello, al -acer la llamada lo ,ue se produce es una
asociacin autom+tica entre par+metros reales y par+metros formales. #sta asociacin se
reali.a seg:n el orden de la aparicin y de i.,uierda y derec-a.
Si el par+metro formal y real no son del mismo tipo, en 0ascal se produce un
error, y 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
cual,uier e$presin en la ,ue en el punto en la ,ue se llama a la funcin, pudiera ir
colocado cual,uier valor del tipo de datos ,ue devuelve la funcin, esto se de!e a ,ue el
valor ,ue devuelve una funcin esta asociado a su nom!re.
Pass )a!a >a+e! la lla$a*a a una Fun+"-n:
1. 4l -acer la llamada y ceder el control a la funcin, se asocia 2asigna el valor/ de
cada par+metro real a cada par+metro formal asociado, siempre por orden de
aparicin y de i.,uierda a derec-a, por lo ,ue siempre ,ue no coincidan los tipos y
el n:mero de par+metros formales y reales, se produce un error.
2. Si todo -a ido !ien, se ejecutan las acciones de la funcin -asta ,ue lleguemos a una
de tipo retorno <valor> ,ue pondr+ fin a la ejecucin. 0ueden e$istir varias
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 valor retornado y se devuelve el control al
su!programa ,ue -i.o la llamada pero sustituyendo el nom!re de la funcin por el
valor devuelto.
O#!a F!$a *e es)e+"F"+a! el !e#!n *e una Fun+"-n:
Se le asigna el valor devuelto al nom!re de la funcin.
>bfuncion valor
E,e$)l *e Fun+"-n:
*na funcin ,ue calcule la mitad del valor ,ue le paso par+metro. Suponemos
,ue es un valor entero.
'uncion mitad 2n% entero/% real
6ar m% real
;nicio
5 n?2
3etorno m
'in mitad
4lgoritmo calcbmitad
6ar num% entero
;nicio
#scri!ir L;ntroduce un n:mero para -allar su mitadM
Leer num
0<=;>4 3(?1&
#scri!ir LLa mitad de LnumM es Lmitad2num/
'in
* La !"#$%" &'(' )!*+* &*, ((a-a+a +*&+* !"a *.),*&$%".
&. PROCEDIMIENTOS:
#l inconveniente de una funcin es ,ue solo puede devolver un :nico valor, por
lo ,ue s8 nos interesa devolver G o > valores, aun,ue puedo usarlo para devolver un solo
valor, de!o usar un procedimiento.
*n procedimiento es un su!programa o un su!algoritmo ,ue ejecuta una
determinada tarea, pero ,ue tras ejecutar esa tarea no tienen ning:n valor asociado a su
nom!re como en las funciones, sino ,ue si devuelve informacin, lo -ace a trav@s de
par+metros.
4l llamar a un procedimiento, se le cede el control, comien.a a ejecutarse y
cuando termina devuelve el control a la siguiente instruccin a la de llamada.
D"Fe!en+"as en#!e Fun+"nes . )!+e*"$"en#s:
1. *na funcin devuelve un :nico valor y un procedimiento puede devolver G,1 o >.
2. >inguno de los resultados devueltos por el procedimiento se asocian a su nom!re
como ocurr8a con la funcin.
3. 5ientras ,ue la llamada a una funcin forma siempre parte de una e$presin, la
llamada a un procedimiento es una instruccin ,ue por s8 sola no necesita
instrucciones.
#sta llamada consiste en el nom!re del procedimiento y va entre par@ntesis van los
par+metros ,ue se le pasan. #n algunos lenguajes 2como el C/, se pone delante la
pala!ra Llamar a 2Call/ procedimiento 2par+metro/.
S"n#a:"s:
0rocedimiento Enom!rebprocF 2EtipobpasobparF Enom!rebparF% tipobpar,.../
6ar Evaria!les localesF% tipo
;nicio
EsentenciasF
fin Enom!rebprocF
La ca!ecera va a estar formada por el nom!re del procedimiento ,ue ser+ un
identificador y ,ue de!e de ser significativo, y luego entre par@ntesis los par+metros o la
informacin ,ue se le pasa al procedimiento. 0ara cada par+metro -ay ,ue indicar el
tipo de paso de par+metro. Nay dos tipos fundamentales de paso de par+metros, por
valor y por referencia, si no ponemos tipo de paso de par+metros, se toma el tipo de
paso de par+metros por valor.
#n el cuerpo del procedimiento donde van las sentencias ya no -a!r+ ninguna de
tipo Eretorno valorF, a-ora !ien, si el procedimiento devuelve resultados a trav@s de sus
par+metros, cosa ,ue solo podr+ -acer a trav@s de los par+metros ,ue se pasan por
referencia, tendr+n ,ue e$istir sentencias de asignacin de valores a estos par+metros
pasados por referencia, a trav@s de los cuales se van a devolver los resultados.
C$ se lla$a a un )!+e*"$"en#:
Ollamar a 2Call/P nom!rebproc 2parbreales/
Pass )a!a >a+e! la lla$a*a a un )!+e*"$"en#:
1. Se cede el control al procedimiento al ,ue se llama y lo primero ,ue se -ace 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 y reales se -ace de i.,uierda a derec-a por orden de colocacin y para ,ue
0<=;>4 3)?1&
se pueda producir esta asociacin tienen ,ue e$istir el mismo n:mero de par+metros
formales ,ue reales, y adem+s el tipo tiene ,ue coincidir con el del par+metro formal
asociado, sino se cumple alguna de estas condiciones -ay un error.
2. Si la asociacin -a sido correcta comien.an a ejecutarse las instrucciones del
procedimiento -asta llegar a la :ltima instruccin. 4l llegar a la instruccin se
vuelven a asociar los par+metros formales ,ue devuelven 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 ya contendr+n los resultados del procedimiento.
3. 'inalmente se cede el control a la siguiente instruccin a la ,ue se -ace la llamada,
pero teniendo en cuenta ,ue en esta instruccin y en las siguientes puedo usar ya los
par+metros reales en los ,ue se devolvieron los resultados del procedimiento para
tra!ajar con ellos.
0rocedimiento mitad 2num%entero,entAsal 5%real/
;nicio
5 num?2
'in mitad
4lgoritmo calcbmitad
6ar
>% entero
5it% real
;nicio
#scri!ir L;ntroduce un n:meroM
Leer n
5itad 2n,mit/
#scri!ir LLa mitad esMmit
fin
0. @M7ITOS: 3ARIA7LES LOCALES 2 GLO7ALES:
Qu es el 5$C"# *e un "*en#"F"+a*!%:
#l +m!ito de un identificador 2varia!les, constantes, funciones,.../ es la parte del
programa en la ,ue se conoce y por tanto se puede usar un identificador.
Seg:n el +m!ito -ay 2 tipos de varia!les, locales y glo!ales%
1. Local% 4,uella ,ue est+ declarada y definida dentro de un su!programa luego su
+m!ito coincidir+ con el +m!ito del su!programa en la ,ue este definida.
#sto ,uiere decir ,ue la varia!le no tiene ning:n significado, no se conoce y no se
puede acceder a ella desde fuera del su!programa y ,ue tiene una posicin de
memoria distinta a la de cual,uier otra, incluso si es de una varia!le ,ue tiene el
mismo nom!re pero ,ue est+ definida fuera del su!programa.
Las varia!les locales a un su!programa se definen en la parte de la definicin de
varia!les del mismo. Los par+metros formales ,ue se le ponen a un su!programa se
comportan dentro de @l como si fueran tam!i@n varia!les locales a @l.
0<=;>4 4G?1&
2. =lo!ales% Son las ,ue est+n definidas a nivel del programa, es decir, su +m!ito es el
programa o algoritmo principal y todos los su!programas ,ue van junto con @l.
4 esta varia!le podemos acceder desde cual,uiera de los su!programas y el
programa principal, salvo ,ue alguno de esos su!programas tenga definida una
varia!le local con el mismo nom!re ,ue la varia!le glo!al, en este caso si utili.o el
nom!re de esa varia!le me referir@ a la local, nunca a la glo!al2ya ,ue tienen 2
.onas de memoria distintas/.
Luga! en el =ue se *eF"nen las /a!"aCles glCales:
#n algunos lenguajes se define en el programa principal, y esa varia!le ser+ glo!al,
en otros lenguajes se definen fuera del programa principal y fuera de cual,uier otro
su!programa2antes de empe.ar el programa principal/. 5@todo ,ue vamos a
usar.
#l pro!lema de usar varia!les glo!ales es ,ue como todos los su!programas las
pueden modificar, puede ser posi!le ,ue -aya usos inde!idos cuando un su!programa
utili.a una varia!le glo!al sin sa!er ,ue otro la -a modificado, por esa ra.n nunca
usaremos para pasar informacin entre los su!programas varia!les glo!ales, sino ,ue
usaremos varia!les de entradaAsalida, salvo ,ue no nos ,uede m+s remedio.
P!+e*"$"en#s an"*a*s:
La anidacin de procedimientos no se permite en todos los lenguajes y consiste
en ,ue 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 vista, se dice ,ue una varia!le local se conoce en
el procedimiento en el ,ue est+ definida y en todos los procedimientos anidados a @l ,ue
son los ,ue componen el +m!ito de dic-o procedimiento, salvo ,ue en alguno de esos
procedimientos anidados este definida una varia!le local con el mismo nom!re en cuyo
caso dentro de ese procedimiento siempre nos referiremos a la varia!le local definida en
@l por,ue siempre se considera el +m!ito m+s restringido.
00
6ar 4,I
01
4,C,D
02
4
03
D,#
04 D,'
0
0" ',4

643;4IL#S <5I;9S S*I03S=3454
4 del 00 04,0
0<=;>4 41?1&
I del 00 01,02,03,04,0,0"
4 del 01 01,03
C del 01 01,02,03
D del 01 01,02,03
4 del 02 02
D del 03 03
# del 03 03
D del 04 04,0,0"
' del 04 04,0
' del 0" 0"
4 del 0" 0"
6. COM'NICACIN ENTRE S'7PROGRAMAS: PASO DE PAR@METROS.
La mejor forma para llevar a ca!o la comunicacin ente su!programas, es el
paso de par+metros. 9rataremos de evitar siempre ,ue sea posi!le el uso de varia!les
glo!ales.
Cuando llamamos a una funcin o procedimiento, le pasamos a trav@s de los
par+metros la informacin ,ue necesita, y en el caso de un procedimiento tam!i@n
devolvemos a trav@s de sus par+metros los resultados. 0ara ello definiremos el tipo del
par+metro a principio del su!programa, ,ue es lo ,ue conocemos como par+metros
formales, y al -acer la llamada pasamos la informacin a trav@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 m@todos%
1. Correspondencia posicional% #n este caso se emparejan los par+metros
formales y reales por la posicin ,ue ocupan 2orden de declaracin/ y de
i.,uierda a derec-a. 0ara ,ue se pueda reali.ar esta asociacin, tiene ,ue
-a!er el mismo n:mero de par+metros formales y reales, y con el mismo
tipo.
' 2$%entero,y%real/
6ar a%real
' 23,4/
2. Correspondencia por nom!re impl8cito% 4-ora en la llamada al su!programa
se pone e$pl8citamente a ,ue par+metro formal corresponde cada real.
4-ora en la llamada ponemos el nom!re del par+metro formal, separado por
dos puntos 2%/ y el nom!re del par+metro real ,ue le pasamos, con lo cual ya
no importa la posicin en la ,ue colo,uemos la informacin.
' 2$%3,y%4/
' 2y%4,$%3/
*n lenguaje ,ue permite esto es 4D4.
*saremos siempre el primer m@todo 2posicional/.
0<=;>4 42?1&
Pas *e )a!5$e#!s:
Del modo de paso de par+metros va a depender el resultado ,ue 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. De entrada% Son par+metros ,ue solo aportan informacin de entrada al
su!progama en el ,ue pertenecen como par+metros. 4porta el valor ,ue
tienen como entrada al su!programa. #n el caso de una funcin, todos sus
par+metros son de este tipo.
Como solo sirven como entrada, solo pueden ser le8dos, pero no
modificados, y aun,ue se modificasen dentro de un su!programa, fuera no
va a tener efecto esa modificacin.
2. De salida% Se usan solo y e$clusivamente para devolver resultados a trav@s
de ellos. Su valor al -acer la llamada al su!programa no nos importa, sino
,ue ese valor solo va a tener importancia cuando termina la ejecucin del
programa. *n par+metro de este tipo tericamente nunca se puede leer, solo
se va actuali.ar.
3. De entrada y salida% #l valor del par+metro tiene importancia tanto a la
entrada como a la salida del su!programa, nos aporta informacin cuando
llamamos al su!programa y por otra parte devolvemos a trav@s de @l
resultados cuando terminamos el su!programa, en este caso, tiene sentido
tanto leer como actuali.ar el par+metro.
Solo 4D4 es un lenguaje ,ue va a soportar los 3 tipos de paso de par+metro. Se
ponen como ;n, Sut, ;nASut.
#l resto de los lenguajes solo permiten dos tipos de par+metros, de entrada 2solo
para leer datos/ y de entradaAsalida 2para devolver resultados, aun,ue tam!i@n se
puede usar para leer datos/.
2. M#*s *e )as *e )a!5$e#!s:
- 0aso de par+metros por copia%
- 0or valor.
- 0or resultado.
- 0or valorAresultado.
- 0aso de par+metros por referencia.
- 0aso de par+metros por nom!re o nominal.
Pas *e )a!5$e#!s )! +)"a:
La caracter8stica fundamental de este m@todo de paso de par+metros es ,ue el
par+metro formal siempre se considera ,ue tiene asociada una direccin de memoria en
la ,ue est+ almacenado y ,ue por tanto se comporta igual ,ue una varia!le local del
su!programa en ,ue aparece.
#n este m@todo lo ,ue importa es el valor del par+metro actual.
1. P! /al!: >os interesa el valor del par+metro actual a la entrada, para ello este
valor 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 varia!le, y nunca se va a
usar para devolver resultado a trav@s de @l, por esa ra.n precisamente puede ser una
constante o una e$presin, por,ue al no devolver resultados a trav@s de @l no
necesita tomar ninguna .ona de memoria en la ,ue este almacenado, es m+s, incluso
0<=;>4 43?1&
si el par+metro actual fuera una varia!le y la modific+semos dentro del su!programa
2algo ,ue no de!er8amos -acer/, fuera del su!programa no tendr8a ninguna
repercusin esta modificacin, es decir, esa varia!le servir8a valiendo lo mismo en el
programa desde el ,ue se -ace la llamada despu@s y antes de -acerla.
#l funcionamiento ser8a el siguiente%
- 4l -acer la llamada al su!programa se eval:a el valor del par+metro real, y
ese es el ,ue se asocia, es decir, el ,ue se guarda o asigna al par+metro
formal asociado.
- Comen.amos a ejecutar el su!programa y si por casualidad se produce alg:n
cam!io en el par+metro formal, el par+metro actual no se ver+ afectado, es
decir, su valor seguir+ siendo el mismo en el su!programa desde donde se
llama ,ue antes de -acer la llamada al su!programa.
4lgoritmo #j
6ar 4%entero 3 3 "
;nicio 4 del 00 f de 0
4 3
0 24/
#scri!ir 4
'in
0rocedimiento 02$%entero/
;nicio
f $C2
#scri!ir $
'in p
#l valor de 4 ser8a 3 y el de f ser8a ".
2. P! /al!4!esul#a*: #n el valorAresultado nos interesa el valor del par+metro actual
tanto a la entrada como a la salida de la ejecucin del su!programa.
#sto ,uiere decir ,ue se cam!ia el valor del par+metro formal cam!iar+ tam!i@n el
valor de su par+metro real asociado, cosa ,ue no ocurr8a antes, y esto supone por tanto
,ue a-ora el par+metro real tiene ,ue tener asociada o!ligatoriamente una direccin de
memoria, por lo ,ue siempre tendr+ ,ue ser una varia!le 2no una constante ni una
e$presin/.
#l proceso ser8a el siguiente%
A 4l -acer la llamada al su!programa se eval:a el par+metro real y su valor se copia
en el par+metro formal asociado y al terminar la ejecucin el valor del par+metro
formal se vuelve a copiar en el par+metro real asociado.
4lgoritmo #j
6ar 4%entero Se copia
;nicio
4 3
0<=;>4 44?1&
0 24/ 3 " 3 "
#scri!ir 4 0.3eal 0.'ormal
'in
0rocedimiento 02$%entero/
;nicio Se devuelve
f $C2
#scri!ir $
'in p
#l valor de la 4 y la f ser8a ".
&. P! !esul#a*: >os interesa el valor del par+metro real solamente a la salida o fin
de la ejecucin del su!programa en ,ue aparece. #sto significa ,ue al -acer la
llamada no se copia el valor del par+metro real en el par+metro formal asociado, sin
em!argo a la salida se copia el valor del par+metro formal en la direccin del
par+metro real asociado, esto significa por tanto, ,ue el par+metro real tiene ,ue
tener asociada una e$presin ,ue tiene ,ue ser una varia!le 2no puede ser una
constante o una e$presin/.
4lgoritmo ej >o se copia
6ar 4%entero
;nicio
4 3 0.3eal 0.'ormal
0 24/
#scri!ir 4
'in
0rocedimiento 02$%entero/ Se copia a la salida
;nicio
f 1
f $C2
#scri!ir $
'in p
#l valor de 4 y de f es 2.
#n la pr+ctica la mayor parte de los lenguajes dentro del tipo de paso de
par+metro por copia solo van a soportar el tipo de paso de par+metro por valor, ,ue se
usar+ cuando un par+metro solo lo ,uiero utili.ar como entrada de informacin al
su!programa, pero no para devolver resultados a trav@s de @l.
Los otros dos tipos de paso de par+metros por copia 2por valor y por valorA
resultado/, no se implementan normalmente por,ue los efectos son pr+cticamente
iguales ,ue el paso de par+metros por referencia, es decir, cuando ,uiero usar un
par+metro no solo para pasar informacin a trav@s de @l sino tam!i@n para devolver
resultados o si lo voy a usar slo para devolver resultados, utili.ar@ el paso de
par+metros por referencia ,ue vamos a ver a continuacin.
0ara sim!oli.ar ,ue el tipo de paso de par+metros es por valor, en la definicin
del su!programa no pongo ning:n tipo de paso de par+metros para ese par+metro, es
decir, no poner ning:n tipo significa ,ue por defecto el tipo de paso de par+metros es
por valor.
0<=;>4 4?1&
#n el caso de las funciones como solamente pueden reci!ir informacin de
entrada pero nunca pueden devolver informacin por sus par+metros ya ,ue lo
devuelven a trav@s de la sentencia retorno y asociado a su nom!re.
#l tipo de paso de sus par+metros va a ser siempre por valor.

Pas *e )a!5$e#!s )! !eFe!en+"a:
4-ora la caracter8stica principal de este tipo de paso de par+metros es ,ue el
par+metro formal va a tener tam!i@n asignada una direccin de memoria en la ,ue se
almacena, pero en esa direccin NO SE G'ARDA S' 3ALOR, sino ,ue se almacena
la direccin de su par+metro real asociado, es decir, el par+metro formal apunta al
par+metro real ,ue tiene asociado y cual,uier modificacin ,ue se efect:e so!re el
par+metro formal tendr+ una repercusin directa en el par+metro real asociado ya ,ue lo
,ue modificar+ ser+ el valor almacenado en la direccin ,ue indica el par+metro formal
,ue es la de su par+metro formal asociado.
#l proceso ser+ por tanto el siguiente%
- 4l -acer la llamada al procedimiento en el par+metro formal ,ue se pasa por
referencia, se va a guardar la direccin del par+metro real asociado para ,ue
apunte a @l.
- Durante la ejecucin cual,uier referencia al par+metro formal se -ar+
accediendo a la direccin apuntada por dic-o par+metro, es decir, accediendo
directamente al par+metro real asociado, por lo ,ue cual,uier cam!io en el
par+metro formal afectar+ directamente al par+metro real asociado. De esta
manera -a!remos pasado el resultado.
0ara indicar ,ue el tipo de paso de par+metro es por referencia, vamos a utili.ar
la pala!ra clave entAsal precediendo al par+metro ,ue se pasa por referencia.
4 estos par+metros tam!i@n se les llama par+metros varia!les 2por,ue su valor
var8a/, por eso en 0ascal se usa la pala!ra clave 6ar para indicarlo.
#n otros lenguajes como C, se usan como par+metros punteros para indicar ,ue
son direcciones.
4lgoritmo #c
6ar 4 apunta
;nicio
4 3
0124/ 3 direccin 4
#scri!ir 24/
0<=;>4 4"?1&
'in 4 del 00 f del 01
0rocedimiento 012entAsal $%entero/
;nicio
f $C2
'in 01
0or valor el par+metro actual no cam!ia de valor.
0or referencia el par+metro actual puede cam!iar.
Pas *e )a!5$e#!s )! n$C!e:
#n este caso, el par+metro formal se sustituye literalmente por el par+metro
actual asociado. #sta sustitucin literal del par+metro formal por el par+metro actual no
se produce -asta ,ue no se usa el par+metro formal.
La ventaja es ,ue si no usamos en ning:n momento el par+metro formal dentro
del su!programa llamado 2cosa poco pro!a!le/, no se tendr+ ,ue -acer ning:n tipo de
su!stitucin.
0ero el gran inconveniente es ,ue si se usa el par+metro formal, -ay ,ue ir a
!uscar en ese momento la e$presin del par+metro real asociado.
#l paso de par+metro por nom!re es lo ,ue se parece m+s a la su!stitucin de
par+metros en una funcin matem+tica.
' 2$/J $B2
' 2aB1/ J aB1C2
' 2$/J $B2
' 2aB1/J a B1 2 JK 2aB1/C2
4lgoritmo #c
6ar 4% entero
;nicio
4 3
0124B1/
#scri!ir 24/
'in
0rocedimiento 012entAsal $% entero/
;nicio
f $C2
'in 01
4l final solo vamos a usar 2 tipos de paso de par+metros, ,ue son los ,ue usan
casi todos los lenguajes% 0or valor y por referencia.
0or valor% Solo lo usamos cuando un par+metro solo sirve para informacin de entrada,
no devolvemos nada con @l. 0or eso este paso puede ser una constante, varia!le o
e$presin. 0ara sim!oli.arlo en la declaracin de varia!les no ponemos nada.
0or referencia% Lo usamos cuando un par+metro lo usamos como entrada de
informacin y como salida o solo como salida. 0or esta ra.n a-ora s8 ,ue se va a variar
el par+metro formal y por lo tanto no podemos usar constantes ni e$presiones, solo
varia!les. Lo sim!oli.amos con la pala!ra entAsal.

8. F'NCIONES 2 PROCEDIMIENTOS COMO PAR@METROS:
#n la mayor parte de los lenguajes se permite tam!i@n ,ue una funcin o
procedimiento pueda ser pasado como par+metro de otro su!programa. #n este caso, es
0<=;>4 4&?1&
decir, cuando el par+metro formal es de tipo funcin o procedimiento, pasaremos como
par+metro real funciones o procedimientos ,ue tengan la misma definicin ,ue el ,ue
-emos puesto como par+metro formal, y en nuestro caso para indicar ,ue se pasa como
par+metro real una funcin o procedimiento, !asta con poner su nom!re.
Desde el su!programa al ,ue se pasa como par+metro esa funcin o
procedimiento podemos llamar en cual,uier momento a esa funcin pasada como
par+metro ,ue en cada momento podr+ ser una distinta dependiendo del par+metro
formal asociado.
'uncion Enom!rebfF 2par%tipoDfuncion EnbfF2$%entero,y%car+cter/%entero
0rodedimiento Enom!rebfF procedimiento 2$%tipo,.../D...
4lgoritmo #c
6ar v1,v2% entero
;nicio
61 1
62 2
02v1,f1,v2/
02v1,f2,v2/
'in
0rocedimiento 02$%enteroDfuncion '24%enteroDI%car+cter/%enteroDentAsal y%entero/
;nicio
f 2
\ '2$,RaR/
'in 0
'uncion '12$%enteroDy%car+cter/%entero
;nicio
#scri!ir y
3etorno 2$B1/
'in
'uncion '224%enteroDI%car+cter/%entero
;nicio
#scri!ir LNolaM I
3etorno 4
'in '2
#l paso de funciones y procedimientos como par+metros, nos va a permitir ,ue
desde un su!programa podamos llamar a otros, pero teniendo en cuenta ,ue el
su!programa llamado no va a ser uno determinado, sino ,ue va a depender en cada
momento del su!programa pasado como par+metro real, de esta manera el su!programa
puede llamar a un conjunto de n su!programas ,ue cumplan unas determinadas
caracter8sticas, pero solo uno en cada momento.
0<=;>4 4(?1&
>o -ay ,ue 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. 0ara
diferenciarlo, cuando paso una funcin como par+metro solo pondr@ su nom!re, en
cam!io cuando llamo a una funcin para pasar el valor ,ue devuelve como par+metro
pondr@ el nom!re de la funcin y con sus argumentos para indicar ,ue a-8 se puede
-acer la llamada. #sto se puede -acer por,ue la llamada a una funcin puede aparecer
en cual,uier e$presin en la ,ue apareciese cual,uier valor del tipo de datos ,ue
devuelve.
0rocedimiento 024%entero/
;nicio
#scri!ir 4
'in 0
'uncion '2$%entero/%entero
;nicio
3etorno 2$C2/
'in '
4lgoritmo #c
6ar ;
;nicio
; 2
02'2;// #sto no es pasar una funcin como par+metro
'in
;. EFECTOS LATERALES:
*n efecto lateral es cual,uier modificacin ,ue un su!programa 2sea funcin o
procedimiento/, reali.a en elementos situados fuera de @l pero sin -acer esas
modificaciones a trav@s del paso de par+metros.
Los efectos laterales siempre -ay ,ue evitarlos por,ue no somos conscientes o
no controlamos ,ue se -an producido.
0ara reali.ar comunicacin entre su!programas solo se -ar+ a trav@s del paso de
par+metro para evitar los efectos laterales.
Los efectos laterales normalmente se producen por el uso de varia!les glo!ales o
varia!les locales ,ue a!arcan varios procedimientos 2esto solo es posi!le si -ay
anidacin de su!programas/. 0or lo tanto evitaremos su uso e$cepto ,ue sea
imprescindi!le.
6ar 4%entero
4lgoritmo #c
6ar I%entero
;nicio
I 1
4 2
02I/
#scri!ir 4
'in
0rocedimiento 02$%entero/
0<=;>4 4)?1&
;nicio
4 $B2
'in 0
<. REC'RSI3IDAD:
Se dice ,ue un su!programa es recursivo cuando se llama a s8 mismo. La
recursividad se va a poder usar en su!programas ,ue pueden definirse en t@rminos
recursivos, es decir, en termino de s8 mismo, como procesos de alguna manera
repetitivos.
La recursividad trataremos de evitarla siempre ,ue sea posi!le, es decir, siempre
,ue lo mismo se pueda solucionar con un !ucle, ya ,ue cada ve. ,ue un su!programa se
llama a s8 mismo -ay ,ue almacenar en la pila del sistema la direccin de retorno de ese
su!programa, con lo cual si -acemos muc-as llamadas recursivamente iremos llenando
la pila del sistema, y se des!ordara aca!ando con la memoria.
9odo programa recursivo tiene ,ue tener alguna condicin ,ue ponga fin a la
recursividad, es decir, ,ue el programa deje de llamarse a s8 mismo cuando se cumpla la
condicin, sino se formar8a un !ucle infinito.
'uncion potencia 2!ase%enteroDe$p%entero/%real
6ar 0%real
;%entero
;nicio
0 1
Desde iJ1 -asta e$p
0 0C!ase
'in desde
3etorno 0
'in
'uncion potencia 2!ase%enteroDe$p%entero/%real
;nicio
Si e$pJG entonces retorno 1
Sino
3etorno 2!aseCpotencia2!ase,e$pA1/
'in potencia
0<=;>4 G?1&
TEMA 5: EJERCICIOS
1. ;mplementar un su!programa ,ue realice la serie de 'i!onacci, ,ue es%
'i!onacci 21/J 'i!onacci 22/J1
> F 2 'i!onacci 2n/J 'i!onacci 2nA1/ B 'i!onacci 2nA2/
4lgoritmo seriebfi!onacci
6ar
;, n% entero
;nicio
#scri!ir L;ntroduce un n:meroM
Leer n
Desde iJ1 -asta n
#scri!ir LLa serie de fi!onacci de LiM es Lfi!onacci 2i/
'in desde
'in
'uncion fi!onacci 2num% entero/% entero
;nicio
Si 2numJ1/ o 2numJ2/
#ntonces retorno 1
Sino
3etorno 2fi!onacci 2numA1/ B fi!onacci 2numA2/
'in si
'in fi!onacci
2. ;mplementar un su!programa al ,ue pas+ndole como par+metros 2 valores enteros 5
y >, me calcule el com!inatorio
4lgoritmo com!inatorio
0<=;>4 1?1&
6ar
5,n% entero
;nicio
3epetir
#scri!ir L;ntroduce el valor de 5 y >M
Leer m,n
Nasta m Fn
#scri!ir L#l com!inatorio es Lfactorial 2m/ div 2factorial2n/Cfactorial2mAn//
'in
'uncion factorial 2num% entero/% real
;nicio
Si numJG
#ntonces retorno 1
Sino
3etorno 2num C factorial 2numA1//
'in si
'in factorial
3. ;mplementar un su!programa ,ue me -alle cual es la primera potencia en !ase 2
mayor ,ue un n:mero ,ue pasamos como par+metro, devolviendo el valor de dic-a
potencia y el e$ponente al ,ue est+ elevado.
4lgoritmo elevar
6ar
>umero, resp1, resp2% entero
;nicio
#scri!ir L;ntroduce un n:meroM
Leer numero
Comprue!a 2numero, resp1, resp2/
#scri!ir L2VMresp1MJMresp2M FMnumero
'in
0rocedimiento comprue!a 2num% enteroD entAsal n% enteroD entAsal pot% entero/
;nicio
> 1
5ientras pot E n
0ot pot C2
> nB1
'in mientras
'in comprue!a
4. ;mplementar un su!programa ,ue calcule recursivamente en cuanto se convierte un
capital C al final de > a7os y a un inter@s ;.
'uncion calculo 2c% enteroDi% enteroD n% entero/% real
;nicio
Si mJG
#ntonces retorno C
Sino
0<=;>4 2?1&
3etorno 2cC21Bi?1GG/Bcalculo 2c,i,nA1/
'in si
'in calculo
. Calcular el primer t@rmino de la siguiente serie ,ue sea mayor o igual a un valor 6
,ue se le pasa como par+metro y me devuelva el lugar ,ue ocupa en la serie y el valor.
4iJG
4nJnB24nA1/Y
'uncion factorial 2num% entero/% entero
6ar
;, acum% entero
;nicio
4cum 1
Desde iJ1 -asta num
4cum acum C i
'in desde
3etorno acum
'in factorial
0rocedimiento serie 2v% enteroD entAsal an% enteroD entAsal n% entero/
6ar
41% entero
;nicio
41 G
4n G
> 1
5ientras an EJ 6
> nB1
4n n B factorial 2a1/
41 an
'in mientras
'in serie
0<=;>4 3?1&
". Calcular el valor de la serie donde > es un valor ,ue se pasa como par+metro al
su!programa ,ue -ace el c+lculo.
'uncion suma 2n% entero/% real
6ar
;, j% entero
f, y, acum1, acum2, suma1, suma2% real
;nicio
4cum1 G
4cum 2 G
Desde iJG -asta n
f 1?n
4cum1 acum1 B $
'in desde
Desde jJG -asta nA1
\ 1 BiCacum1 B y
'in desde
3etorno acum2
'in suma
&. ZKu@ se escri!e en pantalla tras la siguiente ejecucin[
4lgoritmo #c
6ar
4,I,C% entero
;nicio
4 1
I 2
C 4B3
01 24, IAC, C/
C C g '24/
02 24,C/
01 2C, I, 4/
#scri!ir 4, I, C
'in
0rocedimiento 01 2entAsal $% enteroD y% enteroD entAsal .% entero/
;nicio
f y B.
\ $ B1
^ y C 2
'in 01
0rocedimiento 02 2entAsal $% enteroD y% entero/
;nicio
f $ B1 gy
\ 3
'in 02
'uncion ' 2$% entero/% entero
;nicio
f $ B 3
0<=;>4 4?1&

= =
+
1
G G
/
1
C 1 2
n
i
n
i
n
i
3etorno 2$ g 1/
'in '
La solucin es 4J(D IJ2D CJ3
ESTRUCTURAS DE DATOS: ARRAYS.
TEMA /
1. ;ntroduccin a las estructuras de datos.
2. 4rrays unidimensionales o vectores.
3. Speraciones con arrays unidimensionales o vectores.
4. 4rrays !idimensionales o matrices.
. 4rrays multidimensionales.
". 4lmacenamiento de arrays en memoria.
&. 4rrays como par+metros de su!programas.
(. 4rrays de LpunterosM.
1. INTROD'CCIN A LAS ESTR'CT'RAS DE DATOS:
Clasificacin de los tipos de datos seg:n su estructura%
A Simples%
A #st+ndar 2entero, real, car+cter, !ooleano/
A >o est+ndar 2enumeracin, su!rango/
A #structurados%
A #st+ticos 2arrays, cadena, registros, fic-eros, conjuntos/ 0ilas
A Din+micos 2punteros, listas enla.adas, +r!oles, grafos/ Colas
Los tipos simples son cuando cada dato representa un :nico elemento%
A #st+ndar% #st+n definidos por defecto por el lenguaje.
A >o est+ndar% 9ipos simples definidos por el usuario.
Los tipos de datos estructurados, son cu+ndo un dato es una estructura ,ue se
construyen a partir de otros complementos.
0<=;>4 ?1&
- #st+ticos% Scupan un tama7o de memoria fijo, ,ue tengo ,ue definir antes de
declararlo.
- Din+micos% La estructura no ocupa un tama7o fijo de memoria, sino ,ue
ocupa la memoria ,ue ocupa en cada momento. Se van a manejar a trav@s del
tipo de dato puntero.
0untero% #s una varia!le cuyo contenido es una direccin de memoria y esa
direccin de memoria corresponde a la direccin de memoria de otra
varia!le, ,ue es la varia!le apuntada.
Seg:n el tipo de datos de la varia!le apuntada variar+ el tipo de puntero. 4
trav@s de una varia!le de tipo puntero podemos esta!lecer la cone$in o
enlace entre los elementos ,ue van a formar la estructura, y seg:n se reali.an
estos enlaces vamos a tener diferentes tipos de estructuras 2listas enla.adas,
+r!oles, grafos/.
Las pilas y las colas son 2 estructuras de datos con un funcionamiento especial, ,ue
pueden implementarse con memoria est+tica o din+mica.
2. ARRA2S 'NIDIMENSIONALES: 3ECTORES.
*n array unidimensional, o lineal, o vector, es un conjunto finito y ordenado de
elementos -omog@neos.
#s finito por,ue tiene un n:mero determinado de elementos. Nomog@neo por,ue
todos los elementos almacenados van a ser del mismo tipo. Srdenado por,ue vamos a
poder acceder a cada elemento del array de manera independiente por,ue va a -a!er una
forma de referenciar cada elemento. 0ara referenciar cada elemento de un array vamos a
usar 8ndices 2valor ,ue directa o indirectamente referencia la posicin del array/.
Los 8ndices tienen ,ue ser de cual,uier tipo de datos escalar 2entre los ,ue se
puede definir un orden, y ,ue entre 2 elementos consecutivos no puede -a!er infinitos
elementos/, aun,ue normalmente como 8ndices se van a utili.ar n:meros enteros.
0ara referenciar un elemento de un array usaremos el nom!re del array y entre
corc-etes O P el 8ndice ,ue determina la posicin de ese elemento en el array.
#l rango o longitud de un vector o array lineal es la diferencia entre el 8ndice de
valor m+$imo y el 8ndice de valor m8nimo de ese array B 1. >ormalmente los 8ndices
comien.an a enumerarse, es decir, el valor m8nimo del 8ndice es G 1, dependiendo del
lenguaje 2en 0ascal con 1 y en C con G/. Sin em!argo nadie impide ,ue comiencen en
cual,uier otro valor.
Los arrays se almacenan siempre en posiciones consecutivas de memoria y
podemos acceder a cada elemento del array de manera independiente a trav@s de los
8ndices. *n 8ndice no tiene por,ue ser un valor constante, sino ,ue puede ser tam!i@n
una varia!le o una e$presin ,ue al ser evaluada devuelva ese 8ndice.
4 la -ora de definir un array siempre -a!r+ ,ue dar el nom!re del array, el rango
de sus 8ndices y el tipo de los datos ,ue contiene, y para -acer esa declaracin, se utili.a
la siguiente nomenclatura.
EnombarrayF% array OL; .. LSP de EtipoF
sueldo% array O1 .. (P de real
sueldo% array O1))G .. 1))&P de real
sueldo O1))2P 1GGGGG
;% entero
; 1))2
Sueldo O;P
Sueldo O;B2P
0<=;>4 "?1&
&. OPERACIONES CON ARRA2S 'NIDIMENSIONALES O 3ECTORES:
1. 4signacin de un dato a una posicin concreta del array%
EnombarrayFOindiceP valor
1 2 3 4 " & ( ) 1G 11 12
6entas O3P (GGGGG
2. Lectura y escritura de datos%
leer EnombarrayFOindiceP
escri!ir EnombarrayFOindiceP
desde iJ1 -asta 12
escri!ir L;ntroduce las ventas del mesMi
leer ventas OiP
fin desde
desde iJ1 -asta 12
escri!ir L6entas del mesMiMJMventas OiP
fin desde
3. 3ecorrido o acceso secuencial de un array%
A Consiste en pasar por todas las posiciones del array para procesar su
informacin.
Desde iJ1 -asta 12
6entas OiP ventas OiP B 1GGGGGG
'in desde
4. 4ctuali.acin de un array%
1a/ 47adir datos%
#s un caso especial de la operacin de inserccin de un elemento en un array,
pero el elemento lo metemos despu@s de la :ltima posicin ,ue contiene informacin
v+lida en el array.
0ara ,ue esto se pueda -acer es necesario ,ue si actualmente el array tiene h
posiciones de informacin v+lida, tenga un tama7o de al menos hB1 para ,ue pueda
a7adir otro elemento a continuacin de h.
EnombarrayFOhB1P valor
2a/ ;nsercin de datos%
Consiste en introducir un elemento en el interior de un array para lo cual ser+
necesario despla.ar todos los elementos situados a la derec-a del ,ue vamos a insertar
una posicin a la derec-a con el fin de conservar el orden relativo entre ellos.
0ara ,ue se pueda insertar un nuevo elemento en el array si ya e$isten >
elementos con informacin en el array, el array tendr+ ,ue tener un tama7o de cmo
m8nimo >B1 para poder insertar el elemento.
C # ' c 5 S
L=M
0<=;>4 &?1&
Siendo h la posicin en la ,ue tengo ,ue insertar el nuevo elemento y > el
n:mero de elementos v+lidos en el array en el momento de la insercin y siempre
suponiendo de >B1, el algoritmo de insercin ser+%
Desde iJ> -asta h
4O;B1P 4O;P
'in desde
4OhP valor
3a/ Iorrar datos%
0ara eliminar un elemento de un array si ese elemento est+ posicionado al final
del array, no -ay ning:n pro!lema, simplemente si el tama7o del array era >, a-ora -ay
,ue considerar ,ue el tama7o del array es >A1.
Si el elemento a !orrar ocupa cual,uier otra posicin entonces tendr@ ,ue
despla.ar todos los elementos situados a la derec-a del ,ue ,uiero !orrar una posicin
-acia la i.,uierda para ,ue el array ,uede organi.ado.
C # ' c 5 S
Iorrar c.
Suponiendo ,ue el n:mero de elementos validos actualmente es > y ,ue ,uiero
!orrar el elemento de la posicin h.
Desde iJh -asta >A1
4O;P 4O;B1P
'in desde
0ara indicar ,ue el n:mero de elementos validos es >, podr8amos indicarlo como
> >A1.
0. ARRA2S 7IDIMENSIONALES O MATRICES:
#n un array unidimensional o vector cada elemento se referencia por un 8ndice,
en un array !idimensional cada elemento se va a referenciar por 2 8ndices, y a-ora la
representacin lgica ya no va a ser un vector, sino una matri..
*n array !idimensional de 5C> elementos es un conjunto de 5C> elementos,
todos del mismo tipo, cada uno de los cuales se referencia a trav@s de 2 su!8ndices. #l
primer su!8ndice podr+ variar entre 1 y 5 si -emos empe.ado a numerar los 8ndices por
1, y el segundo 8ndice variar+ entre 1 y >, si -emos empe.ado a numerar los 8ndices por
el 1.
\ m+s en general podemos definir un array de 2 dimensiones de la siguiente
manera.
EnombarrayF% array OL;1..LS2,L;2..LS2P de EtipoF
EvarbarrayFO; , cP
L;1 EJ ; EJ LS1
L;2 EJ c EJ LS2
#l tama7o del array ser+ 2LS1AL;1 B1/C2LS2AL;2 B1/
6entas de cada mes de 1))G a 1))%
6entas% array O1))G..1)),1..12P de real
"C12J&2
La representacin lgica de un array !idimensional es una matri. de
dimensiones 5C> donde 5 es el n:mero de filas de la matri. y > es el n:mero de
columnas, es decir, la 1W dimensin indicar8a las filas y la 2W dimensin indicar8a las
columnas, es decir, al intentar acceder a un elemento ;,c estar8amos accediendo al
elemento ,ue ocupa la fila ; y la columna c.
0<=;>4 (?1&
#n memoria, sin em!argo todos los elementos del array se almacenan en
posiciones contiguas pero nosotros lo vemos como una matri..
1 2 3 4 " & ( ) 1G 11 12
1))G
1))1
1))2
1))3
f
1))4
1))
6entas O1))3,3P
#n memoria estar8a almacenado todo seguido%
Mane, *e $a#!"+es:
A 0ara poner a G todos los elementos de la matri..
5% array O1..>,1..5P de entero
6ar i,j entero
Desde iJ1 -asta n
Desde jJ1 -asta 5
5 Oi,jP G
'in desde
'in desde
A 0ara poner a G solo los elementos de la fila ;%
Desde iJ1 -asta >
5 Oi,jP G
'in desde
6. ARRA2S M'LTIDIMENSIONALES:
*n array multidimensional es un array de 3 m+s dimensiones. Si tenemos un
array de > dimensiones, cada dimensin de tama7o d1,d2,..,d>, el n:mero de elementos
del array ser+ d1Cd2C..Cd>, y para acceder a un elemento concreto del array
utili.aremos > 8ndices, cada uno de los cuales referenciar+ a una posicin dentro de una
dimensin, siempre seg:n el orden de declaracin.
#n memoria, el array se sigue almacenando en posiciones consecutivas.
La declaracin de un array multidimensional ser8a%
>ombarray% array OL;1..LS1,L;2..LS2,L;3..LS3,L;>..LS>P de tipo
>ombarray O;1,;2,;3,;>P
L;1 EJ ;1 EJ LS2
0<=;>4 )?1&
L;> EJ ;2 EJ LS>
8. ALMACENAMIENTO DE ARRA2S EN MEMORIA:
*n array en memoria siempre se almacena en posiciones contiguas a partir de la
direccin !ase de comien.o del array ,ue me la dan cuando yo declaro una varia!le del
tipo array.
#l tama7o ,ue ocupa el array en memoria es el producto del n:mero de sus
elementos por el tama7o de cada uno de ellos.
4rray O1..1GGP de car+cter
1 !yte C 1GG elementos J 1GG !ytes
#n el caso de un array !idimensional, tam!i@n se seguir+ almacenando en
posiciones contiguas de memoria, y su tama7o ser+ el producto de sus elementos pro el
tama7o.
4-ora, la forma en la ,ue est+n almacenados esos elementos va a depender de
,ue el array se almacene fila a fila o columna a columna, ,ue tam!i@n se conoce como
almacenamiento por orden de fila mayor o por orden de columna mayor.
C1 C2 ..... Cm C1 C2 ... Cm
'1 '2 '3
4% array O1..>,1..5P de EtipoF
'ila
1,1 1,2 1,3 ..... 1,5 2,1 2,2 2,3 .... 2,5 >,1 >,2 ... >,m
Como -allar la direccin !ase en la ,ue comien.a a almacenarse un determinado
elemento de un array%
A *nidimensionales%
D;324O;P/J DirbIase B 2;A1/ C 9ama7o
>:mero elemento J 3
9ama7o J
DirbIase J 1GG
4O3P comien.a en la direccin 11G
A Iidimensionales%
- Srden de fila mayor
Dir24Oi,jP/J DirbIase B O22;A1/C5/B2cA1/PC9ama7o
- Srden de columna mayor
Dir24Oi,jP/J DirbIase B O22cA1/C>/B2;A1/PC9ama7o
;. ARRA2S COMO PAR@METROS DE S'7PROGRAMAS:
*n array es tam!i@n un tipo de datos estructurado, y se puede pasar como
par+metro a un su!programa, pero el pro!lema es ,ue no sa!emos como indicar si su
paso es por valor o por referencia.
#n principio, el paso de un array siempre tiene sentido ,ue sea por referencia
2,ue se modifi,ue y tenga repercusin en el e$terior/, y si es por valor solo servir8a para
leer informacin.
La mayor parte de los lenguajes de programacin, pasan los arrays por referencia
2si se modifica el array se nota en el e$terior/. >osotros tam!i@n lo -aremos as8.
0<=;>4 "G?1&
Si paso el array y no ,uiero modificarlo, con no modificarlo !asta.
#s distinto pasar un array como par+metro a pasar una posicin del array, si paso
el array entero como par+metro, el par+metro formal asociado ser+ un array con la
misma estructura ,ue el par+metro real, pero si lo ,ue ,uiero pasar es un elemento de
una posicin concreta del array, el par+metro formal asociado no ser+ del tipo array, sino
,ue ser+ del tipo de datos ,ue contenga el array, por,ue cada elemento de un array es un
elemento independiente ,ue se puede usar por separado.
#n el caso de ,ue pasemos un array entero como par+metro, el par+metro formal
asociado, tendr+ ,ue ser un array de la misma estructura ,ue tiene el mismo tipo de
datos y el mismo tama7o.
#n C, el par+metro formal asociado tiene ,ue ser del mismo tipo de datos, pero
no -ace falta ,ue sea del mismo tama7o.
0ara pasar un array como par+metro real, utili.are el nom!re del array, en
cam!io si pasamos una posicin concreta, usar@ el nom!re y el 8ndice.
#n C, el nom!re de un array indica su direccin de comien.o en memoria, y por
eso siempre se pasa por referencia.
Siempre vamos a pasar los arrays por referencia, sin la pala!ra clave entAsal.
Como en las funciones no se pasan los par+metros por referencia, lo mejor es no
pasar los arrays como par+metros de las funciones.
0rocedimiento Enom!rebpF 2EnombparF%array OL;1..LS1P de EtipoFD .../
6ar 4% array OL;1..LS1P de EtipoF
>ombp 2array/ Slo se pasa el nom!re.
<. ARRA2S DE LP'NTEROSM:
#n realidad lo ,ue vamos a e$plicar con este concepto es la posi!ilidad de ,ue
desde un array se apunte a la posicin de otro array. Kue unos arrays sirvan para
referenciar a otros.
Qu es un )un#e!%:
*n puntero es una varia!le ,ue contiene una direccin en la ,ue est+ almacenado
un elemento ,ue llamamos apuntado.
Desde este punto de vista, un 8ndice indirectamente tam!i@n es un puntero
por,ue indirectamente indica una posicin del array, pero no lo es directamente por,ue
no almacena una direccin.
Desde este punto de vista, si un array contiene valores de 8ndices, es decir, ,ue
cada posicin de ese array lo ,ue -ace es apuntar a la posicin de otro array, entonces
decimos ,ue es un array de punteros, aun,ue en realidad la definicin mas correcta es
,ue es un array de 8ndices a otro array.
Cu5n* es I#"l usa! un a!!a. *e Bn*"+e%:
;maginemos ,ue tenemos una compa78a ,ue ,uiere tener almacenados los datos
de sus empleados organi.ados por .onas. ;maginemos ,ue -ay 4 .onas.
^1 ^2 ^3 ^4
f e N C
4 c D
\ h
L
0odemos almacenar esta informacin de distintas formas%
0<=;>4 "1?1&
- *n array !idimensional 4C>, en donde 4 son las .onas y > es el n:mero
m+$imo de empleados ,ue -ay por .ona.
#l inconveniente es la perdida de espacio.
- *sar un array unidimensional o vector donde est@n todos los datos seguidos.
#l inconveniente es ,ue no tengo los empleados ordenados por .onas.
- *sar un array unidimensional, y entre cada 2 .onas meter en la posicin ,ue
va entre ellas una marca especial para indicar ,ue paso de .ona.
#l inconveniente es ,ue para pasar a una .ona tengo ,ue pasar por todas las
anteriores.
- *sar un array de 8ndices%
*n array con la informacin de los empleados.
Stro array de 8ndices ,ue contendr+ tantas posiciones como .onas -aya.
#n cada posicin de cada .ona almacenar@ el 8ndice en donde comien.a el
primer empleado de esa .ona en el array de empleados.
^onas #mpleados
1 f
4 4
\
& e
N
c
C
D
h
L
C Listar todos los empleados de la .ona 3%
Desde iJ.onaO3P -asta .onaO4PA1
#scri!ir #mpleados OiP
'in desde
C >:mero de empleados%
^ona O4P g ^ona O3P
0<=;>4 "2?1&
EJERCICIOS: TEMA /
1. Nay unos multicines con salas, y cada sala con 1GG personas distri!uidas en 2G
asientos y filas.
Si yo pido entrada para una sala, implementar un programa ,ue me diga si -ay sitio
en la sala.
4lgoritmo cines
Const
SalasJ
4sientosJ2G
'ilasJ
6ar
>bsalas,j,H% entero
5arca% !oolean
4% array O1..salas,1..asientos,1..filasP de entero
;nicio
0edirbdatos 2nbsalas/
5ientras nbsalas EF G
5arca falso
c G
h 1
3epetir
Si j F asientos
#ntonces j 1
h HB1
0<=;>4 "3?1&
'in si
Si 2jJasientos/ y 2HFJfilas/
#ntonces escri!ir LSala llenaM
5arca verdadero
Sino si a Onbsalas,j,HPJG
#ntonces aOnbsalas,j,HP 1
#scri!ir L4sientoMjMfilaMH
5arca verdadero
'in si
'in si
Nasta 2aOnbsalas,j,HPJ1/ y 2marcaJverdadero/
0edirbdatos 2nbsalas/
'in mientras
'in
0rocedimiento pedirbdatos 2entAsal s% entero/
;nicio
3epetir
#scri!ir LZ#n ,u@ sala ,uieres entrar[M
Leer s
Nasta 2sFJG/ y 2sEJsalas/
'in pedirbdatos
2. ZKu@ escri!e este programa[
4lgoritmo 0rin
6ar
Datos% array O1..1GP de entero
i% entero
inicio
desde iJ1 -asta 1G
datos OiP i
fin desde
01 2datos,datosO3P/
Desde iJ1 -asta 1G
#scri!ir datos OiP
'in desde
'in
0rocedimiento 01 2a% array O1..1GP de enteroD entAsal $% entero/
;nicio
f G
Desde iJ1 -asta 1G
f $ B aOiP
'in desde
'in 01
C Solucin% 1, 2, , 4, , ", &, (, ), 1G.
0<=;>4 "4?1&
3. Dada una matri. 4 de 5C> elementos, actuali.arla tal ,ue la matri. resultante
tenga divididos a los elementos de la diagonal principal por la suma de los
elementos ,ue no forman parte de ella.
4lgoritmo divbmatri.
6ar
4% array O1..5,1..>P de real
Suma% real
;nicio
0edirbdatos 2a/
Sumar 2a,suma/
#scri!ir 2a/
'in
0rocedimiento pedirbdatos 2matri.% array O1..5,1..>P de real/
6ar
;,j% entero
;nicio
Desde iJ1 -asta 5
Desde jJ1 -asta >
#scri!ir L;ntroduce el elementoMiM,Mj
Leer aOi,jP
'in desde
'in desde
'in pedirbdatos
0rocedimiento sumar 2matri.% array O1..5,1..>P de realD entAsal s% real/
6ar
;,j% entero
;nicio
S G
Desde iJ1 -asta 5
Desde jJ1 -asta >
Si iE F j
#ntonces s s B matri. Oi,jP
'in si
'in desde
'in desde
'in sumar
0rocedimiento escri!ir 2matri.% array O1..5,1..>P de realD s% real/
6ar
;,j% entero
;nicio
Desde iJ1 -asta 5
Desde jJ1 -asta >
Si iJj
#ntonces escri!ir aOi,jP?s
Sino escri!ir aOi,jP
'in si
'in desde
'in desde
0<=;>4 "?1&
'in escri!ir
4. 9engo guardado en una estructura los alumnos de nuestra escuela, sa!iendo ,ue
-ay 3 cursos, 5 alumnos por curso y > asignaturas por alumno, determinar
mediante su!programas%
1. Cual es la nota media de un determinado curso.
2. Cuantos apro!ados y suspensos -ay en una determinada asignatura.
3. Cual es el alumno de la escuela con mejor nota media.
4lgoritmo escuela
Const
CursosJ3
4lumnosJ5
4signaturasJ>
9ipo
DatoJarray O1..cursos,1..alumnos,1..asignaturasP de real
6ar
>ota% dato
;nicio
0edirbdatos 2nota/
5ediabcurso 2nota/
4pbsusp 2nota/
5ediabalum 2curso/
'in
0rocedimiento pedirbdatos 2n% datos/
6ar
;,j,H% entero
;nicio
Desde iJ1 -asta cursos
Desde jJ1 -asta alumnos
Desde HJ1 -asta asignaturas
3epetir
#scri!ir L>ota del alumnoMjMasignaturaMHMcursoMi
Leer nOi,j,HP
Nasta 2nOi,j,HFJG/ y 2nOi,j,HP EJ1G/
'in desde
'in desde
'in desde
'in pedirbdatos
0rocedimiento mediabcurso 2n% dato/
6ar
c,H,resp% entero
5edia,suma% entero
;nicio
Suma G.G
3epetir
#scri!ir LZDe ,u@ curso ,uieres -acer la media[M
Leer resp
Nasta 2respEJ1/ y 2respEJcursos/
0<=;>4 ""?1&
Desde jJ1 -asta alumnos
Desde HJ1 -asta asignaturas
Suma%Jsuma B nOresp,j,HP
'in desde
'in desde
5edia suma ?alumnosCasignatura
#scri!ir LLa nota media del cursoMrespMesMmedia
'in mediabcurso
0rocedimiento apbsusp 2n%dato/
6ar
Susp,ap,i,j% entero
;nicio
Susp G
4p G
3epetir
#scri!ir LZKu@ asignatura ,uieres ver[M
Leer asig
Nasta 2asigFJ1/ y 2asigEJasignaturas/
Desde iJ1 -asta cursos
Desde jJ1 -asta alumnos
Si nOi,j,asigP FJ
#ntonces ap ap B 1
Sino susp susp B 1
'in si
'in desde
'in desde
#scri!ir L#n la asignaturaMasigM-ayMapMapro!adosM
#scri!ir L#n la asignaturaMasigM-ayMsuspMsuspensosM
'in apbsusp
0rocedimiento mediabalum 2n% dato/
6ar
;,j,alum,curs% entero
Suma,media,mayor% real
0<=;>4 "&?1&
;nicio
5ayor G.G
Desde iJ1 -asta cursos
Desde jJ1 -asta alumnos
Suma G.G
Desde HJ1 -asta asignaturas
Suma suma B nOi,j,HP
'in desde
5edia suma ? asignaturas
Si media F mayor
#ntonces mayor media
Curs i
4lum j
'in si
'in desde
'in desde
#scri!ir L#l alumno con mayor media es elMalumMdel cursoMcurs
#scri!ir Ly su nota es deMmayor
'in mediabalum
. 5ultiplicar 2 matrices de dimensiones 5C> y 0CK.
4lgoritmo multiplicarbmatrices
9ipo
5atri.1Jarray O1..5,1..>P de entero
5atri.2Jarray O1..0,11..KP de entero
3esultadoJarray O1..5,1..KP de entero
6ar
5at1% matri.1
5at2% matri.2
3% resultado
;nicio
0edirbdatos 2mat1,mat2/
5ultiplicar 2mat1,mat2,r/
6isuali.ar 2r/
'in
0rocedimiento pedirbdatos 2m1% matri.1D m2% matri.2/
6ar
;,j% entero
;nicio
Desde iJ1 -asta 5
Desde jJ1 -asta >
#scri!ir L;ntroduce el elementoMiM,MjMde la matri. 1M
Leer m1Oi,jP
0<=;>4 "(?1&
'in desde
'in desde
Desde iJ1 -asta 0
Desde jJ1 -asta K
#scri!ir L;ntroduce el elementoMiM,Mde la matri. 2M
Leer m2Oi,jP
'in desde
'in desde
'in pedirbdatos
0rocedimiento multiplicar 2m1% matri.1D m2% matri.2D entAsal resul% resultado/
6ar
'ila,i,j,acum% entero
;nicio
Desde filaJ1 -asta >
Desde iJ1 -asta 0
3esulOfila,iP G
Desde jJ1 -asta K
3esulOfila,iP resulOfila,iPBm1Ofila,jPCm2Oj,iP
'in desde
'in desde
'in desde
'in multiplicar
0rocedimiento visuali.ar 2resul% resultado/
6ar
;,j% entero
;nicio
Desde iJ1 -asta 5
Desde jJ1 -asta K
#scri!ir resulOi,jP
'in desde
'in desde
'in visuali.ar
". 3esolver la siguiente serie%
4lgoritmo serie
9ipo
5atri.1J array O1..5,1..>P de entero
5atri.2J array O1..>,1..>P de entero
6ar
Suma1,suma2,suma3% entero
f% real
0<=;>4 ")?1&
[ ]
[ ]

=
= =
=
1
2
1 1
,
C , C
n
j
m
i
n
j
j n b
j j i a i
X
;nicio
Sumas 2suma1,suma2,suma3/
3esultado 2suma1,suma2,suma3,$/
#scri!ir L#l resultado esM$/
'in
0rocedimiento sumas 2s1% enteroDs2% enteroDs3% entero/
6ar
;,j% entero
;nicio
Desde iJ1 -asta 5
S2 G
Desde jJ1 -asta >
S2 s2 B aOi,jPCj
'in desde
S1 s1 B ;Cs2
'in desde
S3 G
Desde jJ2 -asta >A1
S3 s3 B !On,jP
'in desde
'in sumas
0rocedimiento resultado 2s1% enteroD s2% enteroD s3% enteroD entAsal y% real/
;nicio
\ s1Cs2?s3
'in resultado
&. *na empresa consta de departamentos con 2G empleados cada departamento, si
tengo todas las ventas en una estructura, determinar%
- 6entas de un determinado departamento en un determinado mes.
- 6entas de un determinado empleado en un determinado departamento.
- Cual es el departamento con m+s ventas.
4lgoritmo empresa
Const
DJ
#J2G
5J12
9ipo
5atri.J array O1..d,1..e,1..mP de real
6ar
6entas% matri.
Cantidad% real
Departamentos% entero
;nicio
0edirbdatos 2ventas/
Depbmes 2ventas/
Depbempleado 2ventas/
0<=;>4 &G?1&
5ejorbdep 2ventas/
'in
0rocedimiento pedirbdatos 2a% matri./
6ar
;,j,H% entero
;nicio
Desde iJ1 -asta D
Desde jJ1 -asta #
Desde HJ1 -asta 5
#scri!ir L6entas del departamentoMiMempleadoMjMmesMHM
Leer aOi,j,HP
'in desde
'in desde
'in desde
'in pedirbdatos
0rocedimiento depbmes 2a% matri./
6ar
Dep,j,mes% entero
6% real
;nicio
6 G.G
3epetir
#scri!ir LDepartamentoM
Leer dep
Nasta 2dep FJ1/ y 2dep EJd/
3epetir
#scri!ir L5esM
Leer mes
Nasta 2mes FJ1/ y 2mes EJ12/
Desde jJ1 -asta #
6 6 B aOdep,j,mesP
'in desde
#scri!ir LLas ventas del departamentoMdepMen el mesMmesMsonMv
'in depbmes
0rocedimiento depbempleado 2a% matri./
6ar
Dep,empleado,H% entero
6% real
;nicio
6 G.G
0<=;>4 &1?1&
3epetir
#scri!ir L#mpleadoM
Leer empleado
Nasta 2empleado FJ1/ y 2empleado EJ#/
3epetir
#scri!ir LDepartamentoM
Leer dep
Nasta 2dep FJ1/ y 2dep EJd/
Desde HJ1 -asta 5
6 6 B aOdep,empleado,HP
'in desde
#scri!ir LLas ventas del empleadoMempleadoMdel departamentoMdepMsonMv
'in depbempleado
0rocedimiento mejorbdep 2a% matri./
6ar
;,j,H,dep% entero
5ayor,v% real
;nicio
5ayor G.G
Desde iJ1 -asta D
6 G
Desde jJ1 -asta #
Desde HJ1 -asta 5
6 6 B aOi,j,HP
'in desde
'in desde
Si v F mayor
#ntonces mayor v
Dep i
'in si
'in desde
#scri!ir L#l mejor departamento es elMdepMconMmayor
'in mejorbdep

(. Dado un array 4 de 5C> elementos donde los elementos son n:meros enteros, -allar
la direccin de comien.o del elemento 4a del array sa!iendo ,ue se almacena a partir de
la direccin 12GG y ,ue en nuestra m+,uina los enteros ocupan 2 !ytes.
Dir 421,4/J 12GG B 3C2 J12G"
0<=;>4 &2?1&
). Dado un array de 4 C elementos ,ue contiene caracteres, sa!iendo ,ue se almacena
a partir de la posicin GG, en ,ue posicin comien.a a almacenarse el elemento 4O3,P.
Dir 4O3,P J GG B 22CB4/C1 J 14 #n orden de fila mayor
Dir 4O3,P J GG B 24C4B2/C1 J 1( #n orden de columna mayor
LAS CADENAS DE CARACTERES
TEMA 0
1. cuego de caracteres.
2. Cadena de caracteres.
3. Datos de tipo car+cter.
4. Speraciones con cadenas.
1. ('EGO DE CARACTERES:
#n principio se programa!a todo con G y 1, pero como esto costa!a muc-o,
apareci la necesidad de crear un lenguaje semejante al -umano para entendernos m+s
f+cilmente con la computadora, y para ello aparecen los juegos de caracteres.
#l juego de caracteres es una especie de alfa!eto ,ue usa la m+,uina.
Nay 2 juegos de caracteres principales%
- 4SC;;% #l ,ue m+s se usa.
- #ICD;C% Creado por ;I5.
Nay 2 tipos de 4SC;;, el !+sico y el e$tendido.
#n el 4SC;; !+sico, cada car+cter se codifica con & !its, por lo ,ue e$isten
2V&J12( caracteres.
#n el 4SC;; e$tendido, cada car+cter ocupa ( !its 21 !yte/ por lo ,ue e$istir+n
2V(J 2" caracteres, numerados del G al 2.
#n el #ICD;C, cada car+cter ocupa tam!i@n ( !its.
#n cual,uiera de los 2 juegos, e$isten 4 tipos de caracteres%
- 4lfa!@ticos% Letras may:sculas y min:sculas.
- >um@ricos% >:meros.
- #speciales% 9odos los ,ue no son letras y n:meros, ,ue vienen en el teclado.
0<=;>4 &3?1&
- Control% >o son imprimi!les y tienen asignados caracteres especiales. Sirven
para de terminar el fin de l8nea, fin de te$to. 6an del 12( al 2.
*n juego de caracteres es una ta!la ,ue a cada n:mero tiene asociado un n:mero.
2. CADENA DE CARACTERES:
#s un conjunto de G 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 L L, pero en algunos lenguajes se delimitan con Q Q.
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 -u!iese
alg:n car+cter ,ue se utili.ara como especial para se7alar el fin de cadena, no se
considerar8a en la longitud.
Si una cadena tiene longitud G, la llamamos cadena nula por lo ,ue no tiene
ning:n car+cter, pero esto no ,uiere decir ,ue no tenga ning:n car+cter v+lido, por ,ue
puede -a!er alg:n car+cter especial no imprimi!le ,ue forme parte de la cadena.
*na su!cadena es una cadena e$tra8da de otra.
&. DATOS DE TIPO CAR@CTER:
1. Constantes% *na constante de tipo cadena es un conjunto de G o m+s
caracteres encerrados entre L L.
Si dentro de la cadena ,uiero poner como parte de la cadena las L, las pongo
2 veces. #sto depende del lenguaje.
LNolaMM4diosM NolaM4dios
#n algunos lenguajes -ay un car+cter de escape. #n C, el car+cter de escape
es la U.
*na constante de tipo car+cter es un solo car+cter encerrado entre comillas
simples.
2. 6aria!les% Nay ,ue distinguir entre una varia!le de tipo car+cter y una
varia!le de tipo cadena, el contenido de una varia!le de tipo cadena es un
conjunto de G m+s caracteres encerrados entre L L, mientras ,ue una
varia!le de tipo car+cter es un solo car+cter encerrado entre Q Q.
F!$as *e al$a+ena$"en# *e +a*enas en $e$!"a:
1. 4lmacenamiento est+tico%
La longitud de la cadena se tiene ,ue definir antes de ser usada y siempre va
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, y esos
!lancos se consideran parte de la cadena.
#sto es muy deficiente y no se usa casi en ning:n lenguaje.
2. 4lmacenamiento semiest+tico%
4ntes de usar la cadena, -ay ,ue declarar la longitud m+$ima ,ue puede
tener y ese es el espacio ,ue se reserva en memoria para almacenar la
cadena, siempre en posiciones contiguas.
0<=;>4 &4?1&
La longitud real de la cadena durante la ejecucin puede variar aun,ue
siempre tiene ,ue ser menor ,ue el m+$imo de la cadena.
0uesto ,ue la cadena no tiene por,ue ocupar la longitud m+$ima, para
determinar ,ue parte ocupa realmente esa cadena, se pueden utili.ar
diferentes m@todos.
0ascal lo ,ue -ace es reservar los 2 primeros !ytes de la .ona de memoria en
,ue guardamos la cadena para indicar el primero la longitud m+$ima ,ue
puede tener la cadena y el segundo la longitud actual.
1G 4 N S L 4
1 2 3 4 " & ( ) 1G
Stros lenguajes como C, utili.an un car+cter especial ,ue indica el fin de
cadena tal ,ue los caracteres ,ue utili.an parte de la cadena son todos los
almacenados -asta encontrar ese car+cter especial.
N S L 4 US
G 1 2 3 4 " & ( )
La diferencia entre almacenar un solo car+cter en un tipo car+cter o en un tipo
cadena, ser8a la siguiente%
C QaR
C LaM
3. 4lmacenamiento din+mico%
>o -ay ,ue definir la longitud de la cadena antes de usarla, ni si,uiera la
m+$ima. 0ara esto, se utili.a la memoria din+mica, y para esta!lecer el
n:mero de elementos de la cadena usaremos listas enla.adas en las ,ue cada
nodo de la lista contara un car+cter de la cadena y se enla.ar8a mediante
punteros.
La informacin no tiene ,ue estar almacenada en posiciones contiguas de
memoria.
N S L 4
0. OPERACIONES CON CADENAS:
4l igual ,ue con cual,uier tipo de datos, podemos -acer operaciones de entrada
y salida 2leer y escri!ir/.
6ar cad% cadena
Leer 2cad/
#scri!ir 2cad/
4parte de estas instrucciones, la mayor parte de los lenguajes permiten reali.ar
operaciones especiales con las varia!les de tipo cadena.
La mayor parte de los lenguajes tienen operaciones de tratamiento de cadenas, y
esas operaciones vienen en li!rer8as e$ternas.
Las )e!a+"nes $5s usa*as sn:
Lng"#u* *e una +a*ena:
#s una funcin a la ,ue se le pasa una cadena como par+metro y como resultado
devuelve su longitud.
0<=;>4 &?1&
'uncion longitud 2c%cadena/% entero
C$)a!a+"-n *e +a*enas:
Las cadenas se pueden comparar entre si usando los s8m!olos de comparacin.
#sto se puede reali.ar por,ue lo ,ue voy a comparar son los valores 4SC;; asociados a
cada car+cter.
#n el caso de ,ue se comparen 2 cadenas de diferente longitud tal ,ue la cadena
de menor longitud tiene > caracteres y estos > caracteres coinciden con los > primeros
caracteres de la cadena m+s larga, se considera mayor la cadena m+s larga.
0#0# F 0404
0#0#S F 0#0#
#n la mayor parte de los lenguajes, -ay una funcin ,ue -ace la comparacin.
#n C es la funcin strcmp 2C1,C2/.
'uncion comparacion 2C1%cadenaDC2%cadena/% entero
#sta funcin devuelve%
- G si C1JC2
- *n positivo si C1 F C2
- *n negativo si C1 E C2
Cn+a#ena+"-n:
Lo ,ue permite es unir varias cadenas en una sola, manteniendo el orden de los
caracteres ,ue se unen.
#n pseudocdigo se usa el s8m!olo ]% C1]C2
C1JMNolaM
C2JM4diosM
C3JC1]C2JMNola4diosM
0rocedimiento concatenacion 2entAsal C1%cadenaDC2%cadena/
- Se devuelve en C1 la concatenacin C1]C2.
SuC+a*enas:
#$trae parte de una cadena.
Se pueden usar 3 procedimientos%
0rocedimiento su!cadena 2c%cadenaDinicio%enteroDlongitud%enteroDentAsal s%cadena/
- Si inicio es negativo, o es mayor ,ue longitud, se devuelve la cadena nula.
- Si inicioBlongitud es mayor ,ue el tama7o de la cadena, devuelvo desde
inicio -asta de fin de la cadena.
0rocedimiento su!cadena 2c%cadenaDinicio%enteroDfin%enteroDentAsal s%cadena/
- Si fin es menor ,ue inicio, devuelve la cadena nula.
- Si fin es mayor ,ue la longitud de la cadena, se devuelve desde inicio -asta
el fin de la cadena.
0rocedimiento su!cadena 2c%cadenaDinicio%enteroDentAsal s%cadena/
- S va desde el inicio -asta el final de la cadena.
Inse!+"-n:
0<=;>4 &"?1&
Consiste en meter una cadena dentro de otra a partir de una determinada
posicin.
0rocedimiento insertar 2entAsal C1%cadenaDC2%cadenaDinicio%entero/
C1JM0epeM
C2JM>uriaM
;nsertar 2C1,C2,3/J 0e>uriape
- Si inicio es mayor ,ue la longitud de C1 o inicio es menor ,ue G, no se
inserta nada.
7!!a*:
Consiste en !orrar de una cadena una su!cadena ,ue forma parte de ella. Nay
,ue dar la posicin de inicio y final de la su!cadena ,ue ,uiero !orrar.
0rocedimiento !orrar 2entAsal C1%cadenaDinicio%enteroDfin%entero/
- Si fin es menor ,ue inicio, o inicio es mayor ,ue la longitud de la cadena, no
se !orra nada.
0rocedimiento !orrar 2entAsal C1%cadenaDinicio%enteroDfin%entero/
C1JMCasa a.ulM
Iorrar 2C1,3,/
C1JMCaa.ulM
In#e!+a$C":
Consiste en su!stituir la aparicin de una su!cadena dentro de una cadena, por
otra su!cadena. 0ara eso la primera su!cadena tiene ,ue aparecer en la otra.
0rocedimiento intercam!io 2entAsal C1%cadenaDS1%cadenaDS2%cadena/
C1JMCasa a.ulM
S1JMasaM
S2JMasitaM
C1JMCasita a.ulM
Si S1 no est+ en C1, no se cam!ia nada.
Cn/e!s"-n *e +a*enas a nI$e!s:
#s una funcin ,ue se le pasa una cadena caracteres num@ricos y devuelve el
n:mero asociado.
'uncion valor 2c%cadena/% entero
;JM234M
6ar i% entero
;J valor 2C1/ devuelve 234.
Cn/e!s"-n *e nI$e!s a +a*enas:
#s un procedimiento al ,ue se le pasa un n:mero y lo convierte a una cadena.
0rocedimiento convbcad 2n%enteroDentAsal c%cadena/
;J234
Convbcad 2i,C1/ devuelve L234M
Fun+"-n =ue *e/uel/e el +a!5+#e! ASCII *e un nI$e!:
0<=;>4 &&?1&
'uncion convbcar 2n%entero/% car+cter
Fun+"-n =ue *e/uel/e el nI$e! as+"a* *e un +a!5+#e! ASCII:
'uncion 4SC;; 2c%car+cter/% entero
Las cadenas van a estar almacenadas en arrays de caracteres donde el car+cter de
fin de cadena es el i.
EJERCICIOS: TEMA 0
- Los ejercicios de este tema van a consistir en implementar funciones y
procedimientos relacionados con el manejo de las su!cadenas.
'uncion numero 2c%car+cter/%entero
;nicio
Seg:n sea C
QGR% retorno G
Q1R% retorno 1
Q2R% retorno 2
Q3R% retorno 3
Q4R% retorno 4
QR% retorno
Q"R% retorno "
Q&R% retorno &
Q(R% retorno (
Q)R% retorno )
fin seg:n sea
fin numero
'uncion caract 2n% entero/%car+cter
;nicio
Seg:n sea C
G% retorno QGR
0<=;>4 &(?1&
1% retorno Q1R
2% retorno Q2R
3% retorno Q3R
4% retorno Q4R
% retorno QR
"% retorno Q"R
&% retorno Q&R
(% retorno Q(R
)% retorno Q)R
fin seg:n sea
fin caract
'uncion longitud 2c%cadena/% entero
var
l% entero
;nicio
L G
5ientras cOLB1P E F QiR
L LB1
'in mientras
3etorno L
'in longitud
'uncion 6alor 2c%cadena/% entero
6ar
Cif,num,i% entero
;nicio
Cif longitud 2c/
Si cif F G
#ntonces num G
Desde iJ1 -asta Cif
>um numBnumero 2cOiPC1GV2cifAi/
'in desde
3etorno 2num/
Sino retorno 2A1/
'in si
'in valor
0rocedimiento convbcad 2n% enteroD entAsal c% cadena/
6ar
Cif,au$% entero
;nicio
Cif 1
4u$ >
5ientras 2au$ F1G/
4u$ au$ div 1G
Cif cif B 1
0<=;>4 &)?1&
'in mientras
Desde iJcif -asta 1
COiP caract2n mod 1G/
> n div 1G
'in desde
COcifB1P QiR
'in convbcad
0rocedimiento !orrar 2entAsal c%cadenaDinicio%enteroDfin%entero/
6ar
;,f% entero
;nicio
Si 2inicio FG/ y 2inicio EJ fin/ y 2inicio EJ longitud2c//
#ntonces i inicio
' fin B1
5ientras 2i EJfin/ y 2cOfP E F QiR/
COiP cOfP
; iB1
' fB1
'in mientras
COiP QiR
'in si
'in !orrado
0rocedimiento su!cadena 2c1%cadenaDinicio%enteroDlongitud%enteroDentAsal c2% cadena/
6ar
;,H% entero
;nicio
Si 2inicio EJG/ o 2inicio F longitud 2c1//
#ntonces c2O1P QiR
Sino i inicio
h 1
5ientras 2i EJinicio B longitud/ y 2c1OiP E F QiR/
C2OHP c1OiP
h HB1
; iB1
'in mientras
C2OHP QiR
'in si
'in su!cadena
'uncion comparacion 2c1%cadenaDc2%cadena/%entero
6ar
;% entero
;nicio
; 1
5ientras 2c1OiPJc2OiP/ y 2c1OiPE F QiR/ y 2c2OiP E F QiR/
0<=;>4 (G?1&
; ;B1
'in mientras
Si c1OiPJc2OiP
#ntonces retorno 2G/
Sino retorno2ascii 2c1OiP/A ascii 2c2OiP//
'in si
'in comparacion


'uncion !us,ueda 2c% cadenaDs1% cadena/% entero
6ar
;,pos,H% entero
#ncontrado% !ooleano
;nicio
; 1
#ncontrado falso
5ientras 2cOiP E FRiR/ y 2encontradoJfalso/
Si cOiP J sOiP
#ntonces pos i
h 1
5ientras 2cOiPJsOHP/ y 2cOiP EFRiR/ y 2sOHPE FRiR
; ;B1
h HB1
'in mientras
Si sOHPJRiR
#ntonces encontrado verdadero
Sino ; pos B1
0os G
'in si
Sino ; ;B1
'in si
0<=;>4 (1?1&
'in mientras
3etorno 2pos/
'in !us,ueda
0rocedimiento !orrar 2entAsal c%cadenaDini%enteroDfin%entero/
6ar
;,j% entero
;nicio
; ini
' fin B 1
5ientras cOfP EFRiR
COiP cOfP
; i B 1
'in mientras
C OiP QiR
'in !orrar

0rocedure insertar 2entAsal c%cadenaDs%cadenaDpos%entero/
6ar
0,j,i% entero
;nicio
0 pos
c 1
5ientras sOjPEFRiR
Desde i longitud 2c/ B1 -asta 0
COiB1P cOiP
'in desde
COpP sOjP
c jB1
0 pB1
'in mientras
'in insertar
0rocedimiento intercam!io 2entAsal c%cadenaDc2%cadenaDc3%cadena/
6ar
;,pos% entero
;nicio
; 1
0<=;>4 (2?1&
5ientras c1OiP EFRiR
Si c1OiPJc2OiP
#ntonces pos !uscar2c1,c2/
Si pos EF G
#ntonces !orrar 2c1,pos,posBlongitud2c2/A1/
;nsertar 2c1,c3,pos/
; pos B longitud2c3/
Sino ; i B1
'in si
Sino ; ;B1
'in si
'in mientras
'in intercam!io


FICHEROS O ARCHI1OS:
TEMA 2
1. #l tipo registro de datos.
2. >ocin de arc-ivo.
3. 9erminolog8a de arc-ivos.
4. 9ipos de soporte.
. 9ipos de organi.aciones de fic-eros.
". Speraciones so!re fic-eros.
&. 9ratamiento de fic-eros secuenciales.
(. 'ic-eros de te$to.
1. EL TIPO REGISTRO DE DATOS:
#l tipo registro de datos es un tipo estructurado de datos. *n tipo registro va a
estar formado por datos ,ue pueden ser de diferentes tipos.
4 cada uno de esos datos lo denominamos campos, y el tipo de estos campos
pueden ser uno estandar o uno definido por el usuario, ,ue puede ser cual,uier cosa.
La sinta$is ,ue usaremos para definir un tipo registro es la siguiente%
9ipo EnombtipobregistroF J registro
Ecampo1F% EtipoF
Ecampo2F% EtipoF
0<=;>4 (3?1&
Ecampo3F% EtipoF
fin registro
*na ve. definida una estructura de tipo registro, ya puede pasar a declarar
varia!les de ese tipo.
6ar
EnombvarF% EnombtipobregistroF
tipo alumno J registro
D>;% array O1..(P de caracteres
>om!re% array O1..1GGP de caracteres
>ota% real
'in registro
6ar
41,42% alumno

0ara declarar una varia!le de un tipo registro, !asta con poner%
6ar
EnombvarF % EnombtipobregF
0ara acceder a un campo concreto de una varia!le de tipo registro, utili.amos el
operador punto.
EnombvarF.EnombcampoF
c.nom!re 0epe
\ con ese valor puedo tra!ajar igual ,ue tra!ajar8a con cual,uier valor del
mismo tipo ,ue ese campo.
9ipo cliente J registro
D>;% array O1..(P de caracteres
>om!re% Cadena
Saldo% 3eal
'in registro
6ar
C% cliente
Iorrar 2c.nom!re,3,/
C.saldo B3C(GGG
Al$a+ena$"en# *e !eg"s#!s en $e$!"a:
#l tama7o ,ue ocupa una varia!le de tipo registro en memoria es el ,ue resulta
de la suma del tama7o de cada uno de sus campos, y esa informacin tam!i@n estar+
almacenada de manera contigua y seg:n el orden en ,ue -ayamos declarado los campos.
2. NOCIN DE ARCDI3O:
Las estructuras anteriores se almacena!an en memoria principal, y el pro!lema
es ,ue la informacin se pierde al apagar el ordenador. La ventaja es ,ue los accesos son
m+s r+pidos. 0ara resolver esto est+n los dispositivos de almacenamiento secundario.
0<=;>4 (4?1&
F"+>e!: #s un conjunto de datos estructurados en una coleccin de unidades
elementales denominadas registros, ,ue son de igual tipo y ,ue a su ve. est+n formados
por otras unidades de nivel m+s !ajo denominados campos. 9odos son del mismo tipo.
&. TERMINOLOGNA CON FICDEROS:
- Ca$): #s una unidad elemental de informacin ,ue representa un atri!uto
de una entidad. Se define con un nom!re, un tama7o y un tipo de datos.
- Reg"s#! l-g"+: #s un conjunto de campos relacionados lgicamente ,ue
pueden ser tratados como unidad en el programa.
Desde el punto de vista de programacin simplemente es una estructura de
tipo registro.
- A!+>"/ F"+>e!: #s un conjunto de registros del mismo tipo y organi.ados
de tal forma ,ue esos datos pueden ser accedidos para a7adir, !orrar o
actuali.ar.
- Cla/e *e un F"+>e!: #s un campo o conjunto de campos ,ue sirve para
identificar un registro y distinguirla del resto del fic-ero.
- Reg"s#! FBs"+ Cl=ue: #s la cantidad de datos ,ue se transfieren en una
operacin de #?S entre el dispositivo e$terno y la memoria.
Desde este punto de vista, un registro f8sico puede estar compuesto por
G,1,2,... registros lgicos. #l n:mero de registros lgicos ,ue -ay por cada
registro f8sico, es decir, ,ue se transfiere en una operacin de #?S, es lo ,ue
se denomina factor de !lo,ueo.
#se factor de !lo,ueo puede ser E1,J1,F1%
- Si es E1, ,uiere decir ,ue el registro lgico ocupa m+s ,ue el f8sico, se
transfiere menos de un registro lgico en cada operacin de #?S.
- Si es J1, significa ,ue el tama7o del registro lgico y el f8sico es el
mismo, y se transfiere un registro lgico en cada operacin de #?S.
- Si es F1, lo m+s normal, en cada operacin de #?S se transfiere m+s de un
registro lgico.
C-$ ns "n#e!esa =ue sea el Fa+#! *e Cl=ue%:
Desde un punto de vista, cuanto mayor sea el factor de !lo,ueo m+s registros
lgicos se transferir+n, menos operaciones -a!r+ ,ue -acer y se tardar+ menos en
procesar el fic-ero. Seg:n esto cuanto mayor sea mejor.
0or otra parte, cada ve. ,ue se transfiere informacin de #?S, se deja en una
.ona de memoria especial llamada buffer. Cuanto mayor sea el tama7o de !lo,ueo,
mayor ser+ el !uffer y menos memoria me ,uedar+ para el resto de la informacin.
4l final -ay ,ue lograr un e,uili!rio para determinar el tama7o idneo.
- 7ases *e *a#s: #s un conjunto de datos relacionados almacenados
internamente en un conjunto de fic-eros.
0. TIPOS DE SOPORTE:
Los soportes de almacenamiento secundario son en los ,ue almaceno la
informacin, y pueden ser de 2 tipos%
- Secuenciales% 0ara acceder a un registro o dato concreto dentro de @l, tengo
,ue pasar previamente por todos los registros anteriores a @l. #l ejemplo es
una cinta magn@tica.
- Direcciona!les% #s posi!le acceder directamente a una direccin concreta de
soporte. #l ejemplo es un disco.
0<=;>4 (?1&
6. TIPOS DE ORGANIOACIONES DE FICDEROS:
O!gan"Pa+"-n *e a!+>"/s:
6iene determinada por 2 caracter8sticas%
- 5@todo de organi.acin% 9@cnica ,ue utili.o para colocar la informacin de
los registros dentro del dispositivo.
- 5@todo de acceso% Conjunto de programas ,ue me permiten acceder a la
informacin ,ue previamente -e almacenado y van a depender muc-o del
m@todo de organi.acin%
- 4cceso directo% 0ara acceder a un acceso concreto no -ay ,ue pasar por
los anteriores. #l soporte tiene ,ue ser direcciona!le.
- 4cceso secuencial% 0ara acceder a un registro -ay ,ue pasar por todos los
anteriores, y esto es posi!le si el soporte es secuencial, aun,ue tam!i@n
puedo -acerlo en uno direcciona!le.
M#*s *e !gan"Pa+"-n:
Nay 3 tipos de organi.acin%
- Secuencial
- Directa
- Secuencial inde$ada
A Secuencial% Los registros se van gra!ando en un dispositivo unos detr+s de otros
consecutivamente, sin dejar -uecos y seg:n el orden en ,ue son gra!ados o guardados.
4l final para determinar el fin de fic-ero se usa la marca #S' 2#nd Sf 'ile/.
A Directa% Se puede acceder a un registro directamente. 0ara ello son necesarias 2 cosas%
1a/ Kue cada registro tenga asociada una clave ,ue lo identifi,ue.
2a/ 9iene ,ue e$istir una funcin especial llamada funcin de direccionamiento
,ue sea capa. de convetir la clave a una direccin f8sica real en el dispositivo,
,ue es a la ,ue accederemos para locali.ar la informacin !uscada.
#n la pr+ctica en realidad -ay un paso intermedio entre la clave y la direccin
f8sica ,ue es la direccin relativa a registro.
Suponiendo un fic-ero de n registros lgicos numerados de G a nA1, este valor
asociado al registro es lo ,ue ser8a su direccin relativa a registro, es decir, ,ue lo ,ue
tiene ,ue e$istir es una funcin ,ue convierta la clave a direccin relativa a registro, y
luego una funcin ,ue convierta la direccin relativa a registro a direccin f8sica, donde
la direccin f8sica tendr+ 6olumen, Cilindro, 0ista y 3egistro, y esta funcin puede ser
por ejemplo el procedimiento de divisiones sucesivas.
0ara reali.ar este procedimiento, primero -ay ,ue decir el n:mero de vol:menes,
el n:mero de cilindros, el n:mero de pistas y el n:mero de registros ,ue -ay.
Despu@s -ay ,ue reali.ar sucesivas divisiones%
D33 na registros
31 C1 na pistas
3egistros
32 C2 na cilindros
0istas
33 C3
Cilindros 6olumen
0<=;>4 ("?1&
6olumen % C3
Cilindro% 33
0ista% 32 #mpe.ando a contar desde G.
3egistros% 31
9enemos un dispositivo con vol:menes, 3 cilindros por volumen, 4 pistas por
cilindro y 2G registros por pista. ZDnde est+ el registro 1GG1[
1GG1 2G
1 G 4
2 12 3
G 4
Solucin 4G21 4G22, seg:n empecemos a numerar por G o por 1.
#l pro!lema est+ en como convertir la clave de un registro a direccin relativa a
registro, si en un soporte como m+$imo podemos almacenar n registros la direccin
relativa a registro ir+ de G a nA1 luego -a!r+ ,ue convertir la clave a uno de estos
valores. #n cual,uier caso suele ocurrir ,ue el rango de claves 2conjunto de todas las
claves posi!les ,ue se pueden dar/ es menor ,ue n, ya ,ue en la pr+ctica el espacio
reservado es menor ,ue el rango de n por,ue no usamos todo el espacio.
Seg:n esto puede ocurrir ,ue a diferentes claves les correspondan la misma
direccin relativa a registro y por tanto la misma direccin f8sica para almacenarse. 4
estos registros se les denomina sinnimos, y cuando esto ocurre -a!r+ ,ue almacenar a
los registros ,ue tienen la misma posicin en un lugar aparte reservado para guardar los
sinnimos.
#l +rea reservada se puede colocar en varios sitios dentro de un dispositivo.
0or ejemplo si el rango de claves va de G a ))), y la clave es 11)1))43 una
forma de almacenarla, ser8a cogiendo los 3 :ltimos n:meros )43.
#n cual,uier caso la funcin ,ue convierta una clave a direccin relativa a
registro ser+ tal ,ue produ.ca el menor n:mero de colisiones de sinnimos posi!les.
A Secuencial inde$ada% #n esta organi.acin tam!i@n se puede acceder a un registro
directamente, pero a-ora lo -ar@ mediante investigacin jer+r,uica de 8ndices.
0ara ,ue se pueda aplicar esta organi.acin, o!ligatoriamente los registros tienen
,ue tener asociados una clave.
#n un arc-ivo con esta organi.acin se distinguen 3 +reas%
- 4rea de datos
- 4rea de 8ndices
- 4rea de e$cedentes
Cuando se crea el fic-ero la informacin se va guardando en el +rea de datos y al
mismo tiempo se van creando 8ndices en el +rea de 8ndices para poder luego locali.ar
esos datos. Despu@s de la creacin del fic-ero la informacin se almacena en el +rea de
e$cedentes y se va actuali.ando tam!i@n el +rea de 8ndices.
T")s *e Bn*"+es:
- ;ndice de pista% #s el de m+s !ajo nivel y es o!ligatorio. Nay un 8ndice de
pista por cada pista del cilindro, y este 8ndice contiene 2 entradas o valores.
#l primero determina cual es el valor de la clave m+s alta almacenada en esa
0<=;>4 (&?1&
pista, y el segundo determina cual es la clave del primer registro de
e$cedente de esa pista.
- ;ndice de cilindro% #s el de siguiente nivel y tam!i@n es o!ligatorio. 9iene
una entrada por cada cilindro y en esa entrada contendr+ la clave m+s alta de
los registros almacenados en ese cilindro.
- ;ndice maestro% >o es o!ligatorio. Solo se usa cuando el 8ndice de cilindro
ocupa m+s de 4 pistas. 9iene una entrada por cada pista del 8ndice de
cilindros y contendr+ la clave m+s alta de los registros a los ,ue referencian
todos los cilindros de esa pista.
#j% 2 pistas ? cilindro y 2 registros ? pista
0ista 1 0ista 2

4rea de 8ndices 12 3 "G
( 12 1 2G 3 42 "G
4rea de datos 2 ( 1G 12 14 2G 3G 3 3( 42 G "G
C1 C2 C3
4rea de e$cedentes 1 1& 1"
0ara !uscar el registro 3G, -ay ,ue ir mirando si 3G es EJ ,ue el registro con el
,ue lo comparamos.
Si llega el 1, lo metemos en el +rea de e$cedentes por,ue no ca!e.
8. OPERACIONES CON FICDEROS:
1. C!ea+"-n +a!ga *e un F"+>e!:
Consiste en meter los datos por primera ve. en un fic-ero ,ue no e$iste. 0ara
ello -ay ,ue determinar el espacio ,ue -ay ,ue reservar para el fic-ero y el m@todo de
acceso.
2. Re!gan"Pa+"-n *e un F"+>e!:
Consiste en crear un fic-ero nuevo a partir de uno ,ue ya e$iste. Conviene
reorgani.arlo cuando ya resulta ineficiente su uso por,ue -ay demasiadas colisiones de
sinnimos o muc-os registros ,ue ya no e$isten.
&. Clas"F"+a+"-n *e un F"+>e!:
Consiste en ordenar los registros por uno o varios campos. #n los sistemas grandes,
el propio sistema operativo ya soporta operaciones ,ue reali.an la organi.acin 2SS39/.
0. Des#!u++"-n *e un F"+>e!:
Destruccin de un fic-ero% Significa eliminar toda la informacin ,ue contiene el
fic-ero.
6. Reun"-n Fus"-n *e un F"+>e!:
Crear un fic-ero a partir de varios.
8. R#u!a es#all"* *e un F"+>e!:
0<=;>4 ((?1&
" 4 partir de un fic-ero crear varios.
;. Ges#"-n *e un F"+>e!:
0ara tra!ajar con un fic-ero lo primero ,ue tengo ,ue -acer es crearlo. 0ara crear
un fic-ero tengo ,ue dar un nom!re ,ue es con el ,ue le va a guardar en el dispositivo.
0ero para manejar ese fic-ero dentro de un programa tendr@ ,ue asignarle una varia!le
de tipo de fic-ero ,ue luego tendr@ ,ue asociar con el nom!re f8sico del fic-ero para
poder tra!ajar con @l.
4 parte de esto, tam!i@n puedo dar el tama7o del fic-ero, su organi.acin y el
tama7o de su !lo,ue o registro f8sico, aun,ue estos 3 :ltimos par+metros, solo ser+
necesario darlos para sistemas grandes.
4ntes de crear el fic-ero tengo ,ue definir la estructura de su registro para luego
al definir la varia!le ,ue va a referenciar el fic-ero determinar ,ue fic-ero va a contener
ese tipo de registro.
*n fic-ero se crea cuando reali.amos la operacin de apertura del mismo,
aun,ue -ay lenguajes en los ,ue -ay ,ue especificar 2 cosas 2creacin y apertura/, y en
otros si al a!rirlo e$iste se crea.
4l crear un fic-ero si ya e$iste, va a depender del lenguaje, en unos da error y en
otros se mac-aca lo ,ue ya e$iste.
#n la operacin de apertura si ya e$iste de fic-ero, depende de la forma de
apertura ,ue ese fic-ero ,ue ya e$ist8a sea mac-acado o permane.ca. De cual,uier
forma en la operacin de a!rir tenemos ,ue indicar la varia!le de tipo fic-ero ,ue nos va
a servir para tra!ajar con ese fic-ero en el programa, a continuacin y entre L L el
nom!re real de ese fic-ero en el dispositivo, y finalmente el modo de apertura del
fic-ero.
4!rir 2Enombfic-F,MnombrealM,EmodobapertF/
Los modos de apertura, dependen del lenguaje de programacin y del modo de
organi.acin. Se distinguen 3 modos de apertura%
- 5odo de entrada o lectura.
- 5odo de salida o escritura.
- 5odo de entrada?salida o lectura?escritura.
400#>D% #$iste en algunos lenguajes.
0ara declarar una varia!le de tipo fic-ero, -ay ,ue usar una varia!le de tipo
fic-ero ,ue es% 'ic-ero de EtipobregF.
9ipo alumno% registro
Codbalum% entero
Direccion% cadenaO3GP
>ota% real
'in registro
6ar f% fic-ero de alumno
4!rir 2',Mc%Uestudiantes.datM,EmodoF/
- 5odo de entrada% #se fic-ero lo voy a usar para leer informacin de @l pero
no lo voy a modificar. 0ara ,ue un fic-ero se a!ra en este modo previamente
tiene ,ue e$istir y si no es as8, nos dar+ un error.
- 5odo de escritura% *tili.o un fic-ero para escri!ir informacin en @l. 4l
a!rirlo no -ace falta ,ue e$ista, si ya e$istiese, depende del lenguaje, pero
normalmente se mac-aca lo ,ue -ay 2lo ,ue vamos a -acer/.
0<=;>4 ()?1&
- 5odo de entrada?salida% 6oy a -acer operaciones de consulta y actuali.acin
de la informacin.
- 5odo 400#>D% #n pseudocdigo no lo vamos a usar. 4ppend significa
a7adir, y se utili.a para escri!ir en un fic-ero pero a7adiendo la informacin
al final del mismo.
#n algunos lenguajes tam!i@n e$iste la operacin 3#S#9, ,ue lo ,ue me -ace es
posicionarme al principio del fic-ero.
3eset 2Evarbfic-F/
#n todo momento, e$istir+ un puntero ,ue me indica en ,ue posicin del fic-ero
estoy situado. 4l a!rir un fic-ero normalmente sea cual sea el modo de apertura me voy
a ,uedar situado al comien.o del fic-ero, salvo ,ue use el modo de apertura 4ppend, ,u
me posicionar8a al final del fic-ero. 4 medida ,ue voy -aciendo operaciones en el
fic-ero, este valor se va actuali.ando.
Cerrar un fic-ero% Kuiere decir des-acer la cone$in entre la varia!le del
programa ,ue estoy usando para manejar el fic-ero y el fic-ero real ,ue est+ en el
dispositivo.
Cerrar 2Evarbfic-F/
Siempre ,ue se aca!e de tra!ajar con un fic-ero o ,ue ,ueramos cam!iar el
modo de tra!ajar con ese fic-ero, primero lo cerraremos y si ,ueremos volver a tra!ajar
con @l, lo volvemos a a!rir.
N'NCA DA2 Q'E DE(AR 'N FICDERO A7IERTO.
#n algunos lenguajes e$iste la operacin !orrar un fic-ero y lo ,ue -ace es
eliminar f8sicamente el fic-ero.
4parte de todo esto tam!i@n e$isten otras relacionadas con su actuali.acin, ,ue
son las altas, las !ajas y las modificaciones.
Las consultas son una operacin de mantenimiento del fic-ero.

Al#a:
Consiste en a7adir un registro al fic-ero. Si en el fic-ero los registros tienen
alg:n campo clave, lo primero ,ue -ay ,ue compro!ar al dar una alta es ,ue no e$ista
ya otro registro con la misma clave.
7a,a:
Consiste en eliminar un registro del fic-ero. La !aja puede ser f8sica o lgica.
- '8sica% Cuando elimino f8sicamente el registro del fic-ero.
- Lgica% Cuando al registro lo marc de una manera especial para indicar ,ue
ya no es v+lido pero no lo elimino f8sicamente. 4 rasgos del tratamiento de la
informacin es como si ya no e$istiera.
#n fic-eros secuenciales no se permite la modificacin de la informacin tal ,ue
para dar de !aja a un registro de un fic-ero, lo ,ue -ay ,ue -acer es crear otro fic-ero
con todos los registros menos el ,ue ,ueremos eliminar.
#n el resto de las organi.aciones normalmente se da la !aja lgica 2con una
marca/ y cuando tengo muc-os registros marcados como !aja lgica reorgani.o el
fic-ero 2!aja f8sica/.
Si los registros contienen clave para dar de !aja a un registro tendr@ ,ue dar su
clave mirar lo primero si e$iste y solo en ese caso lo podr@ !orrar.
Reglas "$)!#an#"s"$as:
0<=;>4 )G?1&
- 0ara dar la alta a un registro con clave, primero -ay ,ue ver si no -ay ning:n
registro con esa clave.
- Pa!a *a! la Ca,a a un !eg"s#!:
1. Da. =ue Cus+a! s" el !eg"s#! e:"s#e.
2. Ms#!a! la "nF!$a+"-n )! )an#alla . )e*"! la +nF"!$a+"-n *el
usua!".
M*"F"+a+"-n:
5odificar un registro consiste en cam!iar la informacin ,ue contiene, es decir,
cam!iar el valor de uno o m+s de sus campos.
#n el caso de la organi.acin secuencial como no se pueden modificar
directamente, lo ,ue -ay ,ue -acer es a partir de la informacin ,ue ya e$iste crear otro
fic-ero con todos los registros menos el ,ue ,uiero modificar, ,ue lo gra!ar@ con la
informacin ,ue ,uiera.
4lgunos lenguajes ,ue soportan la organi.acin secuencial s8 permiten -acer la
modificacin del registro en el mismo fic-ero 2como el C/.
Cuando se modifican registros de un fic-ero con campos clave en el registro,
-ay ,ue tener en cuenta ,ue lo ,ue jamas se puede modificar es el valor del campo
clave, por,ue -acer eso es como -acer un alta.
Cnsul#as:
Las consultas lo :nico ,ue -ace es leer informacin del fic-ero y mostrarme la
informacin.
0ara -acer una consulta -ay ,ue dar 2 cosas%
- Criterio con el ,ue consulto% Contendr+ el campo o campos por los ,ue
,uiero consultar y el valor ,ue tienen ,ue tener esos campos.
- ;nformacin ,ue ,uiero mostrar% 4 la -ora de mostrar la informacin, decir
,ue campos ,uiero mostrar.
;. TRATAMIENTO DE FICDEROS SEC'ENCIALES:
O)e!a+"nes C5s"+as:
1. Definir la estructura del fic-ero.
2. 4pertura del fic-ero.
3. 9ratamiento de los registros.
- #scri!ir 2Evarbfic-F,EvarbregF/
- Leer 2Evarbfic-F,EvarbregF/
Los fic-eros secuenciales no se pueden modificar en una posicin concreta, por esa
ra.n cada ve. ,ue se ,uiere dar un alta, !aja o modificacin de un registro, como no se
puede -acer directamente, tendr@ ,ue usar un fic-ero au$iliar tal ,ue si es un alta, en el
nuevo fic-ero tendr@ toda la informacin del fic-ero antiguo m+s el nuevo registro, si es
dar de !aja, copio en el nuevo fic-ero todo lo ,ue -a!8a en el anterior fic-ero menos el
registro ,ue ,uiero !orrar, y si ,uiero modificar un registro, copio toda la informacin y
al llegar al registro a modificar, lo copio ya modificado.
Cnsul#as:
9odo tratamiento de fic-eros, lo voy a -acer en un !ucle, y el final de fic-ero lo
se7ala la marca #S'.
La primera lectura la voy a -acer fuera del !ucle, y las siguientes al final del
!ucle, y el !ucle terminar+ cuando se lee la marca #S'.
0<=;>4 )1?1&
>ormalmente, en cual,uier lenguaje e$iste ya implementada una funcin ,ue
dice s8 -emos llegado al final del fic-ero pero ,ue lo ,ue -ace es !uscar la marca #S'.
4!rir 2Evarbfic-F,MnomM,entrada?Salida/
Leer 2Evarbfic-F,EvarbregF/
5ientras no eof 2Evarbfic-F/
Eproceso con registroF
leer 2Evarbfic-F,EvarbregF/
'in mientras
#n 0ascal la marca de fin de fic-ero est+ f8sicamente en el fic-ero, mientras ,ue
en C, se compara el tama7o del fic-ero con la del puntero del fic-ero, y si coinciden
,uiere decir ,ue es el fin del fic-ero.
P!Cle$as =ue )*e$s en+n#!a!:
1. Si el fic-ero est+ clasificado por 2 campos y voy a -acer un tratamiento de @l,
normalmente tendr@ ,ue -acer 2 !ucles anidados y aprovec-ar ,ue est@n clasificados
por campos.
2. Si el fic-ero est+ clasificado por un campo, para !uscar los fic-eros por ese campo,
-acemos un solo !ucle aprovec-ando ,ue est+n clasificados por ese campo.
3. Si enfrento 2 fic-eros, si uno est+ clasificado y otro no, leer@ en el !ucle m+s e$terno
el ,ue no est+ clasificado, y en el m+s interno el ,ue est+ clasificado, aprovec-ando
,ue est@n ordenados.
4. Si ninguno est+ clasificado, da igual el orden de los !ucles, por,ue en los 2 tendr@
,ue !uscar -asta el final.
. Si lo ,ue me piden es sacar informacin a trav@s de un campo ,ue no es el campo de
clasificacin pero ,ue se sa!e el n:mero de valores concretos ,ue puede tomar ese
campo, utili.aremos una estructura del tipo array.
9enemos un fic-ero con datos de alumnos +las"F"+a*s )! +u!s . nI$e! *e
alu$n, teniendo en cuenta ,ue los alumnos se empie.an a numerar por 1.
La informacin por alumno es curso, n:mero, nom!re y nota. Determinar cuantos
alumnos apro!ados -ay en cada curso.
9ipo alumno % registro
Curso% entero
>umbal% entero
>om% cadena
>ota% real
'in registro
4lgoritmo clase
6ar
'bal% fic-ero de alumno
3bal% alumno
4pro!% entero
Cur% entero
;nicio
4!rir 2fbal,Malumnos.datM,entrada/
Leer 2fbal,rbal/
5ientras no eof 2fbal/
4pro! G
0<=;>4 )2?1&
Cur rbal.curso
5ientras cur J rbal.curso
Si 2rbal.nota FJ / y 2no eof2fbal//
#ntonces apro! apro! B 1
'in si
Leer 2fbal,rbal/
'in mientras
#scri!ir L#n el cursoMcurM-an apro!adoMapro!
'in mientras
Cerrar 2fbal/
'in
9enemos un fic-ero de empleados clasificado por el n:mero de empleado y un
fic-ero de !ajas no clasificado ,ue contiene los n:meros de los empleados ,ue se -an
dado de !aja. S!tener un tercer fic-ero ,ue contenga a los empleados ,ue realmente -ay
en la empresa.

9ipo empleado% registro
>umbemp% entero
>om!re% cadena
Sueldo% real
'in registro
4lgoritmo !aja
6ar
'bebini,fbebfin% fic-ero de empleado
'b!aja% fic-ero de entero
3bebini,rbebfin% empleado
3b!% entero
;nicio
4!rir 2fbebini,M#mpleado1.datM,entrada/
4!rir 2fbebfin,M#mpleado2.datM,salida/
Leer 2fbebini,rbebini/
5ientras no eof 2fbebini/
0<=;>4 )3?1&
4!rir 2fb!,MIajas.datM,entrada/
Leer 2fb!,rb!/
5ientras rb! EF rbebini.numbemp/ y no eof 2fb!/
Leer 2fb!,rb!/
'in mientras
Si eof 2fb!/
#ntonces escri!ir 2fbebfin,rbebfin/
'in si
Cerrar 2fb!/
Leer 2fbebini,rbebini/
'in mientras
Cerrar 2fbebini/
Cerrar 2fbebfin/
'in
9enemos un fic-ero de clientes no clasificados y la clave del fic-ero de clientes
es el D.>.;. y un fic-ero de morosos ,ue contiene el D.>.;. y ,ue est+ clasificado.
Kueremos o!tener un listado de los clientes no morosos.
Leer 2fbc,rbc/
5ientras no eof 2fc/
4!rir 2fm,M5orosos.datM,entrada/
Leer 2fbm,rbm/
5ientras rbc.D>; F rbm y no eof 2fbm/
Leer 2fbm,rbm/
'in mientras
Si rbc.D>; EF rbm
#ntonces escri!ir rbc.nom!re
'in si
Cerrar 2fbm/
Leer 2fbc,rbm/
'in mientras
9enemos un fic-ero de ventas ,ue tiene el n:mero de venta, total de venta y
n:mero de vendedor, sa!emos ,ue en nuestra empresa tra!ajan vendedores numerados
del 1 al .
Kueremos sa!er el total vendido por cada vendedor.
0<=;>4 )4?1&
9ipo venta% registro
Codbventa% entero
9otal% real
6endedor% entero
'in registro
4lgoritmo ventas
6ar
'bv% fic-ero de venta
3bv% venta
6end% array O1..P de real
;% entero
;nicio
Desde iJ1 -asta
6endOiP G
'in desde
4!rir 2fbv,Mventas.datM,entrada/
Leer 2fbv,rbv/
5ientras no eof 2fbv/
6endOrbv.vendedorP vendOrbv.vendedorP B rbv.total
Leer 2fbv,rbv/
'in mientras
Cerrar 2fbv/
Desde iJ1 -asta
#scri!ir L#l vendedorMiM-a vendidoMvendOiP
'in desde
'in
LA++es *"!e+#M en a!+>"/s se+uen+"ales:
#$isten lenguajes ,ue tienen funciones ,ue simulan el acceso directo a un
registro dentro de un fic-ero secuencial 2en 0ascal SeeHD en C fseeH/, a estas
funciones le indicamos el n:mero de registro 2en 0ascal/ o el n:mero de !ytes 2en C/, y
nos acceden directamente a esa posicin.
Sin em!argo es simulado, por,ue internamente esa funcin va a -acer una
!:s,ueda secuencial -asta ,ue -aya llegado al n:mero de registro o al n:mero de !ytes.
Man#en"$"en# *e F"+>e!s +n !gan"Pa+"-n *"!e+#a:
- 4lta% 0rimero -ay ,ue ver ,ue no e$iste el registro, y si no e$iste se da de
alta. 0ara ver si e$iste o no e$iste, a partir de la clave del registro ,ue ,uiero
dar de alta, calculo con la funcin de direccionamiento la posicin en la ,ue
tendr8a ,ue meter ese registro. Si esa posicin est+ ocupada, no lo doy de alta
y si no lo meto all8.
- Iaja% 0ara ver si e$iste, -ago igual ,ue antes. Si e$iste lo marco como !aja
lgica, y cuando se reorganice el fic-ero, lo doy como !aja f8sica real.
- 5odificacin% 0ara ver si e$iste, -ago igual ,ue antes. Si e$iste lo modifico y
lo vuelvo a gra!ar en la misma posicin.
- Consultas% 9ienen sentido las consultas de registros en particular con una
determinada clave 2a trav@s de la funcin de direccionamiento/, pero no las
!:s,uedas secuenciales.
0<=;>4 )?1&
Man#en"$"en# *e F"+>e!s +n !gan"Pa+"-n se+uen+"al "n*e:a*a:
#s igual ,ue en organi.acin directa, pero a la -ora de locali.ar un registro, en
ve. de aplicar una funcin de direccionamiento a su clave, utili.amos su clave para
investigar a trav@s de los 8ndices en donde va a estar situado.
Las altas si las doy cuando el fic-ero se crea, se gra!an en el +rea de datos, y si
el fic-ero ya e$ist8a 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 trav@s de una clave por,ue van a estar todas seguidas.
>o -ay ,ue confundir organi.acin secuencial inde$ada, con fic-eros inde$ados
o de 8ndices, ,ue son un tipo especial de fic-eros asociados a un fic-ero secuencial pero
independiente de @l, ,ue me agili.an las !:s,uedas en el fic-ero secuencial en el ,ue
est+n inde$ados. Suelen utili.arse en !ases de datos dom@sticas.
<. FICDEROS DE TE9TO:
Son un tipo de fic-eros especiales, en cuanto a lo ,ue podemos leer de ellos y
escri!ir son cadenas de caracteres.
Sin em!argo tienen significados distintos seg:n el lenguaje, y su o!jetivo es ,ue
podemos tra!ajar con cadenas de caracteres.
' % 'ic-ero de te$to
C % Cadena
escri!ir 2', C/
leer 2', C/
0<=;>4 )"?1&
EJERCICIOS: TEMA 2
1. 9enemos un array con la informacin de nuestros productos, por cada producto
almacenamos su cdigo, descripcin, stocH actual y stocH m8nimo.
Se trata de o!tener otro array ,ue contenga los productos de los ,ue -alla ,ue -acer
pedidos por,ue su stocH sea inferior al m8nimo, tal ,ue al proveedor le tenemos ,ue
dar como datos la identificacin del producto y la cantidad ,ue pedimos, ,ue
coincidir+ con el stocH m8nimo.
>ormalmente tra!ajamos con 1GG productos.
9ipo producto J registro
Codigo% entero
Descripcin% cadena
StocH% entero
StocHbmin% entero
'in registro
0edido J registro
Codigo% entero
Cantidad% entero
'in registro
Listabproducto J array O1..1GGP de producto
0<=;>4 )&?1&
Listabpedido J array O1..1GGP de pedido
4lgoritmo almacen
6ar
0rod% listabproducto
0ed% listabpedido
;,j% entero
;nicio
c 1
Desde iJ1 -asta 1GG
Si prodOiP.stocH E prodOiP.stocHbmin
#ntonces pedOjP.codigo prodOiP.codigo
0edOjP.cantidad prodOiP.stocHbmin
c jB1
'in si
'in desde
'in
2. Dado un array ,ue contiene la informacin de los alumnos de una clase de 1GG
alumnos, y teniendo en cuenta ,ue de cada uno de ellos almacenamos su n:mero de
e$pediente, nom!re y nota media. Nallar la media de todos los alumnos de esa clase
y dar otra opcin ,ue pida el nom!re de un alumno y me de su nota si este alumno
e$iste.
9ipo alumno J registro
#$pediente% entero
>om!re% cadena
5edia% real
'in registro
Lista J arrayO1..1GGP de alumno
4lgoritmo notas
6ar
4lum% lista
Sp,i% entero
5arca% !ooleano
;nicio
0resentar 2op/
5ientras 2op EFG/
Seg:n sea op
0<=;>4 )(?1&
1% escri!ir LLa media de la clase esMnotabmedia 2alum/
2% escri!ir L;ntroduce un nom!reM
leer nom!re
marca falso
i 1
repetir
si comparar 2alumOiP.nom!re,nom!re/ J verdadero
entonces marca J verdadero
sino i iB1
fin si
-asta 2i F 1GG/ o 2marcaJverdadero/
si marca J verdadero
entonces escri!ir LLa nota deMnom!reMesMalumOiP.media
sino escri!ir L#l alumno no e$isteM
fin si
fin seg:n sea
presentar 2op/
fin mientras
fin
3. 9enemos un array con la indicacin de cada producto, stocH, descripcin y fec-a.
Nallar una opcin ,ue nos sirva iterativamente para -acer pedidos de productos y
,ue termina cuando pidamos el producto G.
0or cada pedido se da el identificador de producto ,ue se pide, y la cantidad de
producto, y lo ,ue nos dice es si -ay cantidad suficiente, respondiendo L0edido
suministradoM y actuali.ando el stocH, y si el producto solicitado no e$iste o no -ay
suficiente cantidad, mostrar+ un mensaje de error e$plicando la causa.
9ipo tbfec-a J registro
Dia% entero
5es% entero
4nno% entero
'in registro
0roducto J registro
Codigo% entero
Descripicion% cadena
StocH% entero
'ec-a% tbfec-a
'in producto
Lista J arrayO1..1GP de producto
4lgoritmo pedidos
6ar
0<=;>4 ))?1&
0rod% lista
Codigo,cantidad,i% entero
5arca% !ooleano
;nicio
#scri!ir L;ntroduce el codigoM
Leer codigo
#scri!ir L;ntroduce la cantidadM
Leer cantidad
5ientras codigo EF G
; 1
5arca falso
3epetir
Si codigo J prodOiP.codigo
#ntonces marca verdadero
Sino i iB1
'in si
Nasta 2marca J verdadero/ o 2i F 1GG/
Si marca J falso
#ntonces escri!ir L>o e$iste el productoM
Sino si prodOiP.stocH E cantidad
#ntonces escri!ir L>o -ay cantidad suficienteM
Sino prodOiP.stocH prodOiP.stocH g cantidad
#scri!ir Lpedido suministradoM
'in si
'in si
'in mientras
'in
funcion notabmedia 2a% lista/% real
var
i% entero
acum% real
inicio
acum G
desde iJ1 -asta 1GG
acum acum B aOiP.nota
fin desde
retorno 2acum?1GG/
fin notabmedia
funcion comparacion 2c1%cadena,c2%cadena/% !ooleano
var
i% entero
inicio
i 1
mientras 2c1OiPJc2OiP/ y 2c1OiPEFRiR/ y 2c2OiPEFRiR/
i iB1
fin mientras
si c1OiPJc2OiP
entonces retorno verdadero
0<=;>4 1GG?1&
sino retorno falso
fin si
fin comparacion
0rocedimiento presentar 2entAsal opcion% entero/
;nicio
3epetir
#scri!ir LG. SalirM
#scri!ir L1. Nallar nota mediaM
#scri!ir L2. Nallar la nota de un alumnoM
#scri!ir L;ntroduce una opcinM
Leer opcion
Nasta 2opcion FJG/ y 2opcion EJ2/
'in presentar

4. 9enemos un fic-ero de facturas. #n la factura viene el n:mero de cliente al ,ue
pertenece la factura, el n:mero de factura, el importe de la factura y un campo
pagado ,ue ser+ !ooleano.
#l fic-ero est+ clasificado pro n:mero de cliente y de factura.
Dise7ar un programa ,ue o!tenga por pantalla para cada cliente el total ,ue nos
de!e, y al final me d@ el total de lo ,ue la empresa no -a co!rado.
9ipo factura% registro
>umbcl% entero
>umbfact% entero
;mporte% real
0agado% !oolean
'in registro
4lgoritmo facturas
6ar
'ic-% fic-ero de factura
'act% factura
9otal,deuda% real
Cliente% entero
;nicio
4!rir 2fic-,Mfacturas.datM,entrada/
Leer 2fic-,fact/
9otal G
0<=;>4 1G1?1&
5ientas no eof 2fic-/
Deuda G
Cliente fact.numbcl
5ientras 2cliente J fact.numbcl/ y no eof 2fic-/
Si fact.pagado J falso
#ntonces deuda deuda B fact.importe
9otal total B fact.importe
'in si
Leer 2fic-,fact/
'in mientras
#scri!ir L#l clienteMclienteMde!eMdeuda
'in mientras
#scri!ir LLa empresa no -a co!radoMtotal
'in
. 9enemos un fic-ero de empleados ,ue contiene el departamento, cdigo de
empleado, nom!re, categor8a y sueldo. Nay 12 categor8as numeradas del G al 11.
0or cada departamento sacar el n:mero total de empleados ,ue tiene y el sueldo
medio por departamento. Lo mismo -acerlo por categor8as.
#l fic-ero est+ clasificado por cdigo de departamento y empleado.
9ipo emp% registro
Codbdep% entero
Codbemp% entero
>om!bemp% cadena
Categoria% entero
Sueldo% real
'in registro
Cat% registro
Sueldo% real
#mp% entero
'in registro
4lgoritmo empleados
6ar
'bemp% fic-ero de emp
3bemp% emp
9bdep% real
>bdep,i,d% entero
0<=;>4 1G2?1&
C% array OG..11P de cat
;nicio
Desde iJG -asta 11
COiP.sueldo G
COiP.empleado G
'in desde
4!rir 2fbemp,Mempleados.datM,entrada/
Leer 2fbemp,rbemp/
5ientras no eof 2fbemp/
D rbemp.codbdep
9bdep G
>bdep G
5ientras 2dJrbemp.codbdep/ y no eof 2fbemp/
9bdep tbdep B rbemp.sueldo
>bdep nbdep B 1
COrbemp.categoriaP.sueldo cOrbemp.categoriaP.sueldo B rbemp.sueldo
COrbemp.categoriaP.emp cOrbemp.categoriaP.emp B 1
Leer 2fbemp,rbemp/
'in mientras
#scri!ir L#l sueldo medio del departamentoM d L esM tbdep ? nbdep
'in mientas
Desde i J G -asta 11
#scri!ir L#l sueldo de la categor8aMiMesMcOiP.sueldo?cOiP.emp
'in desde
Cerrar 2fbemp/
'in

". 0ara controlar los stocHs de un almac@n tenemos%
- *n fic-ero Lalmac@nM, no clasificado ,ue contiene las e$istencias de cada
producto en almac@n, y sa!emos ,ue -ay un m+$imo de &G productos. Cada
registro tiene el cdigo de producto21..&G/, la cantidad en stocH de ese producto
y el nom!re del producto
- *n fic-ero LpedidosM ,ue contiene todos los pedidos ,ue se solicitan al almac@n.
Cada pedido contiene el n:mero de pedido, el cdigo de producto ,ue se pide y
la cantidad ,ue se pide. #ste fic-ero est+ clasificado por n:mero de pedido.
S!tener un fic-ero de stocH actuali.ado a partir de los pedidos, pudi@ndose dar%
1. #l producto ,ue se pide e$iste en el almac@n y ,ue la cantidad ,ue se pide sea
menor o igual a la ,ue -ay. Slo se actuali.a el fic-ero.
2. #l producto e$iste, pero la cantidad ,ue nos piden es mayor ,ue la ,ue -ay.
=uardaremos la informacin del pedido en el fic-ero LdenegadosM ,ue tiene el
cdigo del producto, la cantidad pedida y la cantidad ,ue -a!8a en stocH.
3. #l cdigo de producto no e$iste. 5ostramos por pantalla un mensaje ,ue ponga
LCdigo de producto erroneoM.
Cada producto aparece como m+$imo una ve..
9ipo alm% registro
0rod% entero
StocH% entero
'in registro
0<=;>4 1G3?1&
0ed% registro
>bped% entero
0rod% entero
Cant% entero
'in registro
Den% registro
0rod% entero
StocH% entero
Cant% entero
'in registro
4lgoritmo almac@n
6ar
'ba,fbal% fic-ero de alum
'bd% fic-ero de den
'bp% fic-ero de pedidos
3ba% alm
3bp% ped
3bd% den
;nicio
4!rir 2fbp,Mpedidos.datM,entrada/
4!rir 2fbn,Malmacenbn.datM,salida/
4!rir 2fbd,Mdenegados.datM,salida/
Leer 2fbp,rbp/
5ientras no eof 2fbp/
4!rir 2fba,Malmacen.datM,entrada/
Leer 2fba,rba/
5ientras 2rbp.prod EF rba.prod/ y no eof 2fba/
Leer 2fba,rba/
'in mientras
Si rbp.prod J rba.prod
#ntonces si rbp.cantidad E rba.stocH
#ntonces rban.prod rba.prod
3ban.stocH rba.stocH g rbp.cantidad
#scri!ir 2fban,rban/
Sino rbd.prod rba.prod
3bd.cant rbp.cant
3bd.stocH rba.stocH
#scri!ir 2fbd,rbd/
'in si
Sino escri!ir L#rror. >o e$iste el productoMrbp.producto
'in si
Cerrar 2fba/
Leer 2fbp,rbp/
'in mientras
Cerrar 2fbp/
Cerrar 2fbd/
Cerrar 2fban/
4ctuali.arbalmacen 2fba,fban/
'in
0<=;>4 1G4?1&
0rocedimiento actuali.arbalmacen 2f1% fic-ero de almacenD f2% fic-ero de almacen/
6ar
31,r2% alm
'3% fic-ero de alm
;nicio
4!rir 2f1,Malmacen.datM,entrada/
4!rir 2f3,Malm.actM,salida/
Leer 2f1,r1/
5ientras no eof 2f1/
4!rir 2f2,Malmacenbn.datM,entrada/
Leer 2f2,r2/
5ientras 2r1.prod EF r2.prod/ y no eof 2f2/
Leer 2f2,r2/
'in mientras
Si r1.prod J r2.prod
#ntonces escri!ir 2f3,r2/
Sino escri!ir 2f3,r1/
'in si
Cerrar 2f2/
'in mientras
Cerrar 2f1/
Cerrar 2f3/
'in

ORDENACIN3 B4S5UEDA E INTERCALACIN INTERNA:
TEMA 6
1. ;ntroduccin.
2. Srdenacin%
- 5@todo de la !ur!uja.
- 5@todo de insercin.
- 5@todo de seleccin.
- 5@todo de KuicH S-ort.
3. I:s,ueda%
- I:s,ueda secuencial.
- I:s,ueda !inaria.
- I:s,ueda por conversin de claves o Nas-ing.
4. ;ntercalacin.
1. INTROD'CCIN:
4 la -ora de tratar datos, muc-as veces nos conviene ,ue est@n ordenados. #stos
m@todos nos pueden resultar eficientes cuando -acemos las !:s,uedas.
2. ORDENACIN:
0<=;>4 1G?1&
Consiste en organi.ar un conjunto de datos en un orden determinado seg:n un
criterio.
La ordenacin puede ser interna o e$terna%
- ;nterna% La -acemos en memoria con arryas. #s muy r+pida.
- #$terna% La -acemos en dispositivos de almacenamiento e$terno con
fic-eros.
0ara determinar lo !ueno ,ue es un algoritmo de ordenacin -ay ,ue ver la
complejidad del algoritmo 2cantidad de tra!ajo de ese algoritmo/, se mide en el n:mero
de operaciones !+sicas ,ue reali.a un algoritmo. La operacin !+sica de un algoritmo es
la operacin fundamental, ,ue es la comparacin.
M#* *e la Cu!Cu,a:
La filosof8a de este m@todo es ir comparando los elementos del array de 2 en 2 y
si no est+n colocados correctamente intercam!iarlos, as8 -asta ,ue tengamos el array
ordenado.
Nay ,ue comparar la posicin 1 y la 2 y si no est+n ordenadas las intercam!io.
Luego la 2 y la 3 y as8 sucesivamente -asta ,ue comparo las :ltimas posiciones.
Con esta primera pasada lograremos ,ue ,uede ordenado el :ltimo elemento del
array.
9ericamente, en cada pasada iremos colocando un elemento, y tendr8amos ,ue
-acer n g1 pasadas. Si en una pasada no se -acen cam!ios, el array ya est+ ordenado.
0rocedimiento !ur!uja 2datos% array O1..>P de EtipoF/
6ar
Srdenado% !ooleano
;, c% entero
4u$% EtipoF
;nicio
Srdenado falso
; 1
5ientras 2ordenado J falso/ y 2i EF n g 1/
Srdenado verdadero
c ;
Desde j J 1 -asta n g 1
Si datos OjP F datos Oj B 1P
#ntonces au$ datos OjP
Datos OjP datos Oj B 1P
Datos OjP au$
Srdenado falso
'in si
'in desde
0<=;>4 1G"?1&
; ; B 1
'in mientras
'in
M#* *e "nse!+"-n:
Se supone ,ue se tiene un segmento inicial del array ordenado, y -ay ,ue ir
aumentando la longitud de segmento -asta ,ue coincide con la longitud del array.
0ara ello insertaremos el siguiente elemento en el lugar adecuado dentro del
segmento ordenado.
#sto se -ace moviendo cada elemento del segmento ordenado a la derec-a -asta
,ue se encuentre uno menor o igual al elemento ,ue ,ueremos colocar en el segmento o
-asta ,ue no tenemos elementos, y lo coloco en esa posicin.
0ara arrancar este m@todo se parte de ,ue el segmento ordenado inicial este es la
primera posicin.
0rocedimiento insercion 2datos% array O1..>P de EtipoF/
6ar
;, c% entero
4u$% EtipoF
;nicio
Desde i J 2 -asta >
4u$ datos OiP
c i g 1
5ientras 2j F G/ y 2au$ E datosOjP/
DatosOj B 1P datosOjP
c j g 1
'in mientras
Datos Oj B 1P au$
'in desde
'in
M#* *e la sele++"-n:
Se trata de !uscar el elemento m+s pe,ue7o y colocarlo en la primera posicin,
despu@s el segundo m+s pe,ue7o y colocarlo en la segunda posicin, y as8
sucesivamente -asta ,ue el array este ordenado.
0ara ello vamos a recorrer el array, y por cada elemento !uscamos a la derec-a
de esa posicin cual es el m+s pe,ue7o, y lo intercam!io con el elemento ,ue estoy
e$aminando.
0rocedimiento selecccion 2datos% arrayO1..>P de EtipoF/
6ar
;,j,pos% entero
4u$% EtipoF
;nicio
Desde i J 1 -asta >A1
4u$ datosOiP
0os i
Desde j J iB1 -asta >
Si datosOjP E au$
0<=;>4 1G&?1&
#ntonces pos j
4u$ datosOjP
'in si
'in desde
DatosOposP datosOiP
DatosOiP au$
'in desde
'in
M#* *e !*ena+"-n !5)"*a Qu"+QS>!#:
Consiste en dividir la lista inicial en otras dos ,ue ordenamos por separado
recursivamente.
0ara ello, se elige un elemento de la lista al ,ue llamamos pivote, tal ,ue a la
derec-a del pivote va a ,uedar lo m+s grande, y a la i.,uierda lo m+s pe,ue7o, es decir,
,ue el pivote ,uedar+ colocado en su posicin.
0rocedimiento KuicHS-ort 2ini% enteroD fin% enteroD datos% arrayO1..>P de EtipoF/
;nicio
Si ini E fin
#ntonces su!listas 2ini,fin,pivote,datos/
KuicHs-ort 2ini,pivoteA1,datos/
KuicHs-ort 2pivoteB1,fin,datos/
'in si
'in
0rocedimiento su!listas 2ini%enteroDfin%enteroDentAsal pivote%enteroD
datos%arrayO1..>Pde EtipoF/
;nicio
0ivote ini
4u$ datosOiniP
Desde i J pivoteB1 -asta fin
Si datosOiP E au$
#ntonces pivote pivote B 1
4u$2 datosOiP
DatosOiP datosOpivoteP
DatosOpivoteP au$2
'in si
'in desde
DatosOiniP datosOpivoteP
DatosOpivoteP au$
'in
0<=;>4 1G(?1&
&. 7RSQ'EDAS:
Nay 2 tipos de !:s,uedas, internas ,ue se -acen en memoria y e$ternas ,ue se
-acen en fic-eros. Cuando !uscamos en un fic-ero, normalmente lo -acemos a trav@s de
una clave.
Dado un determinado valor, se trata de ver si e$iste un elemento con ese valor en
el array de fic-eros donde se !usca, tal ,ue se devuelve si est+ o no.
#$isten 3 m@todos de !:s,ueda%
- Secuencial.
- Iinaria o dicotnica.
- 0or transformacin de claves o Nas-ing.
7Is=ue*a se+uen+"al:
Se puede aplicar para !:s,uedas internas y e$ternas, y -ay ,ue ir pasando
secuencialmente por todos los elementos de la estructura -asta encontrar el elemento o
aca!ar la lista.
0rocedimiento !bsecuencial 2datos% arrayO1..>P de EtipoFD elem% EtipoF/
6ar
;% entero
;nicio
; 1
5ientras 2i EJ >/ y 2datosOiP EF elem/
; ; B 1
'in mientras
Si datosOiP J elem
#ntonces escri!ir L#lemento encontrado en la posicinMi
Sino escri!ir L#lemento no encontradoM
'in si
'in
7Is=ue*a se+uen+"al +n +en#"nela:
Se trata de optimi.ar en cierto modo la !:s,ueda secuencial normal, lo ,ue
-acemos es a7adir al final del array el elemento ,ue ,uiero !uscar por lo ,ue siempre lo
encontrare.
Si encuentro el elemento en una posicin distinta de >B1 significa ,ue no est+
en la estructura. La ventaja es ,ue en la condicin del mientras no tengo ,ue preguntar
si se aca!a la estructura, me a-orro una condicin, el inconveniente es ,ue tiene ,ue
so!rar espacio al final del array.
0rocedimiento !bsecbcentineal 2datos% arrayO1..>B1P de EtipoFD elem% EtipoF/
6ar
;% entero
;nicio
DatosOnB1P elem
; 1
5ientras datosOiP EF elem
; iB1
0<=;>4 1G)?1&
'in mientras
Si i EF nB1
#ntonces escri!ir L#lemento encontrado en la posicinMi
Sino escri!ir L#lemento no encontradoM
'in si
'in
7Is=ue*a C"na!"a *"+#-n"+a:
0ara ,ue se pueda aplicar es ,ue la lista en la ,ue ,ueremos !uscar el elemento
este previamente ordenada.
Se trata de dividir el espacio de !:s,ueda en sucesivas mitades -asta encontrar el
elemento !uscado o -asta ,ue ya no pueda -acer m+s mitades.
0rimero -allamos el 8ndice de la mitad del array y miramos si el elemento
coincide con @l, sino coincide averiguamos donde de!er8a estar el elemento !uscado, si
en la lista de la derec-a o de la i.,uierda, y dentro de esa mitad -ago lo mismo
sucesivamente.
0rocedimiento !b!inaria 2datos%array O1..>P de EtipoFD elem%EtipoFD ini%enteroD
fin% entero/
6ar
mit% entero
;nicio
mit 2iniBfin/ div 2
mientras 2ini E fin/ y 2elem EF datosOmitP/
si elem E datosOmitP
entonces fin mit g 1
sino ini mit B 1
fin si
fin mientras
si ini E fin
entonces escri!ir L#lemento encontrado en la posicinM mit
sino escri!ir L#lemento no encontradoM
fin si
fin
7Is=ue*a )! #!ansF!$a+"-n *e +la/es Das>"ng:
#s necesario ,ue lo ,ue se !us,ue sea por un determinado campo clave. Se trata
de convertir ese campo clave en una direccin real, si estamos en un array, en un
posicin del array y si estamos en un fic-ero, en un registro del fic-ero.
Lo ,ue -ace ,ue se convierta la clave en una direccin real es la funcin de
direccionamiento. #$isten diferentes tipos de funciones de direccionamiento%
- La m+s usada es la funcin mdulo, ,ue consiste en dividir la clave entre el
n:mero de elementos m+$imos de la estructura y coger el resto como
direccin real de almacenamiento 2el 8ndice si es un array, o una direccin
relativa si es un fic-ero/.
- #ntruncamiento% #s la parte de la clave como 8ndice.
- 0legamiento% Dividir la clave en partes iguales de tama7o, ,ue va a ser igual
al n:mero de cifras del tama7o del array, luego sumarlas y coger las :ltimas
cifras de la suma.
- 5itad del cuadrado% #s el cuadrado de la clave y despu@s coger las cifras
centrales.
0<=;>4 11G?1&
#l pro!lema de estos casos, es ,ue cuando el rango de claves es mayor ,ue el
n:mero de posiciones de la estructura, est+ el pro!lema de ,ue a diferentes claves les
corresponde la misma posicin, as8 ,ue cuando se produce el segundo sinnimo -ay ,ue
ver donde se manda.
0ara evitar esto, tratar ,ue la funcin de direccionamiento produ.ca el menor
n:mero de colisiones posi!les.
0ara solucionar el pro!lema de los sinnimos%
- Dejar tanto espacio como rango de claves. #s ilgico.
- Si se trata de un array, ,ue por cada posicin dejemos una posicin m+s.
- La mejor solucin es la t@cnica de encadenamiento, ,ue consiste en ,ue de
cada posicin del array salga un puntero a una lista enla.ada ,ue enlace a
todos los elementos ,ue de!er8an ir posicionados en esa posicin o 8ndice del
array.
0. INTERCALACIN:
Consiste en juntar varias listas ordenadas en una sola lista ,ue ,uede ordenada.
0rocedimiento fusion 2a1% 91D a2% 92D a3% 93/
6ar
;,j,H,l% entero
;nicio
; 1
c 1
h 1
5ientras 2iEJn/ y 2jEJm/
Si a1OiP E a2OjP
#ntonces a3OHP a1OiP
; ; B 1
Sino a3OHP a2OjP
c c B 1
'in si
0<=;>4 111?1&
h h B 1
'in mientras
Si i E n
#ntonces desde LJi -asta m
h H B1
43OHP a2OlP
'in desde
Sino desde LJj -asta n
h HB1
43OHP a1OlP
'in desde
'in si
'in
ORDENACIN3 B4S5UEDA Y FUSIN E7TERNA:
TEMA 18
1. 4rc-ivos ordenados.
2. 'usin o me.cla de arc-ivos ordenados.
3. 0articin de arc-ivos.
4. Clasificacin de arc-ivos.
1. ARCDI3OS ORDENADOS:
*n arc-ivo se puede ordenar por un campo o un conjunto de campos. La mayor
parte de los sistemas disponen de una funcin SS39 para ordenar.
2. F'SIN O MEOCLA DE ARCDI3OS ORDENADOS:
Dados 2 arc-ivos 4 y I ,ue tienen la misma estructura y clasificados por el
mismo campo o campos, se trata de o!tener otro arc-ivo C ,ue tenga la misma
estructura de los 2 anteriores y ,ue tam!i@n ,ueda clasificado por el mismo criterio.
0<=;>4 112?1&
0rocedimiento fusion 24% tbfic-D I% tbfic-D C% tbfic-/
6ar
31, r2% EtipoF
;nicio
4!rir 2C,Mfic-.salM,salida/
4!rir 24,Mfic-1M,entrada/
4!rir 2I,Mfic-2M,entrada/
Leer 24,r1/
Leer 2I,r2/
5ientras no eof 24/ y no eof 2I/
Si r1.info E r2.info
#ntonces escri!ir 2C,r1/
Leer 24,r1/
Sino escri!ir 2C,r2/
Leer 2I,r2/
'in si
'in mientras
Si eof 24/
#ntonces leer 2I,r2/
mientras no eof 2I/
#scri!ir 2C,r2/
Leer 2I,r2/
'in mientras
Sino leer 24,r1/
mientras no eof 24/
#scri!ir 2C,r1/
Leer 24,r1/
'in mientras
'in si
Cerrar 24/
Cerrar 2I/
Cerrar 2C/
'in
&. F'SIN DE ARCDI3OS:
Se trata de dividir un arc-ivo en varios. Nay diferentes criterios de particin%
Pa!#"+"-n )! +n#en"*:
Se reparten los registros entre varios registros seg:n el valor de uno o m+s
campos.
E 61 '1
J 61 '2
F 61 '3
0rocedimiento partbcont 2fic-% tbfic-D entAsal fic-1, fic-2, fic-3% tbfic-/
6ar
3% EtipoF
;nicio
4!rir 2fic-,M'M,entrada/
4!rir 2fic-1,M'1M,salida/
4!rir 2fic-2,M'2M,salida/
4!rir 2fic-3,M'3M,salida/
0<=;>4 113?1&
Leer 2fic-,r/
5ientras no eof 2fic-/
Si r.info E 61
#ntonces escri!ir 2f1,r/
Sino si r.info F 61
#ntonces escri!ir 2f3,r/
Sino escri!ir 2f2,r/
'in si
'in si
Leer 2fic-,r/
'in mientras
Cerrar 2fic-/
Cerrar 2f1/
Cerrar 2f2/
Cerrar 2f3/
'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 fic-ero varios, tal ,ue todos tengan un n:mero
fijo de registros e$cepto el :ltimo.
Si el fic-ero inicial tiene f registros y ,uiero o!tener como resultado \ fic-eros,
cada fic-ero tendr+ f?\ registros.
Se trata de ir leyendo secuencias de f?\ registros del fic-ero ' y se vuelcan a un
array, clasificar esas secuencias internamente, y cuando est@n clasificadas, las vuelco a
otro fic-ero.
#l pro!lema es ,ue se usa arrays para la ordenacin interna, y a veces el n:mero
de fic-eros dependen del tama7o m+$imo del array.
'% 3 ) 14 2 3G 1
'1% 3 )
'2% 2 14 3G
'3% 1
Pa!#"+"-n )! se+uen+"as s"n +las"F"+a+"-n "n#e!na:
Se trata de o!tener fic-eros a partir de uno dado, todos con el mismo tama7o,
pero los fic-eros no tienen por ,ue estar clasificados.
>osotros marcamos el tama7o del !lo,ue donde vaya a clasificar la informacin.
Determino tam!i@n el n:mero m+$imo de fic-eros ,ue ,uiero tener.
Leer@ secuencias de > registros del fic-ero inicial y los ir@ gra!ando en los
fic-eros resultantes de la particin.
0. CLASIFICACIN DE ARCDI3OS:
#s o!ligatorio ,ue e$ista una clave. Si el fic-ero fuese pe,ue7o se llevan todos
los registros a un array y los clasifico, pero esto no es lo m+s usual, por lo ,ue se usa la
clasificacin e$terna.
Clas"F"+a+"-n )! $eP+la *"!e+#a:
6amos a usar 2 fic-eros au$iliares '1 y '2. #l fic-ero ' lo organi.amos
gra!ando en ' secuencias de registros ordenados cada ve. m+s grandes.
0<=;>4 114?1&
0rimero leemos las secuencias de un registro de ' y las gra!o alternativamente
en '1 y '2.
Luego leo las secuencias de un registro, una de '1 y otra de '2, y las gra!o
ordenadas en '.
6uelvo a leer en ' con el do!le de secuencia ,ue antes y los gra!o en '1 y '2, y
repetimos todas las fases duplicando en cada pasada el tama7o de la secuencia -asta ,ue
el tama7o o!tenido sea igual ,ue el del fic-ero. 4 cada tratamiento de ' se le llama
pasada, y el n:mero de pasadas m+$imo, ser+ ;, tal ,ue el tratamiento se repetir+ -asta
,ue 2 elevado a ; FJ n:mero de registros.
#n cada pasada para clasificar la secuencia ,ue leemos de '1 y '2, utili.amos el
m@todo de fusin e$terna.
'% 3 ) 14 2 3G 1 12 1G
'1% 3 ? ? 2 ? 1 ? 1G
'2% ) ? 14 ? 3G ? 12
'% 3 ) 14 2 3G 1 12 1G
'1% 3 ) ? 2 3G ? 1G
'2% 14 ?1 12
'% 3 ) 14 1 2 12 3G 1G
'1% 3 ) 14 ? 1G
'2% 1 2 12 3G
'% 1 2 3 ) 12 14 3G ? 1G
'1% 1 2 3 ) 12 14 3G
'2% 1G
'% 1 2 3 ) 1G 12 14 3G

Clas"F"+a+"-n )! $eP+las *e se+uen+"as e=u"/alen#es:
Se parece al m@todo anterior por,ue tam!i@n se intenta coger secuencias de
registros m+s grandes, pero a-ora usamos 4 fic-eros au$iliares y en ve. de empe.ar
leyendo secuencias de un registro, -acemos secuencias de > registros, ,ue la primera
ve. clasificamos internamente, por lo ,ue el valor de > vendr+ limitado por el tama7o
del array.
0rimero leemos del arc-ivo inicial ' secuencias de > registros ,ue clasificamos
internamente y ,ue gra!amos alternativamente en '1 y '2.
Despu@s leo secuencias de > registros de '1 y '2 alternativamente, y por cada
par de secuencias le8das las fusiono y las gra!o alternativamente ya ordenadas en '3 y
'4.
Las secuencias de 2> registros de '3 y '4 las fusiono y la secuencia 4>
o!tenida ya ordenada la gra!o alternativamente en '1 y '2.
3epito esto -asta ,ue todos los fic-eros est@n vac8os menos 1, y la informacin
de ese fic-ero la gra!o al fic-ero inicial.
0<=;>4 11?1&
'% 3 ) 14 2 3G 1 12 1G
'1% 3 ) ? 1 1G 12
'2% 2 14 3G
'1% 6acio
'2% 6acio
'3% 2 3 ) 14 3G
'4% 1 1G 12
'1% 1 2 3 ) 12 14 3G 6uelco '1 al fic-ero inicial '.
'2% 6acio
'3% 6acio
'4% 6acio
ESTRUCTURAS DIN9MICAS LINEALES DE DATOS:
LISTAS ENLA:ADAS. PILAS Y COLAS:
TEMA 11
1. ;ntroduccin a las estructuras din+micas de datos.
2. Listas.
3. Listas enla.adas.
4. 0rocesamiento de listas enla.adas simples.
. Listas circulares con ca!ecera.
". Listas do!lemente enla.adas.
&. 0ilas.
(. Colas.
). Do!les colas o !icolas.
1. INTROD'CCIN A LAS ESTR'CT'RAS DIN@MICAS DE DATOS:
Las ventajas de las estructuras din+micas de datos son%
0<=;>4 11"?1&
1. >o -ay ,ue definir el tama7o antes de usarla, sino ,ue la voy utili.ando
seg:n la necesito.
2. Los elementos ,ue forman est+ estructura no est+n situados en forma
contigua en memoria, y esos elementos se relacionan entre s8 mediante
campos enlace o puntero, y a cada uno de esos elementos lo llamamos nodo
de la estructura.
*n puntero es un dato cuyo contenido es una direccin de memoria ,ue es en
la ,ue est+ almacenado el dato al ,ue apunta.
Las estructuras din+micas pueden ser lineales o no lineales seg:n ,ue desde un
elemento se pueda acceder solamente a otro o a varios.
De+la!a+"-n *e ls )un#e!s en *"s#"n#s lengua,es:
#n C% EtipoF CEvarbpF
;nt Cp
#n 0ascal% EvarbtipobpunteroF% VEtipoF
0% Vinteger
#n pseudocdigo% EvarbtipobpunteroF% puntero a EtipoF
0% puntero a entero
A++e*e! a un +a$) *e un !eg"s#!:
#n C% 0 nom!re
#n 0ascal% pV.nom!re
#n pseudocdigo% p nom!re
2. LISTAS:
*na lista es una coleccin lineal de elementos. Nay 2 formas de almacenarla.
Con arrays 2usando memoria est+tica/, en donde la relacin de los elementos de la lista
viene dada por,ue ocupa posiciones contiguas de memoria.
De forma enla.ada con memoria din+mica. Se conoce como listas enla.adas, y 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 >SDSS, donde el orden entre los
nodos se esta!lece mediante punteros, y por ser simple, adem+s desde un nodo solo
puedo acceder al siguiente directamente.
*na lista enla.ada tiene 2 partes%
- Los nodos ,ue forman la lista. Cada nodo va a tener dos campos. *no de
informacin ,ue ser+ del tipo de los elementos ,ue contiene la lista y un
0<=;>4 11&?1&
campo de enlace ,ue es de tipo puntero, y ,ue contendr+ la direccin de
memoria en la ,ue est+ almacenado el siguiente nodo.
4l primer campo de informacin lo llamamos ;>'S, y el nodo lo llamamos
S;=.
- La segunda parte de la lista ser+ una varia!le de tipo puntero a los nodos de
la lista ,ue contiene la direccin del primer nodo de la lista. 0or esa ra.n a
esa varia!le la podemos llamar CS5ien.o.
9ipo nodo% registro
;nfo% EtipoF
Sig% puntero a nodo
'in registro
6ar
Com% puntero a nodo
#l :ltimo nodo de la lista tendr+ en su campo de enlace el valor nodo 2>ull,>il/,
,ue ,uiere decir ,ue no apunta a ninguna direccin y gr+ficamente se sim!oli.a con%
9ipo nodo% registro
;nfo% car+cter
Sig% puntero a nodo
'in registro
Los nodos de la lista pueden estar en cual,uier .ona de memoria, no tienen ,ue
estar en posiciones consecutivas.
0. PROCESAMIENTO DE LISTAS ENLAOADAS SIMPLES:
0ara poder procesar una lista, se necesita la estructura de sus nodos y la varia!le
de comien.o.
Speraciones%
- ;nsertar un elemento.
- Iorrar un elemento.
- 3ecorrer la lista.
- Iuscar un elemento.
La forma m+s normal de representar listas enla.adas es usar memoria din+mica. *na
lista enla.ada tam!i@n se puede simular usando arrays 2memoria est+tica/, pero es poco
eficiente.
0ara ello utili.ar8a 2 arrays del mismo tama7o y con la misma numeracin de
8ndices, tal ,ue en un array guardar8a los campos de informacin de la lista, y para cada
0<=;>4 11(?1&
campo de informacin en la posicin correspondiente en el otro array guardar8a el
8ndice del siguiente elemento a ese nodo.
#s decir en ese segundo array guardar8a los campos enlace mediante valores de
8ndice.
a - . i .
4dem+s de los 2 arrays, tengo ,ue tener una varia!le ,ue contenga el 8ndice del
primer elemento de la lista. #l :ltimo elemento, tiene en el campo de enlace el valor G.

;nfo Sig
1
2

3 N
4
.
"
4
&
; 3
( 1G
)

1G ^ G
Re+!!"* e una l"s#a enlaPa*a:
Consiste en paras por todos sus nodos y procesarlos.
9ipo nodo% registro
;nfo% EtipoF
Sig% puntero a nodo
'in registro
4lgoritmo recorrido
6ar
Com% puntero a nodo
;nicio
3ecorrer 2com/
'in
0rocedimiento recorrer 2prin% puntero a nodo/
6ar
0<=;>4 11)?1&
0tr% puntero a nodo
;nicio
Si prin J >il
#ntonces escri!ir LLista vaciaM
Sino ptr prin
5ientras ptr EF nil ptrsig EF nil
_procesar ptrinfo`
ptr ptrsig
fin mientras posicionarme en el :ltimo nodo
fin si .
fin
7us=ue*a *e un n*:
Se trata de locali.ar un nodo ,ue cumpla una determinada condicin 2por
ejemplo ,ue su campo de informacin valga un valor determinado/.
4 la -ora de -acer las !:s,uedas tendremos en cuenta si la lista est+ ordenada o
no, y si est+ ordenada por el criterio de !:s,ueda tendr@ ,ue aprovec-arlo.
9ipo nodo% registro
;nfo% EtipoF
Sig% puntero a nodo
'in registro
4lgoritmo !us,ueda
6ar
0,com% puntero a nodo
#lem% EtipoF
;nicio
Iuscar 2com,elem,p/
'in
0rocedimiento !uscar 2prin% puntero a nodoD e% EtipoFD entAsal pos% puntero a nodo/
;nicio
0os prin
5ientras 2posinfo EF #/ y 2pos EF >;L/
0os possig
'in mientras
'in
7Is=ue*a *e un n* !*ena* as+en*en#e$en#e:
9ipo nodo% registro
;nfo% EtipoF
Sig% puntero a nodo
'in registro
4lgoritmo !us,ueda
6ar
0,com% puntero a nodo
#lem% EtipoF
;nicio
Iuscar 2com,elem,p/
'in
0rocedimiento !uscar 2prin% puntero a nodoD e%EtipoFDentAsal pos% puntero a nodo/
;nicio
0os prin
0<=;>4 12G?1&
5ientras 2e F posinfo/ y 2pos EF >;L/
0os possig
'in mientras
Si posinfo EF e
#ntonces pos >;L
'in si
'in
T!a#a$"en# *e la $e$!"a *"n5$"+a:
Siempre ,ue se -ace una insercin en una estructura din+mica, tenemos ,ue
coger de memoria tantos !ytes de memoria din+mica como ocupa el nodo de la
estructura din+mica, y cuando !orramos un elemento, tendremos ,ue li!erar la memoria
ocupada por ese elemento. 0ara conseguir este manejo, todos los lenguajes de
programacin tienen 2 instrucciones ,ue permiten reservar memoria y li!erar memoria
din+mica, y asignar en el caso de la reserva la memoria a un puntero, y en el caso de la
li!eracin se li!era la memoria asignada a un puntero.
0ascal % >#e , D;S0SS#
C % 54LLSC , '3##
CBB % >#e , D#L#9#
La instruccin de reserva de memoria llevara un :nico argumento, ,ue ser+ el
tipo de datos para el ,ue se -ace la reserva de memoria, y seg:n el tama7o de ese tipo,
esa instruccin sa!r+ el n:mero de !ytes ,ue tiene ,ue reservar. \ lo ,ue devuelve es un
puntero al comien.o de la .ona ,ue se -a reservado. #ste valor devuelto ser+ el ,ue
tenemos ,ue asignar a un puntero al tipo de datos para el ,ue se -ace la reserva.
La funcin li!erar memoria lleva un :nico argumento ,ue es el tipo puntero, y lo
,ue -ace es li!erar la memoria asignada a ese puntero, para lo cual es imprescindi!le
,ue a ese puntero previamente se le -aya -ec-o una asignacin de memoria din+mica
con al funcin de reserva.
6ar p% puntero a EtipoF
0 J resbmem 2EtipoF/
Li!bmem 2EvarbpunteroF/
>osotros vamos a simular el tratamiento de la memoria din+mica de la siguiente
forma% 6amos a suponer ,ue todas las posiciones li!res de memoria est+n enla.adas
entre s8 a trav@s de una lista enla.ada, a la ,ue vamos a llamar D;S0 2lista de memoria
disponi!le/, donde la primera posicin de esa lista viene apuntada por la varia!le D;S0.
Cada ve. ,ue ,ueremos -acer una insercin en una estructura din+mica,
cogeremos la primera posicin de D;S0, y se la asignaremos al puntero ,ue va a
contener a ese elemento.
\ cuando ,ueramos !orrar un elemento de una estructura din+mica para indicar
,ue li!eramos la memoria utili.ada por ese elemento, lo ,ue -aremos ser+ insertarlo en
el D;S0, pero siempre al comien.o.
Seg:n esto, todo !orrado en el D;S0 e,uivaldr+ a una instruccin de reserva de
memoria en cual,uier lenguaje, y toda insercin en el D;S0, e,uivaldr+ a la instruccin
de li!erar memoria en cual,uier lenguaje.
O/e!FlS . 'n*e!FlS:
0<=;>4 121?1&
La memoria del ordenador tiene un tama7o limitado, por lo ,ue la memoria
din+mica tam!i@n tendr+ un tama7o limitado, es decir, ,ue puede ser ,ue se nos agote.
#sta situacin, se conoce como S6#3'LSe.
Siempre ,ue se -aga una instruccin de reserva de memoria, tendremos ,ue
compro!ar antes si nos ,ueda memoria li!re. #so en cual,uier lenguaje ocurre cuando la
instruccin de reservar de memoria devuelve el valor >;L.
Si D;S0 J >il
#ntonces escri!ir L>o -ay memoriaM
;gual se -ace para !orrar un elemento de una estructura din+mica, para !orrarlo,
esa estructura tiene ,ue tener al menos un elemento. Si no lo tiene e intentamos
!orrarlo, se produce un *>D#3'LSe.
0or esto, lo primero ,ue tenemos ,ue pro!ar en una estructura din+mica, es
preguntar si tiene algo.
Si comien.o J >il
#ntonces escri!ir LLista 6aciaM
Si slo manejo una estructura din+mica, pregunto por D;S0, si tra!ajo con varias
estructuras din+micas cada una de un tipo, -a!r+ tantas D;S0 como estructuras
din+micas.
Inse!+"-n en una l"s#a enlaPa*a:
4ntes de reali.ar cual,uier proceso de insercin, tendr@ ,ue ver si me ,ueda
memoria disponi!le. Si es posi!le -acer la insercin, lo primero ser+ reservar la
memoria para el elemento ,ue ,uiero reservar. 0ara nosotros ser+ coger el primer
elemento de D;S0.
#n segundo lugar, asignaremos los valores correctos al elemento ,ue vamos a
insertar, es decir, asignaremos al campo de informacin del nuevo elemento con la
informacin, y despu@s actuali.amos el campo de enlace.
4 la -ora de asignar un valor al campo de enlace, lo primero ser+ locali.ar la
posicin en la ,ue tenemos ,ue locali.ar el siguiente elemento, y se pueden dar los
siguientes casos%
1. ;nsercin al comien.o de la lista% Se modifica el valor de la varia!le
comien.o.
2. ;nsercin en cual,uier otro lugar de la lista, incluido el final% #n este caso,
tendremos ,ue conocer tam!i@n el nodo ,ue va a estar delante de la posicin
de insercin, ya ,ue a la -ora de insertar ese nuevo elemento, va a ocurrir
,ue el nodo de la posicin anterior a la de insercin apunte al nuevo
elemento, y ,ue el nuevo apunte al nodo de la posicin a la ,ue insertamos.
4 la -ora de locali.ar la posicin de insercin depender+ de la aplicacin en
particular.
Como ejemplo de insercin, vamos a dar la insercin en una lista ordenada
ascendentemente por el campo de informacin%
9ipo nodo% registro
0<=;>4 122?1&
;nfo% EtipoF
Sig% puntero a nodo
'in registro
0rocedimiento insercion 2entAsal com% puntero a nodoD elem%EtipoF/
6ar
Lug, Lugp, nuevo% puntero a nodo
;nicio
Si D;S0 J >il
#ntonces escri!ir L>o -ay memoria disponi!leM
Sino nuevo D;S0
D;S0 D;S0S;=
>uevoinfo elem
Si 2com J >il/ o 2elem E cominfo/
#ntonces nuevosig Com
Com nuevo
Sino lugp com
Lug comsig
5ientras 2elem F luginfo/ y 2lug EF >il/
Lugp lug
Lug lugsig
'in mientras
>uevosig lug
Lugpsig nuevo
'in si
'in si
'in
7!!a* en una l"s#a enlaPa*a:
Se trata de !orrar un nodo ,ue contenga una determinada informacin de una
lista enla.ada simple, aun,ue el criterio de !orrado podr8a ser otro en lugar del campo
de informacin.
Siempre ,ue se -ace un !orrado de una estructura din+mica, en general, lo
primero es compro!ar ,ue la estructura no est+ vac8a, y una ve. determinado esto,
tendr@ ,ue locali.ar el nodo a !orrar.
Se pueden dar 2 casos%
- #l nodo a !orrar sea el primero.
- Kue el nodo a !orrar ocupe cual,uier otra posicin.
Si es el del comien.o, cam!iar+ la varia!le de comien.o de la lista por,ue a-ora
tendr+ ,ue apuntar al siguiente elemento, al de comien.o. Si el elemento ocupa
cual,uier otra posicin, tendr@ ,ue locali.ar la posicin del elemento y de su predecesor,
0<=;>4 123?1&
por,ue para desenla.arlo de la lista, el predecesor tendr+ ,ue apuntar al elemento ,ue le
sigue al nodo a !orrar.
'inalmente, una ve. desenla.ado el nodo, -a!r+ ,ue li!erar la memoria ,ue
ocupa!a. #so en cual,uier lenguaje e,uivale a -acer la operacin de li!erar memoria, y
en pseudocdigo ser8a insertar el elemento al principio de D;S0.
0rocedimiento !orrar 2entAsal com% puntero a nodoD elem% EtipoF/
6ar
Lug, lugp% puntero a nodo
;nicio
Si com J >il
#ntonces escri!ir LLista vaciaM
Sino lugp nil
Lug com
5ientras 2elem F luginfo/ y 2lug EF >il/
Lugp lug
Lug lugsig
'in mientras
Si elem EF luginfo
#ntonces escri!ir L>o e$iste el nodo a !orrarM
Sino Si lugp J >il
#ntonces com comsig
Sino lugpsig lugsig
'in si
Lugsig D;S0
D;S0 lug
'in si
'in si
'in

6. LISTAS CIRC'LARES CON CA7ECERA:
*na lista con ca!ecera, en general es una lista enla.ada simple normal, pero en
la ,ue el primer nodo es un nodo especial ,ue no sirve para guardar informacin v+lida,
sino solamente para marcar ,ue es el primer nodo.

Ca!ecera
Nay dos tipos de listas enla.adas con ca!ecera%
0<=;>4 124?1&
- Listas enla.adas con ca!ecera y tierra% #l primer nodo va a ser la ca!ecera, y
el :ltimo apunta a nil. >o se utili.a por,ue perdemos un nodo y no tienen
ventajas.
- Listas circulares con ca!ecera% Se caracteri.an por,ue tienen un nodo
ca!ecera, y adem+s el :ltimo nodo apunta al nodo ca!ecera.

#n cual,uier lista enla.ada con ca!ecera el primer nodo con informacin :til es
el siguiente a comien.o 2Comsig/.
#n una lista circular con ca!ecera, la ventaja ,ue presenta respecto a una normal,
es ,ue en las inserciones y !orrados no -ay ,ue suponer ning:n caso especial, pues
todos los nodos, incluido el primero :til, tienen un predecesor.
4l recorrer la lista completa, empe.aremos !uscando la informacin por el
siguiente a comien.o, y sa!emos ,ue -emos llegado al final de la lista cuando el
siguiente al puntero ,ue recorre la lista sea comien.o.
7Is=ue*a en una l"s#a +"!+ula! +n +aCe+e!a:
0rocedimiento !us,ueda 2com% puntero a nodoD elem%EtipoF/
6ar
0tr% puntero a nodo
;nicio
0tr comsig
5ientras 2ptrinfo EF elem/ y 2ptr EF com/
0tr ptrsig
'in mientras
Si ptrsig J com
#ntonces escri!ir L#lemento no encontradoM
'in si
'in
Inse!+"-n en una l"s#a +"!+ula! +n +aCe+e!a:
0rocedimiento insercion 2com% puntero a nodoD elem% EtipoF/
6ar
Lug,lugp,nuevo% puntero a nodo
;nicio
Si D;S0 J >il
#ntonces escri!ir L>o -ay memoriaM
Sino nuevo D;S0
D;S0 D;S0sig
>uevoinfo #lem
Lugp com
0<=;>4 12?1&
Lug comsig
5ientras 2elem F luginfo/ y 2lug EF com/
Lugp lug
Lug lugsig
'in mientras
>uevosig lug
Lugpsig nuevo
'in si
'in
7!!a* en una l"s#a +"!+ula! +n +aCe+e!a:
0rocedimiento !orrado 2com% puntero a nodoD elem%EtipoF/
6ar
Lug,lugp% puntero a nodo
;nicio
Si comJcomsig
#ntonces escri!ir LLista vaciaM
Sino lugp com
Lug comsig
5ientras 2luginfo EF elem/ y 2lug EF com/
Lugp lug
Lug lugsig
'in mientras
Si lug J com
#ntonces escri!ir L#lemento no encontradoM
Sino lugpsig lugsig
Lugsig D;S0
D;S0 lug
'in si
'in si
'in
8. LISTAS DO7LEMENTE ENLAOADAS:
Las listas enla.adas simples se caracteri.an por,ue desde un nodo solo puedo
acceder al siguiente a ese nodo, por lo ,ue solo puedo acceder al siguiente a ese nodo,
por lo ,ue solo puedo recorrer la lista en un sentido, de principio a fin.
Las listas do!les se caracteri.an por,ue 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 enla.ar un nodo con el siguiente, y otro para
enla.ar a un nodo con el nodo anterior a @l.
De esta manera, la lista la podemos recorrer en los 2 sentidos, de principio a fin,
movi@ndonos con el enlace al nodo siguiente o de fin a principio movi@ndonos con el
0<=;>4 12"?1&
enlace al nodo anterior. 0ara ,ue se pueda -acer este segundo recorrido, adem+s de una
varia!le comien.o para cada lista, ,ue contiene la direccin del primer nodo de la lista,
necesitaremos tam!i@n otra varia!le especial ,ue denominaremos fin o final, ,ue apunta
al :ltimo nodo de la lista.
Seg:n esto, la estructura de una lista do!lemente enla.ada, ser+ la siguiente%
- Cada lista tendr+ 2 varia!les, comien.o y final, del tipo puntero a nodo
do!le, ,ue contendr+n respectivamente la direccin al primer y :ltimo nodo
de la lista.
- La estructura de cada nodo ser+%
9ipo nodobdo!le% registro
;nfo% EtipoF
Sig% puntero a nodobdo!le
4nt% puntero a nodobdo!le
'in registro

;>'S
ant sig
#l campo siguiente del :ltimo nodo tendr+ valor >;L, y el campo anterior del
primer nodo tam!i@n tendr+ valor >;L, para indicar ,ue no -ay nada antes del primer
nodo.
La caracter8stica de una lista do!lemente enla.ada vac8a es ,ue el comien.o y el
final son iguales y apuntan a >;L.
Si 2com J final/ y 2com J >il/
Lista do!lemente enla.ada con un solo elemento%
Si 2com J final/ y 2com EF >il/
0<=;>4 12&?1&

0ara implementar la insercin y el !orrado de una lista do!lemente enla.ada,
vamos a suponer ,ue la lista de espacio disponi!le tiene la forma de una lista
do!lemente enla.ada.
Re+!!"* *e una l"s#a *Cle$en#e enlaPa*a:
0ara pasar por todos los nodos de la lista, podemos -acerlo igual ,ue una lista
enla.ada simple, solo ,ue a-ora la podemos recorrer la lista -acia delante con el campo
S;=, y -acia atr+s con el campo 4>9.
Re+!!"* >a+"a *elan#e:
0rocedimiento recorridobadelante 2com% puntero a nodo do!le/
6ar
0tr% puntero a nodo do!le
;nicio
0tr Comien.o
5ientras 2ptr EF >il/
_0rocesar 093.;>'S`
ptr ptrsig
fin mientras
fin

Re+!!"* >a+"a a#!5s:
0rocedimiento recorridobadelante 2com% puntero a nodo do!le/
6ar
0tr% puntero a nodo do!le
;nicio
0tr 'inal
5ientras 2ptr EF >il/
_0rocesar 093.;>'S`
ptr ptrant
fin mientras
'in
7Is=ue*a en una l"s#a *Cle$en#e enlaPa*a:
#s e$actamente igual ,ue en una lista enla.ada simple, solo ,ue a-ora puedo
!uscar el elemento !uscado desde el comien.o y movi@ndome con S;= o desde el final
y movi@ndome con 4>9.
Si tengo una idea de por donde va a estar el elemento, empe.are por donde sea
mejor.
0rocedimiento !us,ueda 2com% puntero a do!le nodoD final% puntero a do!le nodoD
elem% EtipoFD entAsal lug% puntero a do!le nodo/
6ar
0tr, lug% puntero a do!le nodo
0<=;>4 12(?1&
;nicio
Lug nil
0tr final
5ientras 2ptr EF nil/ y 2elemento F ptrinfo/
0tr ptrant
'in mientras
Si 2ptr EF nil/ y 2elemento ptrinfo/
#ntonces lug ptr
'in si
'in
Inse!+"-n en una l"s#a *Cle$en#e enlaPa*a:
Lo primero es ver si me ,ueda espacio disponi!le en memoria din+mica, si me
,ueda, reservo memoria para un nuevo elemento y meto la informacin ,ue ,uiero en su
campo de informacin, y lo siguiente es actuali.ar sus campos de enlace.
Casos particulares%
- ;nsercin al comien.o si la lista est+ vac8a.
- ;nsercin al comien.o si la lista no est+ vac8a.
- ;nsercin al final.
- ;nsercin en medio de la lista.
0rocedimiento insercion 2entAsal com% puntero a nodobdo!leD entAsal final% puntero a
nodobdo!leD elem% EtipoF/
var
lug, nuevo% puntero a nodobdo!le
;nicio
si D;S0 J >il
entonces escri!ir L>o -ay memoriaM
sino nuevo D;S0
D;S0 D;S0Sig
>uevoinfo elem
0<=;>4 12)?1&
Si com J nil
#ntonces nuevosig >;L
>uevoant >;L
Com nuevo
'inal nuevo
Sino si elem E cominfo
#ntonces nuevosig com
>uevoant nil
Comant nuevo
Com nuevo
Sino lug comsig
5ientras 2elem F luginfo/ y 2lug EF >il/
Lug lugsig
'in mientras
Si lug EF nil
#ntonces nuevosig lug
>uevoant lugant
Lugantsig nuevo
Lugant nuevo
Sino nuevosig nil
>uevoant final
'inalsig nuevo
'inal nuevo
'in si
'in si
'in si
'in si
'in
7!!a* en una l"s#a *Cle$en#e enlaPa*a:
0rimero -ay ,ue ver si la lista tiene alg:n elemento, y si tiene alg:n elemento,
-a!r+ ,ue !uscar si el elemento ,ue ,ueremos !uscar e$iste en la lista, y si e$iste, !usco
en ,ue posicin se encuentra.
Casos particulares%
- Iorrado del primer nodo.
- Iorrado del :ltimo nodo.
- Iorrado de cual,uier nodo.
Despu@s de todo esto, -a!r+ ,ue li!erar la memoria del nodo.
0rocedimiento !orrado 2entAsal com% puntero a nodobdo!leD entAsal final% puntero a
nodobdo!leD elem% EtipoF/
var
lug% puntero a nodobdo!le
inicio
si com J >il
entonces escri!ir LLista vaciaM
sino lug com
0<=;>4 13G?1&
mientras 2luginfo EF elem/ y 2lug EF nil/
lug lugsig
fin mientras
si lug J >il
entonces escri!ir L>o encontradoM
sino si lug J com
entonces com comsig
si com J >il
entonces final nil
sino comant nil
fin si
sino si lug EF final
entonces lugantsig lugsig
lugsigant lugant
sino lugantsig nil
final lugant
fin si
fin si
lugsig D;S0
D;S0 lug
fin si
fin si
fin
;. PILAS:
*na pila es una estructura lineal de datos con la caracter8stica especial de ,ue
a-ora, no podemos -acer las inserciones y las eliminaciones en cual,uier lugar, sino ,ue
o!ligatoriamente las tenemos ,ue -acer por un e$tremo de la lista. #se e$tremo lo
llamamos cima de la pila.
#sto supone ,ue se procesen los elementos de la pila en orden inverso a su
entrada en la estructura, es decir, el primer elemento de la pila ,ue usare ser+ el :ltimo
,ue -a entrado 2L;'S/.
Con una pila podemos -acer dos operaciones !+sicas, 0*SN 2meter/ y 0S0
2sacar/.
4parte de estas dos funciones se pueden definir otras como la de pila vac8a o
top, ,ue me dice cual es elemento ,ue est+ en la cima de la pila pero sin sacarlo.
Se puede implementar con memoria est+tica 2arrays/ o con memoria din+mica
2listas enla.adas/.
Si utili.o un array, tendr@ ,ue definir cual es el tama7o m+$imo del array, ,ue
ser+ el de la pila, y aparte tendr@ definida una varia!le cima ,ue tendr+ en cada
momento el 8ndice ,ue corresponde al elemento del array ,ue est+ en la cima de la pila.
0ila J array O1..ma$bpilaP de EinfoF
Cima% entero
0ara se7alar ,ue la cima est+ vac8a, cima es igual a G por,ue no tiene ,ue
apuntar a ning:n elemento.
I$)le$en#a+"-n *e una )"la +n $e$!"a es#5#"+a:
4lgoritmo prinbpila
0<=;>4 131?1&
Const
5a$bpila J Ema$bpilaF
6ar
0% array O1..ma$bpilaP de EinfoF
C% entero
#lem% EinfoF
;nicio
C G
Leer 2elem/
Si pilabvacia 2C/ J verdadero
#ntonces escri!ir L0ila vaciaM
Sino sacar 2pila,c,elem/
#scri!ir L#lemento sacadoMelem
'in si
'in
'uncion pilabvacia 2cima% entero/% !ooleano
;nicio
Si cima J G
#ntonces retorno verdadero
Sino retorno falso
'in si
'in
0rocedimiento meter 2entAsal pila% arrayO1..ma$bpilaP de EinfoFD cima% enteroD
elem%EinfoF/
;nicio
si cima J ma$bpila
entonces escri!ir L0ila llenaM
sino cima cima B 1
pilaOcimaP elem
fin si
'in
'uncion cimabpila 2pila% arrayO1..ma$bpilaP de EinfoFD cima% entero/%EinfoF
;nicio
3etorno pilaOcimaP
'in
0rocedimiento sacar 2entAsal pila% arrayO1..ma$bpilaP de EinfoFD cima% enteroD
entAsal e% EinfoF/
;nicio
# cimabpila 2cima,pila/
Cima cima g 1
'in
0<=;>4 132?1&
I$)le$en#a+"-n *e una )"la +n $e$!"a *"n5$"+a:
9ipo nodo% registro
;nfo% EtipoF
Sig% puntero a nodo
'in registro
4lgoritmo manejobpila
6ar
Cima% puntero a nodo
#lem% EtipoF
;nicio
Cima nil
5eter 2cima,elem/
Si pilabvacia 2cima/
#ntonces escri!ir L>o -ay memoriaM
Sino sacar 2cima,elem/
#scri!ir L#lemento sacadoMelem
'in si
'in
'uncion pilabvacia 2cima% puntero a nodo/% !ooleano
;nicio
Si cima J nil
#ntonces retorno verdadero
Sino retorno falso
'in si
'in
0rocedimiento poner 2entAsal cima% puntero a nodoD elem% EtipoF/
6ar
>uevo% puntero a nodo
;nicio
Si D;S0 J nil
#ntonces escri!ir L>o -ay memoriaM
Sino nuevo D;S0
D;S0 D;S0sig
>uevoinfo elem
>uevosig cima
Cima nuevo
'in si
'in
'uncion cimabpila 2cima% puntero a nodo/%EtipoF
;nicio
3etorno cimainfo
'in
0rocedimiento sacar 2entAsal cima% puntero a nodoD entAsal elem% EtipoF/
6ar
0<=;>4 133?1&
Iorrado% puntero a nodo
;nicio
#lem cimabpila 2cima/
Iorrado cima
Cima cimasig
Iorradosig D;S0
D;S0 !orrado
'in
A)l"+a+"nes *e las )"las:
*n ejemplo t8pico de uso de pilas, es en las llamadas entre funciones. #n este
caso, el sistema operativo utili.a una pila en donde va guardando la direccin de retorno
de cada una de estas llamadas.
<. COLAS:
*na cola tam!i@n es una lista lineal de elementos, en la ,ue las inserciones se
-acen por un e$tremo de la lista, y los !orrados por otro. Las inserciones se -acen por el
final y los !orrados por el principio.
#sto significa ,ue es una estructura del tipo ';'S.
Sea cual sea la implementacin, siempre tendr+n ,ue e$istir 2 varia!les, frente y
final, ,ue apunten al comien.o y al fin de la cola respectivamente.
0odemos implementar una cola con memoria est+tica 2arrays/ y con memoria
din+mica 2listas enla.adas/.
Si implementamos la cola con arrays, tendremos un array llamado cola, ,ue
contiene el tipo de informacin ,ue contiene la cola, y aparte dos valores, frente y final,
cuyo valor servir+ como el 8ndice ,ue indica ,ue elemento est+ al frente y al final de la
cola.
La cola estar+ vac8a cuando frente y final no apunten a ning:n 8ndice del array, y
esto ser+ cuando frente y final valgan G si el array se empie.a a numerar a partir del 1.
4parte de la funcin ,ue me dice si la cola est+ vac8a, tendr@ ,ue implementar
funciones de sacar y meter un elemento.
0ara insertar un elemento en una cola, -a!r8a ,ue incrementar el valor en la
varia!le final, y despu@s introducir en la cola del final el elemento.
0ara eliminar un elemento de una cola, !astar8a primero ver ,ue elemento est+ al
frente de la cola, y para eliminarlo aumentar el frente en una unidad.
Si solo consideramos esta posi!ilidad, es decir, manejar el array solo
incrementando, no lo estar8amos utili.ando eficientemente, por,ue podr8amos llegar al
caso en ,ue -a!iendo posiciones li!res al comien.o del array no pudi@semos usarlas
cuando el final alcan.ase el m+$imo 8ndice del array.
0ara evitar esto, el array ,ue implementa la cola, lo vamos a tratar como un array
circular 2suponemos ,ue despues de la posicin > del array, viene la posicin 1/. #sto
,uiere decir ,ue si la cola no est+ llena, despu@s de final J 5a$, viene final J 1, y al
sacar el elemento de la cola, si no est+ vac8a, despu@s de frente J >, vendr+ frente J 1, y
si despu@s de sacar el elemento la cola ,ueda vac8a, actuali.aremos frente y final a G.
Si frente es igual a final y son distintos de G antes de sacar un elemento, ,uiere
decir ,ue ese elemento es el :ltimo.
0<=;>4 134?1&
4ntes de insertar un elemento, tendr@ ,ue ver si la cola est+ llena 2frente J 1 y
final J 5a$ o frente J final B 1/.
I$)le$en#a+"-n *e +las +n $e$!"a es#5#"+a:
9ipo datos% array O1..ma$bcolaP de EtipoF
4lgoritmo manejobcola
6ar
Cola% datos
'rente, final% entero
#lem, result% EtipoF
;nicio
'rente G
'inal G
5eterbcola 2frente,final,cola,elem/
Si colabvacia 2frente,final/ J verdadero
#ntonces escri!ir LCola vac8aM
Sino sacarbcola 2frente,final,cola,result/
#scri!ir L#lemento sacadoMresult
'in si
'in
'uncion colabvacia 2frente% enteroD final% entero/% !oolean
;nicio
Si 2frente J G/ y 2final J G/
#ntonces retorno verdadero
Sino retorno falso
'in si
'in
0rocedimiento meterbcola 2entAsal cola%datosD entAsal frente%enteroD entAsal final%enteroD
#lem% EtipoF/
;nicio
Si 22frente J 1/ y 2final J 5a$bcola// o frente J final B 1
#ntonces escri!ir LCola llenaM
Sino si colabvacia 2frente,final/ J verdadero
#ntonces frente 1
0<=;>4 13?1&
'inal 1
Sino si final J 5a$bcola
#ntonces final 1
Sino final final B 1
'in si
'in si
ColaOfinalP elem
'in si
'in
0rocedimiento sacarbcola 2entAsal cola%datosD entAsal frente%enteroD entAsal final%enteroD
#lem% EtipoF/
;nicio
#lem colaOfrenteP
Si frente J final
#ntonces frente G
'inal G
Sino si frente J 5a$bcola
#ntonces frente 1
Sino frente frente B 1
'in si
'in si
'in
I$)le$en#a+"-n *e +las +n $e$!"a *"n5$"+a:
'uncion colabvacia 2com% puntero a nodobdo!le/% !ooleano
;nicio
Si com J nil
#ntonces retorno verdadero
Sino retorno falso
'in si
'in
0rocedimiento meterbcola 2entAsal com% puntero a nodobdo!leD
entAsal final% puntero a nodobdo!leD elem% EtipoF/
var
nuevo% puntero a nodobdo!le
;nicio
Si D;S0 J nil
0<=;>4 13"?1&
#ntonces escri!ir L>o -ay memoriaM
Sino nuevo D;S0
D;S0 D;S0sig
>uevoinfo elem
>uevoant final
>uevosig nil
'inalsig nuevo
'inal nuevo
Si colabvacia 2frente/ J verdadero
#ntonces frente nuevo
'in si
'in si
'in
0rocedimiento sacarbcola 2entAsal com% puntero a nodobdo!leD
entAsal final% puntero a nodobdo!leD result% EtipoF/
var
ptr% puntero a nodobdo!le
;nicio
3esult cominfo
0tr com
Com comsig
Si com J nil
#ntonces final nil
Sino comant nil
'in si
0trsig D;S0
D;S0 ptr
'in
A)l"+a+"nes *e las +las:
Las colas se suelen utili.ar en los procesos por lotes y en la utili.acin de
recursos del sistema.
Cuando un proceso ,uiere usar un recurso y otro lo est+ usando, tendr+ ,ue
ponerse en la cola, y se ir+ asignando el recurso seg:n el orden en ,ue se -a pedido.
4 veces, la utili.acin de recursos por parte de los procesos, nos interesa ,ue
ciertos procesos tengan mayor prioridad ,ue otros, incluso aun,ue lleguen m+s tarde, y
para ello utili.ar8amos las colas de prioridades.
Cada elemento de la cola, tendr+ otro campo ,ue indi,ue su prioridad, tal ,ue a
la -ora de sacar un elemento de la cola, saco el del frente, y a la -ora de insertar un
elemento en la cola, tendr@ en cuenta la prioridad del elemento ,ue ,uiero insertar, y
para ello se inserta en la cola por orden de prioridad, y si -ay mas elementos ,ue tienen
la misma prioridad ,ue el ,ue ,ueremos insertar, los procesamos seg:n su orden de
llegada, es decir, ,ue 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 ,ue las inserciones y !orrados
es pueden -acer por cual,uiera de sus e$tremos.
6a a -a!er 2 varia!les, i.,uierda y derec-a, ,ue apuntan a sus e$tremos.
Nay 2 tipos especiales de !icolas%
0<=;>4 13&?1&
- De entrada restringida% Kue permite inserciones solo por un e$tremo y
!orrados por los dos.
- De salida restringida% Kue permite inserciones por cual,uier e$tremo y
!orrado solo por uno.
Se pueden implementar con memoria est+tica o din+mica.
EJERCICIOS: TEMA 11
1. Dise7ar un algoritmo ,ue colo,ue el primer nodo de una lista enla.ada como
pen:ltimo, pero cam!iando solo los campos enlace. La lista es una lista enla.ada
do!le.
0<=;>4 13(?1&
0rocedimiento resultado 2entAsal com% ptrba nodoD entAsal final% ptrba nodo/
6ar
0rin% puntero a nodo
;nicio
Si 2com J final/ o 2comsig J final/
#ntonces escri!ir L>o se puede -acer el cam!ioM
Sino prin com
Comsig final
Comant finalant
'inalantsig com
'inalant com
Com prinsig
Comant nil
'in si
'in
2. Dada una cadena de caracteres C1, en un array de longitud m+$ima >, y con el fin
de cadena QiR, y dada otra cadena C2 almacenada en una lista enla.ada simple, ,ue
cada nodo de la lista contiene una letra. Se trata de ,ue pasandole a un su!programa
2 cadenas, determinar cuantas veces aparece C1 en C2.
'uncion compara 2c1% cadenaD c2% ptrba nodo/% entero
6ar
;ni,p% puntero a nodo
;,res% entero
;nicio
3es G
0 C2
5ientras 2pEF nil/
Si 2pinfo J c1OiP/
#ntonces ini 0
; 1
5ientras 2pinfo J c1OiP/ y 2c1OiP EF QiR/ y 2p EF nil/
; i B 1
0 psig
'in mientras
Si c1OiP J QiR
#ntonces res res B 1
Sino p inisig
'in si
Sino p psing
'in si
'in mientras
'in


3. Dada una lista do!lemente enla.ada ,ue contiene en cada nodo un d8gito decimal
2G..)/, determinar el valor ,ue se o!tiene si consideramos la informacin de cada
nodo de la lista como los t@rminos de un polinomio, donde el t@rmino de menor
0<=;>4 13)?1&
grado es el :ltimo nodo y el de m+$imo grado es el del comien.o, evaluando el
polinomio para un valor ,ue se le pasa como par+metro.
'uncion pot 2!ase% enteroD e$p% entero/% real
6ar
;% entero
4cum% real
;nicio
4cum 1
Desde i J 1 -asta e$p
4cum acum C !ase
'in desde
3etorno acum
'in
'uncion polinomio 2fin% ptrba nodobdo!leD $% entero/% real
6ar
3es% real
0% puntero a nodobdo!le
;nicio
#$p G
3es G
0 final
5ientras p EF nil
3es res B 2cinfo C pot 2$,e$p/
0 pant
#$p e$p B 1
'in mientras
3etorno res
'in
4. 9enemos almacenado en un fic-ero de productos el stocH de cada uno de ellos en el
almac@n. Cada registro tiene identificador, nom!re, stocH actual y stocH m8nimo.
;terativamente, -asta ,ue se introdu.ca un identificador de producto igual a G, se
0<=;>4 14G?1&
ir+n -aciendo pedidos o entregas pidi@ndonos el identificador, la cantidad y si es
pedido o entrega, y con ellos iremos actuali.ando la cantidad de productos en
almac@n. 4l final ,uiero tener el fic-ero actuali.ado. 0ara ello, utili.aremos una lista
enla.ada como estructura au$iliar.
9ipo producto% registro
;ndentificador% entero
>om!re% cadena
StocHbact% entero
StocHbmin% entero
'in registro
>odo% registro
;nfo% producto
Sig% puntero a nodo
'in registro
6ar
Com, ptr% puntero a nodo
3eg% producto
'ic-% fic-ero de producto
;d,cant% entero
Car% car+cter
;nicio
Com nil
4!rir 2fic-,Mdatos.datM,entrada/
Leer 2fic-,reg/
5ientras no eof 2fic-/
;nsertar 2com,reg/
Leer 2fic-,reg/
'in mientras
Cerrar 2fic-/
#scri!ir L;dentificadorM
Leer 2id/
5ientras id EF G
#scri!ir LCantidadM
Leer cant
#scri!ir L0edido?#ntregaM
Leer car
5odifica 2com,id,cant,car/
#scri!ir L;dentificadorM
Leer id
'in mientras
4!rir 2fic-,Mdatos.datM,salida/
0tr com
5ientras com EF nil
#scri!ir 2fic-,cominfo/
Com comsig
0<=;>4 141?1&
0trsig D;S0
D;S0 ptr
0tr com
'in mientras
Cerrar 2fic-/
'in
0rocedimiento insertar 2entAsal com% puntero a nodoD elem% producto/
6ar
Lug,lugp,nuevo% puntero a nodo
;nicio
Si D;S0 J >il
#ntonces escri!ir L>o -ay memoriaM
Sino nuevo D;S0
D;S0 D;S0Sig
>uevoinfo elem
Si com J nil
#ntonces nuevosig com
Com nuevo
Sino lugp com
Lug comsig
5ientras 2elem.identificador F luginfo/ y 2lug EF nil/
Lugp lug
Lug lugsig
'in mientras
>uevosig lug
Lugpsig nuevo
'in si
'in si
'in
0rocedimiento modifica 2prim% ptrba nodoD d% enteroD c% enteroD caract% car+cter/
6ar
0<=;>4 142?1&
0tr% puntero a nodo
;nicio
Si prin J nil
#ntonces escri!ir LLista vaciaM
Sino ptr prin
5ientras 2ptr EF nil/ y 2id EF ptrinfo.identificador/
0tr ptrsig
'in mientras
Si ptr J nil
#ntonces escri!ir L#l producto no e$isteM
Sino si 2caract J Q0R/ o 2caract J QpR/
#ntonces ptrinfo.cantidad ptrinfo.cantidad B c
Sino si ptrinfo.cantidad FJ c
#ntonces ptrinfo.cantidad ptrinfo.cantidad g c
Sino escri!ir L>o -ay cantidad suficienteM
'in si
'in si
'in si
'in si
'in
0<=;>4 143?1&
. Dadas 2 listas enla.adas simples, L1 y L2, ordenadas en ascendente, actuali.ar las 2
listas de modo ,ue L2 ,uede vac8a y L1 contenga a todos los elementos de L2,
menos a los repetidos. >o !orrar elementos, -ay ,ue enla.arlos.
0rocedimiento juntar 2entAsal com1% ptrba nodoD entAsal com2% ptrba nodo/
6ar
01,a1, au$, !orrado% puntero a nodo
;nicio
Si com2 EF nil
#ntonces si com1 J nil
#ntonces com1 com2
Sino si 2com2info E com1info/ y 2com2 EF nil/
#ntonces au$ com2
Com2 com2sig
4u$sig com1
Com1 au$
Sino a1 com1
01 com1sig
5ientras 2p1 EF nil/ y 2com2 EF nil/
Si 2com2info E p1info/
#ntonces a1 p1
01 p1sig
Sino si 2com2info J p1info/
#ntonces !orrado com2
Com2 com2sig
Iorradosig D;S0
D;S0 !orrado
Sino au$ com2
41sig com2
Com2sig 01
Com2 au$sig
41 a1sig
'in si
'in si
'in mientas
Si com2 EF nil
#ntonces a1sig com2
Com2 nil
'in si
'in si
'in si
'in si
'in
0<=;>4 144?1&
". ;mplementar una cola usando listas enla.adas simples%
0rocedimiento meter 2entAsal com% ptrba nodoD entAsal final% ptrba nodoD e% EtipoF/
6ar
>uevo% ptrba nodo
;nicio
Si D;S0 J nil
#ntonces escri!ir L>o -ay memoriaM
Sino nuevo D;S0
D;S0 D;S0sig
>uevosig >il
Si com J nil
#ntonces com nuevo
'inal nuevo
Sino finalsig nuevo
'inal nuevo
'in si
'in si
'in
0rocedimiento sacar 2entAsal com%ptrba nodoD entAsal final%ptrba nodoD entAsal e%EtipoF/
6ar
Iorrado% puntero a nodo
;nicio
# cominfo
Iorrado com
Com comsig
Si com J nil
#ntonces final nil
'in si
Iorradosig D;S0
D;S0 !orrado
'in
0<=;>4 14?1&
&. ;mplementar una cola de prioridades con listas enla.adas simples%
0rocedimiento meter 2entAsal com% ptrba nodoD e% EtipoFD p% entero/
6ar
Lugp, lug, nuevo% puntero a nodo
;nicio
Si D;S0 J nil
#ntonces escri!ir L>o -ay memoriaM
Sino nuevo D;S0
D;S0 D;S0sig
>uevoinfo e
>uevoprioridad p
Lugp nil
Lug com
5ientras 2lug EF nil/ y 2p FJ lugprior/
Lugp lug
Lug lugsig
'in mientras
Si lugp J nil
#ntonces nuevosig com
Com nuevo
Sino lugpsig nuevo
>uevosig lug
'in si
'in si
'in
0rocedimiento sacar 2entAsal com%ptrba nodoD entAsal e%EtipoF/
6ar
Iorrado% puntero a nodo
;nicio
# cominfo
Iorrado com
Com comsig
Iorradosig D;S0
D;S0 !orrado
'in
0<=;>4 14"?1&
(. ;mplementar una cola de prioridades como lista de listas%
9ipo nodobprior% registro
0rior% entero
0rinp% ptrba nodobinfo
Sig% ptrba nodobpr
'in registro
>odobinfo% registro
;nfo% EtipoF
#nl% ptrba nodobinfo
'in registro
0rocedimiento meter 2entAsal com%ptrba nodobpriorD elem%EtipoFD p% entero/
6ar
>uevoi, lugi% puntero a nodobinfo
>uevop, ptr, ptra% puntero a nodobprior
;nicio
Si 2D;S00 J nil/ y 2D;S0; J nil/
#ntonces escri!ir L>o -ay memoriaM
Sino nuevoi D;S0;
D;S0; D;S0;enl
>uevoiinfo elem
>uevosig >;L
0tra nil
0tr com
5ientras 2ptr EF nil/ y 2p F ptrprior/
0tra ptr
0tr ptrsig
'in mientras
Si 2p J ptrprior/
#ntonces lugi ptrprinp
5ientras 2lugisig EF nil/
Lugi lugienl
'in mientas
Lugisig nuevo
Sino nuevop D;S00
D;S00 D;S00sig
>uevopprior p
>uevopsig ptr
>uevopprinp nuevoi
Si 2ptra J nil/
#ntonces com nuevop
Sino ptrasig nuevop
'in si
'in si
0<=;>4 14&?1&
'in si
'in
0rocedimiento sacar 2entAsal com% ptrba nodobpriorD entAsal e%EtipoF/
6ar
Iori% ptrba nodobinfo
Iorp% ptrba nodobprior
;nicio
# comprinpinfo
Iori comprinp
Comprinp comprinpenl
Iorienl D;S0;
Si comprinp J nil
#ntonces !orp com
Com comsig
Iorpsig D;S00
D;S00 !orp
'in si
'in

0<=;>4 14(?1&

9RBOLES Y GRAFOS:
ESTRUCTURAS DE DATOS NO LINEALES:
TEMA 12
1. <r!oles.
2. <r!oles !inarios.
3. <r!oles !inarios de !:s,ueda.
4. 4plicaciones de los +r!oles !inarios.
. =rafos.
". Speraciones con grafos.
&. 4plicaciones de los grafos.
1. @R7OLES:
Los +r!oles est+n dentro de las estructuras de datos no lineales, ,ue consisten en
,ue desde un nodo tengo acceso a varios elementos.
*n +r!ol es un conjunto finito de elementos llamados nodos, ,ue guardan entre
s8 una relacin jer+r,uica tal ,ue siempre va a e$istir un nodo ra8. diferenciado del
resto, y los restantes parten de @l, formando conjuntos disjuntos cada uno de los cuales
es a su ve. otro +r!ol. 4 cada uno de esos +r!oles se les llama su!+r!oles del ra8..
*n +r!ol vac8o es a,uel ,ue no tiene ning:n nodo 23ai. J >;L/.
4
I ' L
C D # = N
; c h
Te!$"nlgBa *e ls 5!Cles:
- 3a8.% >odo esencial de ,ue parten todos los dem+s. #s el :nico ,ue no tiene
antecesor.
- >odo% Cada uno de los elementos del +r!ol.
- Noja o nodo terminal% >odo ,ue no tiene ning:n otro su!+r!ol de!ajo de @l.
- Nijo% Cada nodo ,ue no es -oja tiene de!ajo de @l a otros su!+r!oles.
- 0adre% 9odo nodo e$cepto el ra8., ,ue tiene asociado un predecesor del ,ue
desciende.
- Nermano% 3elacin entre los nodos -ijos del mismo padre.
- >odo interno% #l ,ue tiene alg:n -ijo.
- >ivel% Cada nodo de un +r!ol tiene asociado un n:mero de nivel. #l del ra8. es el G,
y a partir de a-8 se va aumentando de 1 en 1.
0<=;>4 14)?1&
- Camino entre 4 y I% Sucesin de enlaces o nodos por los ,ue -ay ,ue pasar para
llegar de 4 a I.
- 3ama% Camino ,ue termina en una -oja.
- 0rofundidad de un +r!ol% #s el n:mero m+$imo de nodos de la rama m+s larga del
+r!ol. #,uivale al n:mero m+$imo de niveles B 1.
- 0eso% >:mero de -ojas ,ue tiene un +r!ol.
- Ios,ue% Coleccin de 2 o m+s +r!oles.
2. @R7OLES 7INARIOS:
Son un conjunto finito de elementos llamados nodos ,ue contienen un nodo ra8.
y donde cada nodo puede tener G,1, 2 -ijos. 4 cada su!ar!ol se le denomina su!ar!ol
i.,uierdo y su!ar!ol derec-o.
Te!$"nlgBa:
- Dos +r!oles !inarios son similares si tienen los nodos colocados igual.
- <r!oles !inarios e,uivalentes o copias% 9ienen la misma estructura y los mismos
contenidos.
- <r!oles !inarios e,uili!rados% 4,uellos ,ue en la altura entre su +r!ol i.,uierdo y
derec-o se diferencian como m+$imo en una unidad.
- <r!oles !inarios completos% 4,uellos en ,ue cada nodo del +r!ol tiene G 2 -ijos,
el n:mero m+$imo de -ijos de un determinado nivel i ser+ 2 elevado a i.
- <r!ol lleno% Cuando todos los niveles est+n completos.
Re)!esen#a+"-n *e 5!Cles C"na!"s:
Se pueden representar con memoria est+tica o din+mica. Con memoria din+mica
la estructura de un nodo va a tener el campo info y otros 2 nodos ,ue refer@ncien al -ijo
i.,uierdo y derec-o de cada nodo.
Re)!esen#a+"-n *e 5!Cles C"na!"s +n )un#e!s:
Cada nodo va a tener un registro ,ue contiene el campo de informacin y 2
campos de tipo puntero.
;>'S
;^K D#3

9ipo nodobar!ol% registro
;nfo% EtipoF
;.,,der% ptrba nodobar!ol
'in registro
4 parte de los nodos, los +r!oles tienen una varia!le especial llamada ra8., ,ue
es de tipo puntero a nodobar!ol y apunta al nodo ,ue est+ al comien.o del +r!ol.
3ai.
0<=;>4 1G?1&
D;S0b43 va a ser una lista enla.ada simple en la ,ue las inserciones y !orrados
los -acemos por el comien.o y como campo de enlace vamos a usar el nodo i.,uierdo.
Re+!!"* *e ls 5!Cles C"na!"s:
#s pasar por todos sus nodos. 0ara recorrer un +r!ol lo podemos -acer de 3
formas, seg:n el momento en el ,ue procesemos el nodo ra8.. Las 3 formas se llaman %
0reorden, ;norden, 0osorden.
#n cual,uiera de las tres, siempre se recorre primero el su!+r!ol i.,uierdo, y
luego el derec-o, y se diferencian en el momento en el ,ue recorremos el ra8..
- 0reorden% La ra8. se procesa primero, luego el i.,uierdo y luego el derec-o.
- ;norden% 0rimero la ra8., luego el i.,uierdo y luego el derec-o.
- 0osorden% 0rimero el i.,uierdo, luego el derec-o y luego la ra8..
0reorden% 4, I, D, #, =, C, '
;norden% D, I, #, =, 4, ', C
0osorden% D, =, #, I, ', C, 4
4 Re+!!"* *e un 5!Cl C"na!":
Los ar!oles son estructuras recursivas, por lo ,ue los algoritmos m+s eficientes
con +r!oles son los recursivos.
0rocedimiento preorden 2rai.% ptrba nodobar/
;nicio
Si rai. EF nil
#ntonces _procesar rai.info/
0reorden 2rai.i.,/
0reorden 2rai.der/
'in si
'in
0rocedimiento inorden 2rai.% ptrba nodobar/
;nicio
Si rai. EF nil
#ntonces inorden 2rai.i.,/
_procesar rai.info/
inorden 2rai.der/
'in si
'in
0rocedimiento posorden 2rai.% ptrba nodobar/
;nicio
Si rai. EF nil
#ntonces posorden 2rai.i.,/
0osorden 2rai.der/
0<=;>4 11?1&
_procesar rai.info/
'in si
'in
9am!i@n se puede recorrer un +r!ol !inario con un algoritmo no recursivo%
4lgoritmo inorden
6ar
0ila% arrayO1..5a$P de puntero a nodobar
Cima% entero
3ai., ptr% puntero a nodobar
;nicio
Cima 1
0ilaOcimaP >il
0tr rai.
5ientras 2ptr EF nil/
Cima cima B 1
0ilaOcimaP ptr
0tr ptri.,
'in mientras
0tr pilaOcimaP
Cima cimaA1
5ientras 2ptr EF nil/
_procesar ptrinfo`
si ptrder EF nil
entonces ptr ptrder
mientras ptr EF nil
cima cima B 1
pilaOcimaP ptr
ptr ptri.,
fin mientras
fin si
ptr pilaOcimaP
cima cima g 1
fin mientras
'in

&. @R7OLES 7INARIOS DE 7RSQ'EDA:
Son un tipo especial de +r!oles !inarios ,ue se caracteri.a por,ue los elementos
del +r!ol son todos distintos y adem+s est+n colocados de tal manera ,ue el recorrido en
;norden de ese +r!ol da lugar a ,ue los elementos se procesen ordenados seg:n un
determinado campo de informacin, para ello es necesario ,ue todos los nodos del +r!ol
cumplan la siguiente regla% Kue todo lo ,ue est+ a la i.,uierda de un nodo tenga un
valor menor ,ue el resto del nodo, y todo lo ,ue esta a la derec-a tenga un valor mayor.
2
1( 3
0<=;>4 12?1&

12 22 3G 3(

11 1 21 32 3& 4G

14 1"

3ecorrido inorden% 11,12,14,1,1",1(,21,22,2,3G,32,3,3&,3(,4G.
4 7Is=ue*a *e un ele$en#:
Dado un elemento, mirar si se encuentra o no en el +r!ol, voy a devolver un
puntero a ese elemento y a su padre.
0rocedimiento !uscar 2rai.% ptrba nodobarD entAsal act% ptrba nodobarD
entAsal pad% ptrba nodobarD e%EtipoF/
;nicio
0ad >il
4ct rai.
5ientras 2act EF nil/ y 2actinfo EF e/
0ad act
Si 2e E actinfo/
#ntonces act acti.,
Sino act actder
'in si
'in mientras
Si act EF nil
#ntonces escri!ir L#lemento encontradoM
Sino escri!ir L#lemento no encontradoM
'in si
'in
4 Inse!+"-n en un 5!Cl C"na!":
0rimero -ay ,ue ver ,ue no -aya otro elemento igual en el +r!ol, y despu@s
-a!r+ ,ue colocar el elemento a la i.,uierda de su padre si es menor ,ue @l o al derec-a
si es mayor.
Alg!"#$ n !e+u!s"/:
0rocedimiento insercion 2entAsal rai.% ptrba nodobarD elem%EtipoF/
6ar
0tr,pad,nuevo% ptrba nodobar
;nicio
Iuscar 2rai.,ptr,pad,elem/
Si ptr EF nil
#ntonces escri!ir L#l elemento ya e$isteM
Sino si D;S0 J >il
#ntonces escri!ir L>o -ay memoriaM
Sino nuevo D;S0
D;S0 D;S0;^K
>uevoinfo elem
>uevoi., nil
>uevoder nil
Si 04D J nil
0<=;>4 13?1&
#ntonces rai. nuevo
Sino si elem E padinfo
#ntonces padi., nuevo
sino 0adder nuevo
fin si
fin si
fin si
fin si
'in
Alg!"#$ !e+u!s"/:
0rocedimiento insercion 2entAsal ptr% ptrba nodobarD elem%EtipoF/
;nicio
Si ptr EF nil
#ntonces si elem E ptrinfo
#ntonces insercion 2ptri.,,elem/
Sino si elem F ptrinfo
#ntonces insercion 2ptrder,elem/
Sino escri!ir L#l elemento ya e$isteM
'in si
'in si
Sino ptr D;S0
D;S0 D;S0i.,
0trinfo elem
0tri., nil
0trder nil
'in si
'in
4 7!!a* en un 5!Cl C"na!":
Si el nodo a !orrar slo tiene un -ijo, lo sustituimos por ese y ya se aca!o. 0ero
si el nodo a !orrar tiene 2 -ijos, -ay ,ue !uscar cual es el sucesor de ese nodo 2estar+ a
la derec-a del m+s a la i.,uierda/ y el padre de ese sucesor. Sustituir el nodo a !orrar
por su sucesor. 4l final -ay ,ue poner como -ijos del sucesor 2,ue es el ,ue -a
sustituido al nodo !orrado/ a los -ijos del nodo !orrado.
A Alg!"#$ n !e+u!s"/:
0rocedimiento !orrar 2entAsal rai.% ptrba nodobarD elem%EtipoF/
6ar
0tr, pad% ptrba nodobar
;nicio
Iuscar 2rai.,ptr,pad,elem/
Si ptr J nil
#ntonces escri!ir L#l elemento no e$isteM
Sino si 2ptri., EF nil/ y 2ptrder EF nil/
#ntonces !orrarb2b- 2rai.,ptr,pad/
Sino !orrarbG1b- 2rai.,ptr,pad/
'in si
0tri., D;S0
0<=;>4 14?1&
D;S0i., ptr
'in si
'in
0rocedimiento !orrarb2b- 2entAsal rai.% ptrba nodobarD entAsal% ptrba nodobarD
pad% ptrba nodobar/
6ar
Suc,padsuc,-ijosuc% ptrba nodobar
;nicio
0adsuc ptr
Suc ptrder
5ientras suci., EF nil
0adsuc suc
Suc suci.,
'in mientras
Nijosuc sucder
Si padsuci., J suc
#ntonces padsuci., -ijosuc
Sino padsucder -ijosuc
'in si
Si pad J nil
#ntonces rai. suc
Sino si padi., J ptr
#ntonces padi., suc
Sino padder suc
'in si
'in si
Suci., ptri.,
Sucder ptrder
'in
0rocedimiento !orrarbG1b- 2entAsal rai.% ptrba nodobarD entAsal ptr% ptrba nodobarD
0ad% ptrba nodobar/
6ar
Nijo% ptrba nodobar
;nicio
Si ptri., EF nil
#ntonces -ijo ptri.,
Sino -ijo ptrder
'in si
Si pad J nil
#ntonces rai. -ijo
0<=;>4 1?1&
Sino si ptr J padi.,
#ntonces padi., -ijo
Sino padder -ijo
'in si
'in si
'in
4 Alg!"#$ !e+u!s"/:
0rocedimiento !orrar 2ptr% ptrba nodobarD elem%EtipoF/
;nicio
Si ptr EF nil
#ntonces si elem E ptri.,
#ntonces !orrar 2ptri.,, elem/
Sino si elem F ptrder
#ntonces !orrar 2ptrder, elem/
Sino si ptri., J >il
#ntonces ptr ptri.,
Sino si ptrder J >il
#ntonces ptr ptri.,
Sino eliminar 2ptrder, ptr/
'in si
'in si
'in si
0tri., D;S0
D;S0 ptr
'in si
Sino escri!ir L#l nodo no e$isteM
'in si
'in
0rocedimiento eliminar 2entAsal suc% ptrba nodobarD entAsal ptr% ptrba nodobar/
;nicio
Si suci., EF nil
#ntonces eliminar 2suci.,, ptr/
Sino ptrinfo sucinfo
0tr suc
'in si
'in
0. APLICACIONES DE LOS @R7OLES 7INARIOS:
- *na de las aplicaciones m+s importantes es dentro de la inteligencia artificial, y m+s
concretamente en el +rea de reconocimiento de patrones.
0<=;>4 1"?1&
Se trata de utili.ar los +r!oles para reali.ar clasificaciones. La clave est+ en asignar
a cada nodo del +r!ol un significado y a cada rama, una respuesta ,ue nos ayude a
determinar el sentido de la !:s,ueda.
- 9ransformacin de una notacin alge!raica a otra% 0refija, infija, posfija
2Ba!,aB!,a!B/. 0ara ello la ra8. del +r!ol de!e de ser un signo y para las ramas o
su!+r!oles, otra e$presin o un operando.
- 0ara implementar el algoritmo de Nodman de compresin y codificacin.
6. GRAFOS:
#l grafo es una estructura de datos no lineal, tal ,ue a-ora desde un nodo
podemos apuntar a varios, pero a su ve. un nodo puede ser apuntado desde otros.
Te!$"nlgBa *e ls g!aFs:
*n grafo se compone por un conjunto 6 de v@rtices y un conjunto 4 de aristas.
Cada arista se identifica con un par de v@rtices ,ue indican los v@rtices a los ,ue une la
arista. Los v@rtices de una arista son entre s8 nodos adyacentes.
- =rado de un nodo% >:mero de aristas ,ue contiene a ese nodo.
- =rado de un grafo% >:mero de v@rtices de ese grafo. Si el grado de un nodo es G, se
dice ,ue es un nodo aislado.
- Camino% *n camino C de longitud > de un nodo 61 a un nodo 62, se define como
la secuencia de nodos por los ,ue -ay ,ue pasar para llegar del nodo 61 a 62. La
longitud de ese camino es el n:mero de aristas ,ue comprende ese camino.
#l camino es cerrado si empie.a y termina en el mismo nodo. #l camino es simple si
todos los nodos de dic-o camino son distintos a e$cepcin de los de los e$tremos
,ue pueden ser iguales.
2

1 3 C 21,"/
4 1,4," Caminos simples
" 1,4,,"
1,4,3,4,,"
4ristas especiales%
- Iucles% #s una arista cuyos e$tremos son id@nticos.
- 4rista m:ltiple% Dos o m+s aristas ,ue conectan los mismos nodos.
T")s *e g!aFs:
- =rafo conectado o cone$o% #$iste un camino simple entre 2 cuales,uiera de sus
nodos.
- =rafo desconectado% 4,uel en ,ue e$isten nodos ,ue no est+n unidos por ning:n
camino.
- =rafo dirigido% Cada arista tiene asignada una direccin 2identificada por un par
ordenado/.
- =rafo no dirigido% La arista est+ definida por un par no ordenado.
- =rafo sencillo% 4,uel ,ue no tiene ni !ucles ni aristas m:ltiples.
0<=;>4 1&?1&
- =rafo m:ltiple o multigrafo% 0ermite la e$istencia de aristas m:ltiples o !ucles.
- =rafo completo% Cada nodo del grafo es adyacente a todos los dem+s.
- =rafo eti,uetado con peso ponderado% 4,uel en el ,ue a cada arista del grafo va
asociado un valor ,ue es lo ,ue llamamos peso de la lista. Se usa para indicar algo,
como la longitud de la arista o la importancia de la arista, ...
- 0eso de un camino% La suma de los pesos de las aristas del camino.
Re)!esen#a+"-n *e ls g!aFs:
Nay 2 formas de representar los grafos, con memoria est+tica y con memoria
din+mica%
Con memoria est+tica%
- 5atri. de adyacencia% #s una matri. 5 de >C> elementos donde > es el n:mero de
nodos del grafo, donde cada posicin 52i,j/ 8ndica si -ay una cone$in o no entre el
nodo ,ue aparece asociado a la posicin ; de la matri. y el nodo ,ue aparece
asociado a la matri. c.
Si lo ,ue ,uiero es representar un grafo ponderado en ve. de poner G y 1,
pondremos G si no esta conectado y el valor de la arista si e$iste cone$in.
Si el grafo no es dirigido resulta una matri. simetrica.
Las potencias de la matri. de adyacencia 5 elevado a h nos indican en las
posiciones ,ue tiene valor 1 ,ue e$iste un camino de longitud h entre los nodos
asociados a las posiciones ;, c de esa matri..
Destino
1 2 3 4 "
1 G G G 1 G G
2 G G G G G G
3 1 1 G 1 G G
4 G G G G G G
G G G 1 1 1
" G G G G G G
Srigen
2
3
1
4


"
Con memoria din+mica%
6amos a utili.ar 2 listas enla.adas, una es la lista de nodos 2formada por todos
los v@rtices y aristas del grafo.
Cada nodo de esa lista tendr+ la siguiente informacin%
- ;nfo% ;nformacin del nodo.
0<=;>4 1(?1&
- Sig% 0untero ,ue enla.a con el siguiente nodo de la lista de nodos.
- 4dy% 4punta al primer elemento de la lista de adyacencia.
La lista de adyacencia contiene o enla.a a todas las aristas ,ue parten de ese
nodo. #l conjunto de todas las listas de adyacencia, forman una lista de listas.
La lista de adyacencia se implementa como otra lista enla.ada en la ,ue cada
nodo de esa lista contiene 2 campos%
- Des 2destino/% #s un campo puntero al nodo destino de la lista.
- #nl 2enlace/% #s un campo puntero ,ue apunta al siguiente nodo o arista de la
lista de adyacencia de ese nodo.
1
1
Sig 4dy Des #nl
2
2
3
4
3
4
9ipo vertice% registro
;nfo% EtipoF
Sig% ptrba vertice
4dy% ptrba arista
'in registro
9ipo arista
Des% ptrba vertice
#nl% ptrba arista
2C #l peso de la arista ir8a a,u8 C/
'in registro
0ara manejar la memoria disponi!le vamos a tener 2 listas%
- 4D;S0% 4punta al primer nodo ,ue enla.a a los nodos de tipo arista disponi!le.
- >D;S0% 4punta la primer nodo ,ue enla.a a los nodos de tipo v@rtices. >os
movemos con el campo sig.
8. OPERACIONES CON GRAFOS:
4 7Is=ue*a *e un n*:
Lo ,ue se trata es de locali.ar un nodo ,ue contiene una determinada
informacin, para ello le pasamos la informacin al procedimiento y nos devuelve la
posicin si lo encuentra o >il si no lo encuentra.
0rocedimiento Iuscarbnodo 2elem%EtipoFDentAsal ptr%ptrba verticeD prin% ptrba vertice/
0<=;>4 1)?1&
;nicio
0tr prin
5ientras 2ptrinfo EF elem/ y 2ptr EF nil/
0tr 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 y destino.
Devuelve un puntero a la lista de aristas ,ue apunta a esa arista o >il si no e$iste.
0rocedimiento !uscarbarista 2prin% ptrba veriticeD orig%EtipoFD des%EtipoFD
entAsal ptr% ptrba aristaD entAsal p1% ptrba verticeD
entAsal p2% ptrba vertice/
;nicio
Iuscarbnodo 2prin,orig,p1/
Si p1 J nil
#ntonces escri!ir L>o e$iste el nodo origenM
Sino !uscarbnodo 2prin,des,p2/
Si p2 J nil
#ntonces escri!ir L>o e$iste el nodo destinoM
Sino ptr p1ady
5ientras 2ptr EF nil/ y 2ptrdes EF p2/
0tr ptrenl
'in mientras
'in si
'in si
'in
4 Inse!+"-n *e un n*:
0rimero de!emos mirar si no e$iste un nodo ,ue contenga esa informacin y
para insertar el nodo lo insertamos por el principio.
0rocedimiento insertarbnodo 2entAsal prin% ptrba verticeD elem% EtipoF
6ar
>uevo% ptrba verticeD
;nicio
Si >D;S0 J >il
#ntonces escri!ir L>o -ay memoriaM
Sino nuevo >D;S0
>D;S0 >D;S0Sig
>uevoinfo elem
>uevoady >il
0<=;>4 1"G?1&
>uevosig prin
0rin nuevo
'in si
'in
4 Inse!+"-n *e una a!"s#a:
0rimero -ay ,ue compro!ar si e$isten los nodos origen y destino, luego -ay ,ue
compro!ar ,ue no e$iste una arista igual en esa direccin y para insertarla, como el
orden no importa se inserta por el principio.
0rocedimiento insertarbarista 2prin% ptrba verticeD orig%EtipoFD dest%EtipoFD
entAsal p1% ptrba verticeD entAsal p2% ptrba vertice/
6ar
>uevo, pa% ptrba arista
;nicio
Si 4D;S0 J >il
#ntonces escri!ir L>o -ay memoriaM
Sino !uscarbarista 2prin,orig,des,pa,p1,p2/
Si pa EF nil
#ntonces escri!ir LLa arista ya e$isteM
Sino >uevo 4D;S0
4D;S0 4D;S0Sig
>uevodest p2
>uevoenl p1ady
01ady nuevo
'in si
'in si
'in
4 7!!a* *e una a!"s#a:
0rocedimiento !orrarbarista 2prin% ptrba verticeD orig%EtipoFD des%EtipoFD
p1% ptrba verticeD p2% ptrba vertice/
6ar
4ct, ant, pa% ptrba arista
;nicio
Iuscarbarista 2prim,or,dest,pa,p1,p2/
Si pa J nil
#ntonces escri!ir LLa arista ya e$isteM
Sino ant nil
0<=;>4 1"1?1&
4ct p1ady
5ientras 2actdest EF p2/ y 2act EF nil/
4nt act
4ct actenl
'in mientras
4ntenl actenl
Si ant J nil
#ntonces p1ady p1adyenl
Sino antenl actenl
'in si
4ctenl 4D;S0
4D;S0 act
'in si
'in
4 7!!a* *e un n*:
0rimero -ay ,ue compro!ar si e$iste el nodo y despu@s se !orran todas sus
aristas.
0rocedimiento !orrarbnodo 2entAsal prin% ptrba verticeD info%EtipoF/
6ar
0tr, p1, p2, act, ant% ptrba vertice
0a, !orrado% ptrba arista
;nicio
Iorrarbnodo 2prin,elem,ptr/
Si ptr J nil
#ntonces escri!ir L>o e$iste el nodo a !orrarM
Sino act prin
5ientras act EF nil
Iorrarbarista 2prin,actinfo,elem/
4ct actsig
'in mientras
4ctenl 4D;S0
4D;S0 ptrady SSLS #> 0S#*DSCdD;=S
0trady >il
Iorrado ptrady
5ientras !orrado EF nil
Iorrarbarista 2prin,elem,!orradodestinoinfo/ #> C*4LK*;#3
Iorrado !orradoenl L#>=*4c#
'in mientras
4ntnil
4ctprin
5ientras 2act EF nil/ y 2actinfo EF elem/
4nt ant
4ct actsig
'in mientras
0<=;>4 1"2?1&
Si ant J nil
#ntonces prin prinsig
Sino antsig actsig
'in si
4ctsig >D;S0
>D;S0 act
'in si
'in
;. APLICACIONES DE LOS GRAFOS:
- Se pueden representar transformaciones de estado con los grafos.
- Sirven en diversos campos de investigacin para encontrar el m@todo m+s corto y
,ue cueste lo menos posi!le.
- 0ara el +lge!ra se utili.a la matri. de adyacencia.
EJERCICIOS: TEMA 12
1. #n un +r!ol !inario de !:s,ueda, dar todos los elementos inferiores a uno dado con
informacin elem.
0rocedimiento !uscar 2rai.% ptrba nodobarD entAsal ptr% ptrba nodobarD elem% EtipoF/
;nicio
0tr rai.
5ientras 2ptrinfo EF elem/ y 2ptr EF nil/
Si ptrinfo F elem
#ntonces ptr ptrder
Sino ptr ptri.,
'in si
'in mientras
'in
0rocedimiento inorden 2ptr% ptrba nodobar/
;nicio
Si ptr EF nil
#ntonces inorden 2ptri.,/
#scri!ir 2ptrinfo/
;norden 2ptrder/
'in si
'in
0rocedimiento inferiores 2rai.% ptrba nodobarD elem% EtipoF/
6ar
0tr% ptrba nodobar
;nicio
Iuscar 2rai.,ptr,elem/
Si ptr J nil
#ntonces escri!ir L#l elemento no e$isteM
0<=;>4 1"3?1&
Sino inorden 2ptri.,/
'in si
'in
2. Listar en orden descendente el valor de todos los nodos de un +r!ol !inario de
!:s,ueda.
0rocedimiento decreciente 2p% ptrba nodobar/
;nicio
Si p EF nil
#ntonces decreciente 2pder/
#scri!ir pinfo
Decreciente 2pi.,/
'in si
'in
3. #ncontrar el m+$imo valor de un +r!ol !inario de !:s,ueda.
0rocedimiento !uscabma$ 2rai.% ptrba nodobar/
6ar
0tr% ptrba nodobar
;nicio
0tr rai.
5ientras ptrder EF nil
0tr ptrder
'in mientras
#scri!ir ptrinfo
'in
4. Iorrar el elemento menor de un +r!ol !inario de !:s,ueda.
0rocedimiento !orrarbmin 2entAsal rai.% ptrba nodobar/
6ar
0ad, ptr% ptrba nodobar
;nicio
Si rai. J nil
#ntonces escri!ir L<r!ol vacioM
Sino pad nil
0tr rai.
5ientras ptri., EF nil
0ad ptr
0tr ptri.,
'in mientras
Si pad J nil
#ntonces rai. ptrder
Sino padi., ptrder
'in si
0tri., D;S0
D;S0 ptr
0<=;>4 1"4?1&
'in si
'in
. #ncontrar el segundo elemento mayor de un +r!ol !inario de !:s,ueda.
0rocedimiento Dosbmayor 2rai.% ptrba nodobar/
6ar
0ad,ma$,ma$2% ptrba nodobar
;nicio
Si rai. J nil
#ntonces escri!ir L<r!ol vacioM
Sino pad nil
5a$ rai.
5ientras ptrder EF nil
0ad ma$
5a$ ma$der
'in mientras
Si ptri., J nil
#ntonces si pad EF nil
#ntonces escri!ir L#l segundo mayor esM padinfo
'in si
Sino ma$2 ptri.,
5ientras ma$2der EF nil
5a$2 ma$2der
'in mientras
#scri!ir L#l segundo mayor esM ma$2info
'in si
'in si
'in
". 47adir un !ucle en el nodo con informacin elem.
0rocedimiento insb!ucle 2prin% ptrba verticeD elem% EtipoF/
6ar
0<=;>4 1"?1&
0tr% ptrba vertice
>uevo% ptrba arista
;nicio
Iuscarbnodo 2prin,elem,ptr/
Si ptr J nil
#ntonces escri!ir L>o e$iste el nodoM
Sino nuevo 4D;S0
4D;S0 4D;S0sig
>uevoder ptr
>uevoenl ptrady
0trady nuevo
'in si
'in
&. Dado un grafo, determinar si un nodo con informacin elem es un nodo fuente 2,ue
no le lleguen aristas/
0rocedimiento nodobfuente 2prin% ptrba verticeD elem% EtipoF/
6ar
0tr, pn% ptrba vertice
'uente% !oolean
0a% ptrba arista
;nicio
Iuscarbnodo 2prin,elem,ptr/
Si ptr J nil
#ntonces escri!ir L#l nodo no e$isteM
Sino si ptrady J nil
#ntonces escri!ir L>odo sin aristas de origenM
Sino fuente verdadero
0n prin
5ientras 2pn EF nil/ y 2fuente J verdadero/
0a pnady
5ientras 2pa EF nil/ y 2fuente J verdadero/
Si padest J ptr
#ntonces fuente falso
Sino pa paenl
'in si
'in mientras
0n pnsig
'in mientras
Si fuente J verdadero
#ntonces escri!ir LSi es un nodo fuenteM
Sino escri!ir L>o es un nodo fuenteM
'in si
'in si
0<=;>4 1""?1&
'in si
'in
(. Dado un grafo en ,ue cada arista tiene un peso asociado, determinar ,ue aristas del
grado pesan m+s de 1GG, dando la informacin del nodo origen y destino.
9ipo aristabpeso% registro
Des% ptrba vertice
#nl% ptrba aristabpeso
'in registro
0rocedimiento arbpeso 2prin% ptrba vertice/
6ar
0n% ptrba vertice
0a% ptrba aristabpeso
;nicio
0n prin
5ientras pn EF nil
0a pnady
5ientras pa EF nil
Si papeso F 1GG
#ntonces escri!ir LSrigenM pninfo
Sino escri!ir LDestinoM padesinfo
'in si
0a paenl
'in mientras
0n pnsig
'in mientras
'in

0<=;>4 1"&?1&

TABLAS DE DECISIN:
TEMA 13
1. Ku@ es una ta!la de decisin.
2. 9ipos de ta!las.
3. Construccin de ta!las.
4. Conversin de ta!las a programas.
1. Q'H ES 'NA TA7LA DE DECISIN:
*na ta!la de decisin es una -erramienta ,ue me va a servir para representar de
manera m+s f+cil la lgica de un pro!lema cuando est+ es mas o menos complicada.
0ara ello se trata de identificar en el pro!lema las acciones ,ue -ay ,ue ejecutar
y las condiciones ,ue se tienen ,ue cumplir para ejecutar esas acciones. Las acciones
normalmente las vamos a identificar a trav@s de los ver!os, y las condiciones van a ser
las condicionales 2si,.../.
La ta!la va a tener 4 partes%
Conjunto de condiciones #ntrada de condiciones
o entradas com!inacin de condiciones
Conjunto de acciones #jecucin de acciones
o salidas salida de acciones
Conjunto de condiciones% Son las condiciones ,ue intervienen en el pro!lema.
#ntrada de condiciones% Son las com!inaciones posi!les entre los valores de las
condiciones. S;, >S, D4 ;=*4L.
0<=;>4 1"(?1&
Conjunto de acciones% 4!arca todas las acciones ,ue se tienen ,ue 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 y 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 y consider+ndolas como !inarias
2S;?>S/ -a!r+ un n:mero m+$imo de 2 elevado a > reglas.
Cada regla e,uivale desde el parte de vista de programacin a una estructura
si.. entonces, y 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
actuali.a un fic-ero,...
#jemplo%
Si me -acen fijo me compro un corsa, si me -acen fijo y me su!en el sueldo me
compro un familiar, y si me toca la loter8a me compro un I5e.
C1% 'ijo ? no fijo 41% >o compro un coc-e
C2% Salario ? no salario 42% Compro un corsa
C3% Loter8a ? no loter8a 43% Compro un familiar
44% Compro un I5e
'ijo S S S S > > > >
Salario S S > > S S > >
Loter8a S > S > S > S >
>o coc-e f f f f
Corsa f
'amiliar f
I5e f f
2. TIPOS DE TA7LAS:
- SegIn el )lan#ea$"en#:
- 0ropias% Solo tienen reglas simples, solo -ay S; ? >S.
- ;mpropias% Son las ,ue tienen reglas compuestas 2S;?>S?;>D;'#3#>C;4/.
- SegIn en#!a*as:
- Limitadas% Cuando las reglas son S ? > ? A ? f 2Si se ejecuta para las acciones/.
- #$tendidas% Cuando los valores ,ue toman las condiciones son diferentes de
S; ? >S, y las acciones son distintas de si se ejecuta o no se ejecuta.
0<=;>4 1")?1&
#n cual,uier caso, siempre se puede traducir una ta!la mi$ta a una ta!la
limitada. Cada condicin dar+ igual a tantas condiciones simples como valores pueda
tomar, y para cada accin tantas acciones como estados pueda tomar.
La ventaja de las ta!las mi$tas y e$tendidas es ,ue se ve mejor a primera vista,
el inconveniente es ,ue son m+s dif8ciles de programar.
- SegIn el #!a#a$"en#:
- 4!iertas% Cuando desde una ta!la se -ace referencia a otra ta!la, pero luego no
se vuelve a la inicial.
- Cerradas% Lo mismo ,ue la anterior, pero se vuelve a la original.
- Iucles% Cuando una ta!la se llama a s8 misma.
T")s *e !eglas:
>ormalmente las reglas de una ta!la se consideran como reglas 4>D, se tienen
,ue cumplir todos los valores de las condiciones para ,ue se ejecute la opcin asociada
a esa regla.
Si se implementa como reglas S3, significa ,ue con ,ue se cumpla una sola
regla, se ejecuta la accin asociada.
Las reglas #LS# se -acen 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:
0rimero locali.amos las condiciones en el enunciado, despu@s las acciones y las
reglas entre las acciones y las condiciones.
Despu@s comprue!o ,ue la ta!la sea correcta. Kue no ocurran%
- 3edundancias% 0oner la misma regla m+s de una ve..
- Completa% Kue no falte alguna regla.
- Contradictoria% Kue la misma accin de lugar a cosas contradictorias.
Despu@s se mira a ver si se puede simplificar la ta!la, a7adiendo si es posi!le
indiferencias 2cada una sustituye a 2 reglas/.
*na ta!la se puede simplificar si -ay 2 reglas ,ue dan lugar a la misma accin o
conjunto de acciones y solo se diferencia en el estado o valor de una de sus condiciones,
entonces sustituyo esas 2 reglas por una sola, ,ue tenga para esa condicin el valor de
indiferencia.
'ijo S S S S > > > >
Salario S S > > S S > >
Loter8a S > S > S > S >
>o coc-e f f f f
Corsa f
'amiliar f
I5e f f
0. CON3ERSIN DE TA7LAS A PROGRAMAS:
0rimero -ay ,ue ver si se puede simplificar la ta!la.
Nay 2 formas de -acer la conversin%
0<=;>4 1&G?1&
- 0rogramacin directa% Kue cada regla e,uivale a una sentencia condicional. #s muy
ineficiente.
- 0asar la ta!la de decisin a flujograma mediante el siguiente el m@todo%
1. 0ara cada regla al final de su columna ponemos el n:mero de reglas simples a las
,ue e,uivale. Cada indiferencia de una regla e,uivale a 2 reglas simples.
2. 0ara cada condicin al final de su fila -allamos un coeficiente ,ue resulta de la suma
de los valores de las reglas para las ,ue esa condicin valga indiferente, cuanto
menor sea ese valor, m+s importante es esa regla, por,ue va a tener menos reglas
para las ,ue esa condicin es indiferente.
3. #lijo la condicin con menor valor en su coeficiente, si -ay varias condiciones ,ue
tienen el mismo valor en su coeficiente y adem+s es el menor, -allo un segundo
coeficiente ,ue se o!tiene por la diferencia en valor a!soluto de la diferencia entre el
n:mero de S; y >S en valor a!soluto de esas condiciones, y elijo la ,ue tenga la
diferencia mayor, y si sigue -a!iendo empate cojo cual,uiera de ellas.
4. 0ara la regla elegida o!tengo otras 2 ta!las, ,ue se caracteri.an por,ue no contienen
ya a la condicin por la ,ue -e dividido las ta!las, y una ta!la contiene las reglas
para las ,ue esa condicin contiene valor S;, y la otra contiene las reglas para las
,ue la condicin es >S, y para las reglas con condicin indiferencia las pongo en las
2 ta!las, y con las 2 ta!las vuelvo a -acer otra ve. lo mismo -asta ,ue no se pueda
dividir m+s, y cada ve. ,ue se -ace una divisin pago la condicin en el flujograma.
#jemplo anterior%
'ijo S S S > G
Salario A S > A "
Loteria S > > A 4
>o coc-e f
Corsa f
'amiliar f
I5e f
2 1 1 4
'ijo S;
Salario A S > 2
Loteria S > > G
>o coc-e
Corsa f
'amiliar f
I5e f
2 1 1
'ijo >S
Salario A
Loteria A
0<=;>4 1&1?1&
>o coc-e f
Corsa
'amiliar
I5e
Si 'ijo >o
Si >o
Loteria >o coc-e
I5e Si Salario >o
'amiliar Corsa
Si no fijo
#ntonces escri!ir L>o coc-eM
Sino si loteria
#ntonces escri!ir LI5eM
Sino si salario
#ntonces escri!ir L'amiliarM
Sino escri!ir LCorsaM
'in si
'in si
'in si
0<=;>4 1&2?1&
EJERCICIOS: TEMA 13
1. Dado un fic-ero de empleados ordenado por n:mero de empleado con el formato,
n:mero de empleado, antigXedad, se$o, categor8a, se trata de -allar mediante ta!las
de decisin ,ue prima reci!e cada empleado sa!iendo ,ue%
4% 5ujeres ,ue son jefes.
I% 5ujeres empleadas con antigXedad y -om!res empleados.
C% Nom!res ,ue son jefes.
D% Sin prima. #l resto.
Nacer la ta!la de decisin y el flujograma.
4ntiguedad S S S S > > > >
5ujer S > S > S S > >
cefe S S > > S > S >
4 f f
I f f f
C f f
D f
4ntiguedad A A S > > 4
5ujer S > A S > 2
cefe S S > > > G
4 f
I f f
C f
0<=;>4 1&3?1&
D f
2 2 2 1 1
cefe S;
4ntiguedad A A 4
5ujer S > G
4 f
I
C f
D
2 2
cefe >S
4ntiguedad S > > G
5ujer A S > 2
4 f
I
C f
D f
2 1 1
cefe

5ujer 4ntiguedad
I
4 C 5ujer
D I
Si jefe
#ntonces si mujer
#ntonces escri!ir L4M
Sino escri!ir LCM
'in si
Sino si antigXedad
#ntonces escri!ir LIM
Sino si mujer
#ntonces escri!ir LDM
Sino escri!ir LIM
'in si
'in si
'in si
0<=;>4 1&4?1&
0<=;>4 1&?1&

Potrebbero piacerti anche