You are on page 1of 181

PGINA 1 /176

ALGOR I TMOS Y PROGRAMAS:


TEMA 1:
1. Sistemas de procesamiento de la informacin.
2. Concepto de algoritmo.
. !eng"a#e de programacin.
$. %atos& tipos de datos ' operaciones primiti(as.
). Constantes ' (aria*les.
6. +,presiones- tipos ' operadores.
7. ."nciones internas.
/. !a operacin de asignacin.
0. +ntrada ' salida de la informacin.
1. SIS1+ 2 AS %+ P34C+SA2 I +N14 %+ !A IN.432ACI5N-
6n ordenador es "na m78"ina de procesamiento de informacin. +s "na
m78"ina por8"e tiene ca*les& c9ips&... & procesa por8"e es capa: de procesar cosas&
e informacin por8"e mane#a con#"ntos ordenados de datos;.
Para procesar la informacin est7 el 9ard<are =microprocesador& 3A2&...;&
' el soft<are =8"e sir(e para mane#ar el 9ard<are;.
2. C4NC + P14 %+ A!G43I124-
+l algoritmo trata de resol(er pro*lemas mediante programas.
.ases-
> An7lisis p r eliminar o e(al"acin del pro*lem a - +st"diar el pro*lema en
general ' (er 8"e parte nos interesa.
> %efinicin o an7lisis d el pro*lema - ?er 8"e es lo 8"e entra ' 8"e es lo
8"e sale& las posi*les condiciones o restricciones& ...
> %ise@o del algoritm o - %ise@ar la sol"cin.
> +l programa - Codificacin del algoritmo en "n leng"a#e de
programacin.
> +#ec"cin del programa ' las pr"e*as - ?er si el programa 9ace lo 8"e
8"erAamos.
BC"D es "n algoritmoE-
+s "na form"la para resol(er "n pro*lema. +s "n con#"nto de acciones o
sec"encia de operaciones 8"e e#ec"tadas en "n determinado orden res"el(en el
pro*lema. +,isten n algoritmos& 9a' 8"e coger el m7s efecti(o.
CaracterAsticas-
> 1iene 8"e ser preciso.
> 1iene 8"e estar *ien definido.
> 1iene 8"e ser finito.
!a programacin es adaptar el algoritmo al ordenador.
+l algoritmo es independiente segFn donde lo implemente.
. +! !+NG6AG+ %+ P34G3A2ACI5N-
+,isten diferentes tipos& de *a#o ni(el ' de alto ni(el.
Instr"cciones en "na comp"tadora ' s"s tipos-
6na instr"ccin es cada paso de "n algoritmo& pero 8"e lo e#ec"ta el
ordenador. 6n programa es "n con#"nto de instr"cciones 8"e e#ec"tadas
ordenadamente res"el(en "n pro*lema.
PGINA 2 /176
1ipos de instr"ccione s -
> +/S- Pasar informacin del e,terior al interior del ordenador ' al re(Ds.
> Aritm D tic o >lgica s - AritmDticas- H&>&I&... J !gicas- or& and& K& L& ...
> Selecti(a s - Permiten la seleccin de "na alternati(a en f"ncin de "na
condicin.
> 3epetiti( as - 3epeticin de "n nFmero de instr"cciones "n nFmero finito
de (eces.
1ipos de leng"a#es-
> !eng"a#e m78"ina - 1odo se programa con 1 ' M& 8"e es lo Fnico 8"e
entiende el ordenador.
?enta#a- No necesita ser trad"cido.
Incon(eniente- !a dific"ltad& la conf"sin& para corregir errores& es
propia de cada m78"ina.
> %e *a#o ni(el o ensam * lador - Se "tili:an mnemotDcnicos =a*re(iat"ras;.
?enta#a- No es tan difAcil como el leng"a#e m78"ina.
Incon(enientes- Cada m78"ina tiene s" propio leng"a#e& necesitamos "n
proceso de trad"ccin.
+l programa escrito en ensam*lador se llama programa f"ente ' el programa
8"e se o*tiene al ensam*larlo se llama programa o*#eto.
> !eng"a#es de alto ni(el- !os m7s cercanos al leng"a#e 9"mano.
?enta#a- Son independientes de cada ma8"ina =los compiladores aceptan las
instr"cciones est7ndar& pero tam*iDn tienen instr"cciones propias;.
Incon(eniente- +l proceso de trad"ccin es m"' largo ' oc"pa m7s
rec"rsos. Apro(ec9a menos los rec"rsos internos.
Proceso de trad"ccin ' e#ec"cin de "n programa escrito en "n leng"a#e a alto
ni(el-
6samos "n editor ' o*tenemos el programa f"ente& ' el compilador es el 8"e
trad"ce el programa al leng"a#e m78"ina. +l compilador internamente 9a sido
dise@ado para trad"cir.
+l compilador o*tiene el programa o el fic9ero o*#eto. +l compilador tiene
8"e *"scar los errores.
Normalmente no sale "n e#ec"ta*le& sino 8"e necesita elementos& li*rerAas&
...
2ediante "n linNador #"ntamos el programa o*#eto ' las li*rerAas& ' se
forma "n programa e#ec"ta*le.
C"ando se e#ec"ta el programa& el cargador lle(a al programa a memoria
para 8"e Dste p"eda ser e#ec"ta*le.
%e**"ger- %ep"ra el programa e#ec"t7ndolo paso a paso& (iendo la
memoria paso a paso para encontrar el error.
Programa f"ente =+ditor;
Compilador
+rror
Programa o*#eto !i*rerias
!inNador
+#ec"ta*les
Para trad"cir p"edo "tili:ar el compilador o "n interprete& con el
compilador co#o todo el programa al completo ' el interprete lee cada instr"ccin '
lo (a e#ec"tando.
+l interprete es m7s r7pido& pero menos eficiente.
1odos los leng"a#es tienen compiladores& pero no todos tienen interpretes.
!ISP =!eng"a#e de inteligencia artificial; - Slo tiene interpretes.
$. %A14S& 1IP4S %+ %A14S O 4P+3AC I 4N+S P3 I 2I1I?AS-
> %ato- +s "n o*#eto o elemento 8"e tratamos a lo largo de di(ersas operaciones.
1ienen caracteristic a s -
> 6n nom*re 8"e los diferencia del resto.
> 6n tipo 8"e nos determina las operaciones 8"e podemos 9acer con ese
dato.
> 6n (alor 8"e p"ede (ariar o no a lo largo de la operacin.
+,isten diferentes tipos de datos.
> Caracteri s ticas de los tipos-
> Cada tipo se representa o almacena de forma diferente en la
comp"tadora.
Pit-1/MJ P'teQ/ *its.
> 6n tipo agr"pa a los (alores 8"e 9acen las mismas operaciones.
> Si tiene definida "na relacin de orden es "n tipo escalar.
> Cardinalidad de "n tipo- NFmero de (alores distintos 8"e p"ede tomar
"n tipo.
P"eden ser finitos =caracteres;& ' si son infinitos el ordenador los toma
como finitos por8"e esta limitado por el tama@o de los *'tes en el 8"e la
cifra es almacenada.
> !os datos p"eden ser-
> Simples- 6n elemento.
> Comp"estos- ?arios elementos.
> !os tipos p"eden ser-
> +standar- C"e (ienen en el sistema por defecto.
> No estandar- Son los 8"e crea el "s"ario.
> !os tipos simples m7s importantes son-
> N"mDricos.
> !gicos.
> Caracteres.
N"mDricos-
> +ntero- S"*con#"nto finito del con#"nto matem7tico de los n"mDros
enteros. No tiene parte decimal. +l rango de los (alores depende del
tama@o 8"e se les da en memoria.
> 3eal- S"*con#"nto finito del con#"nto matem7tico de los nFmeros reales.
!le(an signo ' parte decimal. Se almacenan en $ P'tes =dependiendo de
los modificadores;. Si se "tili:an nFmeros reales m"' grandes& se p"ede
"sar notacin cientAfica 8"e se di(ide en mantisa& *ase ' e,ponenteJ tal
8"e el (alor se o*tiene m"ltiplicando la mantisa por la *ase ele(ada al
e,ponente.
!gicos o *ooleanos-
> A8"el 8"e slo p"ede tomar "no de los dos (alores& (erdadero o falso
=1/M;.
Car7cter-
> A*arca al con#"nto finito ' ordenado de caracteres 8"e reconoce la
comp"tadora =letras& digitos& caracteres especiales& ASCII;.
1ipo de cadena o String- Con#"nto de caracteres& 8"e (an a estar entre RS.
+l propio leng"a#e p"ede a@adir m7s tipos& o se p"eden a@adir modificadores.
+ntero - Int !ong int
+n alg"nos leng"a#es se definen tipos especiales de fec9a ' 9ora& so*re todo
en los m7s modernos.
). C4NS 1 AN 1 +S O ?A3 I AP ! +S-
> Constantes- 1ienen "n (alor fi#o 8"e se le da c"ando se define la
constante ' 8"e 'a no p"ede ser modificado d"rante la e#ec"cin.
> ?aria*les- +l (alor p"ede cam*iar d"rante la e#ec"cin del algoritmo&
pero n"nca (aria s" nom*re ' s" tipo.
Antes de "sar "na (aria*le 9a' 8"e definirla o declararla& al 9acerlo 9a'
8"e dar s" nom*re ' s" tipo. +l nom*re 8"e le damos tiene 8"e ser "n nom*re
significati(o& (a a ser "n con#"nto de caracteres 8"e dependiendo del leng"a#e 9a'
restricciones. 1iene 8"e empe:ar por "na letra& ' el tama@o depende del leng"a#e.
Identificador- Pala*ra 8"e no es propia del leng"a#e.
+l (alor de la (aria*le si al declararla no se la iniciali :a& en alg"nos
leng"a#es toma "na por defecto. +n c"al8"ier caso el (alor de la (aria*le podemos
darle "no incial o podemos ir (ariandolo a lo largo de la e#ec"cin.
!as constantes p"eden lle(ar asociados "n nom*re o no& si no lo lle(an& se
llaman literales. S" (alor 9a' 8"e darlo al definir la constante ' 'a no p"ede
cam*iar a lo largo de la e#ec"cin& ' en c"anto al tipo& dependiendo de los
leng"a#es en alg"nos 9a' 8"e ponerlo& ' en otros no 9ace falta ponerlo por8"e
toma el tipo del dato 8"e se le asigna. Const PIQ&1$16.
Ta' 8"e iniciali:ar todas las (aria*les.
K L Ta' 8"e poner algo o*ligatoriamente.
U V P"ede lle(ar algo o no lle(arlo.
!a (enta#a de "sar constantes con nom*re es 8"e en c"al8"ier l"gar donde
8"iera 8"e (a'a la constante& *asta con poner s" nom*re ' l"ego el compilador lo
s"stit"ira por s" (alor.
!as constantes sin nom*res son de (alor constante- )& 6& WaX& R9olaS.
C"ando "na cadena es de tipo car7cter& se encierra entre WX WaX.
3elacin entre (aria*les ' constantes en memoria-
Al detectar "na (aria*le o "na constante con nom*re& a"tomaticamente se
reser(a en memoria espacio para g"ardar esa (aria*le o constante. +l espacio
reser(ado depende del tipo de la (aria*le.
+n esa :ona de memoria es en la 8"e se g"arda el (alor asociado a la
(aria*le o constante ' c"ando el programa "se esa (aria*le& ira a esa :ona de
memoria a *"scar s" (alor.
6. +YP3+ S I4N+S- 1IP4S O 4P+3A%43+S-
6na e,presin es "na com*inacin de constantes& (aria*les& signos de
operacin& parDntesis ' nom*res especiales =nom*res de f"nciones estandar;& con
"n sentido "nA(oco ' definido ' de c"'a e(al"acin res"lta "n Fnico (alor.
1oda e,presion tiene asociada "n tipo 8"e se corresponde con el tipo del
(alor 8"e de("el(e la e,presion c"ando se e(al"a& por lo 8"e 9a*r7 tantos tipos de
e,presiones como tipos de datos. Ta*ra e,presiones n"mDricas ' lgicas.
N"mDricas- 4peradores aritmDticos.
Son los 8"e se "tili:an en las e,presiones n"mDricas ="na com*inacin de
(aria*les '/o constantes n"mDricas con operadores aritmDticos ' 8"e al e(al"arla
de("el(e "n (alor n"mDrico.
H& >& I& /.
4peracin rest o - !o 8"e de("el(e es el resto de "na di(isin entera.
2od- Pascal. ) mod Q 2
Z- C.
%i(isin e n ter a - Nos de("el(e el cociente de "na di(isin entera =en la 8"e no se
sacan decimales;.
%i(- Pascal. ) di( Q 1
[- C.
Potencia- \ )\2.
1odos estos operadores son *inarios =el operador se sit"a en medio;& el
menos tam*ien p"ede ser "nario =lle(a "n Fnico operando; ' significa signo
negati(o.
3eglas de precedencia-
+l pro*lema es c"ando "na e,presin entera segFn como la e(al"e p"eda
dar diferentes (alores.
7IH$ 2)
$0
!a sol"cin es aplicar prioridad entre los operadores& de modo 8"e ante la
posi*ilidad de "sar (arios siempre aplicaremos primero el de ma'or prioridad.
Cada leng"a#e p"ede esta*lecer s"s propias reglas de prioridad o
precedencia de operadores. Si no nos acordamos& siempre podemos poner = ;.
1]; \
2]; I / di( mod
]; H >
+ntre dos operaciones 8"e tienen la misma precedencia para resol(er la
am*ig^edad& 9a' 8"e "sar la regla de la asociati(idad. !a m7s normal es la de la
asociati(idad a i:8"ierdas =primero lo de la i:8"ieda;.
+,presiones lgica s - 4peradores relacion a l es ' lgicos.
6na e,presin lgica es a8"ella 8"e slo p"ede de(ol(er dos (alores
=?erdadero o .also;. !os (alores 8"e p"eden aparecer en "na e,presin lgica son
de 2 tipos- lgicos ' relacionales.
!a partic"laridad de las e,presiones lgicas es 8"e mientras en "na
e,presin n"mDrica por de(ol(er "n (alor n"mDrico los operandos solo p"eden ser
nFmeros& en "na e,presin lgica los operandos no tienen por8"e ser *ooleanos
a"n8"e se de("el(a "n (alor *ooleano. +sto es lo 8"e oc"rre c"ando en la
e,presin lgica "tili:amos operadores relacionales con lo c"al se o*tienen (alores
lgicos o *ooleanos a partir de otros 8"e no lo son.
+n cam*io c"ando los operadores son lgicos los operandos
o*ligatoriamente tam*ien tienen 8"e ser lgicos.
4peradores relacionales-
K
L
Q
KL en C- _Q

K 4perando1L operador K 4perando2L


) L ?erdadero
BCmo se e(al"a "na e,presin relacionalE-
> Primero se e(al"a el primer operando ' se s"stit"'e por s" (alor.
> !"ego se e(al"a el seg"no operando ' se s"stit"'e por s" (alor.
> .inalmente se aplica el operador relacional ' se de("el(e el (alor
*ooleano correspondiente.
==I2;H1>)\2; K =2>1;
>1/ K 1 ?erdadero.
+l pro*lema del tipo real-
%esde la inform7tica& los n"meros reales son finitos& 'a 8"e tenemos "n
m7,imo de cifras decimales. C"ando tra*a#amos con "n Q& matematicamente da
"n (alor e,acto& pero informaticamente no es e,acto.
1/) I ) Q1
1.M/).M I).M KL1.M
Sol"ciones-
> !a 8"e nos aporte el propio leng"a#e de programacin. Se considera "n
(alor de error.
> 1ra*a#ar con nFmeros enteros siempre 8"e sea posi*le.
> 6tili:ar las comparaciones KL en (e: de si es posi*le.
> Si 9a' 8"e preg"ntar por ig"al& cam*iar la condicin "tili:ando (alores
a*sol"tos ' "n (alor mAnimo de error.
Si la diferencia K M.MMMMMMM1 ' APS =A>P;K min J son ig"ales.
4peradores lgicos-
+l pro*lema es 8"e a (eces 8"eremos preg"ntar o e(al"ar por m7s de "na
condicin al mismo tiempo ' para esto estan los operadores lgicos.
O and ``
4 or __
No not ~_
O& 4& son operadores *inarios =necesitan 2 operandos de tipo logico;.
4perando 1 4perador 4perando 2
+l No es "nario ' se coloca primero el No& ' desp"es el operando.
+l res"ltado es lgico ' depende de-
4perando 1 4perando 2 AN% 43
? ? ? ?
? . . ?
. ? . ?
. . . .
+l No niega -
N41 1/M
? .
. ?
Prioridades de los operadores-
> !o m7s prioritario es el N41
> !"ego el O ' el 4.
> K& L Q&...
1a*la de prioridades-
\ N4
/ di( mod '
H > 4
K& L& Q& KL&...
7. .6NCI 4 N +S IN1 + 3NAS-
Son f"nciones matem7ticas diferentes de las operaciones *7sicas pero 8"e se
incorporan al leng"a#e ' 8"e se consideran estandar. %ependen del leng"a#e.
Normalmente se enc"entran en la li*rerAa de matem7ticas del leng"a#e de
programacin.
.rm"las-
A*s =,;
Arctan =,;
Cos =,;
Sen =,;
+,p =,;
!n =,;
!og 1M =,;
3edondeo =,;
1r"nc =,;
C"adrado =,;
3ai: =,;
/. 4P+3ACI5N %+ ASIGNAC I 5N-
Consiste en atri*"ir "n (alor a "na (aria*le. +l (alor sera "na e,presin
=constante& (aria*le&...;.
4tros leng"a#es Q & -Q
?aria*le a la 8"e se le asigna el (alor el (alor 8"e le (amos a asignar.
A )
+n C A Q Q P Comparacin
A Q P Asignacin
+n Pascal A-QP Asignacin
AQP Comparacin
+l proceso de asignacion se reali:a en 2 fases-
> Se e(alFa la e,presin de la parte derec9a de la asignacin o*teniendose
"n Fnico (alor.
> Se asigna ese (alor a la (aria*le de la parte i:8"ierda.
BC"D es lo 8"e 9a' 8"e tener en c"entaE-
> +n la parte i:8"ierda slo p"ede 9a*er "na (aria*le.
> !a (aria*le a la 8"e se le asigna el (alor pierde s" (alor anterior.
> !a (aria*le 8"e aparece en la derec9a 'a 8"e como se e(al"a primero la
de la derec9a c"ando se tenga 8"e e(al"ar el (alor de esa (aria*le se
tomara s" (alor antig"o.
> +! 1IP4 %+! ?A!43 C6+ S+ 4P1I+N+ A! +?A!6A3 !A
PA31+ %+3+CTA 1I+N+ C6+ S+3 +! 2IS24 C6+ +! 1IP4 %+
!A ?A3IAP!+ %+ !A PA31+ IaC6I+3%A& +S %+CI3 A 6NA
?A3IAP!+ S4!4 S+ !+ P6+%+N %A3 ?A!43+S %+ S6 2IS24
1IP4.
A- entero
A 2
> +n Pascal da "n error.
> +n C& no da error por8"e el compilador tr"nca el n"mero.
A IA H A Q /
0. +N 1 3 A%A O SA! I %A %+ !A IN.432ACI5N-
!as dos operaciones *7sicas de cada salida son las de lect"ra ' de escrit"ra.
!a lect"ra es e8"i(alente a la asignacin en c"anto 8"e (a a 9a*er "na (aria*le
8"e reci*e "n (alor& pero este (alor no res"lta de e(al"ar ning"na e,presin&
sino 8"e el (alor lo (amos a leer de "n dispositi(o e,terno de entrada.
!eer =nom*re de la (aria*le;
+l (alor introd"cido por el dispositi(o e,terno& tiene 8"e ser del mismo tipo
del 8"e la (aria*le 8"e se le asigne.
!a operacin de escrit"ra lo 8"e 9ace es mostrar el (alor de "na (aria*le en
"n dispositi(o e,terno de salida.
+scri*ir =(aria*le;
!a operacin de escrit"ra no es "na operacin destr"cti(o en memoria.
Al pedir "n (alor al "s"ario 9a' 8"e decirle 8"e es lo 8"e se le 8"iere pedir
escri*iendo "n mensa#e.
EJERCI CIOS: TEMA 1
1. A =I2\) mod 1 H /I=>); K =2H/>1 mod 1;
A =I2 mod 1 H =>16;; K 1M
A >16 K 1M
A ?erdadero
1.1. A A o =H)I/; K ' ==>6/ di( $;I2 K 2;
A ?erdadero o $ K ' =MI2 K 2;
A ?erdadero o .also ' ?erdadero
A ?erdadero o .also
A ?erdadero
2. P mod 2 di(
P 1 di(
P M
2.1. C =>PI2 KL /I mod $; ' =WAXLXPX;
C =M KL 2$ mod $; ' .also
C .also ' .also
C .also
2.2. A C o no =Q); ' =/ KL HP;
A .also o ?erdadero ' ?erdadero
A .also o ?erdadero
A ?erdadero
RESOLUCIN DE PROBLEMAS CON COMPUTADORA Y
HERRAMIENTAS DE PROGRAMAC I N:
TEMA 2
1. 3esol"cin de pro*lemas.
2. An7lisis del pro*lema.
. %ise@o del algoritmo.
$. 3esol"cin en la comp"tadora.
). .l"#ogramas.
6. %iagramas NS o de NASSI>SCT+%+32AN
7. Pse"docdigo.
1. 3+S4!6CI5N %+ P 3 4P!+ 2 AS-
!a resol"cin de "n pro*lema desde el p"nto de (ista algorAtmico tiene fases-
> An7lisis del pro*lema- Comprensin.
> %ise@o del algoritmo- 3esol"cin algorAtmica.
> 3esol"cin en comp"tadora- Implantacin del algoritmo en "n leng"a#e de
programacin.
2. AN!I S IS %+! P3 4P!+2A-
+l o*#eti(o de Dsta fase es comprender el pro*lema para lo c"al como
res"ltado tenemos 8"e o*tener la especificacin de las entradas ' salidas del
pro*lema. 1iene 8"e 8"edar claro 8"e entra ' 8"e sale.
. %IS+b4 %+! A! G 4 3I124-
6na (e: comprendido el pro*lema se trata de determinar 8"e pasos o
acciones tenemos 8"e reali:ar para resol(erlo.
Como criterios a seg"ir a la 9ora de dar la sol"cin algorAtmica 9a' 8"e
tener en c"enta-
1. Si el pro*lema es *astante complicado lo me#or es di(idirlo en partes
m7s pe8"e@as e intentar di(idirlo en partes m7s pe8"e@as e intentar
resol(erlas por separado. +sta metodologAa de Rdi(ide ' (encer7sS
tam*iDn se conoce con el nom*re de dise@o descendente.
2. !as (enta#as de aplicar esto son-
> Al di(idir el pro*lema en md"los o partes se comprende m7s f7cilmente.
> Al 9acer modificaciones es m7s f7cil so*re "n md"lo en partic"lar 8"e en
todo el algoritmo.
> +n c"anto a los res"ltados& se pro*ar7n m"c9o me#or compro*ando si cada
md"lo da el res"ltado correcto 8"e si intentamos pro*ar de "n golpe todo
el programa por8"e si se prod"ce "n error sa*emos en 8"e md"lo 9a sido.
6na seg"nda filosofAa a la 9ora de dise@ar algoritmos es el refinamiento por
pasos& ' es partir de "na idea general e ir concretando cada (e: m7s esa
descripcin 9asta 8"e tengamos algo tan concreto para resol(er. Pasamos de lo
m7s comple#o a lo m7s simple.
!a representacin de los algoritmos-
6na (e: 8"e tenemos la sol"cin 9a' 8"e implementarla con alg"na
representacin. !as representaciones m7s "sadas son los fl"#ogramas& los
diagramas NS ' el pse"docdigo.
1am*iDn la sol"cin se p"ede escri*ir en alg"nos casos en leng"a#e nat"ral
pero no se 9ace por8"e es m"' am*ig"o& e incl"so otras formas de e,presin como
frm"las matem7ticas.
+scrit"ra d el algoritmo-
Al escri*ir el algoritmo 9a' 8"e tener en c"enta-
> !as acciones o pasos a reali:ar tienen 8"e tener "n determinado orden.
> +n cada momento solo se p"ede e#ec"tar "na accin.
> %entro de las sentencias del algoritmo p"eden e,istir pala*ras reser(adas
=pala*ras propias del leng"a#e de programacin 8"e tienen para el
compilador "n determinado significado;.
> Si estamos "tili:ando pse"docdigo tenemos tam*iDn 8"e "sar la identacin
=a"menta la legi*ilidad del pro*lema para 8"e se p"eda leer me#or;.
$. 3+S4!6CI5N +N !A C42 P 61A%43A-
+s 9acer entender n"estro algoritmo a la comp"tadora para 8"e lo p"eda
9acer.
1. Codificamos el algoritmo en "n leg"a#e de programacin.
2. +#ec"tar el programa antes compilado.
. Compro*ar los res"ltados ' si no f"nciona& corregirlo.
). .!6G4G3A2AS-
+s "na notacin gr7fica para implementar algoritmos. Se *asa en la
"tili:acin de "nos sAm*olos gr7ficos 8"e denominamos ca#as& en las 8"e
escri*imos las acciones 8"e tiene 8"e reali:ar el algoritmo.
!as ca#as est7n conectadas entre sA por lAneas ' eso nos indica el orden en el
8"e tenemos 8"e e#ec"tar las acciones.
+n todo algoritmo siempre 9a*r7 "na ca#a de inicio ' otra de fin& para el
principio ' final del algoritmo.
!os sAm*olos-
!Aneas de fl"#o- 6na lAnea con "na flec9a 8"e sir(e para conectar los
sAm*olos del diagrama ' la flec9a indica la sec"encia en la 8"e se (an a e#ec"tar las
acciones.
SAm*olo de proceso- Indica la accin 8"e tiene 8"e reali:ar la
comp"tadora. %entro escri*imos la accin.
3epresenta las acciones de entrada ' salida. %entro colocaremos
las acciones de lect"ra ' escrit"ra.
Condicin- %entro se (a a colocar "na condicin. Sir(e
para representar estr"ct"ras selecti(as ' repetiti(as ' lo
8"e se 9ace al encontrar ese signo es e(al"ar la condicin
8"e 9a' dentro tal 8"e segFn la condicin sea (erdadera o
falsa iremos por caminos distintos.
Principio ' fin- %entro del sAm*olo ira la pala*ra inicio o fin
del algoritmo.
S"*programa- %entro se coloca el nom*re del s"*programa
al 8"e se llama.
Conectores- Nos sir(en c"ando "n fl"#ograma no me ca*e en "na col"mna de la
9o#a ' 9a' 8"e seg"ir en otra col"mna-
> Si es en la misma 9o#a-
> Si es en 9o#a distinta-
!os conectores se ponen "no donde termina la col"mna ' otra donde empie:a.
+s "na aclaracin para entender me#or el cdigo& pero no es
parte del cdigo& no se e#ec"ta.
4tros sAm * olos-
> Pantalla- C"ando "na salida es por pantalla.
> 1eclado- Para representar "na entrada por teclado.
> Impresora-
> +ntrada/Salida por disco-
P P I n"m
IPro*lema-
C"eremos 9allar el prod"cto de (arios nFmeros positi(os introd"cidos por
teclado ' el proceso termina c"ando se meta "n nFmero negati(o.
1. Iniciar la (aria*le del prod"cto.
2. !eer el primer nFmero.
. Preg"ntar si es negati(o o positi(o.
$. Si es negati(o nos salimos ' escri*imos el prod"cto.
). Si es positi(o& m"ltiplicamos el nFmero leAdo ' l"ego leemos "n n"e(o nFmero&
' se ("el(e al paso .
Inicio
P 1
!eer n"m
N"m LQ M +scri*ir P
.in
!eer n"m
2ientas KcondL
(n
KaccionesL
%esde (iQ(1 9asta
). %IAG3A2AS N>S 4 %+ NASS I >SCT+% + 3 2AN-
+s seme#ante al fl"#ograma& peor sin flec9as ' cma*iando algo los sAm*olos
de condicin ' repeticin. !as ca#as (an "nidas.
KaccinL
Condiciones-
Condicin
SI N4
Kacc1L Kacc2L
3epetiti(as-
KaccionesL
3epetir 9asta KcondL KaccionesL
Pro*lema anterior-
Inicio
P 1
!eer n"m
2ientras n"m LQ M
P pIn"m
!eer n"m
+scri*ir P
.in
6. PS+6%4C5%IG4-
+s "n leng"a#e de especificacin de algoritmos& pero m"' parecido a
c"al8"ier leng"a#e de programacin& por lo 8"e l"ego s" trad"ccin al leng"a#e es
m"' sencillo& pero con la (enta#a de 8"e no se rige por las normas de "n leng"a#e
en partic"lar. Nos centramos m7s en la lgica del pro*lema.
+l pse"docdigo tam*iDn (a a "tili:ar "na serie de pala*ras cla(e o
pala*ras especiales 8"e (a indicando lo 8"e significa el algoritmo.
1. Inicio ' .in- Por donde empie:a ' aca*a el algoritmo.
Pegin /end - Pacal.
c d - +n C.
2. SA KcondL
+ntonces Kacc1L If t9en else
Sino Kacc2L
.2ientras KcondL /9acer <9ile do
$. 3epetir / 9asta repeat "ntil
). %esde /9asta for .. to
6. SegFn sea Case
S<it9
!os comentarios (an encerrados entre lla(es.
Ta' 8"e "tili:ar la identacin.
Algoritmo Knom*re algL
?ar
Knom*reL- KtipoL
Inicio
KInstr"ccionesL
.in
Algoritmo Prod"cto
?ar
P& n"m- entero
Inicio
P 1
!eer n"m
2ientras n"m LQM 9acer
P pIn"m
!eer n"m
.in mientras
+scri*ir p
.in
EJERCI CIOS: TEMA 2
1. 3eali:ar "n programa 8"e con(ierta los grados a radianes.
Algoritmo con(ertir
?ar
Grados& rad- real
Inicio
+scri*ir RIntrod"ce los gradosS
!eer grados
Si grados LQ 6M
+ntonces grados grados mod 6M
.in si
3ad grados / 1/M
+scri*ir rad R radiantesS
.in
2. 3eali:ar "n algoritmo 8"e pida "n (alor entero 8"e e8"i(ale a "n nFmero de
d"ros ' me calc"le a c"antos *illetes de )MMM& 1MMM& monedas de 2MM& 2)& 1.
Algoritmo cam*io
?ar
%"ros- real
Inicio
+scri*ir RIntrod"ce los d"rosS
!eer d"ros
%"ros d"ros I )
+scri*ir d"ros di( )MMM R*illetes de )MMMS
%"ros d"ros mod )MMM
+scri*ir d"ros di( 1MMM R*illetes de 1MMMS
%"ros d"ros mod 1MMM
+scri*ir d"ros di( 2MM Rmonedas de 2MMS
%"ros d"ros mod 2MM
+scri*ir d"ros di( 2) Rmonedas de 2)S
%"ros d"ros mod 2)
+scri*ir d"ros Rmonedas de 1S
.in
. 3eali:ar "n programa 8"e pida al "s"ario la (elocidad en m/s ' el radio de la
circ"nferencia de la pista& ' res"ltada el programa de("el(e el tiempo 8"e tarda el
atleta en dar 2 ("eltas a la pista& sa*iendo 8"e el atleta descansa 1 min"to cada
1MMM metros.
Algoritmo recorrido
?ar
?elocidad&radio&tiempo&longit"d- entero
Inicio
+scri*ir RIntrod"ce la (elocidadS
!eer (elocidad
+scri*ir RIntrod"ce el radioS
!eer radio
!ongit"d $ I .1$16 I radio
%escanso longit"d di( 1MMM
1iempo longit"d di( (elocidad H descanso I 6M
+scri*ir tiempo
.in
ESTRUCTURA GENER A L DE UN PROGRAMA
TEMA 3
1. Concepto de programa.
2. Instr"cciones ' tipos.
. +lementos *7sicos de "n programa.
$. +str"ct"ra de algoritmos ' programas.
1. C4NC + P14 %+ P 3 4G3A2A-
6n programa es "n con#"nto de instr"cciones 8"e al ser e#ec"tadas
res"el(en "n pro*lema.
6n programa tiene partes-
1. +ntrada de dato s - Normalmente se (a a e#ec"tar a tra(Ds de
instr"cciones de lect"ra& ' en lo 8"e se le pide al "s"ario la informacin
8"e el programa (a a necesitar para e#ec"tarse ' se 9ace a tra(Ds de
lect"ras.
2. Acciones de "n algoritm o - Parte en la 8"e se res"el(e el pro*lema
"sando los datos de entrada.
. Salida- 2ostrar en "n dispositi(o de salida los res"ltados de las acciones
anteriormente reali:adas. Son acciones de escrit"ra.
+n la parte de las acciones a e#ec"tar se disting"ir7n dos partes-
> %eclaracin de (aria*les.
> Instr"cciones del programa.
2. INS136CCI4N+S O 1IP4S-
Para 8"e "na instr"ccin se e#ec"te tiene 8"e ser lle(ada a memoria. +n
c"anto al orden de e#ec"cin de las instr"cciones& el programa p"ede ser de dos
tipos-
> Programas lineales- Se (a e#ec"tando "na instr"ccin m7s otra '
el orden de e#ec"cin es ig"al al orden de escrit"ra.
> Programas no lineales- !as instr"cciones no se e#ec"tan en el
mismo orden en el 8"e aparecen escritas& sino 8"e se reali:an
saltos 8"e nos mandan de "nas instr"cciones a otras.
N"nca se de*en 9acer saltos no lineales.
1ipos de instr"ccione s -
1. Inicio ' fin.
2. Asignacin- %ar "n (alor a "na (aria*le.
. !ect"ra / escrit"ra- Introd"cir o sacar informacin por dispositi(os +/S.
$. Instr"cciones de *if"rcacin- Alternan el orden de e#ec"cin del programa.
Salto a otra instr"ccin 8"e no es la sig"iente.
$.1. Pif"rcacin incondicional- +l salto se prod"ce siempre 8"e el programa
(a'a a esa instr"ccin- Goto Ir a.
$.2. Pif"rcacin condicional- Se e#ec"tan "n con#"nto de instr"cciones " otras
dependiendo del (alor de("elto al e(al"ar "na condicin.
+s la 8"e (amos a "sar.
. +!+2+N14S P S IC4S %+ 6N P34G3A2A-
BC"D es la sinta,is de " n leng"a#eE-
Con#"nto de reglas 8"e tenemos 8"e seg"ir a la 9ora de escri*ir "n
programa en ese leng"a#e tal 8"e si no seg"imos esas reglas de sinta,is el
compilador da errores.
+lementos del leng"a#e de programacin-
1. Pala*ras reser(ada s - Son "n con#"nto de pala*ras especiales 8"e nos sir(en
para definir la estr"ct"ra del programa& ' solo se p"eden "sar para el fin para
el 8"e est7n reser(adas.
2. Identifica d ore s - Son los nom*res 8"e aparecen en el programa dados por el
"s"ario. Son por tanto los nom*res de (aria*les& de constantes& de
s"*programas ' nom*res de tipos creados por el "s"ario.
. Caracteres especi a l e s - Sir(en como separadores entre sentencias& por e#emplo
el J.
$. Instr"ccio n es- %e tipos& sec"enciales& repetiti(as ' selecti(as& ' p"eden
aparecer elementos especiales =*"cles& contadores& interr"ptores '
ac"m"ladores;.
P"cle- 6n con#"nto de instr"cciones 8"e se repiten "n nFmero
finito de (eces. !le(a asociado aparte de las instr"cciones "na
condicin 8"e es la 8"e determina c"ando se termina "n *"cle.
+#ec"cin de "n *"cle =iteracin;. !os *"cles se p"eden anidar
"nos dentro de otros& ' p"ede 9a*er (arios *"cles al mismo ni(el&
pero n"nca se entrela:an.
Contador- 6n elemento c"'o (alor se incrementa o decrementa
en "n (alor constante en cada iteracin de "n *"cle& ' se "tili:a
para controlar la condicin del *"cle.
Ac"m"lador- +s "na (aria*le 8"e tam*iDn se s"ele "sar en los
*"cles ' 8"e se incrementa o decrementa en cada iteracin del
*"cle& pero no en "na cantidad constante.
Algoritmo e#emplo
?ar cont& n"m& s"m- entero
Inicio
Cont M
S"m M
2ientras cont KL
!eer n"m
S"m s"m H n"m
Cont cont H1
.in mientras
+scri*ir s"ma
+nd
Interr"ptor =marca& *andera o flag;- +s "na (aria*le 8"e sir(e
como indicador de "na determinada informacin ' 8"e solo
p"ede tomar "no de dos (alores. +l (alor de la (aria*le tiene
asociado "n signo ' p"ede (ariar a lo largo de la e#ec"cin.
Algoritmo e#emplo
?ar cont& n"m& s"ma- entero
Neg- *oolean
Inicio
Cont M
S"m M
Neg falso
2ientras cont KL
!eer n"m
Si n"m K M
+ntonces neg (erdadero
.in si
S"m s"m H n"m
Cont cont H 1
.in mientras
Si negQ(erdadero
+ntonces escri*ir =RSe 9a leAdo negati(osS;
Sino escri*ir =RNo negati(osS;
.in si
.in
Si es leer "n nFmero negati(o o 9asta nFmeros-
2ientras =cont KL ; ' =neg Q (erdadero;
$. +SC3 I1 63A %+ A!G43I124S O P34G3A2AS-
+n pse"docdigo el programa tiene dos partes& la ca*ecera ' el c"erpo. !a
ca*ecera contiene el nom*re del algoritmo& ' el c"erpo contiene 2 partes.
!a primera es la :ona de declaraciones de (ar ' const& ' la seg"nda es la
:ona de las instr"cciones del programa.
+n la :ona de instr"cciones para 8"e 8"ede m7s legi*le 9a' 8"e "sar la
identacin ' si es necesario 9a' 8"e "sar comentarios entre lla(es.
EJERCI CIOS: TEMA 3
1. BC"7les ' c"7ntos son los nFmeros primos comprendidos entre 1 ' 1MMME
Algoritmo neprimos
Const
PrimeroQ1
!imiteQ1MMM
?ar
cont& i& #- entero
primo- *oolean
Inicio
Cont M
%esde iQ primero 9asta limite
primo (erdadero
# 2
mientras =iL#; ' =primo Q(erdadero;
Si i mod # Q M
+ntonces primo falso
Sino # # H 1
.in si
.in mientras
Si primo Q (erdadero
+ntonces escri*ir iS R
Cont cont H 1
.in si
.in desde
+scri*ir R+ntre RprimeroS ' RlimiteS 9a' RcontS nf primosS
.in
2. Calc"lar el m7,imo de nFmeros positi(os introd"cidos por teclado& sa*iendo 8"e
metemos nFmeros 9asta 8"e introd":camos "no negati(o. +l negati(o no c"enta.
Algoritmo ma,imo
?ar
N"m& ma,- entero
Inicio
2a, M
+scri*ir RIntrod":ca nf positi(os ' para aca*ar introd":ca "no negati(oS
!eer n"m
2ientras n"m LQM
Si n"m Lma,
+ntonces ma, n"m
.in si
!eer n"m
.in mientras
+scri*ir R+l ma'or nFmero esS ma,
.in
. %eterminar c"ales son los mFltiplos de ) comprendidos entre 1 ' N.
Algoritmo m"ltiplos
?ar
i- entero
Inicio
%esde iQ1 9asta n
Si i mod ) QM
+ntonces escri*ir i
.in si
.in desde
.in
INTRODUCCIN A LA PRO G RAMACIN E S TRUCTURADA:
TEMA 4:
1. 1Dcnicas de programacin.
2. Programacin mod"lar.
. Programacin constr"ctora.
$. +str"ct"ra sec"encial.
). +str"ct"ras selecti(as.
6. +str"ct"ras repetiti(as.
7. Anidacin de *"cles ' condicionales.
/. Control de datos de entrada.
1. 1gCNICAS %+ P34G3A2ACI5N-
+l programar con fl"#ogramas o diagramas NS res"lta m"' lioso en el momento en
8"e el programa se complica& por eso (amos a "tili:ar siempre el pse"docdigo& en
el 8"e (amos a "tili:ar dos tDcnicas de programacin 8"e no se "san por separado&
sino 8"e son complementarios.
+stas tDcnicas son-
Programacin mod"lar- Consiste en di(idir el programa en partes
llamadas md"los& e implementar cada "no de esos md"los por
separado.
Programacin estr"ct"rada- C"'o o*#eti(o es 9acer m7s legi*le ' lgico
la estr"ct"ra del programa "tili:ando para ello solamente tres tipos de
estr"ct"ras- selecti(as& sec"enciales =condicionales; ' repetiti(as.
2. P34G3A2ACI5N 24%6!A3-
Se *asa en di(idir el programa en partes llamadas md"los& 8"e se anali:an
' codifican de forma independiente ' 8"e reali:an "na determinada tarea 8"e ser7
en realidad "na parte del pro*lema total a resol(er.
+n todo algoritmo o programa e,istir7 "n md"lo o programa principal
8"e es al 8"e transfiere el control c"ando comien:a la e#ec"cin del programa& '
l"ego desde Dl& se (a llamando al resto de los s"*programas.
!lamar a "n s"*programa 8"iere decir transferirle el control& es decir 8"e
se comien:a a e#ec"tar ' lo 9ar7 desde el comien:o del s"*programa 9asta 8"e se
termine ' al terminar de("el(e el control al s"*programa 8"e lo llam. %entro del
s"*programa a s" (e: tam*iDn p"edo llamar a otros pero en c"al8"ier caso al final
se de("el(e el control al md"lo 8"e 9ace la llamada. +l control al programa
llamado se de("el(e a la instr"ccin sig"iente a la 8"e se 9i:o la llamada.
6n md"lo solo tiene acceso a los md"los a los 8"e llama ' a los
s"*md"los a los 8"e a s" (e: llaman Dstos. !os res"ltados prod"cidos por "n
md"lo p"eden ser "tili:ados por otros.
No e,iste "n criterio fi#o para determinar el tama@o& ni m"' grandes ni m"'
pe8"e@os& la idea f"ndamental es 8"e realicen "na Fnica cosa ' m"' concreta.
!os md"los o s"*programas reci*en diferentes nom*res segFn el leng"a#e
de programacin ' segFn s" tipo. Se llaman procedimientos ' f"nciones =Pascal&
C;& s"*r"tinas =*asic& fortran;& secciones =co*ol;&...
. P34G3A2ACI5N +S136C 1 63A%A-
!a caracterAstica f"ndamental es 8"e se (a a *asar en el "so Fnicamente de
tres estr"ct"ras de control. Para ello se apo'a en las sig"ientes filosofAas-
1. 3ec"rsos a*stractos- Son los rec"rsos con los 8"e no contamos a la 9ora
de programar& pero en los 8"e nos apo'amos a la 9ora de sol"cionarlos.
+stos rec"rsos se tienen 8"e ir transformando en rec"rsos concretos.
2. %ise@o descendente =top do<n;- Se trata de ir descomponiendo el
pro*lema en ni(eles o pasos cada (e: m7s sencillos& tal 8"e la salida de
"na etapa (a a ser(ir como entrada de la sig"iente. +n las primeras
etapas tomamos el p"nto de (ista e,terno& es decir& 8"e entradas 9a' '
8"e salidas 9a'& ' a medida 8"e (amos *a#ando de ni(el& lo (amos
(iendo de modo interno =como lo 9ace por dentro;.
. +str"ct"ras *7sicas de control- Para 9acer c"al8"ier programa
sig"iendo los anteriores pasos de ra:onamiento& al final codificamos el
programa "sando tres tipos de sec"encias =repetiti(as& alternati(as '
sec"enciales;.
Al final todo programa (a a tener "na Fnica entrada ' "na Fnica salida.
%esde la entrada tienen 8"e e,istir caminos 8"e nos permiten pasar por
todas las partes del programa ' lle(arnos a la salida& ' finalmente no se (an a
permitir los *"cles infinitos.
$. +S136C163A S+C6+NCIA!-
+s c"ando "na instr"ccin sig"e a otra en sec"encia& es decir& la salida de
"na instr"ccin es la entrada de la sig"iente.
.!6G4G3A2A- %IAG3A2AS NS- PS+6%4C5%IG4-
!eer n"m
N"m n"mI2
+scri*ir n"m
Si Cond No
Acc1 Acc2
). +S136C163AS S+ !+C1I?A S -
Se e(alFa la condicin ' en f"ncin del res"ltado se e#ec"ta "n con#"nto de
instr"cciones " otro. Ta' tres tipos de selecti(as =simple& do*le o mFltiple;-
I Simple- +s la estr"ct"ra - SA KcondL
entonces KaccionesL
fin sA
+(al"amos la condicin ' si es (erdadera e#ec"tamos el con#"nto de condiciones
asociadas al entonces& ' si es falso& no 9acemos nada.
.!6G4G3A2A- %IAG3A2A NS-
KCond1L Condicin
SI N4
KaccionesL
KaccionesL KaccionesL
I %o*le- Se e(alFa la condicin ' si es (erdad se e#ec"tan el con#"nto de acciones
asociadas a la parte entonces& ' si es falso se e#ec"tan el con#"nto de acciones
asociadas a la parte sino.
.!6G4G3A2A- %IAG3A2AS NS- PS+6%4C5%IG4-
Si No
Cond SA KcondL
+ntonces
KaccionesL
Acc1 Acc2 Sino KaccionesL
.in si
6na condicin se e#ec"ta "na Fnica (e:.
I Alternati(a mFltiple- Se e(alFa "na condicin o e,presin 8"e p"ede tomar n
(alores. SegFn el (alor 8"e la e,presin tenga en cada momento se e#ec"tan las
acciones correspondientes al (alor. +n realidad e8"i(ale a "n con#"nto de
condiciones anidadas. +n c"al8"ier leng"a#e& es Case o S<it9.
PS+6%4C5%IG4-
SegFn sea Ke,presinL
K?alor1L- Kaccin1L
K(alor2L- Kaccin2L
.................................
UKotroL- KaccionesLV
fin segFn
> 4tro- !as acciones asociadas al (alor otro se e#ec"tan c"ando la e,presin no
toma ning"no de los (alores 8"e aparecen antes. 4t9er<ise& +lse.
+l (alor con el 8"e se compara la e,presin& (a a depender de los leng"a#es& de lo
8"e sea ese (alor. +n general ese (alor p"ede ser "n (alor constante& "n rango de
(alores o incl"so otra condicin
.!6G4G3A2A- %IG3A2AS NS-
+,presin
?1 ?2 ? ?$ ... 4tro
+,pr
?1 ?2 ? ?$ ?) ?6
Tacer "n programa 8"e p"eda di*"#ar "na recta& "n p"nto o "n rect7ng"lo.
Algoritmo di*"#o
?ar op- car7cter
+scri*ir =RIntrod"ce "na opcinS
1. P"nto
2. 3ecta
. 3ect7ng"loS;
!eer op
SegFn sea op
R1S- leer ,
.........
R2S- leer ,
..........
RS- leer ,
..........
RotroS- escri*ir Ropcin errneaS
fin segFn
Para "n rango de (alores-
!eer "na nota ' escri*ir en pantalla la calificacin-
?ar nota- entero
!eer nota
SegFn sea nota
1..$- escri*ir Rs"spensoS
)..6- escri*ir Rapro*adoS
7../- escri*ir RNota*leS
0- escri*ir RSo*resalienteS
1M- escri*ir R2atric"la de 9onorS
fin segFn
+n alg"nos leng"a#es se permite poner "na condicin-
SegFn sea nota
Nota LQ1 ' nota KQ$- escri*ir Rs"spensoS
+n pse"docdigo no se p"eden poner condiciones.
6. +S136C163AS 3+P+1I1I?AS-
+n a8"ella 8"e contiene "n *"cle =con#"nto de instr"cciones 8"e se repiten
"n nFmero finito de (eces;. Cada repeticin del *"cle se llama iteracin. 1odo
*"cle tiene 8"e lle(ar asociada "na condicin& 8"e es la 8"e (a a determinar
c"ando se repite el *"cle.
Ta' c"atro tipos de *"cles& a"n8"e solo se p"eden "sar tres-
1. 2ientras 9acer h9ile do
2. 3epetir 9asta repeat "ntil
. %esde for
$. Iterar loop - No se "sa.
2ientras 9 acer-
Sinta,is-
PS+6%4C5%IG4- .!6G4G3A2A- %IAG3A2AS NS-
2ientras KcondL 9acer No
KaccionesL Cond mientras cond
fin mientras Si
Kacc1L
acciones
."ncionamiento-
!a condicin del *"cle se e(alFa al principio& antes de entrar en Dl. Si la
condicin es (erdadera& comen:amos a e#ec"tar las acciones del *"cle ' desp"Ds de
la "ltima (ol(emos a preg"ntar pro la condicin. +n el momento en el 8"e la
condicin sea falsa nos salimos del *"cle ' e#ec"tamos la sig"iente condicin al
*"cle.
Al e(al"arse la condicin antes de entrar en el *"cle al principio& si la
condicin al ser e(al"ada la primera (e: es falsa& no entraremos n"nca en el *"cle&
el *"cle p"ede 8"e se e#ec"te M (eces& por tanto "saremos o*ligatoriamente este
tipo de *"cle en el caso de 8"e e,ista la posi*ilidad de 8"e el *"cle p"eda
e#ec"tarse M (eces.
3epetir 9asta-
Sinta,is-
.!6G4G3A2A- %IAG3A2AS NS- .!6G4G3A2A-
acciones 3epetir
KaccL KaccionesL
9asta KcondicinL
No Si 3epetir KcondL 9asta
Cond
."ncin-
Se repite el *"cle 9asta 8"e la condicin sea (erdadera. Se repite mientras
la condicin sea falsa. !a condicin se e(alFa siempre al final del *"cle& si es falsa
(ol(emos a e#ec"tar las acciones& si es (erdad se sale del *"cle.
Como la condicin se e(alFa al final& incl"so a"n8"e la primera (e: 'a sea
(erdadera& 9a*remos pasado al menos "na (e: por el *"cle.
+s decir 8"e c"ando "n *"cle se tenga 8"e e#ec"tar como mAnimo "na (e:&
podremos "sar "na estr"ct"ra repetir o mientras& la Fnica diferencia 8"e 9a*r7
entre las dos& es 8"e para 9acer lo mismo& las condiciones tienen 8"e ser contrarias.
!eer nFmeros ' dar s" s"ma-
Cont M Cont M
S"ma M s"ma M
2ientras cont KL repetir
S"ma s"ma H n"m leer n"m
!eer n"m s"ma s"ma H n"m
Cont cont H 1 cont cont H 1
.in mientras 9asta cont Q
%esde-
+ste tipo de *"cles se "tili:a c"ando se sa*e 'a antes de e#ec"tar el *"cle el
nFmero e,acto de (eces 8"e 9a' 8"e e#ec"tarlo. Para ello el *"cle lle(ara asociado
"na (aria*le 8"e denominamos (aria*le Andice& a la 8"e le asignamos "n (alor
inicial ' determinamos c"al (a a ser s" (alor final ' adem7s se (a a incrementar o
decrementar en cada iteracin de *"cle en "n (alor constante& pero esto se (a a
9acer de manera a"tom7tica& el programador no se tiene 8"e oc"par de
incrementar o decrementar esta (aria*le en cada iteracin& sino 8"e (a a ser "na
operacin implAcita =lo 9ace por defecto;.
Por tanto en cada iteracin del *"cle& la (aria*le Andice se act"ali:a
a"tom7ticamente ' c"ando alcan:a el (alor 8"e 9emos p"esto como final se
termina la e#ec"cin del *"cle.
Sinta,is-
PS+6%4C5%IG4-
%esde K(ar AndiceLQK(alor inicialL 9asta K(alor finalL
KaccionesL
fin desde
.!6G4G3A2AS- %IAG3A2AS NS-
? ?i
%esde (Q(i 9asta (1
? KL ?1 KsentenciasL
sentencias
( ( H 1
P"cle con salida inter n a- loop iter a r.
Permite la salida del *"cle desde "n p"nto intermedio del mismo siempre
8"e se c"mpla la condicion 8"e aparece& entonces nos salimos a la sig"iente
instr"ccin del *"cle.
Iterar
Ksent1L
salir si KcondL N6NCA S+ 6SA
Ksent2L
fin iterar
7. +S136C163AS ANI%A%AS-
1anto las estr"ct"ras selecti(as como los *"cles se p"eden anidar "nos
dentro de otros.
Anidacin de condicionales-
!a (enta#a de anidar sentencias condicionales& es 8"e c"ando "na se c"mple
no 9a' por 8"e mirar a las 8"e estan de*a#o. 1enemos 8"e tratar anidar la
condicion en la parte sino =else; en (e: 8"e en la parte entonces.
Si Kcondicion1L
+ntonces Ksentencia1L
Sino si Kcondicion2L
+ntonces Ksentencia2L
Sino si Kcondicion2L
+ntonces KsentenciaL
.in si
.in si
.in si
+l case siempre e8"i(ale a "na anidacin de condicionales& pero no al re(es.
P"cles anidados-
Al ig"al 8"e podemos colocar "nas e,presiones dentro de otras& "nos *"cles
p"eden estar dentro de otros& pero n"nca p"eden cr":arse. Al anidar *"cles 9a'
8"e tener en c"enta 8"e el *"cle mas interno f"nciona como "na sentencia mas del
*lo8"e mas e,terno ' por tanto en cada iteracin del *"cle mas e,terno se (an a
e#ec"tar todas las iteraciones del *"cle mas interno por cada iteracin del mas
e,terno.
Si el *"cle mas e,terno se repite n (eces ' el mas interno se repite m (eces&
si por cada iteracin del mas e,terno se repite el mas interno& el nFmero total de
iteraciones ser7 mIn.
!os *"cles 8"e se anidan p"eden se de ig"al o distinto tipo.
%esde iQ1 9asta /
%esde #Q1 9asta )
+scri*ir RProfesorSiSintrod":ca s" asignat"ra nfS#
!eer asignat"ra
.in desde
.in desde
/. C4N134! %+ %A14+S %+ +N 1 3A%A-
1. C"ando e,iste "n (alor centinela 8"e determina el fin del *"cle-
+l *"cle se (a a repetir mientras no se lea "n determinado (alor. !a
primera lect"ra se (a a reali:ar f"era del *"cle& ' si la primera (e: 8"e lo leo 'a
enc"entro ese (alor centinela no podemos entrar en el *"cle ' seg"ir7 a
contin"acin& sino entramos en el *"cle.
Se (a "tili:ar "na estr"ct"ra 2ientras.
2. !ect"ra sec"encial de "n fic9ero-
1endremos 8"e leer del primero al Fltimo registro del fic9ero. Ta*r7 8"e
"sar "n 2ientras& a"n8"e 9a' dos posi*ilidades- !eer f"era del *"cle ' al final de
*"cle& o leer dentro al principio del *"cle. Se "sa "na " otra dependiendo del
leng"a#e.
. C"ando en "n *"cle sa*emos el nFmero e,acto de (eces 8"e se repite el *"cle-
6samos el %esde...Tasta.
$. Control de datos para no permitir datos erroneos-
No de#ar seg"ir al "s"ario 9asta 8"e no introd":ca datos correctos. Ta' 8"e
"sar "n 3epetir...Tasta.
3epetir 3epetir
!eer datos leer op
Tasta =datos correctos; 9asta =opLQ1; ' =opKQ;
PGINA M/176
EJERCI CIOS: TEMA 4
1. Al final de c"rso deseamos sa*er c"al 9a sido el al"mno de primero con me#or
nota media. Se sa*e 8"e este a@o entraron 1)M al"mnos ' 8"e en primero todos
tienen ) asignat"ras. %ar el nom*re ' la nota media.
Algoritmo notaemedia
Const
Al"mnosQ1)M
Asignat"rasQ)
?ar
Nom*re& me#oreal"m- cadena
Nota& s"ma& media& ac"m- real
I& #- entero
Inicio
Ac"m M
%esde iQ1 9asta al"mnos 9acer
S"ma M
+scri*ir RIntrod":ca el nom*re del al"mnoS
!eer nom*re
%esde #Q1 9asta asignat"ras 9acer
+scri*ir RIntrod":ca la nota de la asignat"raS
!eer nota
S"ma s"ma H nota
.in desde
2edia s"ma / asignat"ras
Si media L ac"m
+ntonces ac"m media
PGINA 1/176
.in si
.in desde
2e#oreal"m nom*re
+scri*ir R+l me#or al"mno es Rme#oreal"m
+scri*ir RS" nota media es Rac"m
.in
2. Calc"lar la s"ma de los di(isores de cada nFmero introd"cido por teclado.
1erminaremos c"ando el nFmero sea negati(o o M.
Algoritmo di(isores
?ar
N"mero& i& s"ma -entero
Inicio
+scri*ir RIntrod"ce "n nFmero& ' para aca*ar "no negati(oS
!eer nFmero
2ientras n"mero L M
S"ma M
%esde iQ1 9asta n"mero /2
Si n"mero mod i QM
+ntonces s"ma s"ma H i
.in si
.in desde
S"ma s"ma H n"mero
+scri*ir R!a s"ma de los di(isores del nFmero es Rs"ma
!eer n"mero
.in mientras
.in
. Se coloca "n c7pital C& a "n interes I& d"rante 2 a@os ' se desea sa*er en c"anto
se 9a*r7 con(ertido ese capital en m a@os& sa*iendo 8"e es ac"m"lati(o.
Algoritmo interes
?ar
I& #& m- entero
C& temporal- real
Inicio
PGINA 2/176
repetir
+scri*ir RIntrod"ce el capital& el interes ' el tiempoS
!eer c& i& m
Tasta =cLM; ' ==iKQM;'=iKQ1MM;; ' =m LQM;
%esde #Q1 9asta m
C c I =1HI/1MM;
.in desde
+scri*ir R1ienes RcS ptsS
.in
$. %ada "na fec9a en formato dia/mes/a@o determinar el nFmero de dAas ' el
nom*re del mes de dic9a fec9a& ' sacar por pantalla la fec9a con(ertida a formato
de dia RdeS mes RdeS a@o.
Algoritmo fec9a
?ar
%ia& mes& a@o& nedias- entero
Nemes- cadena
Inicio
3epetir
+scri*ir RIntrod"ce la fec9a en formato dia mes a@oS
!eer dia& mes& a@o
SegFn sea mes
1&M1- nemes ReneroS
nedias 1
2&M2- nemes Rfe*reroS
si a@o mod $QM
entonces nedias 20
entonces nedias 2/
&M- nemes Rmar:oS
nedias 1
$&M$- nemes Ra*rilS
nedias M
)&M)- nemes Rma'oS
nedias 1
6&M6- nemes R#"nioS
nedias M
7&M7- nemes R#"lioS
PGINA /176
PGINA $ /176
= X
nedias 1
/&M/- nemes RagostoS
nedias 1
0&M0- nemes Rseptiem*reS
nedias M
1M- nemes Roct"*reS
nedias 1
11- nemes Rno(iem*reS
nedias M
12- nemes Rdiciem*reS
nedias 1
fin segFn sea
9asta =dia KQnedias; ' ==mes LQ1;'=mes KQ12;; ' =a@o LQM;
escri*ir R+l mes de RnemesStiene RnediasS diasS
escri*ir R!a fec9a es- RnediasS de RnemesS de Ra@o
fin
n

((a b)
i
3) + n
i = 1
n1

(2 + a * (i 1))
i =2
). %ada la sig"iente frm"la-
A(erig"ar el (alor de , pidiendo al "s"ario los (alores de n& a& *.
Algoritmo ec"acion
?ar
N& a& *& primer& segFn& i& #- entero
Y- real
Inicio
Primer M
SegFn 1
3epetir
+scri*ir RIntrod"ce el (alor de n& a& *S
!eer n& a& *
Tasta nLQM
%esde iQ1 9asta n
Primer ===a>*;\i i;Hn;Hprimer
.in desde
%esde #Q2 9asta n>1
SegFn ==2IaI=i>1;;IsegFn;
.in desde
PGINA ) /176
Y primer / segFn
+scri*ir ,
.in
6. %ada la sig"iente serie matem7tica-
a1QM
a2QM
anQan>1 H =2Ian>2; para nLQ
%eterminar c"al es el (alor ' el rango del primer tDrmino c"'o (alor sea ma'or o
ig"al a 2MMM.
Algoritmo serie
?ar
A1& a2& an& cont- entero
Inicio
A1 1
A2 M
An a1 H =2Ia2;
N
2ientras an K 2MMM
A2 a1
A1 an
An a1 H =2Ia2;
Cont cont H 1
.in mientras
+scri*ir R+l rango es RcontS ' el res"ltado esSan
fin
PGINA 6 /176
SUBPROGRA M A S : PROCEDI M IENTOS Y FUNCIONES.
TEMA 5
1. Introd"ccin a los s"*programas o s"*algoritmos.
2. ."nciones.
. Procedimientos.
$. m*itos- (aria*les locales ' glo*ales.
). Com"nicacin entre s"*programas- Paso de par7metros.
> 1ipos ' mDtodos de paso de par7metros.
> Paso de par7metros por copia.
> Paso de par7metros por referencia.
> Paso de par7metros por nom*re.
6. ."nciones ' procedimientos como par7metros.
7. +fectos laterales.
/. 3ec"rsi(idad.
1. IN134%6CCI5N A !4S S6P P 34G3A2AS 4 S6 P A !G43I 1 24S-
!a programacin mod"lar es "na de las tDcnicas f"ndamentales de la
programacin. Se apo'a en el dise@o descendente ' en la filosofAa de Rdi(ide '
(encer7sS& es decir se trata de di(idir el pro*lema dado& en pro*lemas m7s simples
en 8"e cada "no de los c"ales lo implementaremos en "n md"lo independiente. A
cada "no de estos md"los es a lo 8"e llamamos s"*algoritmos o s"*programas.
Siempre e,istir7 "n md"lo o programa principal 8"e es con el 8"e
comien:a la e#ec"cin de todo el programa& ' a partir de Dl iremos llamando al
resto.
Cada (e: 8"e se llama a "n s"*programa se le pasa la informacin 8"e
necesita en la llamada& a contin"acin comien:a a e#ec"tarse el s"*programa
PGINA 7 /176
llamado& ' c"ando termine s" e#ec"cin& de("el(e el control a la sig"iente
instr"ccin a la de llamada en el programa 8"e lo llam.
+n c"anto a la estr"ct"ra de "n s"*programa es ig"al a la estr"ct"ra de "n
programa& (a a tener "na informacin de entrada 8"e es la 8"e le pasamos al
9acer la llamada ' 8"e se coloca #"nto al nom*re del s"*programa. %esp"Ds (a a
tener "n con#"nto de acciones& declarar otras (aria*les propias del s"*programa& '
al terminar la e#ec"cin p"ede 8"e de("el(a o no res"ltados al programa 8"e lo
llam.
Ta' dos tipos f"ndamentales de s"*programas- ."nciones '
procedimientos.
2. .6NCI 4 N +S-
%esde el p"nto de (ista matem7tico& "na f"ncin es "na operacin 8"e toma
"no o (arios operandos& ' de("el(e "n res"ltado. O desde el p"nto de (ista
algorAtmico& es "n s"*programa 8"e toma "no o (arios par7metros como entrada '
de("el(e a la salida "n Fnico res"ltado.
Pasca l- +n las f"nciones se p"ede de(ol(er m7s de "n Fnico res"ltado
mediante par7metros.
C- Se de("el(e todo por par7metros.
+ste Fnico res"ltado ir7 asociado al nom*re de la f"ncin. Ta' dos tipos de
f"nciones-
> Internas- Son las 8"e (ienen definidas por defecto en el leng"a#e.
> +,ternas- !as define el "s"ario ' les da "n nom*re o identificador.
Para llamar a "na f"ncin se da s" nom*re& ' entre parDntesis (an los
arg"mentos o par7metros 8"e se 8"ieren pasar.
%eclaracin de "na f"ncin-
!a estr"ct"ra de "na f"ncin es seme#ante a la de c"al8"ier s"*programa.
1endr7 "na ca*ecera =con el nom*re ' los par7metros; ' "n c"erpo=con la
declaracin de los par7metros de la f"ncin ' las instr"cciones;.
Sinta,is-
."ncion Knom*reef"ncionL =neparametro- tipo& neparametro- tipo;- tipo f"ncion
?ar K(aria*les locales f"ncionL
Inicio
KaccionesL
retorno K(alorL
fin Knom*reef"ncionL
!a lista de par7metros es la informacin 8"e se le tiene 8"e pasar a la
f"ncin. !os par7metros l"ego dentro de la f"ncin los podemos "tili:ar ig"al 8"e
si f"eran (aria*les locales definidas en la f"ncin ' para cada par7metro 9a' 8"e
poner s" nom*re ' tipo.
+l nom*re de la f"ncin lo da al "s"ario ' tiene 8"e ser significati(o.
+n las (aria*les locales se declaran las (aria*les 8"e se p"eden "sar dentro
de la f"ncin.
+ntre las acciones tendr7 8"e e,istir entre ellas "na del tipo re!r"! #$%&!r'.
+sta sentencia pondr7 fin a la e#ec"cin de la f"ncin ' de(ol(er7 el (alor de la
f"ncin& es decir& como (alor asociado al nom*re de mismo tipo 8"e el tipo de
datos 8"e de("el(e a la f"ncin& este (alor por tanto tiene 8"e ser del mismo tipo
PGINA / /176
8"e el tipo de datos 8"e de("el(e la f"ncin& 8"e es el 8"e 9a*remos indicado al
declarar la f"ncin en la parte final de la ca*ecera.
No se permiten f"nciones 8"e no de("el(an nada.
!os par7metros 8"e aparecen en la declaracin de la f"ncin se denominan
par7metros formales& ' los par7metros 8"e 'o "tili:o c"ando llamo a la f"ncin se
denominan par7metros act"ales o reales.
In(ocacin de "na f"ncin-
Para llamar a "na f"ncin se pone el nom*re de la f"ncin& ' entre
parDntesis los par7metros reales& 8"e podr7n ser (aria*les& e,presiones&
constantes&... pero siempre del mismo tipo 8"e los par7metros normales asociados
Knom*reef"ncionL =par7metros reales;
!a f"ncin p"ede ser llamada desde el programa principal o desde
c"al8"ier otro s"*programa.
Para llamar a la f"ncin desde c"al8"ier parte& implica el conocimiento
pre(io de 8"e Dsta f"ncin e,iste.
A tra(Ds de los par7metros reales de la llamada se proporciona a la f"ncin
la informacin 8"e necesita& para ello& al 9acer la llamada lo 8"e se prod"ce es "na
asociacin a"tom7tica entre par7metros reales ' par7metros formales. +sta
asociacin se reali:a segFn el orden de la aparicin ' de i:8"ierda ' derec9a.
Si el par7metro formal ' real no son del mismo tipo& en Pascal se prod"ce
"n error& ' en C se transforman los tipos si es posi*le.
!a llamada a "na f"ncin& siempre (a a formar parte de "na e,presi n & de
c"al8"ier e,presin en la 8"e en el p"nto en la 8"e se llama a la f"ncin& p"diera ir
colocado c"al8"ier (alor del tipo de datos 8"e de("el(e la f"ncin& esto se de*e a
8"e el (alor 8"e de("el(e "na f"ncin esta asociado a s" nom*re.
Pasos para 9acer la ll a mada a "na f"ncin-
1. Al 9acer la llamada ' ceder el control a la f"ncin& se asocia =asigna el (alor; de
cada par7metro real a cada par7metro formal asociado& siempre por orden de
aparicin ' de i:8"ierda a derec9a& por lo 8"e siempre 8"e no coincidan los
tipos ' el nFmero de par7metros formales ' reales& se prod"ce "n error.
2. Si todo 9a ido *ien& se e#ec"tan las acciones de la f"ncin 9asta 8"e lleg"emos a
"na de tipo re!r"! #$%&!r' 8"e pondr7 fin a la e#ec"cin. P"eden e,istir (arias
sentencias de retorno en la misma f"ncin& pero en cada llamada solo se podr7
e#ec"tar "no.
. Se le asocia al nom*re de la f"ncin el (alor retornado ' se de("el(e el control
al s"*programa 8"e 9i:o la llamada pero s"stit"'endo el nom*re de la f"ncin
por el (alor de("elto.
4tra f o rma de especificar el retor n o de "na f"ncin-
Se le asigna el (alor de("elto al nom*re de la f"ncin.
Nef"ncion (alor
+#emplo de f"ncin-
6na f"ncin 8"e calc"le la mitad del (alor 8"e le paso par7metro.
S"ponemos 8"e es "n (alor entero.
."ncion mitad =n- entero;- real
?ar m- real
Inicio
2 n/2
3etorno m
PGINA 0 /176
.in mitad
Algoritmo calcemitad
?ar n"m- entero
Inicio
+scri*ir RIntrod"ce "n nFmero para 9allar s" mitadS
!eer n"m
+scri*ir R!a mitad de Rn"mS es Rmitad=n"m;
.in
( L% )*"+,-" .!&! /*e0e .er &&%1%0% 0e.0e *"% e2/re.,-".
. P34C+%I2I+N14S-
+l incon(eniente de "na f"ncin es 8"e solo p"ede de(ol(er "n Fnico (alor&
por lo 8"e sA nos interesa de(ol(er M o N (alores& a"n8"e p"edo "sarlo para
de(ol(er "n solo (alor& de*o "sar "n procedimiento.
6n procedimiento es "n s"*programa o "n s"*algoritmo 8"e e#ec"ta "na
determinada tarea& pero 8"e tras e#ec"tar esa tarea no tienen ningFn (alor
asociado a s" nom*re como en las f"nciones& sino 8"e si de("el(e informacin& lo
9ace a tra(Ds de par7metros.
Al llamar a "n procedimiento& se le cede el control& comien:a a e#ec"tarse '
c"ando termina de("el(e el control a la sig"iente instr"ccin a la de llamada.
%iferencias entre f"nciones ' procedimientos-
1. 6na f"ncin de("el(e "n Fnico (alor ' "n procedimiento p"ede de(ol(er M&1 o
N.
2. Ning"no de los res"ltados de("eltos por el procedimiento se asocian a s"
nom*re como oc"rrAa con la f"ncin.
. 2ientras 8"e la llamada a "na f"ncin forma siempre parte de "na e,presin&
la llamada a "n procedimiento es "na instr"ccin 8"e por sA sola no necesita
instr"cciones.
+sta llamada consiste en el nom*re del procedimiento ' (a entre parDntesis (an
los par7metros 8"e se le pasan. +n alg"nos leng"a#es =como el C;& se pone
delante la pala*ra !lamar a =Call; procedimiento =par7metro;.
Sinta,is-
Procedimiento Knom*reeprocL =KtipoepasoeparL Knom*reeparL- tipoepar&...;
?ar K(aria*les localesL- tipo
Inicio
KsentenciasL
fin Knom*reeprocL
!a ca*ecera (a a estar formada por el nom*re del procedimiento 8"e ser7
"n identificador ' 8"e de*e de ser significati(o& ' l"ego entre parDntesis los
par7metros o la informacin 8"e se le pasa al procedimiento. Para cada par7metro
9a' 8"e indicar el tipo de paso de par7metro. Ta' dos tipos f"ndamentales de paso
de par7metros& por (alor ' por referencia& si no ponemos tipo de paso de
par7metros& se toma el tipo de paso de par7metros por (alor.
+n el c"erpo del procedimiento donde (an las sentencias 'a no 9a*r7
ning"na de tipo Kretorno (alorL& a9ora *ien& si el procedimiento de("el(e
res"ltados a tra(Ds de s"s par7metros& cosa 8"e solo podr7 9acer a tra(Ds de los
par7metros 8"e se pasan por referencia& tendr7n 8"e e,istir sentencias de
PGINA $M /176
asignacin de (alores a estos par7metros pasados por referencia& a tra(Ds de los
c"ales se (an a de(ol(er los res"ltados.
Como se llama a "n procedimiento-
Ullamar a =Call;V nom*reeproc =parereales;
Pasos para 9acer la ll a mada a "n procedimiento-
1. Se cede el control al procedimiento al 8"e se llama ' lo primero 8"e se 9ace al
cederle el control es s"stit"ir cada par7metro formal de la definicin por el
par7metro act"al o real de la llamada asociado a Dl. +sta asociacin entre
par7metros formales ' reales se 9ace de i:8"ierda a derec9a por orden de
colocacin ' para 8"e se p"eda prod"cir esta asociacin tienen 8"e e,istir el
mismo nFmero de par7metros formales 8"e reales& ' adem7s el tipo tiene 8"e
coincidir con el del par7metro formal asociado& sino se c"mple alg"na de estas
condiciones 9a' "n error.
2. Si la asociacin 9a sido correcta comien:an a e#ec"tarse las instr"cciones del
procedimiento 9asta llegar a la Fltima instr"ccin. Al llegar a la instr"ccin se
("el(en a asociar los par7metros formales 8"e de("el(en los res"ltados a los
par7metros formales asociados en la llamada& es decir& de esta manera alg"nos
de los par7metros reales de la llamada 'a contendr7n los res"ltados del
procedimiento.
. .inalmente se cede el control a la sig"iente instr"ccin a la 8"e se 9ace la
llamada& pero teniendo en c"enta 8"e en esta instr"ccin ' en las sig"ientes
p"edo "sar 'a los par7metros reales en los 8"e se de(ol(ieron los res"ltados del
procedimiento para tra*a#ar con ellos.
Procedimiento mitad =n"m-entero&ent>sal 2-real;
Inicio
2 n"m/2
.in mitad
Algoritmo calcemitad
?ar
N- entero
2it- real
Inicio
+scri*ir RIntrod"ce "n nFmeroS
!eer n
2itad =n&mit;
+scri*ir R!a mitad esSmit
fin
$. 2PI 14 S- ?A3IAP ! +S ! 4 CA ! +S O G!4PA! + S-
BC"D es el 7m*ito de "n identifica d orE-
+l 7m*ito de "n identificador =(aria*les& constantes& f"nciones&...; es la
parte del programa en la 8"e se conoce ' por tanto se p"ede "sar "n identificador.
PGINA $1 /176
SegFn el 7m*ito 9a' 2 tipos de (aria*les& locales ' glo*ales-
1. !ocal- A8"ella 8"e est7 declarada ' definida dentro de "n s"*programa l"ego
s" 7m*ito coincidir7 con el 7m*ito del s"*programa en la 8"e este definida.
+sto 8"iere decir 8"e la (aria*le no tiene ningFn significado& no se conoce ' no
se p"ede acceder a ella desde f"era del s"*programa ' 8"e tiene "na posicin
de memoria distinta a la de c"al8"ier otra& incl"so si es de "na (aria*le 8"e
tiene el mismo nom*re pero 8"e est7 definida f"era del s"*programa.
!as (aria*les locales a "n s"*programa se definen en la parte de la definicin
de (aria*les del mismo. !os par7metros formales 8"e se le ponen a "n
s"*programa se comportan dentro de Dl como si f"eran tam*iDn (aria*les
locales a Dl.
2. Glo*ale s - Son las 8"e est7n definidas a ni(el del programa& es decir& s" 7m*ito
es el programa o algoritmo principal ' todos los s"*programas 8"e (an #"nto
con Dl.
A esta (aria*le podemos acceder desde c"al8"iera de los s"*programas ' el
programa principal& sal(o 8"e alg"no de esos s"*programas tenga definida "na
(aria*le local con el mismo nom*re 8"e la (aria*le glo*al& en este caso si "tili:o
el nom*re de esa (aria*le me referirD a la local& n"nca a la glo*al='a 8"e tienen
2 :onas de memoria distintas;.
!"gar en el 8"e se definen las (aria*les glo*ales-
+n alg"nos leng"a#es se define en el programa principal& ' esa (aria*le ser7
glo*al& en otros leng"a#es se definen f"era del programa principal ' f"era de
c"al8"ier otro s"*programa=antes de empe:ar el programa principal;. 2Dtodo
8"e (amos a "sar.
+l pro*lema de "sar (aria*les glo*ales es 8"e como todos los s"*programas
las p"eden modificar& p"ede ser posi*le 8"e 9a'a "sos inde*idos c"ando "n
s"*programa "tili:a "na (aria*le glo*al sin sa*er 8"e otro la 9a modificado& por
esa ra:n n"nca "saremos para pasar informacin entre los s"*programas
(aria*les glo*ales& sino 8"e "saremos (aria*les de entrada>salida& sal(o 8"e no nos
8"ede m7s remedio.
Procedimientos anidados-
!a anidacin de procedimientos no se permite en todos los leng"a#es '
consiste en 8"e dentro de "n procedimiento podamos definir o meter el cdigo de
otros.
Si la anidacin de procedimientos est7 permitida& se plantean m7s
pro*lemas en c"anto al 7m*ito& desde este p"nto de (ista& se dice 8"e "na (aria*le
local se conoce en el procedimiento en el 8"e est7 definida ' en todos los
procedimientos anidados a Dl 8"e son los 8"e componen el 7m*ito de dic9o
procedimiento& sal(o 8"e en alg"no de esos procedimientos anidados este definida
"na (aria*le local con el mismo nom*re en c"'o caso dentro de ese procedimiento
siempre nos referiremos a la (aria*le local definida en Dl por8"e siempre se
considera el 7m*ito m7s restringido.
PP
?ar A&P
P1
A&C&%
PGINA $2 /176
P2
A
P
%&+
P$ %&.
P)
P6 .&A
?A3IAP!+S 2PI14 S6PP34G3A2A
A del PP P$&P)
P del PP P1&P2&P&P$&P)&P6
A del P1 P1&P
C del P1 P1&P2&P
% del P1 P1&P2&P
A del P2 P2
% del P P
+ del P P
% del P$ P$&P)&P6
. del P$ P$&P)
. del P6 P6
A del P6 P6
). C426NICACI5N +N 1 3 + S6 PP34G3A2AS- PA S 4 %+ PA32+134 S .
!a me#or forma para lle(ar a ca*o la com"nicacin ente s"*programas& es
el paso de par7metros. 1rataremos de e(itar siempre 8"e sea posi*le el "so de
(aria*les glo*ales.
C"ando llamamos a "na f"ncin o procedimiento& le pasamos a tra(Ds de los
par7metros la informacin 8"e necesita& ' en el caso de "n procedimiento tam*iDn
de(ol(emos a tra(Ds de s"s par7metros los res"ltados. Para ello definiremos el tipo
del par7metro a principio del s"*programa& 8"e es lo 8"e conocemos como
par7metros formales& ' al 9acer la llamada pasamos la informacin a tra(Ds de los
par7metros reales.
BCmo se efectFa la c o rrespondencia e n tre par7metros f o rmales ' realesE-
+,isten 2 mDtodos-
1. Correspondencia posiciona l - +n este caso se empare#an los par7metros
formales ' reales por la posicin 8"e oc"pan =orden de declaracin; ' de
i:8"ierda a derec9a. Para 8"e se p"eda reali:ar esta asociacin& tiene
PGINA $ /176
8"e 9a*er el mismo nFmero de par7metros formales ' reales& ' con el
mismo tipo.
. =,-entero&'-real;
?ar a-real
. =&A;
2. Correspondencia por nom*re implAcit o - A9ora en la llamada al
s"*programa se pone e,plAcitamente a 8"e par7metro formal
corresponde cada real.
A9ora en la llamada ponemos el nom*re del par7metro formal&
separado por dos p"ntos =-; ' el nom*re del par7metro real 8"e le
pasamos& con lo c"al 'a no importa la posicin en la 8"e colo8"emos la
informacin.
. =,-&'-A;
. ='-A&,-;
6n leng"a#e 8"e permite esto es A%A.
6saremos siempre el primer mDtodo =posicional;.
Paso de par7metros-
%el modo de paso de par7metros (a a depender el res"ltado 8"e se o*tenga.
1. 1ipos de par7metros- SegFn se "sen para meter datos o para o*tener res"ltados.
+,isten tipos-
1. %e entrada - Son par7metros 8"e solo aportan informacin de entrada al
s"*progama en el 8"e pertenecen como par7metros. Aporta el (alor 8"e
tienen como entrada al s"*programa. +n el caso de "na f"ncin& todos
s"s par7metros son de este tipo.
Como solo sir(en como entrada& solo p"eden ser leAdos& pero no
modificados& ' a"n8"e se modificasen dentro de "n s"*programa& f"era
no (a a tener efecto esa modificacin.
2. %e salida - Se "san solo ' e,cl"si(amente para de(ol(er res"ltados a
tra(Ds de ellos. S" (alor al 9acer la llamada al s"*programa no nos
importa& sino 8"e ese (alor solo (a a tener importancia c"ando termina
la e#ec"cin del programa. 6n par7metro de este tipo tericamente
n"nca se p"ede leer& solo se (a act"ali:ar.
. %e entrada ' salida - +l (alor del par7metro tiene importancia tanto a la
entrada como a la salida del s"*programa& nos aporta informacin
c"ando llamamos al s"*programa ' por otra parte de(ol(emos a tra(Ds
de Dl res"ltados c"ando terminamos el s"*programa& en este caso& tiene
sentido tanto leer como act"ali:ar el par7metro.
Solo A%A es "n leng"a#e 8"e (a a soportar los tipos de paso de par7metro. Se
ponen como In& 4"t& In>4"t.
+l resto de los leng"a#es solo permiten dos tipos de par7metros& de entrada
=solo para leer datos; ' de entrada>salida =para de(ol(er res"ltados& a"n8"e
tam*iDn se p"ede "sar para leer datos;.
2. 2Dtodos de paso de par7metros-
> Paso de par7metros por copia-
PGINA $$ /176
> Por (alor.
> Por res"ltado.
> Por (alor>res"ltado.
> Paso de par7metros por referencia.
> Paso de par7metros por nom*re o nominal.
Paso de par7metros por copia-
!a caracterAstica f"ndamental de este mDtodo de paso de par7metros es 8"e
el par7metro formal siempre se considera 8"e tiene asociada "na direccin de
memoria en la 8"e est7 almacenado ' 8"e por tanto se comporta ig"al 8"e "na
(aria*le local del s"*programa en 8"e aparece.
+n este mDtodo lo 8"e importa es el (alor del par7metro act"al.
1. Por (alor- Nos interesa el (alor del par7metro act"al a la entrada& para ello
este (alor se copia en la direccin de memoria del par7metro formal asociado.
+n este caso el par7metro real p"ede se "na constante& e,presin o (aria*le& '
n"nca se (a a "sar para de(ol(er res"ltado a tra(Ds de Dl& por esa ra:n
precisamente p"ede ser "na constante o "na e,presin& por8"e al no de(ol(er
res"ltados a tra(Ds de Dl no necesita tomar ning"na :ona de memoria en la 8"e
este almacenado& es m7s& incl"so si el par7metro act"al f"era "na (aria*le ' la
modific7semos dentro del s"*programa =algo 8"e no de*erAamos 9acer;& f"era
del s"*programa no tendrAa ning"na reperc"sin esta modificacin& es decir&
esa (aria*le ser(irAa (aliendo lo mismo en el programa desde el 8"e se 9ace la
llamada desp"Ds ' antes de 9acerla.
+l f"ncionamiento serAa el sig"iente-
> Al 9acer la llamada al s"*programa se e(alFa el (alor del par7metro
real& ' ese es el 8"e se asocia& es decir& el 8"e se g"arda o asigna al
par7metro formal asociado.
> Comen:amos a e#ec"tar el s"*programa ' si por cas"alidad se prod"ce
algFn cam*io en el par7metro formal& el par7metro act"al no se (er7
afectado& es decir& s" (alor seg"ir7 siendo el mismo en el s"*programa
desde donde se llama 8"e antes de 9acer la llamada al s"*programa.
Algoritmo +#
?ar A-entero 6
Inicio A del PP Y de P
A
P =A;
+scri*ir A
.in
Procedimiento P=,-entero;
Inicio
Y ,I2
+scri*ir ,
.in p
PGINA $) /176
+l (alor de A serAa ' el de Y serAa 6.
2. Por (alor>res"ltado- +n el (alor>res"ltado nos interesa el (alor del par7metro
act"al tanto a la entrada como a la salida de la e#ec"cin del s"*programa.
+sto 8"iere decir 8"e se cam*ia el (alor del par7metro formal cam*iar7
tam*iDn el (alor de s" par7metro real asociado& cosa 8"e no oc"rrAa antes& ' esto
s"pone por tanto 8"e a9ora el par7metro real tiene 8"e tener asociada
o*ligatoriamente "na direccin de memoria& por lo 8"e siempre tendr7 8"e ser "na
(aria*le =no "na constante ni "na e,presin;.
+l proceso serAa el sig"iente-
> Al 9acer la llamada al s"*programa se e(alFa el par7metro real ' s" (alor se
copia en el par7metro formal asociado ' al terminar la e#ec"cin el (alor del
par7metro formal se ("el(e a copiar en el par7metro real asociado.
Algoritmo +#
?ar A-entero Se copia
Inicio
A
P =A; 6 6
+scri*ir A P.3eal P..ormal
.in
Procedimiento P=,-entero;
Inicio Se de("el(e
Y ,I2
+scri*ir ,
.in p
+l (alor de la A ' la Y serAa 6.
. Por res"lt a do- Nos interesa el (alor del par7metro real solamente a la salida o
fin de la e#ec"cin del s"*programa en 8"e aparece. +sto significa 8"e al 9acer
la llamada no se copia el (alor del par7metro real en el par7metro formal
asociado& sin em*argo a la salida se copia el (alor del par7metro formal en la
direccin del par7metro real asociado& esto significa por tanto& 8"e el
par7metro real tiene 8"e tener asociada "na e,presin 8"e tiene 8"e ser "na
(aria*le =no p"ede ser "na constante o "na e,presin;.
Algoritmo e# No se copia
?ar A-entero
Inicio
A P.3eal P..ormal
P =A;
+scri*ir A
.in
Procedimiento P=,-entero; Se copia a la salida
Inicio
Y 1
Y ,I2
PGINA $6 /176
+scri*ir ,
.in p
+l (alor de A ' de Y es 2.
+n la pr7ctica la ma'or parte de los leng"a#es dentro del tipo de paso de
par7metro por copia solo (an a soportar el tipo de paso de par7metro por (alor&
8"e se "sar7 c"ando "n par7metro solo lo 8"iero "tili:ar como entrada de
informacin al s"*programa& pero no para de(ol(er res"ltados a tra(Ds de Dl.
!os otros dos tipos de paso de par7metros por copia =por (alor ' por (alor>
res"ltado;& no se implementan normalmente por8"e los efectos son pr7cticamente
ig"ales 8"e el paso de par7metros por referencia& es decir& c"ando 8"iero "sar "n
par7metro no solo para pasar informacin a tra(Ds de Dl sino tam*iDn para
de(ol(er res"ltados o si lo (o' a "sar slo para de(ol(er res"ltados& "tili:arD el
paso de par7metros por referencia 8"e (amos a (er a contin"acin.
Para sim*oli:ar 8"e el tipo de paso de par7metros es por (alor& en la
definicin del s"*programa no pongo ningFn tipo de paso de par7metros para ese
par7metro& es decir& no poner ningFn tipo significa 8"e por defecto el tipo de paso
de par7metros es por (alor.
+n el caso de las f"nciones como solamente p"eden reci*ir informacin de
entrada pero n"nca p"eden de(ol(er informacin por s"s par7metros 'a 8"e lo
de("el(en a tra(Ds de la sentencia retorno ' asociado a s" nom*re.
+l tipo de paso de s"s par7metros (a a ser siempre por (alor.
Paso de par7metros p o r referenci a -
A9ora la caracterAstica principal de este tipo de paso de par7metros es 8"e
el par7metro formal (a a tener tam*iDn asignada "na direccin de memoria en la
8"e se almacena& pero en esa direccin N4 S+ G6A3%A S6 ?A!43& sino 8"e se
almacena la direccin de s" par7metro real asociado& es decir& el par7metro formal
ap"nta al par7metro real 8"e tiene asociado ' c"al8"ier modificacin 8"e se
efectFe so*re el par7metro formal tendr7 "na reperc"sin directa en el par7metro
real asociado 'a 8"e lo 8"e modificar7 ser7 el (alor almacenado en la direccin
8"e indica el par7metro formal 8"e es la de s" par7metro formal asociado.
+l proceso ser7 por tanto el sig"iente-
PGINA $7 /176
> Al 9acer la llamada al procedimiento en el par7metro formal 8"e se
pasa por referencia& se (a a g"ardar la direccin del par7metro real
asociado para 8"e ap"nte a Dl.
> %"rante la e#ec"cin c"al8"ier referencia al par7metro formal se 9ar7
accediendo a la direccin ap"ntada por dic9o par7metro& es decir&
accediendo directamente al par7metro real asociado& por lo 8"e
c"al8"ier cam*io en el par7metro formal afectar7 directamente al
par7metro real asociado. %e esta manera 9a*remos pasado el res"ltado.
Para indicar 8"e el tipo de paso de par7metro es por referencia& (amos a
"tili:ar la pala*ra cla(e ent>sal precediendo al par7metro 8"e se pasa por
referencia.
A estos par7metros tam*iDn se les llama par7metros (aria*les =por8"e s"
(alor (arAa;& por eso en Pascal se "sa la pala*ra cla(e ?ar para indicarlo.
+n otros leng"a#es como C& se "san como par7metros p"nteros para indicar
8"e son direcciones.
Algoritmo +G
?ar A ap"nta
Inicio
A
P1=A; direccin A
+scri*ir =A;
.in A del PP Y del P1
Procedimiento P1=ent>sal ,-entero;
Inicio
Y ,I2
.in P1
Por (alor el par7metro act"al no cam*ia de (alor.
Por referencia el par7metro act"al p"ede cam*iar.
Paso de par7metros por nom*re-
+n este caso& el par7metro formal se s"stit"'e literalmente por el par7metro
act"al asociado. +sta s"stit"cin literal del par7metro formal por el par7metro
act"al no se prod"ce 9asta 8"e no se "sa el par7metro formal.
!a (enta#a es 8"e si no "samos en ningFn momento el par7metro formal
dentro del s"*programa llamado =cosa poco pro*a*le;& no se tendr7 8"e 9acer
ningFn tipo de s"*stit"cin.
Pero el gran incon(eniente es 8"e si se "sa el par7metro formal& 9a' 8"e ir a
*"scar en ese momento la e,presin del par7metro real asociado.
+l paso de par7metro por nom*re es lo 8"e se parece m7s a la s"*stit"cin
de par7metros en "na f"ncin matem7tica.
. =,;Q ,H2
. =aH1; Q aH1I2
. =,;Q ,H2
. =aH1;Q a H1 2 KL =aH1;I2
Algoritmo +G
?ar A- entero
Inicio
A
PGINA $/ /176
P1=AH1;
+scri*ir =A;
.in
Procedimiento P1=ent>sal ,- entero;
Inicio
Y ,I2
.in P1
Al final solo (amos a "sar 2 tipos de paso de par7metros& 8"e son los 8"e
"san casi todos los leng"a#es- Por (alor ' por referencia.
Por (alor- Solo lo "samos c"ando "n par7metro solo sir(e para informacin de
entrada& no de(ol(emos nada con Dl. Por eso este paso p"ede ser "na constante&
(aria*le o e,presin. Para sim*oli:arlo en la declaracin de (aria*les no ponemos
nada.
Por referenci a - !o "samos c"ando "n par7metro lo "samos como entrada de
informacin ' como salida o solo como salida. Por esta ra:n a9ora sA 8"e se (a a
(ariar el par7metro formal ' por lo tanto no podemos "sar constantes ni
e,presiones& solo (aria*les. !o sim*oli:amos con la pala*ra ent>sal.
6. .6NC I 4N+S O P 3 4C+%I 2 I+N14S C424 PA32+134 S -
+n la ma'or parte de los leng"a#es se permite tam*iDn 8"e "na f"ncin o
procedimiento p"eda ser pasado como par7metro de otro s"*programa. +n este
caso& es decir& c"ando el par7metro formal es de tipo f"ncin o procedimiento&
pasaremos como par7metro real f"nciones o procedimientos 8"e tengan la misma
definicin 8"e el 8"e 9emos p"esto como par7metro formal& ' en n"estro caso para
indicar 8"e se pasa como par7metro real "na f"ncin o procedimiento& *asta con
poner s" nom*re.
%esde el s"*programa al 8"e se pasa como par7metro esa f"ncin o
procedimiento podemos llamar en c"al8"ier momento a esa f"ncin pasada como
par7metro 8"e en cada momento podr7 ser "na distinta dependiendo del
par7metro formal asociado.
."ncion Knom*reefL =par-tipoJf"ncion
KnefL=,-entero&'-car7cter;-entero
Prodedimiento Knom*reefL procedimiento =,-tipo&...;J...
Algoritmo +G
?ar (1&(2- entero
Inicio
?1 1
?2 2
P=(1&f1&(2;
PGINA $0 /176
P=(1&f2&(2;
.in
Procedimiento P=,-enteroJf"ncion .=A-enteroJP-car7cter;-enteroJent>sal '-entero;
Inicio
Y 2
O .=,&XaX;
.in P
."ncion .1=,-enteroJ'-car7cter;-entero
Inicio +scri*ir '
3etorno =,H1;
.in
."ncion .2=A-enteroJP-car7cter;-entero
Inicio
+scri*ir RTolaS P
3etorno A
.in .2
+l paso de f"nciones ' procedimientos como par7metros& nos (a a permitir
8"e desde "n s"*programa podamos llamar a otros& pero teniendo en c"enta 8"e el
s"*programa llamado no (a a ser "no determinado& sino 8"e (a a depender en
cada momento del s"*programa pasado como par7metro real& de esta manera el
s"*programa p"ede llamar a "n con#"nto de n s"*programas 8"e c"mplan "nas
determinadas caracterAsticas& pero solo "no en cada momento.
No 9a' 8"e conf"ndir el paso de "na f"ncin como par7metro con la
llamada a "na f"ncin c"ando aparece como par7metro real en la llamada a "n
s"*programa. Para diferenciarlo& c"ando paso "na f"ncin como par7metro solo
pondrD s" nom*re& en cam*io c"ando llamo a "na f"ncin para pasar el (alor 8"e
de("el(e como par7metro pondrD el nom*re de la f"ncin ' con s"s arg"mentos
para indicar 8"e a9A se p"ede 9acer la llamada. +sto se p"ede 9acer por8"e la
llamada a "na f"ncin p"ede aparecer en c"al8"ier e,presin en la 8"e apareciese
c"al8"ier (alor del tipo de datos 8"e de("el(e.
Procedimiento P=A-entero;
Inicio
+scri*ir A
.in P
."ncion .=,-entero;-entero
Inicio
3etorno =,I2;
.in .
Algoritmo +G
?ar I
Inicio
I 2
P=.=I;; +sto no es pasar "na f"ncin como par7metro
.in
7. +.+C14S !A1+3A!+S-
6n efecto lateral es c"al8"ier modificacin 8"e "n s"*programa =sea
f"ncin o procedimiento;& reali:a en elementos sit"ados f"era de Dl pero sin 9acer
esas modificaciones a tra(Ds del paso de par7metros.
!os efectos laterales siempre 9a' 8"e e(itarlos por8"e no somos conscientes
o no controlamos 8"e se 9an prod"cido.
Para reali:ar com"nicacin entre s"*programas solo se 9ar7 a tra(Ds del
paso de par7metro para e(itar los efectos laterales.
!os efectos laterales normalmente se prod"cen por el "so de (aria*les
glo*ales o (aria*les locales 8"e a*arcan (arios procedimientos =esto solo es posi*le
si 9a' anidacin de s"*programas;. Por lo tanto e(itaremos s" "so e,cepto 8"e sea
imprescindi*le.
?ar A-entero
Algoritmo +G
?ar P-entero
Inicio
P 1
A 2
P=P;
+scri*ir A
.in
Procedimiento P=,-entero;
Inicio
A ,H2
.in P
/. 3+C63 S I?I%A%-
Se dice 8"e "n s"*programa es rec"rsi(o c"ando se llama a sA mismo. !a
rec"rsi(idad se (a a poder "sar en s"*programas 8"e p"eden definirse en
tDrminos rec"rsi(os& es decir& en termino de sA mismo& como procesos de alg"na
manera repetiti(os.
!a rec"rsi(idad trataremos de e(itarla siempre 8"e sea posi*le& es decir&
siempre 8"e lo mismo se p"eda sol"cionar con "n *"cle& 'a 8"e cada (e: 8"e "n
s"*programa se llama a sA mismo 9a' 8"e almacenar en la pila del sistema la
direccin de retorno de ese s"*programa& con lo c"al si 9acemos m"c9as llamadas
rec"rsi(amente iremos llenando la pila del sistema& ' se des*ordara aca*ando con
la memoria.
1odo programa rec"rsi(o tiene 8"e tener alg"na condicin 8"e ponga fin a
la rec"rsi(idad& es decir& 8"e el programa de#e de llamarse a sA mismo c"ando se
c"mpla la condicin& sino se formarAa "n *"cle infinito.
."ncion potencia =*ase-enteroJe,p-entero;-real
?ar P-real
I-entero
Inicio
P 1
PGINA )M/176
PGINA )1 /176
%esde iQ1 9asta e,p
P PI*ase
.in desde
3etorno P
.in
."ncion potencia =*ase-enteroJe,p-entero;-real
Inicio
Si e,pQM entonces retorno 1
Sino
3etorno =*aseIpotencia=*ase&e,p>1;
.in potencia
TEMA 5: EJERCI CIOS
1. Implementar "n s"*programa 8"e realice la serie de .i*onacci& 8"e es-
.i*onacci =1;Q .i*onacci =2;Q1
N L 2 .i*onacci =n;Q .i*onacci =n>1; H .i*onacci =n>2;
PGINA )2 /176
Algoritmo serieefi*onacci
?ar
I& n- entero
Inicio
+scri*ir RIntrod"ce "n nFmeroS
!eer n
%esde iQ1 9asta n
+scri*ir R!a serie de fi*onacci de RiS es Rfi*onacci =i;
.in desde
.in
."ncion fi*onacci =n"m- entero;- entero
Inicio
Si =n"mQ1; o =n"mQ2;
+ntonces retorno 1
Sino
3etorno =fi*onacci =n"m>1; H fi*onacci =n"m>2;
.in si
.in fi*onacci
2. Implementar "n s"*programa al 8"e pas7ndole como par7metros 2 (alores
enteros 2 ' N& me calc"le el com*inatorio
Algoritmo com*inatorio
?ar
2&n- entero
Inicio
3epetir
+scri*ir RIntrod"ce el (alor de 2 ' NS
!eer m&n
Tasta m Ln
+scri*ir R+l com*inatorio es Rfactorial =m; di( =factorial=n;Ifactorial=m>n;;
.in
."ncion factorial =n"m- entero;- real
Inicio
Si n"mQM
+ntonces retorno 1
Sino
3etorno =n"m I factorial =n"m>1;;
.in si
.in factorial
. Implementar "n s"*programa 8"e me 9alle c"al es la primera potencia en *ase
2 ma'or 8"e "n nFmero 8"e pasamos como par7metro& de(ol(iendo el (alor de
dic9a potencia ' el e,ponente al 8"e est7 ele(ado.
Algoritmo ele(ar
PGINA ) /176
?ar
N"mero& resp1& resp2- entero
Inicio
+scri*ir RIntrod"ce "n nFmeroS
!eer n"mero
Compr"e*a =n"mero& resp1& resp2;
+scri*ir R2\Sresp1SQSresp2S LSn"mero
.in
Procedimiento compr"e*a =n"m- enteroJ ent>sal n- enteroJ ent>sal pot- entero;
Inicio
N 1
2ientras pot K n
Pot pot I2
N nH1
.in mientras
.in compr"e*a
$. Implementar "n s"*programa 8"e calc"le rec"rsi(amente en c"anto se
con(ierte "n capital C al final de N a@os ' a "n interDs I.
."ncion calc"lo =c- enteroJi- enteroJ n- entero;- real
Inicio
Si mQM
+ntonces retorno C
Sino
3etorno =cI=1Hi/1MM;Hcalc"lo =c&i&n>1;
.in si
.in calc"lo
). Calc"lar el primer tDrmino de la sig"iente serie 8"e sea ma'or o ig"al a "n (alor
? 8"e se le pasa como par7metro ' me de("el(a el l"gar 8"e oc"pa en la serie ' el
(alor.
AiQM
AnQnH=An>1;_
PGINA )$ /176
."ncion factorial =n"m- entero;- entero
?ar
I& ac"m- entero
Inicio
Ac"m 1
%esde iQ1 9asta n"m
Ac"m ac"m I i
.in desde
3etorno ac"m
.in factorial
Procedimiento serie =(- enteroJ ent>sal an- enteroJ ent>sal n- entero;
?ar
A1- entero
Inicio
A1 M
An M
N 1
2ientras an KQ ?
N nH1
An n H factorial =a1;
A1 an
.in mientras
.in serie
6. Calc"lar el (alor de la serie donde N es "n (alor 8"e se pasa como par7metro al
s"*programa 8"e 9ace el c7lc"lo.
n 1 n

(1 + i *

1
)
i =0 i =0
n
."ncion s"ma =n- entero;- real
?ar
I& #- entero
Y& '& ac"m1& ac"m2& s"ma1& s"ma2- real
Inicio
Ac"m1 M
Ac"m 2 M
%esde iQM 9asta n
Y 1/n
Ac"m1 ac"m1 H ,
.in desde
%esde #QM 9asta n>1
O 1 HiIac"m1 H '
.in desde
3etorno ac"m2
.in s"ma
7. BC"D se escri*e en pantalla tras la sig"iente e#ec"cinE
Algoritmo +G
?ar
A&P&C- entero
Inicio
A 1
P 2
C AH
P1 =A& P>C& C;
C C i .=A;
P2 =A&C;
P1 =C& P& A;
+scri*ir A& P& C
.in
Procedimiento P1 =ent>sal ,- enteroJ '- enteroJ ent>sal :- entero;
Inicio
Y ' H:
O , H1
a ' I 2
.in P1
Procedimiento P2 =ent>sal ,- enteroJ '- entero;
Inicio
Y , H1 i'
O
.in P2
."ncion . =,- entero;- entero
Inicio
Y , H
3etorno =, i 1;
.in .
!a sol"cin es AQ/J PQ2J CQ
ESTRUCTURAS DE DATOS: ARRAYS.
TEMA 3
1. Introd"ccin a las estr"ct"ras de datos.
2. Arra's "nidimensionales o (ectores.
. 4peraciones con arra's "nidimensionales o (ectores.
$. Arra's *idimensionales o matrices.
). Arra's m"ltidimensionales.
6. Almacenamiento de arra's en memoria.
7. Arra's como par7metros de s"*programas.
/. Arra's de Rp"nterosS.
1. IN134%6CCI5N A !AS + S136C 1 63AS %+ %A14 S -
Clasificacin de los tipos de datos segFn s" estr"ct"ra-
> Simples-
> +st7ndar =entero& real& car7cter& *ooleano;
> No est7ndar =en"meracin& s"*rango;
> +str"ct"rados-
> +st7ticos =arra's& cadena& registros& fic9eros& con#"ntos; Pilas
> %in7micos =p"nteros& listas enla:adas& 7r*oles& grafos; Colas
!os tipos simples son c"ando cada dato representa "n Fnico elemento-
> +st7ndar- +st7n definidos por defecto por el leng"a#e.
> No est7ndar- 1ipos simples definidos por el "s"ario.
!os tipos de datos estr"ct"rados& son c"7ndo "n dato es "na estr"ct"ra 8"e se
constr"'en a partir de otros complementos.
> +st7ticos- 4c"pan "n tama@o de memoria fi#o& 8"e tengo 8"e definir
antes de declararlo.
> %in7micos- !a estr"ct"ra no oc"pa "n tama@o fi#o de memoria& sino 8"e
oc"pa la memoria 8"e oc"pa en cada momento. Se (an a mane#ar a
tra(Ds del tipo de dato p"ntero.
P"ntero- +s "na (aria*le c"'o contenido es "na direccin de memoria '
esa direccin de memoria corresponde a la direccin de memoria de otra
(aria*le& 8"e es la (aria*le ap"ntada.
SegFn el tipo de datos de la (aria*le ap"ntada (ariar7 el tipo de
p"ntero. A tra(Ds de "na (aria*le de tipo p"ntero podemos esta*lecer la
cone,in o enlace entre los elementos 8"e (an a formar la estr"ct"ra& '
segFn se reali:an estos enlaces (amos a tener diferentes tipos de
estr"ct"ras =listas enla:adas& 7r*oles& grafos;.
!as pilas ' las colas son 2 estr"ct"ras de datos con "n f"ncionamiento especial& 8"e
p"eden implementarse con memoria est7tica o din7mica.
2. A33AOS 6NI%I 2 +NSI4NA!+S- ? + C143+S.
6n arra' "nidimensional& o lineal& o (ector& es "n con#"nto finito '
ordenado de elementos 9omogDneos.
+s finito por8"e tiene "n nFmero determinado de elementos. TomogDneo
por8"e todos los elementos almacenados (an a ser del mismo tipo. 4rdenado
por8"e (amos a poder acceder a cada elemento del arra' de manera independiente
por8"e (a a 9a*er "na forma de referenciar cada elemento. Para referenciar cada
elemento de "n arra' (amos a "sar Andices =(alor 8"e directa o indirectamente
referencia la posicin del arra';.
!os Andices tienen 8"e ser de c"al8"ier tipo de datos escalar =entre los 8"e
se p"ede definir "n orden& ' 8"e entre 2 elementos consec"ti(os no p"ede 9a*er
infinitos elementos;& a"n8"e normalmente como Andices se (an a "tili:ar nFmeros
enteros.
Para referenciar "n elemento de "n arra' "saremos el nom*re del arra' '
entre corc9etes U V el Andice 8"e determina la posicin de ese elemento en el arra'.
+l rango o longit"d de "n (ector o arra' lineal es la diferencia entre el
Andice de (alor m7,imo ' el Andice de (alor mAnimo de ese arra' H 1. Normalmente
los Andices comien:an a en"merarse& es decir& el (alor mAnimo del Andice es M 1&
dependiendo del leng"a#e =en Pascal con 1 ' en C con M;. Sin em*argo nadie impide
8"e comiencen en c"al8"ier otro (alor.
!os arra's se almacenan siempre en posiciones consec"ti(as de memoria '
podemos acceder a cada elemento del arra' de manera independiente a tra(Ds de
los Andices. 6n Andice no tiene por8"e ser "n (alor constante& sino 8"e p"ede ser
tam*iDn "na (aria*le o "na e,presin 8"e al ser e(al"ada de("el(a ese Andice.
A la 9ora de definir "n arra' siempre 9a*r7 8"e dar el nom*re del arra'& el
rango de s"s Andices ' el tipo de los datos 8"e contiene& ' para 9acer esa
declaracin& se "tili:a la sig"iente nomenclat"ra.
Knomearra'L- arra' U!I .. !SV de KtipoL
s"eldo- arra' U1 .. /V de real
s"eldo- arra' U100M .. 1007V de real
s"eldo U1002V 1MMMMM
I- entero
I 1002
S"eldo UIV
S"eldo UIH2V
. 4P+3ACI4N+S C4N A33AOS 6NI %I 2+NSI4NA!+S 4 ?+C143+S-
1. Asignacin de "n dato a "na posicin concreta del arra'-
Knomearra'LUindiceV (alor
1 2 $ ) 6 7 / 0 1M 11 12
?entas UV /MMMMM
2. !ect"ra ' escrit"ra de datos- leer
Knomearra'LUindiceV escri*ir
Knomearra'LUindiceV
desde iQ1 9asta 12
escri*ir RIntrod"ce las (entas del mesSi
leer (entas UiV
fin desde
desde iQ1 9asta 12
escri*ir R?entas del mesSiSQS(entas UiV
fin desde
. 3ecorrido o acceso sec"encial de "n arra'-
> Consiste en pasar por todas las posiciones del arra' para procesar s"
informacin.
%esde iQ1 9asta 12
?entas UiV (entas UiV H 1MMMMMM
.in desde
$. Act"ali:acin de "n arra'-
1f; A@adir datos-
+s "n caso especial de la operacin de inserccin de "n elemento en "n
arra'& pero el elemento lo metemos desp"Ds de la Fltima posicin 8"e contiene
informacin (7lida en el arra'.
Para 8"e esto se p"eda 9acer es necesario 8"e si act"almente el arra' tiene
j posiciones de informacin (7lida& tenga "n tama@o de al menos jH1 para 8"e
p"eda a@adir otro elemento a contin"acin de j.
Knomearra'LUjH1V (alor
2f; Insercin de datos-
Consiste en introd"cir "n elemento en el interior de "n arra' para lo c"al
ser7 necesario despla:ar todos los elementos sit"ados a la derec9a del 8"e (amos a
insertar "na posicin a la derec9a con el fin de conser(ar el orden relati(o entre
ellos.
Para 8"e se p"eda insertar "n n"e(o elemento en el arra' si 'a e,isten N
elementos con informacin en el arra'& el arra' tendr7 8"e tener "n tama@o de
cmo mAnimo NH1 para poder insertar el elemento.
C + . G 2 4
RGS
Siendo j la posicin en la 8"e tengo 8"e insertar el n"e(o elemento ' N el
nFmero de elementos (7lidos en el arra' en el momento de la insercin ' siempre
s"poniendo de NH1& el algoritmo de insercin ser7-
%esde iQN 9asta j
AUIH1V AUIV
.in desde
AUjV (alor
f; Porrar datos-
Para eliminar "n elemento de "n arra' si ese elemento est7 posicionado al
final del arra'& no 9a' ningFn pro*lema& simplemente si el tama@o del arra' era N&
a9ora 9a' 8"e considerar 8"e el tama@o del arra' es N>1.
Si el elemento a *orrar oc"pa c"al8"ier otra posicin entonces tendrD 8"e
despla:ar todos los elementos sit"ados a la derec9a del 8"e 8"iero *orrar "na
posicin 9acia la i:8"ierda para 8"e el arra' 8"ede organi:ado.
C + . G 2 4
Porrar G.
S"poniendo 8"e el nFmero de elementos (alidos act"almente es N ' 8"e
8"iero *orrar el elemento de la posicin j.
%esde iQj 9asta N>1
AUIV AUIH1V
.in desde
Para indicar 8"e el nFmero de elementos (alidos es N& podrAamos indicarlo
como N N>1.
Y
$. A33AOS PI%I2 + NSI4NA ! +S 4 2A 1 3 IC+S-
+n "n arra' "nidimensional o (ector cada elemento se referencia por "n
Andice& en "n arra' *idimensional cada elemento se (a a referenciar por 2 Andices&
' a9ora la representacin lgica 'a no (a a ser "n (ector& sino "na matri:.
6n arra' *idimensional de 2IN elementos es "n con#"nto de 2IN
elementos& todos del mismo tipo& cada "no de los c"ales se referencia a tra(Ds de 2
s"*Andices. +l primer s"*Andice podr7 (ariar entre 1 ' 2 si 9emos empe:ado a
n"merar los Andices por 1& ' el seg"ndo Andice (ariar7 entre 1 ' N& si 9emos
empe:ado a n"merar los Andices por el 1.
O m7s en general podemos definir "n arra' de 2 dimensiones de la sig"iente
manera.
Knomearra'L- arra' U!I1..!S2&!I2..!S2V de KtipoL
K(arearra'LUI & GV
!I1 KQ I KQ !S1
!I2 KQ G KQ !S2
+l tama@o del arra' ser7 =!S1>!I1 H1;I=!S2>!I2 H1;
?entas de cada mes de 100M a 100)-
?entas- arra' U100M..100)&1..12V de real
6I12Q72
!a representacin lgica de "n arra' *idimensional es "na matri: de
dimensiones 2IN donde 2 es el nFmero de filas de la matri: ' N es el nFmero de
col"mnas& es decir& la 1] dimensin indicarAa las filas ' la 2] dimensin indicarAa las
col"mnas& es decir& al intentar acceder a "n elemento I&G estarAamos accediendo al
elemento 8"e oc"pa la fila I ' la col"mna G.
+n memoria& sin em*argo todos los elementos del arra' se almacenan en
posiciones contig"as pero nosotros lo (emos como "na matri:.
100M
1001
1002
100
100$
100)
1 2 $ ) 6 7 / 0 1M 11 12
?entas U100&V
+n memoria estarAa almacenado todo seg"ido-
2ane#o de matrice s -
> Para poner a M todos los elementos de la matri:.
2- arra' U1..N&1..2V de entero
?ar i&# entero
%esde iQ1 9asta n
%esde #Q1 9asta 2
2 Ui&#V M
.in desde
.in desde
> Para poner a M solo los elementos de la fila I-
%esde iQ1 9asta N
2 Ui&#V M
.in desde
). A33AOS 26!1I%I2+NSI4NA ! +S-
6n arra' m"ltidimensional es "n arra' de m7s dimensiones. Si tenemos
"n arra' de N dimensiones& cada dimensin de tama@o d1&d2&..&dN& el nFmero de
elementos del arra' ser7 d1Id2I..IdN& ' para acceder a "n elemento concreto del
arra' "tili:aremos N Andices& cada "no de los c"ales referenciar7 a "na posicin
dentro de "na dimensin& siempre segFn el orden de declaracin.
+n memoria& el arra' se sig"e almacenando en posiciones consec"ti(as.
!a declaracin de "n arra' m"ltidimensional serAa-
Nomearra'- arra' U!I1..!S1&!I2..!S2&!I..!S&!IN..!SNV de tipo
Nomearra' UI1&I2&I&INV
!I1 KQ I1 KQ !S2
!IN KQ I2 KQ !SN
6. A!2AC+NA2I + N14 %+ A33AOS +N 2+243IA-
6n arra' en memoria siempre se almacena en posiciones contig"as a partir
de la direccin *ase de comien:o del arra' 8"e me la dan c"ando 'o declaro "na
(aria*le del tipo arra'.
+l tama@o 8"e oc"pa el arra' en memoria es el prod"cto del nFmero de s"s
elementos por el tama@o de cada "no de ellos.
Arra' U1..1MMV de car7cter
1 *'te I 1MM elementos Q 1MM *'tes
+n el caso de "n arra' *idimensional& tam*iDn se seg"ir7 almacenando en
posiciones contig"as de memoria& ' s" tama@o ser7 el prod"cto de s"s elementos
pro el tama@o.
A9ora& la forma en la 8"e est7n almacenados esos elementos (a a depender
de 8"e el arra' se almacene fila a fila o col"mna a col"mna& 8"e tam*iDn se conoce
como almacenamiento por orden de fila ma'or o por orden de col"mna ma'or.
C1 C2 ..... Cm C1 C2 ... Cm
.1 .2 .
A- arra' U1..N&1..2V de KtipoL
.ila
1&1 1&2 1& ..... 1&2 2&1 2&2 2& .... 2&2 N&1 N&2 ... N&m
Como 9allar la direccin *ase en la 8"e comien:a a almacenarse "n determinado
elemento de "n arra'-
> 6nidimensionales-
%I3=AUIV;Q %irePase H =I>1; I 1ama@o
NFmero elemento Q
1ama@o Q )
%irePase Q 1MM
AUV comien:a en la direccin 11M
> Pidimensionales-
> 4rden de fila ma'or
%ir=AUi&#V;Q %irePase H U==I>1;I2;H=G>1;VI1ama@o
> 4rden de col"mna ma'or
%ir=AUi&#V;Q %irePase H U==G>1;IN;H=I>1;VI1ama@o
7. A33AOS C424 PA32 +1 3 4S %+ S 6 PP34G3A2AS-
6n arra' es tam*iDn "n tipo de datos estr"ct"rado& ' se p"ede pasar como
par7metro a "n s"*programa& pero el pro*lema es 8"e no sa*emos como indicar si
s" paso es por (alor o por referencia.
+n principio& el paso de "n arra' siempre tiene sentido 8"e sea por
referencia =8"e se modifi8"e ' tenga reperc"sin en el e,terior;& ' si es por (alor
solo ser(irAa para leer informacin.
!a ma'or parte de los leng"a#es de programacin& pasan los arra's por
referencia =si se modifica el arra' se nota en el e,terior;. Nosotros tam*iDn lo
9aremos asA.
Si paso el arra' ' no 8"iero modificarlo& con no modificarlo *asta.
+s distinto pasar "n arra' como par7metro a pasar "na posicin del arra'&
si paso el arra' entero como par7metro& el par7metro formal asociado ser7 "n
arra' con la misma estr"ct"ra 8"e el par7metro real& pero si lo 8"e 8"iero pasar es
"n elemento de "na posicin concreta del arra'& el par7metro formal asociado no
ser7 del tipo arra'& sino 8"e ser7 del tipo de datos 8"e contenga el arra'& por8"e
cada elemento de "n arra' es "n elemento independiente 8"e se p"ede "sar por
separado.
+n el caso de 8"e pasemos "n arra' entero como par7metro& el par7metro
formal asociado& tendr7 8"e ser "n arra' de la misma estr"ct"ra 8"e tiene el
mismo tipo de datos ' el mismo tama@o.
+n C& el par7metro formal asociado tiene 8"e ser del mismo tipo de datos&
pero no 9ace falta 8"e sea del mismo tama@o.
Para pasar "n arra' como par7metro real& "tili:are el nom*re del arra'& en
cam*io si pasamos "na posicin concreta& "sarD el nom*re ' el Andice.
+n C& el nom*re de "n arra' indica s" direccin de comien:o en
memoria& ' por eso siempre se pasa por referencia.
Siempre (amos a pasar los arra's por referencia& sin la pala*ra cla(e ent>sal.
Como en las f"nciones no se pasan los par7metros por referencia& lo me#or
es no pasar los arra's como par7metros de las f"nciones.
Procedimiento Knom*reepL =KnomeparL-arra' U!I1..!S1V de KtipoLJ ...;
?ar A- arra' U!I1..!S1V de KtipoL
Nomep =arra'; Slo se pasa el nom*re.
/. A33AOS %+ R P 6N1+34SS-
+n realidad lo 8"e (amos a e,plicar con este concepto es la posi*ilidad de
8"e desde "n arra' se ap"nte a la posicin de otro arra'. C"e "nos arra's sir(an
para referenciar a otros.
BC"D es "n p"nteroE-
6n p"ntero es "na (aria*le 8"e contiene "na direccin en la 8"e est7
almacenado "n elemento 8"e llamamos ap"ntado.
%esde este p"nto de (ista& "n Andice indirectamente tam*iDn es "n p"ntero
por8"e indirectamente indica "na posicin del arra'& pero no lo es directamente
por8"e no almacena "na direccin.
%esde este p"nto de (ista& si "n arra' contiene (alores de Andices& es decir&
8"e cada posicin de ese arra' lo 8"e 9ace es ap"ntar a la posicin de otro arra'&
entonces decimos 8"e es "n arra' de p"nteros& a"n8"e en realidad la definicin
mas correcta es 8"e es "n arra' de Andices a otro arra'.
BC"7ndo es Ftil "sar "n arra' de AndiceE-
Imaginemos 8"e tenemos "na compa@Aa 8"e 8"iere tener almacenados los
datos de s"s empleados organi:ados por :onas. Imaginemos 8"e 9a' $ :onas.
a1 a2 a a$
Y h T C
A G %
O j
!
Podemos almacenar esta informacin de distintas formas-
> 6n arra' *idimensional $IN& en donde $ son las :onas ' N es el nFmero
m7,imo de empleados 8"e 9a' por :ona.
+l incon(eniente es la perdida de espacio.
> 6sar "n arra' "nidimensional o (ector donde estDn todos los datos
seg"idos.
+l incon(eniente es 8"e no tengo los empleados ordenados por :onas.
> 6sar "n arra' "nidimensional& ' entre cada 2 :onas meter en la posicin
8"e (a entre ellas "na marca especial para indicar 8"e paso de :ona.
+l incon(eniente es 8"e para pasar a "na :ona tengo 8"e pasar por
todas las anteriores.
> 6sar "n arra' de Andices-
6n arra' con la informacin de los empleados.
4tro arra' de Andices 8"e contendr7 tantas posiciones como :onas 9a'a.
+n cada posicin de cada :ona almacenarD el Andice en donde comien:a
el primer empleado de esa :ona en el arra' de empleados.
aonas +mpleados
1 Y
$ A
) O
7 h
T
G
C
%
j
!
I !istar todos los empleados de la :ona -
%esde iQ:onaUV 9asta :onaU$V>1
+scri*ir +mpleados UiV
.in desde
I NFmero de empleados-
aona U$V i aona UV
EJERCI CIOS: TEMA 3
1. Ta' "nos m"lticines con ) salas& ' cada sala con 1MM personas distri*"idas en
2M asientos ' ) filas.
Si 'o pido entrada para "na sala& implementar "n programa 8"e me diga si 9a'
sitio en la sala.
Algoritmo cines
Const
SalasQ)
AsientosQ2M
.ilasQ)
?ar
Nesalas&#&N- entero
2arca- *oolean
A- arra' U1..salas&1..asientos&1..filasV de entero
Inicio
Pediredatos =nesalas;
2ientras nesalas KL M
2arca falso
G M
j 1
3epetir
Si # L asientos
+ntonces # 1
j NH1
.in si
Si =#Qasientos; ' =NLQfilas;
+ntonces escri*ir RSala llenaS
2arca (erdadero
Sino si a Unesalas&#&NVQM
+ntonces aUnesalas&#&NV 1
+scri*ir RAsientoS#SfilaSN
2arca (erdadero
.in si
.in si
Tasta =aUnesalas&#&NVQ1; ' =marcaQ(erdadero;
Pediredatos =nesalas;
.in mientras
.in
Procedimiento pediredatos =ent>sal s- entero;
Inicio
3epetir
+scri*ir RB+n 8"D sala 8"ieres entrarES
!eer s
Tasta =sLQM; ' =sKQsalas;
.in pediredatos
2. BC"D escri*e este programaE
Algoritmo Prin
?ar
%atos- arra' U1..1MV de entero
i- entero
inicio
desde iQ1 9asta 1M
datos UiV i
fin desde
P1 =datos&datosUV;
%esde iQ1 9asta 1M
+scri*ir datos UiV
.in desde
.in
Procedimiento P1 =a- arra' U1..1MV de enteroJ ent>sal ,- entero;
Inicio
Y M
%esde iQ1 9asta 1M
Y , H aUiV
.in desde
.in P1
I Sol"cin- 1& 2& ))& $& )& 6& 7& /& 0& 1M.
. %ada "na matri: A de 2IN elementos& act"ali:arla tal 8"e la matri:
res"ltante tenga di(ididos a los elementos de la diagonal principal por la s"ma
de los elementos 8"e no forman parte de ella.
Algoritmo di(ematri:
?ar
A- arra' U1..2&1..NV de real
S"ma- real
Inicio Pediredatos
=a; S"mar
=a&s"ma;
+scri*ir =a;
.in
Procedimiento pediredatos =matri:- arra' U1..2&1..NV de real;
?ar
I&#- entero
Inicio
%esde iQ1 9asta 2
%esde #Q1 9asta N
+scri*ir RIntrod"ce el elementoSiS&S#
!eer aUi&#V
.in desde
.in desde
.in pediredatos
Procedimiento s"mar =matri:- arra' U1..2&1..NV de realJ ent>sal s- real;
?ar
I&#- entero
Inicio
S M
%esde iQ1 9asta 2
%esde #Q1 9asta N
Si iK L #
+ntonces s s H matri: Ui&#V
.in si
.in desde
.in desde
.in s"mar
Procedimiento escri*ir =matri:- arra' U1..2&1..NV de realJ s- real;
?ar
I&#- entero
Inicio
%esde iQ1 9asta 2
%esde #Q1 9asta N
Si iQ#
+ntonces escri*ir aUi&#V/s
Sino escri*ir aUi&#V
.in si
.in desde
.in desde
.in escri*ir
$. 1engo g"ardado en "na estr"ct"ra los al"mnos de n"estra esc"ela& sa*iendo
8"e 9a' c"rsos& 2 al"mnos por c"rso ' N asignat"ras por al"mno&
determinar mediante s"*programas-
1. C"al es la nota media de "n determinado c"rso.
2. C"antos apro*ados ' s"spensos 9a' en "na determinada asignat"ra.
. C"al es el al"mno de la esc"ela con me#or nota media.
Algoritmo esc"ela
Const
C"rsosQ
Al"mnosQ2
Asignat"rasQN
1ipo
%atoQarra' U1..c"rsos&1..al"mnos&1..asignat"rasV de real
?ar
Nota- dato
Inicio
Pediredatos =nota;
2ediaec"rso =nota;
Apes"sp =nota;
2ediaeal"m =c"rso;
.in
Procedimiento pediredatos =n- datos;
?ar
I&#&N- entero
Inicio
%esde iQ1 9asta c"rsos
%esde #Q1 9asta al"mnos
%esde NQ1 9asta asignat"ras
3epetir
+scri*ir RNota del al"mnoS#Sasignat"raSNSc"rsoSi
!eer nUi&#&NV
Tasta =nUi&#&NLQM; ' =nUi&#&NV KQ1M;
.in desde
.in desde
.in desde
.in pediredatos
Procedimiento mediaec"rso =n- dato;
?ar
G&N&resp- entero
2edia&s"ma- entero
Inicio
S"ma M.M
3epetir
+scri*ir RB%e 8"D c"rso 8"ieres 9acer la mediaES
!eer resp
Tasta =respKQ1; ' =respKQc"rsos;
%esde #Q1 9asta al"mnos
%esde NQ1 9asta asignat"ras
S"ma-Qs"ma H nUresp&#&NV
.in desde
.in desde
2edia s"ma /al"mnosIasignat"ra
+scri*ir R!a nota media del c"rsoSrespSesSmedia
.in mediaec"rso
Procedimiento apes"sp =n-dato;
?ar
S"sp&ap&i&#- entero
Inicio
S"sp M
Ap M
3epetir
+scri*ir RBC"D asignat"ra 8"ieres (erES
!eer asig
Tasta =asigLQ1; ' =asigKQasignat"ras;
%esde iQ1 9asta c"rsos
%esde #Q1 9asta al"mnos
Si nUi&#&asigV LQ)
+ntonces ap ap H 1
Sino s"sp s"sp H 1
.in si
.in desde
.in desde
+scri*ir R+n la asignat"raSasigS9a'SapSapro*adosS
+scri*ir R+n la asignat"raSasigS9a'Ss"spSs"spensosS
.in apes"sp
Procedimiento mediaeal"m =n- dato;
?ar
I&#&al"m&c"rs- entero
S"ma&media&ma'or- real
Inicio
2a'or M.M
%esde iQ1 9asta c"rsos
%esde #Q1 9asta al"mnos
S"ma M.M
%esde NQ1 9asta asignat"ras
S"ma s"ma H nUi&#&NV
.in desde
2edia s"ma / asignat"ras
Si media L ma'or
+ntonces ma'or media
C"rs i
Al"m #
.in si
.in desde
.in desde
+scri*ir R+l al"mno con ma'or media es elSal"mSdel c"rsoSc"rs
+scri*ir R' s" nota es deSma'or
.in mediaeal"m
). 2"ltiplicar 2 matrices de dimensiones 2IN ' PIC.
Algoritmo m"ltiplicarematrices
1ipo
2atri:1Qarra' U1..2&1..NV de entero
2atri:2Qarra' U1..P&11..CV de entero
3es"ltadoQarra' U1..2&1..CV de entero
?ar
2at1- matri:1
2at2- matri:2
3- res"ltado
Inicio
Pediredatos =mat1&mat2;
2"ltiplicar =mat1&mat2&r;
?is"ali:ar =r;
.in
Procedimiento pediredatos =m1- matri:1J m2- matri:2;
?ar
I&#- entero
Inicio
%esde iQ1 9asta 2
%esde #Q1 9asta N
+scri*ir RIntrod"ce el elementoSiS&S#Sde la matri: 1S
!eer m1Ui&#V
.in desde
.in desde
%esde iQ1 9asta P
%esde #Q1 9asta C
+scri*ir RIntrod"ce el elementoSiS&Sde la matri: 2S
!eer m2Ui&#V
.in desde
.in desde
.in pediredatos
Procedimiento m"ltiplicar =m1- matri:1J m2- matri:2J ent>sal res"l- res"ltado;
?ar
.ila&i&#&ac"m- entero
Inicio
%esde filaQ1 9asta N
%esde iQ1 9asta P
3es"lUfila&iV M
%esde #Q1 9asta C
3es"lUfila&iV res"lUfila&iVHm1Ufila&#VIm2U#&iV
.in desde
.in desde
.in desde
.in m"ltiplicar
Procedimiento (is"ali:ar =res"l- res"ltado;
?ar
I&#- entero
Inicio
%esde iQ1 9asta 2
%esde #Q1 9asta C
+scri*ir res"lUi&#V
.in desde
.in desde
.in (is"ali:ar
6. 3esol(er la sig"iente serie-
m n

i *

a[i, j]* j
X =
i =1 j =1
n 1

b[n, j]
j =2
Algoritmo serie
1ipo
2atri:1Q arra' U1..2&1..NV de entero
2atri:2Q arra' U1..N&1..NV de entero
?ar
S"ma1&s"ma2&s"ma- entero
Y- real
Inicio
S"mas =s"ma1&s"ma2&s"ma;
3es"ltado =s"ma1&s"ma2&s"ma&,;
+scri*ir R+l res"ltado esS,;
.in
Procedimiento s"mas =s1- enteroJs2- enteroJs- entero;
?ar
I&#- entero
Inicio
%esde iQ1 9asta 2
S2 M
%esde #Q1 9asta N
S2 s2 H aUi&#VI#
.in desde
S1 s1 H IIs2
.in desde
S M
%esde #Q2 9asta N>1
S s H *Un&#V
.in desde
.in s"mas
Procedimiento res"ltado =s1- enteroJ s2- enteroJ s- enteroJ ent>sal '- real;
Inicio
O s1Is2/s
.in res"ltado
7. 6na empresa consta de ) departamentos con 2M empleados cada departamento&
si tengo todas las (entas en "na estr"ct"ra& determinar-
> ?entas de "n determinado departamento en "n determinado mes.
> ?entas de "n determinado empleado en "n determinado departamento.
> C"al es el departamento con m7s (entas.
Algoritmo empresa
Const
%Q)
+Q2M
2Q12
1ipo
2atri:Q arra' U1..d&1..e&1..mV de real
?ar
?entas- matri:
Cantidad- real
%epartamentos- entero
Inicio
Pediredatos =(entas;
%epemes =(entas;
%epeempleado =(entas;
2e#oredep =(entas;
.in
Procedimiento pediredatos =a- matri:;
?ar
I&#&N- entero
Inicio
%esde iQ1 9asta %
%esde #Q1 9asta +
%esde NQ1 9asta 2
+scri*ir R?entas del departamentoSiSempleadoS#SmesSNS
!eer aUi&#&NV
.in desde
.in desde
.in desde
.in pediredatos
Procedimiento depemes =a- matri:;
?ar
%ep&#&mes- entero
?- real
Inicio
? M.M
3epetir
+scri*ir R%epartamentoS
!eer dep
Tasta =dep LQ1; ' =dep KQd;
3epetir
+scri*ir R2esS
!eer mes
Tasta =mes LQ1; ' =mes KQ12;
%esde #Q1 9asta +
? ? H aUdep&#&mesV
.in desde
+scri*ir R!as (entas del departamentoSdepSen el mesSmesSsonS(
.in depemes
Procedimiento depeempleado =a- matri:;
?ar
%ep&empleado&N- entero
?- real
Inicio
? M.M
3epetir
+scri*ir R+mpleadoS
!eer empleado
Tasta =empleado LQ1; ' =empleado KQ+;
3epetir
+scri*ir R%epartamentoS
!eer dep
Tasta =dep LQ1; ' =dep KQd;
%esde NQ1 9asta 2
? ? H aUdep&empleado&NV
.in desde
+scri*ir R!as (entas del empleadoSempleadoSdel departamentoSdepSsonS(
.in depeempleado
Procedimiento me#oredep =a- matri:;
?ar
I&#&N&dep- entero
2a'or&(- real
Inicio
2a'or M.M
%esde iQ1 9asta %
? M
%esde #Q1 9asta +
%esde NQ1 9asta 2
? ? H aUi&#&NV
.in desde
.in desde
Si ( L ma'or
+ntonces ma'or (
%ep i
.in si
.in desde
+scri*ir R+l me#or departamento es elSdepSconSma'or
.in me#oredep
/. %ado "n arra' A de 2IN elementos donde los elementos son nFmeros enteros&
9allar la direccin de comien:o del elemento $f del arra' sa*iendo 8"e se almacena
a partir de la direccin 12MM ' 8"e en n"estra m78"ina los enteros oc"pan 2 *'tes.
%ir A=1&$;Q 12MM H I2 Q12M6
0. %ado "n arra' de $ I ) elementos 8"e contiene caracteres& sa*iendo 8"e se
almacena a partir de la posicin )MM& en 8"e posicin comien:a a almacenarse el
elemento AU&)V.
%ir AU&)V Q )MM H =2I)H$;I1 Q )1$ +n orden de fila ma'or
%ir AU&)V Q )MM H =$I$H2;I1 Q )1/ +n orden de col"mna ma'or
LAS CADENAS DE CARACTERES
TEMA 4
1. G"ego de caracteres.
2. Cadena de caracteres.
. %atos de tipo car7cter.
$. 4peraciones con cadenas.
1. G6+G4 %+ CA3AC1+3+S-
+n principio se programa*a todo con M ' 1& pero como esto costa*a m"c9o&
apareci la necesidad de crear "n leng"a#e seme#ante al 9"mano para entendernos
m7s f7cilmente con la comp"tadora& ' para ello aparecen los #"egos de caracteres.
+l #"ego de caracteres es "na especie de alfa*eto 8"e "sa la m78"ina.
Ta' 2 #"egos de caracteres principales-
> ASCII- +l 8"e m7s se "sa.
> +PC%IC- Creado por IP2.
Ta' 2 tipos de ASCII& el *7sico ' el e,tendido.
+n el ASCII *7sico& cada car7cter se codifica con 7 *its& por lo 8"e e,isten
2\7Q12/ caracteres.
+n el ASCII e,tendido& cada car7cter oc"pa / *its =1 *'te; por lo 8"e
e,istir7n 2\/Q 2)6 caracteres& n"merados del M al 2)).
+n el +PC%IC& cada car7cter oc"pa tam*iDn / *its.
+n c"al8"iera de los 2 #"egos& e,isten $ tipos de caracteres-
> Alfa*Dticos- !etras ma'Fsc"las ' minFsc"las.
> N"mDricos- NFmeros.
> +speciales- 1odos los 8"e no son letras ' nFmeros& 8"e (ienen en el
teclado.
> Control- No son imprimi*les ' tienen asignados caracteres especiales.
Sir(en para de terminar el fin de lAnea& fin de te,to. ?an del 12/ al 2)).
6n #"ego de caracteres es "na ta*la 8"e a cada nFmero tiene asociado "n
nFmero.
2. CA%+NA %+ CA3AC 1 +3 + S-
+s "n con#"nto de M m7s caracteres. +ntre estos caracteres p"ede estar
incl"ido el *lanco.
+n pse"docdigo& el *lanco es el *. !as cadenas de caracteres se delimitan
con do*les comillas R R& pero en alg"nos leng"a#es se delimitan con W W.
!as cadenas de caracteres se almacenan en posiciones contig"as de
memoria.
!a longit"d de "na cadena es el nFmero de caracteres de la misma. Si
9"*iese algFn car7cter 8"e se "tili:ara como especial para se@alar el fin de cadena&
no se considerarAa en la longit"d.
Si "na cadena tiene longit"d M& la llamamos cadena n"la por lo 8"e no tiene
ningFn car7cter& pero esto no 8"iere decir 8"e no tenga ningFn car7cter (7lido&
por 8"e p"ede 9a*er algFn car7cter especial no imprimi*le 8"e forme parte de la
cadena.
6na s"*cadena es "na cadena e,traAda de otra.
. %A14S %+ 1IP4 CA3C1 +3 -
1. Constantes- 6na constante de tipo cadena es "n con#"nto de M o m7s
caracteres encerrados entre R R.
Si dentro de la cadena 8"iero poner como parte de la cadena las R& las
pongo 2 (eces. +sto depende del leng"a#e.
RTolaSSAdiosS TolaSAdios
+n alg"nos leng"a#es 9a' "n car7cter de escape. +n C& el car7cter de
escape es la [.
6na constante de tipo car7cter es "n solo car7cter encerrado entre
comillas simples.
2. ?aria*les- Ta' 8"e disting"ir entre "na (aria*le de tipo car7cter ' "na
(aria*le de tipo cadena& el contenido de "na (aria*le de tipo cadena es
"n con#"nto de M m7s caracteres encerrados entre R R& mientras 8"e
"na (aria*le de tipo car7cter es "n solo car7cter encerrado entre W W.
.ormas de almacenamiento de ca d enas en memoria-
1. Almacenamiento est7tico-
!a longit"d de la cadena se tiene 8"e definir antes de ser "sada '
siempre (a a tener esa longit"d& almacen7ndose en posiciones contig"as
de memoria.
Si la cadena no oc"pa todo el espacio& el resto se rellena con *lancos& '
esos *lancos se consideran parte de la cadena.
+sto es m"' deficiente ' no se "sa casi en ningFn leng"a#e.
2. Almacenamiento semiest7tico-
Antes de "sar la cadena& 9a' 8"e declarar la longit"d m7,ima 8"e p"ede
tener ' ese es el espacio 8"e se reser(a en memoria para almacenar la
cadena& siempre en posiciones contig"as.
!a longit"d real de la cadena d"rante la e#ec"cin p"ede (ariar a"n8"e
siempre tiene 8"e ser menor 8"e el m7,imo de la cadena.
P"esto 8"e la cadena no tiene por8"e oc"par la longit"d m7,ima& para
determinar 8"e parte oc"pa realmente esa cadena& se p"eden "tili:ar
diferentes mDtodos.
Pascal lo 8"e 9ace es reser(ar los 2 primeros *'tes de la :ona de
memoria en 8"e g"ardamos la cadena para indicar el primero la
longit"d m7,ima 8"e p"ede tener la cadena ' el seg"ndo la longit"d
act"al.
1M $ T 4 ! A
1 2 $ ) 6 7 / 0 1M
4tros leng"a#es como C& "tili:an "n car7cter especial 8"e indica el fin de
cadena tal 8"e los caracteres 8"e "tili:an parte de la cadena son todos
los almacenados 9asta encontrar ese car7cter especial.
T 4 ! A [4
M 1 2 $ ) 6 7 / 0
!a diferencia entre almacenar "n solo car7cter en "n tipo car7cter o en "n
tipo cadena& serAa la sig"iente-
C WaX
C RaS
. Almacenamiento din7mico-
No 9a' 8"e definir la longit"d de la cadena antes de "sarla& ni si8"iera la
m7,ima. Para esto& se "tili:a la memoria din7mica& ' para esta*lecer el
nFmero de elementos de la cadena "saremos listas enla:adas en las 8"e
cada nodo de la lista contara "n car7cter de la cadena ' se enla:arAa
mediante p"nteros.
!a informacin no tiene 8"e estar almacenada en posiciones contig"as de
memoria.
T 4 ! A
$. 4P+3ACI4N+S C4N CA% + NAS-
Al ig"al 8"e con c"al8"ier tipo de datos& podemos 9acer operaciones de
entrada ' salida =leer ' escri*ir;.
?ar cad- cadena
!eer =cad;
+scri*ir =cad;
Aparte de estas instr"cciones& la ma'or parte de los leng"a#es permiten
reali:ar operaciones especiales con las (aria*les de tipo cadena.
!a ma'or parte de los leng"a#es tienen operaciones de tratamiento de
cadenas& ' esas operaciones (ienen en li*rerAas e,ternas.
!as operaciones m7s "sadas son-
!ongit"d de "na cadena-
+s "na f"ncin a la 8"e se le pasa "na cadena como par7metro ' como
res"ltado de("el(e s" longit"d.
."ncion longit"d =c-cadena;- entero
Comparacin de cadenas-
!as cadenas se p"eden comparar entre si "sando los sAm*olos de
comparacin. +sto se p"ede reali:ar por8"e lo 8"e (o' a comparar son los (alores
ASCII asociados a cada car7cter.
+n el caso de 8"e se comparen 2 cadenas de diferente longit"d tal 8"e la
cadena de menor longit"d tiene N caracteres ' estos N caracteres coinciden con los
N primeros caracteres de la cadena m7s larga& se considera ma'or la cadena m7s
larga.
P+P+ L PAPA
P+P+S L P+P+
+n la ma'or parte de los leng"a#es& 9a' "na f"ncin 8"e 9ace la
comparacin.
+n C es la f"ncin strcmp =C1&C2;.
."ncion comparacion =C1-cadenaJC2-cadena;- entero
+sta f"ncin de("el(e-
> M si C1QC2
> 6n positi(o si C1 L C2
> 6n negati(o si C1 K C2
Concatenacin-
!o 8"e permite es "nir (arias cadenas en "na sola& manteniendo el orden de
los caracteres 8"e se "nen.
+n pse"docdigo se "sa el sAm*olo `- C1`C2
C1QSTolaS C2QSAdiosS
CQC1`C2QSTolaAdiosS
Procedimiento concatenacion =ent>sal C1-cadenaJC2-cadena;
> Se de("el(e en C1 la concatenacin C1`C2.
S"*cadenas-
+,trae parte de "na cadena.
Se p"eden "sar procedimientos-
Procedimiento s"*cadena =c-cadenaJinicio-enteroJlongit"d-enteroJent>sal
s-cadena;
> Si inicio es negati(o& o es ma'or 8"e longit"d& se de("el(e la cadena
n"la.
> Si inicioHlongit"d es ma'or 8"e el tama@o de la cadena& de("el(o desde
inicio 9asta de fin de la cadena.
Procedimiento s"*cadena =c-cadenaJinicio-enteroJfin-enteroJent>sal s-cadena;
> Si fin es menor 8"e inicio& de("el(e la cadena n"la.
> Si fin es ma'or 8"e la longit"d de la cadena& se de("el(e desde inicio
9asta el fin de la cadena.
Procedimiento s"*cadena =c-cadenaJinicio-enteroJent>sal s-cadena;
> S (a desde el inicio 9asta el final de la cadena.
Insercin-
Consiste en meter "na cadena dentro de otra a partir de "na determinada
posicin.
Procedimiento insertar =ent>sal C1-cadenaJC2-cadenaJinicio-entero;
C1QSPepeS
C2QSN"riaS
Insertar =C1&C2&;Q PeN"riape
> Si inicio es ma'or 8"e la longit"d de C1 o inicio es menor 8"e M& no se
inserta nada.
Porrado-
Consiste en *orrar de "na cadena "na s"*cadena 8"e forma parte de ella.
Ta' 8"e dar la posicin de inicio ' final de la s"*cadena 8"e 8"iero *orrar.
Procedimiento *orrar =ent>sal C1-cadenaJinicio-enteroJfin-entero;
> Si fin es menor 8"e inicio& o inicio es ma'or 8"e la longit"d de la cadena&
no se *orra nada.
Procedimiento *orrar =ent>sal C1-cadenaJinicio-enteroJfin-entero;
C1QSCasa a:"lS
Porrar =C1&&);
C1QSCaa:"lS
Intercam*io-
Consiste en s"*stit"ir la aparicin de "na s"*cadena dentro de "na cadena&
por otra s"*cadena. Para eso la primera s"*cadena tiene 8"e aparecer en la otra.
Procedimiento intercam*io =ent>sal C1-cadenaJS1-cadenaJS2-cadena;
C1QSCasa a:"lS
S1QSasaS
S2QSasitaS
C1QSCasita a:"lS
Si S1 no est7 en C1& no se cam*ia nada.
Con(ersin de cadenas a nFmeros-
+s "na f"ncin 8"e se le pasa "na cadena caracteres n"mDricos ' de("el(e
el nFmero asociado.
."ncion (alor =c-cadena;- entero
IQS2$S
?ar i- entero
IQ (alor =C1; de("el(e 2$.
Con(ersin de nFmeros a cadenas-
+s "n procedimiento al 8"e se le pasa "n nFmero ' lo con(ierte a "na
cadena.
Procedimiento con(ecad =n-enteroJent>sal c-cadena;
IQ2$
Con(ecad =i&C1; de("el(e R2$S
."ncin 8"e de("el(e el car7cter ASCII de "n nFmero-
."ncion con(ecar =n-entero;- car7cter
."ncin 8"e de("el(e el nFmero asociado de "n car7cter ASCII-
."ncion ASCII =c-car7cter;- entero
!as cadenas (an a estar almacenadas en arra's de caracteres donde el
car7cter de fin de cadena es el k.
EJERCI CIOS: TEMA 4
> !os e#ercicios de este tema (an a consistir en implementar f"nciones '
procedimientos relacionados con el mane#o de las s"*cadenas.
."ncion n"mero =c-car7cter;-entero
Inicio
SegFn sea C
WMX- retorno M
W1X- retorno 1
W2X- retorno 2
WX- retorno
W$X- retorno $
W)X- retorno )
W6X- retorno 6
W7X- retorno 7
W/X- retorno /
W0X- retorno 0
fin segFn sea
fin n"mero
."ncion caract =n- entero;-car7cter
Inicio
SegFn sea C
M- retorno WMX
1- retorno W1X
2- retorno W2X
- retorno WX
$- retorno W$X
)- retorno W)X
6- retorno W6X
7- retorno W7X
/- retorno W/X
0- retorno W0X
fin segFn sea
fin caract
."ncion longit"d =c-cadena;- entero
(ar
l- entero
Inicio
! M
2ientras cU!H1V K L WkX
! !H1
.in mientras
3etorno !
.in longit"d
."ncion ?alor =c-cadena;- entero
?ar
Cif&n"m&i- entero
Inicio
Cif longit"d =c;
Si cif L M
+ntonces n"m M
%esde iQ1 9asta Cif
N"m n"mHn"mero =cUiVI1M\=cif>i;
.in desde
3etorno =n"m;
Sino retorno =>1;
.in si
.in (alor
Procedimiento con(ecad =n- enteroJ ent>sal c- cadena;
?ar
Cif&a",- entero
Inicio
Cif 1
A", N
2ientras =a", L1M;
A", a", di( 1M
Cif cif H 1
.in mientras
%esde iQcif 9asta 1
CUiV caract=n mod 1M;
N n di( 1M
.in desde
CUcifH1V WkX
.in con(ecad
Procedimiento *orrar =ent>sal c-cadenaJinicio-enteroJfin-entero;
?ar
I&f- entero
Inicio
PGINA /M/176
PGINA /1 /176
Si =inicio LM; ' =inicio KQ fin; ' =inicio KQ longit"d=c;;
+ntonces i inicio
. fin H1
2ientras =i KQfin; ' =cUfV K L WkX;
CUiV cUfV
I iH1
. fH1
.in mientras
CUiV WkX
.in si
.in *orrado
Procedimiento s"*cadena =c1-cadenaJinicio-enteroJlongit"d-enteroJent>sal c2-
cadena;
?ar
I&N- entero
Inicio
Si =inicio KQM; o =inicio L longit"d =c1;;
+ntonces c2U1V WkX
Sino i inicio
j 1
2ientras =i KQinicio H longit"d; ' =c1UiV K L WkX;
C2UNV c1UiV
j NH1
I iH1
.in mientras
C2UNV WkX
.in si
.in s"*cadena
."ncion comparacion =c1-cadenaJc2-cadena;-entero
?ar
I- entero
Inicio
I 1
2ientras =c1UiVQc2UiV; ' =c1UiVK L WkX; ' =c2UiV K L WkX;
I IH1
.in mientras
Si c1UiVQc2UiV
+ntonces retorno =M;
Sino retorno=ascii =c1UiV;> ascii =c2UiV;;
.in si
.in comparacion
PGINA /2 /176
."ncion *"s8"eda =c- cadenaJs1- cadena;- entero
?ar
I&pos&N- entero
+ncontrado- *ooleano
Inicio
I 1
+ncontrado falso
2ientras =cUiV K LXkX; ' =encontradoQfalso;
Si cUiV Q sUiV
+ntonces pos i
j 1
2ientras =cUiVQsUNV; ' =cUiV KLXkX; ' =sUNVK LXkX
I IH1
j NH1
.in mientras
Si sUNVQXkX
+ntonces encontrado (erdadero
Sino I pos H1
Pos M
.in si
Sino I IH1
.in si
.in mientras
3etorno =pos;
.in *"s8"eda
Procedimiento *orrar =ent>sal c-cadenaJini-enteroJfin-entero;
?ar
I&#- entero
Inicio
I ini
. fin H 1
2ientras cUfV KLXkX
CUiV cUfV
I i H 1
PGINA / /176
.in mientras
C UiV WkX
.in *orrar
Proced"re insertar =ent>sal c-cadenaJs-cadenaJpos-entero;
?ar
P&#&i- entero
Inicio
P pos
G 1
2ientras sU#VKLXkX
%esde i longit"d =c; H1 9asta P
CUiH1V cUiV
.in desde
CUpV sU#V
G #H1
P pH1
.in mientras
.in insertar
Procedimiento intercam*io =ent>sal c-cadenaJc2-cadenaJc-cadena;
?ar
I&pos- entero
Inicio
I 1
2ientras c1UiV KLXkX
Si c1UiVQc2UiV
+ntonces pos *"scar=c1&c2;
Si pos KL M
+ntonces *orrar =c1&pos&posHlongit"d=c2;>1;
Insertar =c1&c&pos;
I pos H longit"d=c;
Sino I i H1
.in si
Sino I IH1
.in si
.in mientras
.in intercam*io
PGINA /$ /176
FICHEROS O ARCHI5OS:
TEMA 6
1. +l tipo registro de datos.
2. Nocin de arc9i(o.
. 1erminologAa de arc9i(os.
$. 1ipos de soporte.
). 1ipos de organi:aciones de fic9eros.
6. 4peraciones so*re fic9eros.
7. 1ratamiento de fic9eros sec"enciales.
/. .ic9eros de te,to.
1. +! 1IP4 3+GIS134 %+ %A14S-
+l tipo registro de datos es "n tipo estr"ct"rado de datos. 6n tipo registro
(a a estar formado por datos 8"e p"eden ser de diferentes tipos.
A cada "no de esos datos lo denominamos campos& ' el tipo de estos campos
p"eden ser "no estandar o "no definido por el "s"ario& 8"e p"ede ser c"al8"ier
cosa.
!a sinta,is 8"e "saremos para definir "n tipo registro es la sig"iente-
1ipo KnometipoeregistroL Q registro
Kcampo1L- KtipoL
Kcampo2L- KtipoL
KcampoL- KtipoL
fin registro
6na (e: definida "na estr"ct"ra de tipo registro& 'a p"ede pasar a declarar
(aria*les de ese tipo.
?ar
Knome(arL- KnometipoeregistroL
tipo al"mno Q registro
%NI- arra' U1../V de caracteres
Nom*re- arra' U1..1MMV de caracteres
Nota- real
.in registro
?ar
PGINA /) /176
A1&A2- al"mno
Para declarar "na (aria*le de "n tipo registro& *asta con poner-
?ar
Knome(arL - KnometipoeregL
Para acceder a "n campo concreto de "na (aria*le de tipo registro&
"tili:amos el operador p"nto.
Knome(arL.KnomecampoL
c.nom*re Pepe
O con ese (alor p"edo tra*a#ar ig"al 8"e tra*a#arAa con c"al8"ier (alor del
mismo tipo 8"e ese campo.
1ipo cliente Q registro
%NI- arra' U1../V de caracteres
Nom*re- Cadena
Saldo- 3eal
.in registro
?ar
C- cliente
Porrar =c.nom*re&&);
C.saldo )HI/MMM
Almacenamiento de re g istros en memoria-
+l tama@o 8"e oc"pa "na (aria*le de tipo registro en memoria es el 8"e
res"lta de la s"ma del tama@o de cada "no de s"s campos& ' esa informacin
tam*iDn estar7 almacenada de manera contig"a ' segFn el orden en 8"e 9a'amos
declarado los campos.
2. N4CI5N %+ A3C T I?4-
!as estr"ct"ras anteriores se almacena*an en memoria principal& ' el
pro*lema es 8"e la informacin se pierde al apagar el ordenador. !a (enta#a es
8"e los accesos son m7s r7pidos. Para resol(er esto est7n los dispositi(os de
almacenamiento sec"ndario.
.ic9ero- +s "n con#"nto de datos estr"ct"rados en "na coleccin de
"nidades elementales denominadas registros& 8"e son de ig"al tipo ' 8"e a s" (e:
est7n formados por otras "nidades de ni(el m7s *a#o denominados campos. 1odos
son del mismo tipo.
. 1+32IN4!4GlA C4N .ICT+34S-
> Campo- +s "na "nidad elemental de informacin 8"e representa "n
atri*"to de "na entidad. Se define con "n nom*re& "n tama@o ' "n tipo
de datos.
> 3egistro lgico- +s "n con#"nto de campos relacionados lgicamente 8"e
p"eden ser tratados como "nidad en el programa.
%esde el p"nto de (ista de programacin simplemente es "na estr"ct"ra
de tipo registro.
PGINA /6 /176
> Arc9i(o o fic9ero- +s "n con#"nto de registros del mismo tipo '
organi:ados de tal forma 8"e esos datos p"eden ser accedidos para
a@adir& *orrar o act"ali:ar.
> Cla(e de "n fic9ero- +s "n campo o con#"nto de campos 8"e sir(e para
identificar "n registro ' disting"irla del resto del fic9ero.
> 3egistro fAsico o *lo8"e- +s la cantidad de datos 8"e se transfieren en
"na operacin de +/S entre el dispositi(o e,terno ' la memoria.
%esde este p"nto de (ista& "n registro fAsico p"ede estar comp"esto por
M&1&2&... registros lgicos. +l nFmero de registros lgicos 8"e 9a' por
cada registro fAsico& es decir& 8"e se transfiere en "na operacin de +/S&
es lo 8"e se denomina factor de *lo8"eo.
+se factor de *lo8"eo p"ede ser K1&Q1&L1-
> Si es K1& 8"iere decir 8"e el registro lgico oc"pa m7s 8"e el fAsico& se
transfiere menos de "n registro lgico en cada operacin de +/S.
> Si es Q1& significa 8"e el tama@o del registro lgico ' el fAsico es el
mismo& ' se transfiere "n registro lgico en cada operacin de +/S.
> Si es L1& lo m7s normal& en cada operacin de +/S se transfiere m7s
de "n registro lgico.
BCmo nos interesa 8 " e sea el factor de *lo8"eoE-
%esde "n p"nto de (ista& c"anto ma'or sea el factor de *lo8"eo m7s
registros lgicos se transferir7n& menos operaciones 9a*r7 8"e 9acer ' se tardar7
menos en procesar el fic9ero. SegFn esto c"anto ma'or sea me#or.
Por otra parte& cada (e: 8"e se transfiere informacin de +/S& se de#a en
"na :ona de memoria especial llamada 7*))er. C"anto ma'or sea el tama@o de
*lo8"eo& ma'or ser7 el *"ffer ' menos memoria me 8"edar7 para el resto de la
informacin.
Al final 9a' 8"e lograr "n e8"ili*rio para determinar el tama@o idneo.
> Pases de datos- +s "n con#"nto de datos relacionados almacenados
internamente en "n con#"nto de fic9eros.
$. 1IP4S %+ S4P431+-
!os soportes de almacenamiento sec"ndario son en los 8"e almaceno la
informacin& ' p"eden ser de 2 tipos-
> Sec"enciales- Para acceder a "n registro o dato concreto dentro de Dl&
tengo 8"e pasar pre(iamente por todos los registros anteriores a Dl. +l
e#emplo es "na cinta magnDtica.
> %irecciona*les- +s posi*le acceder directamente a "na direccin
concreta de soporte. +l e#emplo es "n disco.
). 1IP4S %+ 43GAN I aACI4N + S %+ .IC T +34S-
4rgani : acin de arc9i(os-
?iene determinada por 2 caracterAsticas-
> 2Dtodo de organi:acin- 1Dcnica 8"e "tili:o para colocar la
informacin de los registros dentro del dispositi(o.
> 2Dtodo de acceso- Con#"nto de programas 8"e me permiten acceder a
la informacin 8"e pre(iamente 9e almacenado ' (an a depender m"c9o
del mDtodo de organi:acin-
PGINA /7 /176
> Acceso directo- Para acceder a "n acceso concreto no 9a' 8"e pasar
por los anteriores. +l soporte tiene 8"e ser direcciona*le.
> Acceso sec"encial- Para acceder a "n registro 9a' 8"e pasar por
todos los anteriores& ' esto es posi*le si el soporte es sec"encial&
a"n8"e tam*iDn p"edo 9acerlo en "no direcciona*le.
2Dtodos de organi : ac i n-
Ta' tipos de organi:acin-
> Sec"encial
> %irecta
> Sec"encial inde,ada
> Sec"encial- !os registros se (an gra*ando en "n dispositi(o "nos detr7s de otros
consec"ti(amente& sin de#ar 9"ecos ' segFn el orden en 8"e son gra*ados o
g"ardados. Al final para determinar el fin de fic9ero se "sa la marca +4. =+nd 4f
.ile;.
> %irecta- Se p"ede acceder a "n registro directamente. Para ello son necesarias 2
cosas-
1f; C"e cada registro tenga asociada "na cla(e 8"e lo identifi8"e.
2f; 1iene 8"e e,istir "na f"ncin especial llamada f"ncin de
direccionamiento 8"e sea capa: de con(etir la cla(e a "na direccin fAsica
real en el dispositi(o& 8"e es a la 8"e accederemos para locali:ar la
informacin *"scada.
+n la pr7ctica en realidad 9a' "n paso intermedio entre la cla(e ' la
direccin fAsica 8"e es la direccin relati(a a registro.
S"poniendo "n fic9ero de n registros lgicos n"merados de M a n>1& este
(alor asociado al registro es lo 8"e serAa s" direccin relati(a a registro& es decir&
8"e lo 8"e tiene 8"e e,istir es "na f"ncin 8"e con(ierta la cla(e a direccin
relati(a a registro& ' l"ego "na f"ncin 8"e con(ierta la direccin relati(a a
registro a direccin fAsica& donde la direccin fAsica tendr7 ?ol"men& Cilindro&
Pista ' 3egistro& ' esta f"ncin p"ede ser por e#emplo el procedimiento de
di(isiones s"cesi(as.
Para reali:ar este procedimiento& primero 9a' 8"e decir el nFmero de
(olFmenes& el nFmero de cilindros& el nFmero de pistas ' el nFmero de registros
8"e 9a'.
%esp"Ds 9a' 8"e reali:ar s"cesi(as di(isiones-
%33 nf registros
31 C1 nf pistas
3egistros
32 C2 nf cilindros
Pistas
3 C
Cilindros ?ol"men
?ol"men - C
Cilindro- 3
Pista- 32 +mpe:ando a contar desde M.
3egistros- 31
PGINA // /176
1enemos "n dispositi(o con ) (olFmenes& cilindros por (ol"men& $ pistas
por cilindro ' 2M registros por pista. B%nde est7 el registro 1MM1E
1MM1 2M
1 )M $
2 12
M $
Sol"cin $M21 $M22& segFn empecemos a n"merar por M o por 1.
+l pro*lema est7 en como con(ertir la cla(e de "n registro a direccin
relati(a a registro& si en "n soporte como m7,imo podemos almacenar n registros
la direccin relati(a a registro ir7 de M a n>1 l"ego 9a*r7 8"e con(ertir la cla(e a
"no de estos (alores. +n c"al8"ier caso s"ele oc"rrir 8"e el rango de cla(es
=con#"nto de todas las cla(es posi*les 8"e se p"eden dar; es menor 8"e n& 'a 8"e en
la pr7ctica el espacio reser(ado es menor 8"e el rango de n por8"e no "samos todo
el espacio.
SegFn esto p"ede oc"rrir 8"e a diferentes cla(es les correspondan la misma
direccin relati(a a registro ' por tanto la misma direccin fAsica para
almacenarse. A estos registros se les denomina sinnimos& ' c"ando esto oc"rre
9a*r7 8"e almacenar a los registros 8"e tienen la misma posicin en "n l"gar
aparte reser(ado para g"ardar los sinnimos.
+l 7rea reser(ada se p"ede colocar en (arios sitios dentro de "n dispositi(o.
Por e#emplo si el rango de cla(es (a de M a 000& ' la cla(e es 110100$ "na
forma de almacenarla& serAa cogiendo los Fltimos nFmeros 0$.
+n c"al8"ier caso la f"ncin 8"e con(ierta "na cla(e a direccin relati(a a
registro ser7 tal 8"e prod":ca el menor nFmero de colisiones de sinnimos
posi*les.
> Sec"encial inde,ada- +n esta organi:acin tam*iDn se p"ede acceder a "n
registro directamente& pero a9ora lo 9arD mediante in(estigacin #er7r8"ica de
Andices.
Para 8"e se p"eda aplicar esta organi:acin& o*ligatoriamente los registros
tienen 8"e tener asociados "na cla(e.
+n "n arc9i(o con esta organi:acin se disting"en 7reas-
> Area de datos
> Area de Andices
> Area de e,cedentes
C"ando se crea el fic9ero la informacin se (a g"ardando en el 7rea de
datos ' al mismo tiempo se (an creando Andices en el 7rea de Andices para poder
l"ego locali:ar esos datos. %esp"Ds de la creacin del fic9ero la informacin se
almacena en el 7rea de e,cedentes ' se (a act"ali:ando tam*iDn el 7rea de Andices.
1ipos de Andices-
> Indice de pista- +s el de m7s *a#o ni(el ' es o*ligatorio. Ta' "n Andice de
pista por cada pista del cilindro& ' este Andice contiene 2 entradas o
(alores. +l primero determina c"al es el (alor de la cla(e m7s alta
PGINA /0 /176
almacenada en esa pista& ' el seg"ndo determina c"al es la cla(e del
primer registro de e,cedente de esa pista.
> Indice de cilindro- +s el de sig"iente ni(el ' tam*iDn es o*ligatorio.
1iene "na entrada por cada cilindro ' en esa entrada contendr7 la cla(e
m7s alta de los registros almacenados en ese cilindro.
> Indice maestro- No es o*ligatorio. Solo se "sa c"ando el Andice de
cilindro oc"pa m7s de $ pistas. 1iene "na entrada por cada pista del
Andice de cilindros ' contendr7 la cla(e m7s alta de los registros a los
8"e referencian todos los cilindros de esa pista.
+#- 2 pistas / cilindro ' 2 registros / pista
Pista 1 Pista 2
Area de Andices 12 ) 6M
/ 12 1) 2M ) $2 6M
Area de datos 2 / 1M 12 1$ 2M M ) / $2 )M 6M
C1 C2 C
Area de e,cedentes 1) 17 16
Para *"scar el registro M& 9a' 8"e ir mirando si M es KQ 8"e el registro
con el 8"e lo comparamos.
Si llega el 1)& lo metemos en el 7rea de e,cedentes por8"e no ca*e.
6. 4P+3ACI4N+S C4N .ICT+34S-
1. Creacin o carga de "n fic9ero-
Consiste en meter los datos por primera (e: en "n fic9ero 8"e no e,iste.
Para ello 9a' 8"e determinar el espacio 8"e 9a' 8"e reser(ar para el fic9ero ' el
mDtodo de acceso.
2. 3eorgani:acin de "n fic9ero-
Consiste en crear "n fic9ero n"e(o a partir de "no 8"e 'a e,iste. Con(iene
reorgani:arlo c"ando 'a res"lta ineficiente s" "so por8"e 9a' demasiadas
colisiones de sinnimos o m"c9os registros 8"e 'a no e,isten.
. Clasificacin de "n fic9ero-
Consiste en ordenar los registros por "no o (arios campos. +n los sistemas
grandes& el propio sistema operati(o 'a soporta operaciones 8"e reali:an la
organi:acin =S431;.
$. %estr"ccin de "n fic9ero-
%estr"ccin de "n fic9ero- Significa eliminar toda la informacin 8"e
contiene el fic9ero.
). 3e"nin o f"sin de "n fic9ero-
Crear "n fic9ero a partir de (arios.
PGINA 0M /176
6. 3ot"ra o estallido de "n fic9ero-
A partir de "n fic9ero crear (arios.
7. Gestin de "n fic9ero-
Para tra*a#ar con "n fic9ero lo primero 8"e tengo 8"e 9acer es crearlo.
Para crear "n fic9ero tengo 8"e dar "n nom*re 8"e es con el 8"e le (a a g"ardar
en el dispositi(o. Pero para mane#ar ese fic9ero dentro de "n programa tendrD 8"e
asignarle "na (aria*le de tipo de fic9ero 8"e l"ego tendrD 8"e asociar con el
nom*re fAsico del fic9ero para poder tra*a#ar con Dl.
A parte de esto& tam*iDn p"edo dar el tama@o del fic9ero& s" organi:acin '
el tama@o de s" *lo8"e o registro fAsico& a"n8"e estos Fltimos par7metros& solo
ser7 necesario darlos para sistemas grandes.
Antes de crear el fic9ero tengo 8"e definir la estr"ct"ra de s" regi stro para
l"ego al definir la (aria*le 8"e (a a referenciar el fic9ero determinar 8"e fic9ero
(a a contener ese tipo de registro.
6n fic9ero se crea c"ando reali:amos la operacin de apert"ra del mismo&
a"n8"e 9a' leng"a#es en los 8"e 9a' 8"e especificar 2 cosas =creacin ' apert"ra;&
' en otros si al a*rirlo e,iste se crea.
Al crear "n fic9ero si 'a e,iste& (a a depender del leng"a#e& en "nos da error
' en otros se mac9aca lo 8"e 'a e,iste.
+n la operacin de apert"ra si 'a e,iste de fic9ero& depende de la forma de
apert"ra 8"e ese fic9ero 8"e 'a e,istAa sea mac9acado o permane:ca. %e c"al8"ier
forma en la operacin de a*rir tenemos 8"e indicar la (aria*le de tipo fic9ero 8"e
nos (a a ser(ir para tra*a#ar con ese fic9ero en el programa& a contin"acin '
entre R R el nom*re real de ese fic9ero en el dispositi(o& ' finalmente el modo de
apert"ra del fic9ero.
A*rir =Knomefic9L&SnomerealS&KmodoeapertL;
!os modos de apert"ra& dependen del leng"a#e de programacin ' del modo
de organi:acin. Se disting"en modos de apert"ra-
> 2odo de entrada o lect"ra.
> 2odo de salida o escrit"ra.
> 2odo de entrada/salida o lect"ra/escrit"ra.
APP+N%- +,iste en alg"nos leng"a#es.
Para declarar "na (aria*le de tipo fic9ero& 9a' 8"e "sar "na (aria*le de
tipo fic9ero 8"e es- .ic9ero de KtipoeregL.
1ipo al"mno- registro
Codeal"m- entero
%ireccion- cadenaUMV
Nota- real
.in registro
?ar f- fic9ero de al"mno
A*rir =.&Sc-[est"diantes.datS&KmodoL;
> 2odo de entrada- +se fic9ero lo (o' a "sar para leer informacin de Dl
pero no lo (o' a modificar. Para 8"e "n fic9ero se a*ra en este modo
pre(iamente tiene 8"e e,istir ' si no es asA& nos dar7 "n error.
> 2odo de escrit"ra- 6tili:o "n fic9ero para escri*ir informacin en Dl. Al
a*rirlo no 9ace falta 8"e e,ista& si 'a e,istiese& depende del leng"a#e&
pero normalmente se mac9aca lo 8"e 9a' =lo 8"e (amos a 9acer;.
PGINA 01 /176
> 2odo de entrada/salida- ?o' a 9acer operaciones de cons"lta '
act"ali:acin de la informacin.
> 2odo APP+N%- +n pse"docdigo no lo (amos a "sar. Append significa
a@adir& ' se "tili:a para escri*ir en "n fic9ero pero a@adiendo la
informacin al final del mismo.
+n alg"nos leng"a#es tam*iDn e,iste la operacin 3+S+1& 8"e lo 8"e me
9ace es posicionarme al principio del fic9ero.
3eset =K(arefic9L;
+n todo momento& e,istir7 "n p"ntero 8"e me indica en 8"e posicin del
fic9ero esto' sit"ado. Al a*rir "n fic9ero normalmente sea c"al sea el modo de
apert"ra me (o' a 8"edar sit"ado al comien:o del fic9ero& sal(o 8"e "se el modo
de apert"ra Append& 8" me posicionarAa al final del fic9ero. A medida 8"e (o'
9aciendo operaciones en el fic9ero& este (alor se (a act"ali:ando.
Cerrar "n fic9ero- C"iere decir des9acer la cone,in entre la (aria*le del
programa 8"e esto' "sando para mane#ar el fic9ero ' el fic9ero real 8"e est7 en el
dispositi(o.
Cerrar =K(arefic9L;
Siempre 8"e se aca*e de tra*a#ar con "n fic9ero o 8"e 8"eramos cam*iar el
modo de tra*a#ar con ese fic9ero& primero lo cerraremos ' si 8"eremos (ol(er a
tra*a#ar con Dl& lo (ol(emos a a*rir.
N6NCA TAO C6+ %+GA3 6N .ICT+34 API+314.
+n alg"nos leng"a#es e,iste la operacin *orrar "n fic9ero ' lo 8"e 9ace es
eliminar fAsicamente el fic9ero.
Aparte de todo esto tam*iDn e,isten otras relacionadas con s" act"ali:acin&
8"e son las altas& las *a#as ' las modificaciones.
!as cons"ltas son "na operacin de mantenimiento del fic9ero.
Alta-
Consiste en a@adir "n registro al fic9ero. Si en el fic9ero los registros tienen
algFn campo cla(e& lo primero 8"e 9a' 8"e compro*ar al dar "na alta es 8"e no
e,ista 'a otro registro con la misma cla(e.
Pa#a-
lgica.
Consiste en eliminar "n registro del fic9ero. !a *a#a p"ede ser fAsica o
> .Asica- C"ando elimino fAsicamente el registro del fic9ero.
> !gica- C"ando al registro lo marc de "na manera especial para
indicar 8"e 'a no es (7lido pero no lo elimino fAsicamente. A rasgos del
tratamiento de la informacin es como si 'a no e,istiera.
+n fic9eros sec"enciales no se permite la modificacin de la informacin tal
8"e para dar de *a#a a "n registro de "n fic9ero& lo 8"e 9a' 8"e 9acer es crear
otro fic9ero con todos los registros menos el 8"e 8"eremos eliminar.
+n el resto de las organi:aciones normalmente se da la *a#a lgica =con "na
marca; ' c"ando tengo m"c9os registros marcados como *a#a lgica reorgani:o el
fic9ero =*a#a fAsica;.
Si los registros contienen cla(e para dar de *a#a a "n registro tendrD 8"e
dar s" cla(e mirar lo primero si e,iste ' solo en ese caso lo podrD *orrar.
3eglas im p ortantisimas-
> Para dar la alta a "n registro con cla(e& primero 9a' 8"e (er si no 9a'
ningFn registro con esa cla(e.
> Para dar la *a#a a "n registro-
1. Ta' 8"e *"scar si el registro e,iste.
2. 2ostrar la informacin por pantalla ' pedir la confirmacin del
"s"ario.
2odificaci n-
2odificar "n registro consiste en cam*iar la informacin 8"e contiene& es
decir& cam*iar el (alor de "no o m7s de s"s campos.
+n el caso de la organi:acin sec"encial como no se p"eden modificar
directamente& lo 8"e 9a' 8"e 9acer es a partir de la informacin 8"e 'a e,iste
crear otro fic9ero con todos los registros menos el 8"e 8"iero modificar& 8"e lo
gra*arD con la informacin 8"e 8"iera.
Alg"nos leng"a#es 8"e soportan la organi:acin sec"encial sA permiten
9acer la modificacin del registro en el mismo fic9ero =como el C;.
C"ando se modifican registros de "n fic9ero con campos cla(e en el
registro& 9a' 8"e tener en c"enta 8"e lo 8"e #amas se p"ede modificar es el (alor
del campo cla(e& por8"e 9acer eso es como 9acer "n alta.
Cons"ltas-
!as cons"ltas lo Fnico 8"e 9ace es leer informacin del fic9ero ' mostrarme
la informacin.
Para 9acer "na cons"lta 9a' 8"e dar 2 cosas-
> Criterio con el 8"e cons"lto- Contendr7 el campo o campos por los 8"e
8"iero cons"ltar ' el (alor 8"e tienen 8"e tener esos campos.
> Informacin 8"e 8"iero mostrar- A la 9ora de mostrar la informacin&
decir 8"e campos 8"iero mostrar.
7. 13A1A2I+N14 %+ .ICT + 3 4S S+C6+NC I A! +S -
4peraciones *7sicas-
1. %efinir la estr"ct"ra del fic9ero.
2. Apert"ra del fic9ero.
. 1ratamiento de los registros.
> +scri*ir =K(arefic9L&K(areregL;
> !eer =K(arefic9L&K(areregL;
!os fic9eros sec"enciales no se p"eden modificar en "na posicin concreta& por
esa ra:n cada (e: 8"e se 8"iere dar "n alta& *a#a o modificacin de "n registro&
como no se p"ede 9acer directamente& tendrD 8"e "sar "n fic9ero a",iliar tal 8"e
si es "n alta& en el n"e(o fic9ero tendrD toda la informacin del fic9ero antig"o m7s
el n"e(o registro& si es dar de *a#a& copio en el n"e(o fic9ero todo lo 8"e 9a*Aa en el
anterior fic9ero menos el registro 8"e 8"iero *orrar& ' si 8"iero modificar "n
registro& copio toda la informacin ' al llegar al registro a modificar& lo copio 'a
modificado.
Cons"ltas-
1odo tratamiento de fic9eros& lo (o' a 9acer en "n *"cle& ' el final de
fic9ero lo se@ala la marca +4..
!a primera lect"ra la (o' a 9acer f"era del *"cle& ' las sig"ientes al final
del *"cle& ' el *"cle terminar7 c"ando se lee la marca +4..
Normalmente& en c"al8"ier leng"a#e e,iste 'a implementada "na f"ncin
8"e dice sA 9emos llegado al final del fic9ero pero 8"e lo 8"e 9ace es *"scar la
marca +4..
A*rir =K(arefic9L&SnomS&entrada/Salida;
!eer =K(arefic9L&K(areregL;
2ientras no eof =K(arefic9L;
Kproceso con registroL
leer =K(arefic9L&K(areregL;
.in mientras
+n Pascal la marca de fin de fic9ero est7 fAsicamente en el fic9ero& mientras
8"e en C& se compara el tama@o del fic9ero con la del p"ntero del fic9ero& ' si
coinciden 8"iere decir 8"e es el fin del fic9ero.
Pro*lemas 8"e podemos encontrar-
1. Si el fic9ero est7 clasificado por 2 campos ' (o' a 9acer "n tratamiento de Dl&
normalmente tendrD 8"e 9acer 2 *"cles anidados ' apro(ec9ar 8"e estDn
clasificados por campos.
2. Si el fic9ero est7 clasificado por "n campo& para *"scar los fic9eros por ese
campo& 9acemos "n solo *"cle apro(ec9ando 8"e est7n clasificados por ese
campo.
. Si enfrento 2 fic9eros& si "no est7 clasificado ' otro no& leerD en el *"cle m7s
e,terno el 8"e no est7 clasificado& ' en el m7s interno el 8"e est7 clasificado&
apro(ec9ando 8"e estDn ordenados.
$. Si ning"no est7 clasificado& da ig"al el orden de los *"cles& por8"e en los 2
tendrD 8"e *"scar 9asta el final.
). Si lo 8"e me piden es sacar informacin a tra(Ds de "n campo 8"e no es el
campo de clasificacin pero 8"e se sa*e el nFmero de (alores concretos 8"e
p"ede tomar ese campo& "tili:aremos "na estr"ct"ra del tipo arra'.
1enemos "n fic9ero con datos de al"mnos clasificados por c"rso ' nFmero de
al"mno& teniendo en c"enta 8"e los al"mnos se empie:an a n"merar por 1.
!a informacin por al"mno es c"rso& nFmero& nom*re ' nota. %eterminar
c"antos al"mnos apro*ados 9a' en cada c"rso.
1ipo al"mno - registro
C"rso- entero
N"meal- entero
Nom- cadena
Nota- real
.in registro
Algoritmo clase
?ar
.eal- fic9ero de al"mno
3eal- al"mno
Apro*- entero
C"r- entero
Inicio
PGINA 0$/176
A*rir =feal&Sal"mnos.datS&entrada;
!eer =feal&real;
2ientras no eof =feal;
Apro* M
C"r real.c"rso
2ientras c"r Q real.c"rso
Si =real.nota LQ ); ' =no eof=feal;;
+ntonces apro* apro* H 1
.in si
!eer =feal&real;
.in mientras
+scri*ir R+n el c"rsoSc"rS9an apro*adoSapro*
.in mientras
Cerrar =feal;
.in
1enemos "n fic9ero de empleados clasificado por el nFmero de empleado '
"n fic9ero de *a#as no clasificado 8"e contiene los nFmeros de los empleados 8"e
se 9an dado de *a#a. 4*tener "n tercer fic9ero 8"e contenga a los empleados 8"e
realmente 9a' en la empresa.
1ipo empleado- registro
N"meemp- entero
Nom*re- cadena
S"eldo- real
.in registro
Algoritmo *a#a
?ar
.eeeini&feeefin- fic9ero de empleado
.e*a#a- fic9ero de entero
3eeeini&reeefin- empleado
3e*- entero
Inicio
PGINA 0) /176
A*rir =feeeini&S+mpleado1.datS&entrada;
A*rir =feeefin&S+mpleado2.datS&salida;
!eer =feeeini&reeeini;
2ientras no eof =feeeini;
A*rir =fe*&SPa#as.datS&entrada;
!eer =fe*&re*;
2ientras re* KL reeeini.n"meemp; ' no eof =fe*;
!eer =fe*&re*;
.in mientras
Si eof =fe*;
+ntonces escri*ir =feeefin&reeefin;
.in si
Cerrar =fe*;
!eer =feeeini&reeeini;
.in mientras
Cerrar =feeeini;
Cerrar =feeefin;
.in
1enemos "n fic9ero de clientes no clasificados ' la cla(e del fic9ero de
clientes es el %.N.I. ' "n fic9ero de morosos 8"e contiene el %.N.I. ' 8"e est7
clasificado. C"eremos o*tener "n listado de los clientes no morosos.
!eer =fec&rec;
2ientras no eof =fc;
A*rir =fm&S2orosos.datS&entrada;
!eer =fem&rem;
2ientras rec.%NI L rem ' no eof =fem;
!eer =fem&rem;
.in mientras
Si rec.%NI KL rem
+ntonces escri*ir rec.nom*re
.in si
Cerrar =fem;
!eer =fec&rem;
.in mientras
PGINA 06 /176
1enemos "n fic9ero de (entas 8"e tiene el nFmero de (enta& total de (enta '
nFmero de (endedor& sa*emos 8"e en n"estra empresa tra*a#an ) (endedores
n"merados del 1 al ).
C"eremos sa*er el total (endido por cada (endedor.
1ipo (enta- registro
Code(enta- entero
1otal- real
?endedor- entero
.in registro
Algoritmo (entas
?ar
.e(- fic9ero de (enta
3e(- (enta
?end- arra' U1..)V de real
I- entero
Inicio
%esde iQ1 9asta )
?endUiV M
.in desde
A*rir =fe(&S(entas.datS&entrada;
!eer =fe(&re(;
2ientras no eof =fe(;
?endUre(.(endedorV (endUre(.(endedorV H re(.total
!eer =fe(&re(;
.in mientras
Cerrar =fe(;
%esde iQ1 9asta )
+scri*ir R+l (endedorSiS9a (endidoS(endUiV
.in desde
.in
RAcceso directoS en arc9i(os sec"enciale s -
+,isten leng"a#es 8"e tienen f"nciones 8"e sim"lan el acceso directo a "n
registro dentro de "n fic9ero sec"encial =en Pascal SeeNJ en C fseeN;& a estas
f"nciones le indicamos el nFmero de registro =en Pascal; o el nFmero de *'tes =en
C;& ' nos acceden directamente a esa posicin.
Sin em*argo es sim"lado& por8"e internamente esa f"ncin (a a 9acer "na
*Fs8"eda sec"encial 9asta 8"e 9a'a llegado al nFmero de registro o al nFmero de
*'tes.
2antenimiento de fic 9 eros con organ i : acin direct a -
> Alta- Primero 9a' 8"e (er 8"e no e,iste el registro& ' si no e,iste se da
de alta. Para (er si e,iste o no e,iste& a partir de la cla(e del registro 8"e
8"iero dar de alta& calc"lo con la f"ncin de direccionamiento la
posicin en la 8"e tendrAa 8"e meter ese registro. Si esa posicin est7
oc"pada& no lo do' de alta ' si no lo meto allA.
PGINA 07 /176
> Pa#a- Para (er si e,iste& 9ago ig"al 8"e antes. Si e,iste lo marco como
*a#a lgica& ' c"ando se reorganice el fic9ero& lo do' como *a#a fAsica
real.
> 2odificacin- Para (er si e,iste& 9ago ig"al 8"e antes. Si e,iste lo
modifico ' lo ("el(o a gra*ar en la misma posicin.
> Cons"ltas- 1ienen sentido las cons"ltas de registros en partic"lar con
"na determinada cla(e =a tra(Ds de la f"ncin de direccionamiento;&
pero no las *Fs8"edas sec"enciales.
2antenimiento de fic 9 eros con organ i : acin sec"enci a l inde,ada-
+s ig"al 8"e en organi:acin directa& pero a la 9ora de locali:ar "n registro&
en (e: de aplicar "na f"ncin de direccionamiento a s" cla(e& "tili:amos s" cla(e
para in(estigar a tra(Ds de los Andices en donde (a a estar sit"ado.
!as altas si las do' c"ando el fic9ero se crea& se gra*an en el 7rea de datos& '
si el fic9ero 'a e,istAa se gra*an en el 7rea de e,cedentes.
+n las cons"ltas tienen sentido tanto las cons"ltas de "n registro en
partic"lar como las cons"ltas sec"enciales a tra(Ds de "na cla(e por8"e (an a estar
todas seg"idas.
No 9a' 8"e conf"ndir organi:acin sec"encial inde,ada& con fic9eros
inde,ados o de Andices& 8"e son "n tipo especial de fic9eros asociados a "n fic9ero
sec"encial pero independiente de Dl& 8"e me agili:an las *Fs8"edas en el fic9ero
sec"encial en el 8"e est7n inde,ados. S"elen "tili:arse en *ases de datos
domDsticas.
/. .ICT+34S %+ 1 + Y14-
Son "n tipo de fic9eros especiales& en c"anto a lo 8"e podemos leer de ellos '
escri*ir son cadenas de caracteres.
Sin em*argo tienen significados distintos segFn el leng"a#e& ' s" o*#eti(o es
8"e podemos tra*a#ar con cadenas de caracteres.
. - .ic9ero de te,to
C - Cadena
escri*ir =.& C;
leer =.& C;
PGINA 0/ /176
EJERCI CIOS: TEMA 6
1. 1enemos "n arra' con la informacin de n"estros prod"ctos& por cada
prod"cto almacenamos s" cdigo& descripcin& stocN act"al ' stocN mAnimo.
Se trata de o*tener otro arra' 8"e contenga los prod"ctos de los 8"e 9alla 8"e
9acer pedidos por8"e s" stocN sea inferior al mAnimo& tal 8"e al pro(eedor le
tenemos 8"e dar como datos la identificacin del prod"cto ' la cantidad 8"e
pedimos& 8"e coincidir7 con el stocN mAnimo.
Normalmente tra*a#amos con 1MM prod"ctos.
1ipo prod"cto Q registro
PGINA 00 /176
.in registro
Codigo- entero
%escripcin- cadena
StocN- entero
StocNemin- entero
Pedido Q registro
Codigo- entero
Cantidad- entero
.in registro
!istaeprod"cto Q arra' U1..1MMV de prod"cto
!istaepedido Q arra' U1..1MMV de pedido
Algoritmo almacen
?ar
Prod- listaeprod"cto
Ped- listaepedido
I&#- entero
Inicio
G 1
%esde iQ1 9asta 1MM
Si prodUiV.stocN K prodUiV.stocNemin
+ntonces pedU#V.codigo prodUiV.codigo
PedU#V.cantidad prodUiV.stocNemin
G #H1
.in si
.in desde
.in
2. %ado "n arra' 8"e contiene la informacin de los al"mnos de "na clase de 1MM
al"mnos& ' teniendo en c"enta 8"e de cada "no de ellos almacenamos s"
nFmero de e,pediente& nom*re ' nota media. Tallar la media de todos los
al"mnos de esa clase ' dar otra opcin 8"e pida el nom*re de "n al"mno ' me
de s" nota si este al"mno e,iste.
1ipo al"mno Q registro
+,pediente- entero
Nom*re- cadena
2edia- real
.in registro
!ista Q arra'U1..1MMV de al"mno
Algoritmo notas
?ar
Al"m- lista 4p&i-
entero 2arca-
*ooleano
Inicio
Presentar =op;
2ientras =op KLM;
SegFn sea op
1- escri*ir R!a media de la clase esSnotaemedia =al"m;
2- escri*ir RIntrod"ce "n nom*reS
leer nom*re
marca falso
i 1
repetir
si comparar =al"mUiV.nom*re&nom*re; Q (erdadero
entonces marca Q (erdadero
sino i iH1
fin si
9asta =i L 1MM; o =marcaQ(erdadero;
si marca Q (erdadero
entonces escri*ir R!a nota deSnom*reSesSal"mUiV.media
sino escri*ir R+l al"mno no e,isteS
fin si
fin segFn sea
presentar =op;
fin mientras
fin
. 1enemos "n arra' con la indicacin de cada prod"cto& stocN& descripcin '
fec9a. Tallar "na opcin 8"e nos sir(a iterati(amente para 9acer pedidos de
prod"ctos ' 8"e termina c"ando pidamos el prod"cto M.
Por cada pedido se da el identificador de prod"cto 8"e se pide& ' la cantidad de
prod"cto& ' lo 8"e nos dice es si 9a' cantidad s"ficiente& respondiendo RPedido
s"ministradoS ' act"ali:ando el stocN& ' si el prod"cto solicitado no e,iste o no
9a' s"ficiente cantidad& mostrar7 "n mensa#e de error e,plicando la ca"sa.
1ipo tefec9a Q registro
%ia- entero
2es- entero
Anno- entero
.in registro
Prod"cto Q registro Codigo-
entero %escripicion-
cadena StocN- entero
.ec9a- tefec9a
.in prod"cto
!ista Q arra'U1..1MV de prod"cto
Algoritmo pedidos
?ar
Prod- lista
Codigo&cantidad&i- entero
2arca- *ooleano
Inicio
+scri*ir RIntrod"ce el codigoS
!eer codigo
+scri*ir RIntrod"ce la cantidadS
!eer cantidad
2ientras codigo KL M
I 1
2arca falso
3epetir
Si codigo Q prodUiV.codigo
+ntonces marca (erdadero
Sino i iH1
.in si
Tasta =marca Q (erdadero; o =i L 1MM;
Si marca Q falso
+ntonces escri*ir RNo e,iste el prod"ctoS
Sino si prodUiV.stocN K cantidad
+ntonces escri*ir RNo 9a' cantidad s"ficienteS
Sino prodUiV.stocN prodUiV.stocN i cantidad
+scri*ir Rpedido s"ministradoS
.in si
.in si
.in mientras
.in
f"ncion notaemedia =a- lista;- real
(ar
i- entero
ac"m- real
inicio
ac"m M
desde iQ1 9asta 1MM
ac"m ac"m H aUiV.nota
fin desde
retorno =ac"m/1MM;
fin notaemedia
f"ncion comparacion =c1-cadena&c2-cadena;- *ooleano
(ar
i- entero
inicio
i 1
mientras =c1UiVQc2UiV; ' =c1UiVKLXkX; ' =c2UiVKLXkX;
i iH1
fin mientras
si c1UiVQc2UiV
entonces retorno (erdadero
sino retorno falso
fin si
fin comparacion
Procedimiento presentar =ent>sal opcion- entero;
Inicio
3epetir
+scri*ir RM. SalirS
+scri*ir R1. Tallar nota mediaS
+scri*ir R2. Tallar la nota de "n al"mnoS
+scri*ir RIntrod"ce "na opcinS
!eer opcion
Tasta =opcion LQM; ' =opcion KQ2;
.in presentar
$. 1enemos "n fic9ero de fact"ras. +n la fact"ra (iene el nFmero de cliente al 8"e
pertenece la fact"ra& el nFmero de fact"ra& el importe de la fact"ra ' "n campo
pagado 8"e ser7 *ooleano.
+l fic9ero est7 clasificado pro nFmero de cliente ' de fact"ra.
%ise@ar "n programa 8"e o*tenga por pantalla para cada cliente el total 8"e
nos de*e& ' al final me dD el total de lo 8"e la empresa no 9a co*rado.
1ipo fact"ra- registro
N"mecl- entero
N"mefact- entero
Importe- real
Pagado- *oolean
.in registro
Algoritmo fact"ras
?ar
.ic9- fic9ero de fact"ra
.act- fact"ra
1otal&de"da- real
Cliente- entero
Inicio
A*rir =fic9&Sfact"ras.datS&entrada;
!eer =fic9&fact;
1otal M
2ientas no eof =fic9;
%e"da M
Cliente fact.n"mecl
2ientras =cliente Q fact.n"mecl; ' no eof =fic9;
Si fact.pagado Q falso
+ntonces de"da de"da H fact.importe
1otal total H fact.importe
.in si
!eer =fic9&fact;
.in mientras
+scri*ir R+l clienteSclienteSde*eSde"da
.in mientras
+scri*ir R!a empresa no 9a co*radoStotal
.in
). 1enemos "n fic9ero de empleados 8"e contiene el departamento& cdigo de
empleado& nom*re& categorAa ' s"eldo. Ta' 12 categorAas n"meradas del M al
11.
Por cada departamento sacar el nFmero total de empleados 8"e tiene ' el
s"eldo medio por departamento. !o mismo 9acerlo por categorAas.
+l fic9ero est7 clasificado por cdigo de departamento ' empleado.
1ipo emp- registro
Codedep- entero
Codeemp- entero
Nom*eemp- cadena
Categoria- entero
S"eldo- real
.in registro
Cat- registro
S"eldo- real
+mp- entero
.in registro
Algoritmo empleados
?ar
.eemp- fic9ero de emp
3eemp- emp
1edep- real
Nedep&i&d- entero
C- arra' UM..11V de cat
Inicio
%esde iQM 9asta 11
CUiV.s"eldo M
CUiV.empleado M
.in desde
A*rir =feemp&Sempleados.datS&entrada;
!eer =feemp&reemp;
2ientras no eof =feemp;
% reemp.codedep
1edep M
Nedep M
2ientras =dQreemp.codedep; ' no eof =feemp;
1edep tedep H reemp.s"eldo
Nedep nedep H 1
CUreemp.categoriaV.s"eldo cUreemp.categoriaV.s"eldo H reemp.s"eldo
CUreemp.categoriaV.emp cUreemp.categoriaV.emp H 1
!eer =feemp&reemp;
.in mientras
+scri*ir R+l s"eldo medio del departamentoS d R esS tedep / nedep
.in mientas
%esde i Q M 9asta 11
+scri*ir R+l s"eldo de la categorAaSiSesScUiV.s"eldo/cUiV.emp
.in desde
Cerrar =feemp;
.in
6. Para controlar los stocNs de "n almacDn tenemos-
> 6n fic9ero RalmacDnS& no clasificado 8"e contiene las e,istencias de cada
prod"cto en almacDn& ' sa*emos 8"e 9a' "n m7,imo de 7)M prod"ctos.
Cada registro tiene el cdigo de prod"cto=1..7)M;& la cantidad en stocN de
ese prod"cto ' el nom*re del prod"cto
> 6n fic9ero RpedidosS 8"e contiene todos los pedidos 8"e se solicitan al
almacDn. Cada pedido contiene el nFmero de pedido& el cdigo de prod"cto
8"e se pide ' la cantidad 8"e se pide. +ste fic9ero est7 clasificado por
nFmero de pedido.
4*tener "n fic9ero de stocN act"ali:ado a partir de los pedidos& p"diDndose
dar-
1. +l prod"cto 8"e se pide e,iste en el almacDn ' 8"e la cantidad 8"e se pide
sea menor o ig"al a la 8"e 9a'. Slo se act"ali:a el fic9ero.
2. +l prod"cto e,iste& pero la cantidad 8"e nos piden es ma'or 8"e la 8"e 9a'.
G"ardaremos la informacin del pedido en el fic9ero RdenegadosS 8"e tiene
el cdigo del prod"cto& la cantidad pedida ' la cantidad 8"e 9a*Aa en stocN.
. +l cdigo de prod"cto no e,iste. 2ostramos por pantalla "n mensa#e 8"e
ponga RCdigo de prod"cto erroneoS.
Cada prod"cto aparece como m7,imo "na (e:.
1ipo alm- registro
Prod- entero
StocN- entero
.in registro
Ped- registro
Neped- entero
Prod- entero
Cant- entero
.in registro
%en- registro
Prod- entero
StocN- entero
Cant- entero
.in registro
Algoritmo almacDn
?ar
.ea&feal- fic9ero de al"m
.ed- fic9ero de den
.ep- fic9ero de pedidos
3ea- alm
3ep- ped
3ed- den
Inicio
A*rir =fep&Spedidos.datS&entrada;
A*rir =fen&Salmacenen.datS&salida;
A*rir =fed&Sdenegados.datS&salida;
!eer =fep&rep;
2ientras no eof =fep;
A*rir =fea&Salmacen.datS&entrada;
!eer =fea&rea;
2ientras =rep.prod KL rea.prod; ' no eof =fea;
!eer =fea&rea;
.in mientras
Si rep.prod Q rea.prod
+ntonces si rep.cantidad K rea.stocN
+ntonces rean.prod rea.prod
3ean.stocN rea.stocN i rep.cantidad
+scri*ir =fean&rean;
Sino red.prod rea.prod
3ed.cant rep.cant
3ed.stocN rea.stocN
+scri*ir =fed&red;
PGINA 1M)/176
.in si
Sino escri*ir R+rror. No e,iste el prod"ctoSrep.prod"cto
.in si
Cerrar =fea;
!eer =fep&rep;
.in mientras
Cerrar =fep;
Cerrar =fed;
Cerrar =fean;
Act"ali:arealmacen =fea&fean;
.in
Procedimiento act"ali:arealmacen =f1- fic9ero de almacenJ f2- fic9ero de
almacen;
?ar
31&r2- alm
.- fic9ero de alm
Inicio
A*rir =f1&Salmacen.datS&entrada;
A*rir =f&Salm.actS&salida;
!eer =f1&r1;
2ientras no eof =f1;
A*rir =f2&Salmacenen.datS&entrada;
!eer =f2&r2;
2ientras =r1.prod KL r2.prod; ' no eof =f2;
!eer =f2&r2;
.in mientras
Si r1.prod Q r2.prod
+ntonces escri*ir =f&r2;
Sino escri*ir =f&r1;
.in si
Cerrar =f2;
.in mientras
Cerrar =f1;
Cerrar =f;
.in
ORDENACIN8 B9S:UEDA E INTERCALACIN I NTERNA:
TEMA ;
1. Introd"ccin.
2. 4rdenacin-
> 2Dtodo de la *"r*"#a.
> 2Dtodo de insercin.
> 2Dtodo de seleccin.
PGINA 1M6/176
> 2Dtodo de C"icN S9ort.
. PFs8"eda-
> PFs8"eda sec"encial.
> PFs8"eda *inaria.
> PFs8"eda por con(ersin de cla(es o Tas9ing.
$. Intercalacin.
1. IN134%6CCI5N-
A la 9ora de tratar datos& m"c9as (eces nos con(iene 8"e estDn ordenados.
+stos mDtodos nos p"eden res"ltar eficientes c"ando 9acemos las *Fs8"edas.
2. 43%+NACI5N-
Consiste en organi:ar "n con#"nto de datos en "n orden determinado segFn
"n criterio.
!a ordenacin p"ede ser interna o e,terna-
> Interna- !a 9acemos en memoria con arr'as. +s m"' r7pida.
> +,terna- !a 9acemos en dispositi(os de almacenamiento e,terno con
fic9eros.
Para determinar lo *"eno 8"e es "n algoritmo de ordenacin 9a' 8"e (er la
comple#idad del algoritmo =cantidad de tra*a#o de ese algoritmo;& se mide en el
nFmero de operaciones *7sicas 8"e reali:a "n algoritmo. !a operacin *7sica de
"n algoritmo es la operacin f"ndamental& 8"e es la comparacin.
2Dtodo de la *"r*"#a-
!a filosofAa de este mDtodo es ir comparando los elementos del arra' de 2 en
2 ' si no est7n colocados correctamente intercam*iarlos& asA 9asta 8"e tengamos el
arra' ordenado.
Ta' 8"e comparar la posicin 1 ' la 2 ' si no est7n ordenadas las
intercam*io. !"ego la 2 ' la ' asA s"cesi(amente 9asta 8"e comparo las Fltimas
posiciones.
Con esta primera pasada lograremos 8"e 8"ede ordenado el Fltimo
elemento del arra'.
1ericamente& en cada pasada iremos colocando "n elemento& ' tendrAamos
8"e 9acer n i1 pasadas. Si en "na pasada no se 9acen cam*ios& el arra' 'a est7
ordenado.
Procedimiento *"r*"#a =datos- arra' U1..NV de KtipoL;
?ar
4rdenado- *ooleano
I& G- entero
A",- KtipoL
Inicio
PGINA 1M7/176
4rdenado falso
I 1
2ientras =ordenado Q falso; ' =i KL n i 1;
4rdenado (erdadero
G I
%esde # Q 1 9asta n i 1
Si datos U#V L datos U# H 1V
+ntonces a", datos U#V
%atos U#V datos U# H 1V
%atos U#V a",
4rdenado falso
.in si
.in desde
I I H 1
.in mientras
.in
2Dtodo de insercin-
Se s"pone 8"e se tiene "n segmento inicial del arra' ordenado& ' 9a' 8"e ir
a"mentando la longit"d de segmento 9asta 8"e coincide con la longit"d del arra'.
Para ello insertaremos el sig"iente elemento en el l"gar adec"ado dentro del
segmento ordenado.
+sto se 9ace mo(iendo cada elemento del segmento ordenado a la derec9a
9asta 8"e se enc"entre "no menor o ig"al al elemento 8"e 8"eremos colocar en el
segmento o 9asta 8"e no tenemos elementos& ' lo coloco en esa posicin.
Para arrancar este mDtodo se parte de 8"e el segmento ordenado inicial este
es la primera posicin.
Procedimiento insercion =datos- arra' U1..NV de KtipoL;
?ar
I& G- entero
A",- KtipoL
Inicio
%esde i Q 2 9asta N
A", datos UiV
G i i 1
2ientras =# L M; ' =a", K datosU#V;
%atosU# H 1V datosU#V
G # i 1
.in mientras
%atos U# H 1V a",
.in desde
.in
2Dtodo de la seleccin-
Se trata de *"scar el elemento m7s pe8"e@o ' colocarlo en la primera
posicin& desp"Ds el seg"ndo m7s pe8"e@o ' colocarlo en la seg"nda posicin& ' asA
s"cesi(amente 9asta 8"e el arra' este ordenado.
PGINA 1M//176
Para ello (amos a recorrer el arra'& ' por cada elemento *"scamos a la
derec9a de esa posicin c"al es el m7s pe8"e@o& ' lo intercam*io con el elemento
8"e esto' e,aminando.
Procedimiento selecccion =datos- arra'U1..NV de KtipoL;
?ar
I&#&pos- entero
A",- KtipoL
Inicio
%esde i Q 1 9asta N>1
A", datosUiV
Pos i
%esde # Q iH1 9asta N
Si datosU#V K a",
+ntonces pos #
A", datosU#V
.in si
.in desde
%atosUposV datosUiV
%atosUiV a",
.in desde
.in
2Dtodo de ordenacin r7pida o C"icNS9ort-
Consiste en di(idir la lista inicial en otras dos 8"e ordenamos por separado
rec"rsi(amente.
Para ello& se elige "n elemento de la lista al 8"e llamamos pi(ote& tal 8"e a la
derec9a del pi(ote (a a 8"edar lo m7s grande& ' a la i:8"ierda lo m7s pe8"e@o& es
decir& 8"e el pi(ote 8"edar7 colocado en s" posicin.
Procedimiento C"icNS9ort =ini- enteroJ fin- enteroJ datos- arra'U1..NV de KtipoL;
Inicio
Si ini K fin
+ntonces s"*listas =ini&fin&pi(ote&datos;
C"icNs9ort =ini&pi(ote>1&datos;
C"icNs9ort =pi(oteH1&fin&datos;
.in si
.in
Procedimiento s"*listas =ini-enteroJfin-enteroJent>sal pi(ote-enteroJ
datos-arra'U1..NVde KtipoL;
Inicio
Pi(ote ini
PGINA 1M0/176
PGINA 11M /176
A", datosUiniV
%esde i Q pi(oteH1 9asta fin
Si datosUiV K a",
+ntonces pi(ote pi(ote H 1
A",2 datosUiV
%atosUiV datosUpi(oteV
%atosUpi(oteV a",2
.in si
.in desde
%atosUiniV datosUpi(oteV
%atosUpi(oteV a",
.in
. PmSC6 + %AS-
Ta' 2 tipos de *Fs8"edas& internas 8"e se 9acen en memoria ' e,ternas 8"e
se 9acen en fic9eros. C"ando *"scamos en "n fic9ero& normalmente lo 9acemos a
tra(Ds de "na cla(e.
%ado "n determinado (alor& se trata de (er si e,iste "n elemento con ese
(alor en el arra' de fic9eros donde se *"sca& tal 8"e se de("el(e si est7 o no.
+,isten mDtodos de *Fs8"eda-
> Sec"encial.
> Pinaria o dicotnica.
> Por transformacin de cla(es o Tas9ing.
PFs8"eda sec"encial-
Se p"ede aplicar para *Fs8"edas internas ' e,ternas& ' 9a' 8"e ir pasando
sec"encialmente por todos los elementos de la estr"ct"ra 9asta encontrar el
elemento o aca*ar la lista.
Procedimiento *esec"encial =datos- arra'U1..NV de KtipoLJ elem- KtipoL;
?ar
I- entero
Inicio
I 1
2ientras =i KQ N; ' =datosUiV KL elem;
I I H 1
.in mientras
Si datosUiV Q elem
+ntonces escri*ir R+lemento encontrado en la posicinSi
Sino escri*ir R+lemento no encontradoS
.in si
.in
PFs8"eda sec"encial con centinela-
Se trata de optimi:ar en cierto modo la *Fs8"eda sec"encial normal& lo 8"e
9acemos es a@adir al final del arra' el elemento 8"e 8"iero *"scar por lo 8"e
siempre lo encontrare.
PGINA 111 /176
Si enc"entro el elemento en "na posicin distinta de NH1 significa 8"e no
est7 en la estr"ct"ra. !a (enta#a es 8"e en la condicin del mientras no tengo 8"e
preg"ntar si se aca*a la estr"ct"ra& me a9orro "na condicin& el incon(eniente es
8"e tiene 8"e so*rar espacio al final del arra'.
Procedimiento *esececentineal =datos- arra'U1..NH1V de KtipoLJ elem- KtipoL;
?ar
I- entero
Inicio
%atosUnH1V elem
I 1
2ientras datosUiV KL elem
I iH1
.in mientras
Si i KL nH1
+ntonces escri*ir R+lemento encontrado en la posicinSi
Sino escri*ir R+lemento no encontradoS
.in si
.in
PFs8"eda *inaria o dicotnica-
Para 8"e se p"eda aplicar es 8"e la lista en la 8"e 8"eremos *"scar el
elemento este pre(iamente ordenada.
Se trata de di(idir el espacio de *Fs8"eda en s"cesi(as mitades 9asta
encontrar el elemento *"scado o 9asta 8"e 'a no p"eda 9acer m7s mitades.
Primero 9allamos el Andice de la mitad del arra' ' miramos si el elemento
coincide con Dl& sino coincide a(erig"amos donde de*erAa estar el elemento
*"scado& si en la lista de la derec9a o de la i:8"ierda& ' dentro de esa mitad 9ago lo
mismo s"cesi(amente.
Procedimiento *e*inaria =datos-arra' U1..NV de KtipoLJ elem-KtipoLJ ini-enteroJ
fin- entero;
?ar
mit- entero
Inicio
mit =iniHfin; di( 2
mientras =ini K fin; ' =elem KL datosUmitV;
si elem K datosUmitV
entonces fin mit i 1
sino ini mit H 1
fin si
fin mientras
si ini K fin
entonces escri*ir R+lemento encontrado en la posicinS mit
sino escri*ir R+lemento no encontradoS
fin si
fin
PFs8"eda por transformacin de cla(es o Tas9ing-
+s necesario 8"e lo 8"e se *"s8"e sea por "n determinado campo cla(e. Se
trata de con(ertir ese campo cla(e en "na direccin real& si estamos en "n arra'& en
"n posicin del arra' ' si estamos en "n fic9ero& en "n registro del fic9ero.
PGINA 112 /176
!o 8"e 9ace 8"e se con(ierta la cla(e en "na direccin real es la f"ncin de
direccionamiento. +,isten diferentes tipos de f"nciones de direccionamiento-
> !a m7s "sada es la f"ncin md"lo& 8"e consiste en di(idir la cla(e entre
el nFmero de elementos m7,imos de la estr"ct"ra ' coger el resto como
direccin real de almacenamiento =el Andice si es "n arra'& o "na
direccin relati(a si es "n fic9ero;.
> +ntr"ncamiento- +s la parte de la cla(e como Andice.
> Plegamiento- %i(idir la cla(e en partes ig"ales de tama@o& 8"e (a a ser
ig"al al nFmero de cifras del tama@o del arra'& l"ego s"marlas ' coger
las Fltimas cifras de la s"ma.
> 2itad del c"adrado- +s el c"adrado de la cla(e ' desp"Ds coger las
cifras centrales.
+l pro*lema de estos casos& es 8"e c"ando el rango de cla(es es ma'or 8"e
el nFmero de posiciones de la estr"ct"ra& est7 el pro*lema de 8"e a diferentes
cla(es les corresponde la misma posicin& asA 8"e c"ando se prod"ce el seg"ndo
sinnimo 9a' 8"e (er donde se manda.
Para e(itar esto& tratar 8"e la f"ncin de direccionamiento prod":ca el
menor nFmero de colisiones posi*les.
Para sol"cionar el pro*lema de los sinnimos-
> %e#ar tanto espacio como rango de cla(es. +s ilgico.
> Si se trata de "n arra'& 8"e por cada posicin de#emos "na posicin m7s.
> !a me#or sol"cin es la tDcnica de encadenamiento& 8"e consiste en 8"e
de cada posicin del arra' salga "n p"ntero a "na lista enla:ada 8"e
enlace a todos los elementos 8"e de*erAan ir posicionados en esa posicin
o Andice del arra'.
$. IN1+3CA!ACI5N-
Consiste en #"ntar (arias listas ordenadas en "na sola lista 8"e 8"ede
ordenada.
PGINA 11 /176
Procedimiento f"sion =a1- 11J a2- 12J a- 1;
?ar
I&#&N&l- entero
Inicio
I 1
G 1
j 1
2ientras =iKQn; ' =#KQm;
Si a1UiV K a2U#V
+ntonces aUNV a1UiV
I I H 1
Sino aUNV a2U#V
G G H 1
.in si
j j H 1
.in mientras
Si i K n
+ntonces desde !Qi 9asta m
j N H1
AUNV a2UlV
.in desde
Sino desde !Q# 9asta n
j NH1
AUNV a1UlV
.in desde
.in si
.in
ORDENACIN8 B9S:UEDA Y FUS I N E<TERNA:
TEMA 1=
PGINA 11$ /176
1. Arc9i(os ordenados.
2. ."sin o me:cla de arc9i(os ordenados.
. Particin de arc9i(os.
$. Clasificacin de arc9i(os.
1. A3CTI?4S 43% + NA%4S-
6n arc9i(o se p"ede ordenar por "n campo o "n con#"nto de campos. !a
ma'or parte de los sistemas disponen de "na f"ncin S431 para ordenar.
2. .6SI5N 4 2+ a C !A %+ A3CTI?4S 43%+NA%4 S -
%ados 2 arc9i(os A ' P 8"e tienen la misma estr"ct"ra ' clasificados por el
mismo campo o campos& se trata de o*tener otro arc9i(o C 8"e tenga la misma
estr"ct"ra de los 2 anteriores ' 8"e tam*iDn 8"eda clasificado por el mismo
criterio.
Procedimiento f"sion =A- tefic9J P- tefic9J C- tefic9;
?ar
31& r2- KtipoL
Inicio
A*rir =C&Sfic9.salS&salida;
A*rir =A&Sfic91S&entrada;
A*rir =P&Sfic92S&entrada;
!eer =A&r1;
!eer =P&r2;
2ientras no eof =A; ' no eof =P;
Si r1.info K r2.info
+ntonces escri*ir =C&r1;
!eer =A&r1;
Sino escri*ir =C&r2;
!eer =P&r2;
.in si
.in mientras
Si eof =A;
+ntonces leer =P&r2;
mientras no eof =P;
+scri*ir =C&r2;
!eer =P&r2;
.in mientras
Sino leer =A&r1;
mientras no eof =A;
+scri*ir =C&r1;
!eer =A&r1;
.in mientras
.in si
Cerrar =A;
Cerrar =P;
Cerrar =C;
.in
. .6SI5N %+ A3CT I?4S-
Se
particin-
trata de di(idir "n arc9i(o en (arios. Ta' diferentes criterios de
Particin por conteni d o-
Se reparten los registros entre (arios registros segFn el (alor de "no o m7s
campos.
K ?1 .1
Q ?1 .2
L ?1 .
Procedimiento partecont =fic9- tefic9J ent>sal fic91& fic92& fic9- tefic9;
?ar
3- KtipoL
Inicio
A*rir =fic9&S.S&entrada;
A*rir =fic91&S.1S&salida;
A*rir =fic92&S.2S&salida;
A*rir =fic9&S.S&salida;
!eer =fic9&r;
2ientras no eof =fic9;
Si r.info K ?1
+ntonces escri*ir =f1&r;
Sino si r.info L ?1
+ntonces escri*ir =f&r;
Sino escri*ir =f2&r;
.in si
.in si
!eer =fic9&r;
.in mientras
Cerrar =fic9;
Cerrar =f1;
Cerrar =f2;
Cerrar =f;
.in
Particin por nFmero fi#o de re g istros o por sec"encias c o n clasificacin interna-
Se trata de o*tener a partir de "n fic9ero (arios& tal 8"e todos tengan "n
nFmero fi#o de registros e,cepto el Fltimo.
Si el fic9ero inicial tiene Y registros ' 8"iero o*tener como res"ltado O
fic9eros& cada fic9ero tendr7 Y/O registros.
Se trata de ir le'endo sec"encias de Y/O registros del fic9ero . ' se ("elcan
a "n arra'& clasificar esas sec"encias internamente& ' c"ando estDn clasificadas& las
("elco a otro fic9ero.
+l pro*lema es 8"e se "sa arra's para la ordenacin interna& ' a (eces el
nFmero de fic9eros dependen del tama@o m7,imo del arra'.
.- 0 ) 1$ 2 M 1
.1- ) 0
.2- 2 1$ M
.- 1
Particin por sec"encias sin cla s ificacin interna-
Se trata de o*tener fic9eros a partir de "no dado& todos con el mismo
tama@o& pero los fic9eros no tienen por 8"e estar clasificados.
Nosotros marcamos el tama@o del *lo8"e donde (a'a a clasificar la
informacin. %etermino tam*iDn el nFmero m7,imo de fic9eros 8"e 8"iero tener.
!eerD sec"encias de N registros del fic9ero inicial ' los irD gra*ando en los
fic9eros res"ltantes de la particin.
$. C!ASI. I CACI5N %+ A3CTI?4S-
+s o*ligatorio 8"e e,ista "na cla(e. Si el fic9ero f"ese pe8"e@o se lle(an
todos los registros a "n arra' ' los clasifico& pero esto no es lo m7s "s"al& por lo 8"e
se "sa la clasificacin e,terna.
Clasificaci n por me : c l a direct a -
?amos a "sar 2 fic9eros a",iliares .1 ' .2. +l fic9ero . lo organi:amos
gra*ando en . sec"encias de registros ordenados cada (e: m7s grandes.
Primero leemos las sec"encias de "n registro de . ' las gra*o
alternati(amente en .1 ' .2.
!"ego leo las sec"encias de "n registro& "na de .1 ' otra de .2& ' las gra*o
ordenadas en ..
?"el(o a leer en . con el do*le de sec"encia 8"e antes ' los gra*o en .1 '
.2& ' repetimos todas las fases d"plicando en cada pasada el tama@o de la
sec"encia 9asta 8"e el tama@o o*tenido sea ig"al 8"e el del fic9ero. A cada
tratamiento de . se le llama pasada& ' el nFmero de pasadas m7,imo& ser7 I& tal
8"e el tratamiento se repetir7 9asta 8"e 2 ele(ado a I LQ nFmero de registros.
+n cada pasada para clasificar la sec"encia 8"e leemos de .1 ' .2&
"tili:amos el mDtodo de f"sin e,terna.
.- 0 ) 1$ 2 M 1 12 1M
.1- / ) / 2 / 1 / 1M
.2- 0 / 1$ / M / 12
.- 0 ) 1$ 2 M 1 12 1M
.1- 0 / 2 M / 1M
.2- ) 1$ /1 12
.- ) 0 1$ 1 2 12 M 1M
.1- ) 0 1$ / 1M
.2- 1 2 12 M
.- 1 2 ) 0 12 1$ M / 1M
.1- 1 2 ) 0 12 1$ M
.2- 1M
.- 1 2 ) 0 1M 12 1$ M
Clasificacin por me : c l as de sec"encias e8"i(alentes-
Se parece al mDtodo anterior por8"e tam*iDn se intenta coger sec"encias de
registros m7s grandes& pero a9ora "samos $ fic9eros a",iliares ' en (e: de
empe:ar le'endo sec"encias de "n registro& 9acemos sec"encias de N registros& 8"e
la primera (e: clasificamos internamente& por lo 8"e el (alor de N (endr7 limitado
por el tama@o del arra'.
Primero leemos del arc9i(o inicial . sec"encias de N registros 8"e
clasificamos internamente ' 8"e gra*amos alternati(amente en .1 ' .2.
%esp"Ds leo sec"encias de N registros de .1 ' .2 alternati(amente& ' por
cada par de sec"encias leAdas las f"siono ' las gra*o alternati(amente 'a
ordenadas en . ' .$.
!as sec"encias de 2N registros de . ' .$ las f"siono ' la sec"encia $N
o*tenida 'a ordenada la gra*o alternati(amente en .1 ' .2.
3epito esto 9asta 8"e todos los fic9eros estDn (acAos menos 1& ' la
informacin de ese fic9ero la gra*o al fic9ero inicial.
.- 0 ) 1$ 2 M 1 12 1M
.1- ) 0 / 1 1M 12
.2- 2 1$ M
.1- ?acio
.2- ?acio
.- 2 ) 0 1$ M
.$- 1 1M 12
.1- 1 2 ) 0 12 1$ M ?"elco .1 al fic9ero inicial ..
.2- ?acio
.- ?acio
.$- ?acio
ESTRUCTURAS DIN>M I CAS L I NEALES DE DATOS:
LISTAS ENLA?ADAS. PILAS Y COLAS:
TEMA 11
1. Introd"ccin a las estr"ct"ras din7micas de datos.
2. !istas.
. !istas enla:adas.
$. Procesamiento de listas enla:adas simples.
). !istas circ"lares con ca*ecera.
6. !istas do*lemente enla:adas.
7. Pilas.
/. Colas.
0. %o*les colas o *icolas.
1. IN134%6CCI5N A !AS + S136C 1 63AS %IN2ICAS %+ %A14S-
!as (enta#as de las estr"ct"ras din7micas de datos son-
1. No 9a' 8"e definir el tama@o antes de "sarla& sino 8"e la (o' "tili:ando
segFn la necesito.
2. !os elementos 8"e forman est7 estr"ct"ra no est7n sit"ados en forma
contig"a en memoria& ' esos elementos se relacionan entre sA mediante
campos enlace o p"ntero& ' a cada "no de esos elementos lo llamamos
nodo de la estr"ct"ra.
6n p"ntero es "n dato c"'o contenido es "na direccin de memoria 8"e
es en la 8"e est7 almacenado el dato al 8"e ap"nta.
!as estr"ct"ras din7micas p"eden ser lineales o no lineales segFn 8"e desde
"n elemento se p"eda acceder solamente a otro o a (arios.
%eclaracin de los p"nteros en distintos leng"a#es-
+n C- KtipoL IK(arepL
Int Ip
+n Pascal- K(aretipoep"nteroL- \KtipoL
P- \integer
+n pse"docdigo- K(aretipoep"nteroL- p"ntero a KtipoL
P- p"ntero a entero
Acceder a "n campo de "n registr o -
+n C- P nom*re
+n Pascal- p\.nom*re
+n pse"docdigo- p nom*re
2. !IS1AS-
6na lista es "na coleccin lineal de elementos. Ta' 2 formas de
almacenarla. Con arra's ="sando memoria est7tica;& en donde la relacin de los
elementos de la lista (iene dada por8"e oc"pa posiciones contig"as de memoria.
%e forma enla:ada con memoria din7mica. Se conoce como listas enla:adas&
' la relacin entre los elementos de la lista se mantiene mediante campos de enlace
o p"nteros.
. !IS1AS +N!AaA%AS-
+s "na coleccin lineal de elementos llamados N4%4S& donde el orden
entre los nodos se esta*lece mediante p"nteros& ' por ser simple& adem7s desde "n
nodo solo p"edo acceder al sig"iente directamente.
6na lista enla:ada tiene 2 partes-
> !os nodos 8"e forman la lista. Cada nodo (a a tener dos campos. 6no de
informacin 8"e ser7 del tipo de los elementos 8"e contiene la lista ' "n
campo de enlace 8"e es de tipo p"ntero& ' 8"e contendr7 la direccin de
memoria en la 8"e est7 almacenado el sig"iente nodo.
Al primer campo de informacin lo llamamos IN.4& ' el nodo lo
llamamos SIG.
> !a seg"nda parte de la lista ser7 "na (aria*le de tipo p"ntero a los
nodos de la lista 8"e contiene la direccin del primer nodo de la lista.
Por esa ra:n a esa (aria*le la podemos llamar C42ien:o.
1ipo nodo- registro
Info- KtipoL
Sig- p"ntero a nodo
.in registro
?ar
Com- p"ntero a nodo
+l Fltimo nodo de la lista tendr7 en s" campo de enlace el (alor nodo
=N"ll&Nil;& 8"e 8"iere decir 8"e no ap"nta a ning"na direccin ' gr7ficamente se
sim*oli:a con-
1ipo nodo- registro
Info- car7cter
Sig- p"ntero a nodo
.in registro
!os nodos de la lista p"eden estar en c"al8"ier :ona de memoria& no tienen
8"e estar en posiciones consec"ti(as.
)

1M
M
$. P34C+ S A2I+N14 %+ !I S 1AS +N !A a A %AS SI2 P !+S-
Para poder procesar "na lista& se necesita la estr"ct"ra de s"s nodos ' la
(aria*le de comien:o.
4peraciones-
> Insertar "n elemento.
> Porrar "n elemento.
> 3ecorrer la lista.
> P"scar "n elemento.
!a forma m7s normal de representar listas enla:adas es "sar memoria
din7mica. 6na lista enla:ada tam*iDn se p"ede sim"lar "sando arra's =memoria
est7tica;& pero es poco eficiente.
Para ello "tili:arAa 2 arra's del mismo tama@o ' con la misma n"meracin
de Andices& tal 8"e en "n arra' g"ardarAa los campos de informacin de la lista& '
para cada campo de informacin en la posicin correspondiente en el otro arra'
g"ardarAa el Andice del sig"iente elemento a ese nodo.
+s decir en ese seg"ndo arra' g"ardarAa los campos enlace mediante (alores
de Andice.
a 9 . i :
Adem7s de los 2 arra's& tengo 8"e tener "na (aria*le 8"e contenga el Andice
del primer elemento de la lista. +l Fltimo elemento& tiene en el campo de enlace el
(alor M.
Info Sig
1
2
T
$
) .
6
A
7
I
/
0
1M a
3ecorrido e "na lista enl a : ada-
Consiste en paras por todos s"s nodos ' procesarlos.
1ipo nodo- registro
Info- KtipoL
Sig- p"ntero a nodo
.in registro
Algoritmo recorrido
?ar
Com- p"ntero a nodo
Inicio
3ecorrer =com;
.in
Procedimiento recorrer =prin- p"ntero a nodo;
?ar
Ptr- p"ntero a nodo
Inicio
Si prin Q Nil
+ntonces escri*ir R!ista (aciaS
Sino ptr prin
2ientras ptr KL nil ptrsig KL nil
cprocesar ptrinfod
ptr ptrsig
fin mientras posicionarme en el Fltimo nodo
fin si .
fin
P"s8"eda de "n nodo-
Se trata de locali:ar "n nodo 8"e c"mpla "na determinada condicin =por
e#emplo 8"e s" campo de informacin (alga "n (alor determinado;.
A la 9ora de 9acer las *Fs8"edas tendremos en c"enta si la lista est7
ordenada o no& ' si est7 ordenada por el criterio de *Fs8"eda tendrD 8"e
apro(ec9arlo.
1ipo nodo- registro
Info- KtipoL
Sig- p"ntero a nodo
.in registro
Algoritmo *"s8"eda
?ar
P&com- p"ntero a nodo
+lem- KtipoL
Inicio
P"scar =com&elem&p;
.in
Procedimiento *"scar =prin- p"ntero a nodoJ e- KtipoLJ ent>sal pos- p"ntero a
nodo;
Inicio
Pos prin
2ientras =posinfo KL +; ' =pos KL NI!;
Pos
possig
.in mientras
.in
PFs8"eda de "n nodo o rdenado ascendentemente-
1ipo nodo- registro
Info- KtipoL
Sig- p"ntero a nodo
.in registro
Algoritmo *"s8"eda
?ar
P&com- p"ntero a nodo
+lem- KtipoL
Inicio
P"scar =com&elem&p;
.in
Procedimiento *"scar =prin- p"ntero a nodoJ e-KtipoLJent>sal pos- p"ntero a nodo;
Inicio
Pos prin
2ientras =e L posinfo; ' =pos KL NI!;
Pos possig
.in mientras
Si posinfo KL e
+ntonces pos NI!
.in si
.in
1ratamiento de la memoria din7mica-
Siempre 8"e se 9ace "na insercin en "na estr"ct"ra din7mica& tenemos 8"e
coger de memoria tantos *'tes de memoria din7mica como oc"pa el nodo de la
estr"ct"ra din7mica& ' c"ando *orramos "n elemento& tendremos 8"e li*erar la
memoria oc"pada por ese elemento. Para conseg"ir este mane#o& todos los
leng"a#es de programacin tienen 2 instr"cciones 8"e permiten reser(ar memoria
' li*erar memoria din7mica& ' asignar en el caso de la reser(a la memoria a "n
p"ntero& ' en el caso de la li*eracin se li*era la memoria asignada a "n p"ntero.
Pascal - N+h & %ISP4S+
C - 2A!!4C & .3++ CH
H - N+h & %+!+1+
!a instr"ccin de reser(a de memoria lle(ara "n Fnico arg"mento& 8"e ser7
el tipo de datos para el 8"e se 9ace la reser(a de memoria& ' segFn el tama@o de ese
tipo& esa instr"ccin sa*r7 el nFmero de *'tes 8"e tiene 8"e reser(ar. O lo 8"e
de("el(e es "n p"ntero al comien:o de la :ona 8"e se 9a reser(ado. +ste (alor
de("elto ser7 el 8"e tenemos 8"e asignar a "n p"ntero al tipo de datos para el 8"e
se 9ace la reser(a.
!a f"ncin li*erar memoria lle(a "n Fnico arg"mento 8"e es el tipo
p"ntero& ' lo 8"e 9ace es li*erar la memoria asignada a ese p"ntero& para lo c"al es
imprescindi*le 8"e a ese p"ntero pre(iamente se le 9a'a 9ec9o "na asignacin de
memoria din7mica con al f"ncin de reser(a.
?ar p- p"ntero a KtipoL
P Q resemem =KtipoL;
!i*emem =K(arep"nteroL;
Nosotros (amos a sim"lar el tratamiento de la memoria din7mica de la
sig"iente forma- ?amos a s"poner 8"e todas las posiciones li*res de memoria est7n
enla:adas entre sA a tra(Ds de "na lista enla:ada& a la 8"e (amos a llamar %ISP
=lista de memoria disponi*le;& donde la primera posicin de esa lista (iene
ap"ntada por la (aria*le %ISP.
Cada (e: 8"e 8"eremos 9acer "na insercin en "na estr"ct"ra din7mica&
cogeremos la primera posicin de %ISP& ' se la asignaremos al p"ntero 8"e (a a
contener a ese elemento.
O c"ando 8"eramos *orrar "n elemento de "na estr"ct"ra din7mica para
indicar 8"e li*eramos la memoria "tili:ada por ese elemento& lo 8"e 9aremos ser7
insertarlo en el %ISP& pero siempre al comien:o.
SegFn esto& todo *orrado en el %ISP e8"i(aldr7 a "na instr"ccin de
reser(a de memoria en c"al8"ier leng"a#e& ' toda insercin en el %ISP& e8"i(aldr7
a la instr"ccin de li*erar memoria en c"al8"ier leng"a#e.
4(erflo< ' 6nderflo < -
!a memoria del ordenador tiene "n tama@o limitado& por lo 8"e la memoria
din7mica tam*iDn tendr7 "n tama@o limitado& es decir& 8"e p"ede ser 8"e se nos
agote.
+sta sit"acin& se conoce como 4?+3.!4h.
Siempre 8"e se 9aga "na instr"ccin de reser(a de memoria& tendremos 8"e
compro*ar antes si nos 8"eda memoria li*re. +so en c"al8"ier leng"a#e oc"rre
c"ando la instr"ccin de reser(ar de memoria de("el(e el (alor NI!.
Si %ISP Q Nil
+ntonces escri*ir RNo 9a' memoriaS
Ig"al se 9ace para *orrar "n elemento de "na estr"ct"ra din7mica& para
*orrarlo& esa estr"ct"ra tiene 8"e tener al menos "n elemento. Si no lo tiene e
intentamos *orrarlo& se prod"ce "n 6N%+3.!4h.
Por esto& lo primero 8"e tenemos 8"e pro*ar en "na estr"ct"ra din7mica& es
preg"ntar si tiene algo.
Si comien:o Q Nil
+ntonces escri*ir R!ista ?aciaS
Si slo mane#o "na estr"ct"ra din7mica& preg"nto por %ISP& si tra*a#o con
(arias estr"ct"ras din7micas cada "na de "n tipo& 9a*r7 tantas %ISP como
estr"ct"ras din7micas.
Insercin en "na lista enla : a da-
Antes de reali:ar c"al8"ier proceso de insercin& tendrD 8"e (er si me
8"eda memoria disponi*le. Si es posi*le 9acer la insercin& lo primero ser7
reser(ar la memoria para el elemento 8"e 8"iero reser(ar. Para nosotros ser7
coger el primer elemento de %ISP.
+n seg"ndo l"gar& asignaremos los (alores correctos al elemento 8"e (amos
a insertar& es decir& asignaremos al campo de informacin del n"e(o elemento con
la informacin& ' desp"Ds act"ali:amos el campo de enlace.
A la 9ora de asignar "n (alor al campo de enlace& lo primero ser7 locali:ar
la posicin en la 8"e tenemos 8"e locali:ar el sig"iente elemento& ' se p"eden dar
los sig"ientes casos-
1. Insercin al comien:o de la lista- Se modifica el (alor de la (aria*le
comien:o.
2. Insercin en c"al8"ier otro l"gar de la lista& incl"ido el final- +n este
caso& tendremos 8"e conocer tam*iDn el nodo 8"e (a a estar delante de
la posicin de insercin& 'a 8"e a la 9ora de insertar ese n"e(o elemento&
(a a oc"rrir 8"e el nodo de la posicin anterior a la de insercin ap"nte
al n"e(o elemento& ' 8"e el n"e(o ap"nte al nodo de la posicin a la 8"e
insertamos.
A la 9ora de locali:ar la posicin de insercin depender7 de la aplicacin en
partic"lar.
Como e#emplo de insercin& (amos a dar la insercin en "na lista ordenada
ascendentemente por el campo de informacin-
1ipo nodo- registro
Info- KtipoL
Sig- p"ntero a nodo
.in registro
Procedimiento insercion =ent>sal com- p"ntero a nodoJ elem-KtipoL;
?ar
!"g& !"gp& n"e(o- p"ntero a nodo
Inicio
Si %ISP Q Nil
+ntonces escri*ir RNo 9a' memoria disponi*leS
Sino n"e(o %ISP
%ISP
%ISPSIG
N"e(oinfo elem
Si =com Q Nil; o =elem K cominfo;
+ntonces n"e(osig Com
Com n"e(o
Sino l"gp com
!"g comsig
2ientras =elem L l"ginfo; ' =l"g KL Nil;
!"gp l"g
!"g l"gsig
.in mientras
N"e(osig l"g
!"gpsig n"e(o
.in si
.in
.in si
Porrado en "na lista e n la : a da-
Se trata de *orrar "n nodo 8"e contenga "na determinada informacin de
"na lista enla:ada simple& a"n8"e el criterio de *orrado podrAa ser otro en l"gar
del campo de informacin.
Siempre 8"e se 9ace "n *orrado de "na estr"ct"ra din7mica& en general& lo
primero es compro*ar 8"e la estr"ct"ra no est7 (acAa& ' "na (e: determinado esto&
tendrD 8"e locali:ar el nodo a *orrar.
Se p"eden dar 2 casos-
> +l nodo a *orrar sea el primero.
> C"e el nodo a *orrar oc"pe c"al8"ier otra posicin.
Si es el del comien:o& cam*iar7 la (aria*le de comien:o de la lista por8"e
a9ora tendr7 8"e ap"ntar al sig"iente elemento& al de comien:o. Si el elemento
oc"pa c"al8"ier otra posicin& tendrD 8"e locali:ar la posicin del elemento ' de s"
predecesor& por8"e para desenla:arlo de la lista& el predecesor tendr7 8"e ap"ntar
al elemento 8"e le sig"e al nodo a *orrar.
.inalmente& "na (e: desenla:ado el nodo& 9a*r7 8"e li*erar la memoria 8"e
oc"pa*a. +so en c"al8"ier leng"a#e e8"i(ale a 9acer la operacin de li*erar
memoria& ' en pse"docdigo serAa insertar el elemento al principio de %ISP.
Procedimiento *orrar =ent>sal com- p"ntero a nodoJ elem- KtipoL;
?ar
!"g& l"gp- p"ntero a nodo
Inicio
Si com Q Nil
+ntonces escri*ir R!ista (aciaS
Sino l"gp nil
!"g com
2ientras =elem L l"ginfo; ' =l"g KL Nil;
!"gp l"g
!"g
l"gsig
.in mientras
Si elem KL l"ginfo
+ntonces escri*ir RNo e,iste el nodo a *orrarS
Sino Si l"gp Q Nil
+ntonces com
comsig Sino l"gpsig
l"gsig .in si
!"gsig %ISP
%ISP l"g
.in si
.in
.in si
). !IS1AS CI3C6!A3+S C4N CA P +C +3 A-
6na lista con ca*ecera& en general es "na lista enla:ada simple normal& pero
en la 8"e el primer nodo es "n nodo especial 8"e no sir(e para g"ardar
informacin (7lida& sino solamente para marcar 8"e es el primer nodo.
Ca*ecera
Ta' dos tipos de listas enla:adas con ca*ecera-
> !istas enla:adas con ca*ecera ' tierra- +l primer nodo (a a ser la
ca*ecera& ' el Fltimo ap"nta a nil. No se "tili:a por8"e perdemos "n
nodo ' no tienen (enta#as.
> !istas circ"lares con ca*ecera- Se caracteri:an por8"e tienen "n nodo
ca*ecera& ' adem7s el Fltimo nodo ap"nta al nodo ca*ecera.
+n c"al8"ier lista enla:ada con ca*ecera el primer nodo con informacin
Ftil es el sig"iente a comien:o =Comsig;.
+n "na lista circ"lar con ca*ecera& la (enta#a 8"e presenta respecto a "na
normal& es 8"e en las inserciones ' *orrados no 9a' 8"e s"poner ningFn caso
especial& p"es todos los nodos& incl"ido el primero Ftil& tienen "n predecesor.
Al recorrer la lista completa& empe:aremos *"scando la informacin por el
sig"iente a comien:o& ' sa*emos 8"e 9emos llegado al final de la lista c"ando el
sig"iente al p"ntero 8"e recorre la lista sea comien:o.
PFs8"eda en "na lista circ"l a r c o n ca*ecera-
Procedimiento *"s8"eda =com- p"ntero a nodoJ elem-KtipoL;
?ar
Ptr- p"ntero a nodo
Inicio
Ptr comsig
2ientras =ptrinfo KL elem; ' =ptr KL com;
Ptr ptrsig
.in mientras
Si ptrsig Q com
+ntonces escri*ir R+lemento no encontradoS
.in si
.in
Insercin en "na lista circ"l a r c o n ca*ecera-
Procedimiento insercion =com- p"ntero a nodoJ elem- KtipoL;
?ar
!"g&l"gp&n"e(o- p"ntero a nodo
Inicio
Si %ISP Q Nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP %ISPsig
N"e(oinfo +lem
!"gp com
!"g comsig
2ientras =elem L l"ginfo; ' =l"g KL com;
!"gp l"g
!"g l"gsig
.in mientras
N"e(osig l"g
!"gpsig n"e(o
.in si
.in
Porrado en "na lista circ"lar con ca*ecera-
Procedimiento *orrado =com- p"ntero a nodoJ elem-KtipoL;
?ar
!"g&l"gp- p"ntero a nodo
Inicio
Si comQcomsig
+ntonces escri*ir R!ista (aciaS
Sino l"gp com
!"g comsig
2ientras =l"ginfo KL elem; ' =l"g KL com;
!"gp l"g
!"g l"gsig
.in mientras
Si l"g Q com
+ntonces escri*ir R+lemento no encontradoS
Sino l"gpsig l"gsig
!"gsig %ISP
%ISP l"g
.in si
.in
.in si
6. !IS1AS %4P!+2+N1+ +N!AaA%AS-
!as listas enla:adas simples se caracteri:an por8"e desde "n nodo solo
p"edo acceder al sig"iente a ese nodo& por lo 8"e solo p"edo acceder al sig"iente a
ese nodo& por lo 8"e solo p"edo recorrer la lista en "n sentido& de principio a fin.
!as listas do*les se caracteri:an por8"e desde "n nodo podemos acceder
directamente tanto al sig"iente como al anterior a ese. +s decir& por cada nodo
tendremos 2 campos enlace& "no para enla:ar "n nodo con el sig"iente& ' otro para
enla:ar a "n nodo con el nodo anterior a Dl.
%e esta manera& la lista la podemos recorrer en los 2 sentidos& de principio a
fin& mo(iDndonos con el enlace al nodo sig"iente o de fin a principio mo(iDndonos
con el enlace al nodo anterior. Para 8"e se p"eda 9acer este seg"ndo recorrido&
adem7s de "na (aria*le comien:o para cada lista& 8"e contiene la direccin del
primer nodo de la lista& necesitaremos tam*iDn otra (aria*le especial 8"e
denominaremos fin o final& 8"e ap"nta al Fltimo nodo de la lista.
SegFn esto& la estr"ct"ra de "na lista do*lemente enla:ada& ser7 la
sig"iente-
> Cada lista tendr7 2 (aria*les& comien:o ' final& del tipo p"ntero a nodo
do*le& 8"e contendr7n respecti(amente la direccin al primer ' Fltimo
nodo de la lista.
> !a estr"ct"ra de cada nodo ser7-
1ipo nodoedo*le- registro
Info- KtipoL
Sig- p"ntero a nodoedo*le
Ant- p"ntero a nodoedo*le
.in registro
IN.4
ant sig
+l campo sig"iente del Fltimo nodo tendr7 (alor NI!& ' el campo anterior
del primer nodo tam*iDn tendr7 (alor NI!& para indicar 8"e no 9a' nada antes del
primer nodo.
!a caracterAstica de "na lista do*lemente enla:ada (acAa es 8"e el comien:o
' el final son ig"ales ' ap"ntan a NI!.
Si =com Q final; ' =com Q Nil;
!ista do*lemente enla:ada con "n solo elemento-
Si =com Q final; ' =com KL Nil;
Para implementar la insercin ' el *orrado de "na lista do*lemente
enla:ada& (amos a s"poner 8"e la lista de espacio disponi*le tiene la forma de "na
lista do*lemente enla:ada.
3ecorrido de "na lista do*lemente enla : ada-
Para pasar por todos los nodos de la lista& podemos 9acerlo ig"al 8"e "na
lista enla:ada simple& solo 8"e a9ora la podemos recorrer la lista 9acia delante con
el campo SIG& ' 9acia atr7s con el campo AN1.
3ecorrido 9acia delante-
Procedimiento recorridoeadelante =com- p"ntero a nodo do*le;
?ar
Ptr- p"ntero a nodo do*le
Inicio
Ptr Comien:o
2ientras =ptr KL Nil;
cProcesar P13.IN.4d
ptr
ptrsig fin
mientras
fin
3ecorrido 9acia atr7s-
Procedimiento recorridoeadelante =com- p"ntero a nodo do*le;
?ar
Ptr- p"ntero a nodo do*le
Inicio
PGINA 1M /176
Ptr .inal
2ientras =ptr KL Nil;
cProcesar P13.IN.4d
ptr
ptrant fin
mientras
.in
PFs8"eda e n "na lista do*lemente enla : a da-
+s e,actamente ig"al 8"e en "na lista enla:ada simple& solo 8"e a9ora
p"edo *"scar el elemento *"scado desde el comien:o ' mo(iDndome con SIG o
desde el final ' mo(iDndome con AN1.
Si tengo "na idea de por donde (a a estar el elemento& empe:are por donde
sea me#or.
Procedimiento *"s8"eda =com- p"ntero a do*le nodoJ final- p"ntero a do*le nodoJ
elem- KtipoLJ ent>sal l"g- p"ntero a do*le nodo;
?ar
Ptr& l"g- p"ntero a do*le nodo
Inicio
!"g nil
Ptr final
2ientras =ptr KL nil; ' =elemento L ptrinfo;
Ptr ptrant
.in mientras
Si =ptr KL nil; ' =elemento
ptrinfo; +ntonces l"g ptr
.in si
.in
Insercin en "na lista do*lemente enla : a da-
!o primero es (er si me 8"eda espacio disponi*le en memoria din7mica& si
me 8"eda& reser(o memoria para "n n"e(o elemento ' meto la informacin 8"e
8"iero en s" campo de informacin& ' lo sig"iente es act"ali:ar s"s campos de
enlace.
Casos partic"lares-
> Insercin al comien:o si la lista est7 (acAa.
> Insercin al comien:o si la lista no est7 (acAa.
> Insercin al final.
> Insercin en medio de la lista.
PGINA 11 /176
Procedimiento insercion =ent>sal com- p"ntero a nodoedo*leJ ent>sal final- p"ntero
a
(ar
nodoedo*leJ elem- KtipoL;
l"g& n"e(o- p"ntero a nodoedo*le
Inicio
si %ISP Q Nil
entonces escri*ir RNo 9a' memoriaS
sino n"e(o %ISP %ISP
%ISPSig
N"e(oinfo elem
Si com Q nil
+ntonces n"e(osig NI!
N"e(oant NI!
Com n"e(o
.inal n"e(o
Sino si elem K cominfo
+ntonces n"e(osig com
N"e(oant nil
Comant n"e(o
Com n"e(o
Sino l"g
comsig
2ientras =elem L l"ginfo; ' =l"g KL Nil;
!"g l"gsig
.in mientras
Si l"g KL nil
+ntonces n"e(osig l"g
N"e(oant
l"gant !"gantsig
n"e(o !"gant
n"e(o
Sino n"e(osig nil
N"e(oant final
.inalsig n"e(o
.inal n"e(o
.in si
.in
.in si
.in si
.in si
Porrado en "na lista do*lemente enl a : ada-
Primero 9a' 8"e (er si la lista tiene algFn elemento& ' si tiene algFn
elemento& 9a*r7 8"e *"scar si el elemento 8"e 8"eremos *"scar e,iste en la lista& '
si e,iste& *"sco en 8"e posicin se enc"entra.
Casos partic"lares-
> Porrado del primer nodo.
> Porrado del Fltimo nodo.
> Porrado de c"al8"ier nodo.
%esp"Ds de todo esto& 9a*r7 8"e li*erar la memoria del nodo.
Procedimiento *orrado =ent>sal com- p"ntero a nodoedo*leJ ent>sal final- p"ntero
a
(ar
nodoedo*leJ elem- KtipoL;
l"g- p"ntero a nodoedo*le
inicio
si com Q Nil
entonces escri*ir R!ista (aciaS
sino l"g com
mientras =l"ginfo KL elem; ' =l"g KL nil;
l"g
l"gsig fin
mientras
si l"g Q Nil
entonces escri*ir RNo encontradoS
sino si l"g Q com
entonces com
comsig si com
Q Nil
entonces final nil
sino comant nil
fin si
sino si l"g KL final
entonces l"gantsig
l"gsig l"gsigant
l"gant
sino l"gantsig nil
final l"gant
fin si
fin si
fin si
fin
fin si
l"gsig %ISP
%ISP l"g
7. PI!AS-
6na pila es "na estr"ct"ra lineal de datos con la caracterAstica especial de
8"e a9ora& no podemos 9acer las inserciones ' las eliminaciones en c"al8"ier
l"gar& sino 8"e o*ligatoriamente las tenemos 8"e 9acer por "n e,tremo de la lista.
+se e,tremo lo llamamos cima de la pila.
PGINA 1 /176
+sto s"pone 8"e se procesen los elementos de la pila en orden in(erso a s"
entrada en la estr"ct"ra& es decir& el primer elemento de la pila 8"e "sare ser7 el
Fltimo 8"e 9a entrado =!I.4;.
Con "na pila podemos 9acer dos operaciones *7sicas& P6ST =meter; ' P4P
=sacar;.
Aparte de estas dos f"nciones se p"eden definir otras como la de pila (acAa o
top& 8"e me dice c"al es elemento 8"e est7 en la cima de la pila pero sin sacarlo.
Se p"ede implementar con memoria est7tica =arra's; o con memoria
din7mica =listas enla:adas;.
Si "tili:o "n arra'& tendrD 8"e definir c"al es el tama@o m7,imo del arra'&
8"e ser7 el de la pila& ' aparte tendrD definida "na (aria*le cima 8"e tendr7 en
cada momento el Andice 8"e corresponde al elemento del arra' 8"e est7 en la cima
de la pila.
Pila Q arra' U1..ma,epilaV de KinfoL
Cima- entero
Para se@alar 8"e la cima est7 (acAa& cima es ig"al a M por8"e no tiene 8"e
ap"ntar a ningFn elemento.
Implementacin de "na pila con memoria e s t7tic a -
Algoritmo prinepila
Const
2a,epila Q Kma,epilaL
?ar
P- arra' U1..ma,epilaV de KinfoL
C- entero
+lem- KinfoL
Inicio
C M
!eer =elem;
Si pilae(acia =C; Q (erdadero
+ntonces escri*ir RPila (aciaS
Sino sacar =pila&c&elem;
+scri*ir R+lemento sacadoSelem
.in si
.in
."ncion pilae(acia =cima- entero;- *ooleano
Inicio
Si cima Q M
+ntonces retorno (erdadero
Sino retorno falso
.in si
.in
Procedimiento meter =ent>sal pila- arra'U1..ma,epilaV de KinfoLJ cima- enteroJ
elem-KinfoL;
Inicio
si cima Q ma,epila
entonces escri*ir RPila llenaS
PGINA 1$ /176
sino cima cima H 1
pilaUcimaV elem
fin si
.in
."ncion cimaepila =pila- arra'U1..ma,epilaV de KinfoLJ cima- entero;-KinfoL
Inicio
3etorno pilaUcimaV
.in
Procedimiento sacar =ent>sal pila- arra'U1..ma,epilaV de KinfoLJ cima- enteroJ
ent>sal e- KinfoL;
Inicio
+ cimaepila =cima&pila;
Cima cima i 1
.in
Implementacin de "na pila con memoria din7mica-
1ipo nodo- registro
Info- KtipoL
Sig- p"ntero a nodo
.in registro
Algoritmo mane#oepila
?ar
Cima- p"ntero a nodo
+lem- KtipoL
Inicio
Cima nil
2eter =cima&elem;
Si pilae(acia =cima;
+ntonces escri*ir RNo 9a' memoriaS
Sino sacar =cima&elem;
+scri*ir R+lemento sacadoSelem
.in si
.in
."ncion pilae(acia =cima- p"ntero a nodo;- *ooleano
Inicio
Si cima Q nil
+ntonces retorno (erdadero
Sino retorno falso
.in si
.in
Procedimiento poner =ent>sal cima- p"ntero a nodoJ elem- KtipoL;
?ar
PGINA 1) /176
N"e(o- p"ntero a nodo
Inicio
Si %ISP Q nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP %ISPsig
N"e(oinfo elem
N"e(osig cima
Cima n"e(o
.in si
.in
."ncion cimaepila =cima- p"ntero a nodo;-KtipoL
Inicio
3etorno cimainfo
.in
Procedimiento sacar =ent>sal cima- p"ntero a nodoJ ent>sal elem- KtipoL;
?ar
Porrado- p"ntero a nodo
Inicio
+lem cimaepila =cima;
Porrado cima
Cima cimasig
Porradosig %ISP
%ISP *orrado
.in
Aplicacion e s de las pil a s-
6n e#emplo tApico de "so de pilas& es en las llamadas entre f"nciones. +n este
caso& el sistema operati(o "tili:a "na pila en donde (a g"ardando la direccin de
retorno de cada "na de estas llamadas.
/. C4!AS-
6na cola tam*iDn es "na lista lineal de elementos& en la 8"e las inserciones
se 9acen por "n e,tremo de la lista& ' los *orrados por otro. !as inserciones se
9acen por el final ' los *orrados por el principio.
+sto significa 8"e es "na estr"ct"ra del tipo .I.4.
Sea c"al sea la implementacin& siempre tendr7n 8"e e,istir 2 (aria*les&
frente ' final& 8"e ap"nten al comien:o ' al fin de la cola respecti(amente.
Podemos implementar "na cola con memoria est7tica =arra's; ' con
memoria din7mica =listas enla:adas;.
Si implementamos la cola con arra's& tendremos "n arra' llamado cola& 8"e
contiene el tipo de informacin 8"e contiene la cola& ' aparte dos (alores& frente '
final& c"'o (alor ser(ir7 como el Andice 8"e indica 8"e elemento est7 al frente ' al
final de la cola.
PGINA 16 /176
!a cola estar7 (acAa c"ando frente ' final no ap"nten a ningFn Andice del
arra'& ' esto ser7 c"ando frente ' final (algan M si el arra' se empie:a a n"merar a
partir del 1.
Aparte de la f"ncin 8"e me dice si la cola est7 (acAa& tendrD 8"e
implementar f"nciones de sacar ' meter "n elemento.
Para insertar "n elemento en "na cola& 9a*rAa 8"e incrementar el (alor en
la (aria*le final& ' desp"Ds introd"cir en la cola del final el elemento.
Para eliminar "n elemento de "na cola& *astarAa primero (er 8"e elemento
est7 al frente de la cola& ' para eliminarlo a"mentar el frente en "na "nidad.
Si solo consideramos esta posi*ilidad& es decir& mane#ar el arra' solo
incrementando& no lo estarAamos "tili:ando eficientemente& por8"e podrAamos
llegar al caso en 8"e 9a*iendo posiciones li*res al comien:o del arra' no
p"diDsemos "sarlas c"ando el final alcan:ase el m7,imo Andice del arra'.
Para e(itar esto& el arra' 8"e implementa la cola& lo (amos a tratar como "n
arra' circ"lar =s"ponemos 8"e desp"es de la posicin N del arra'& (iene la posicin
1;. +sto 8"iere decir 8"e si la cola no est7 llena& desp"Ds de final Q 2a,& (iene final
Q 1& ' al sacar el elemento de la cola& si no est7 (acAa& desp"Ds de frente Q N& (endr7
frente Q 1& ' si desp"Ds de sacar el elemento la cola 8"eda (acAa& act"ali:aremos
frente ' final a M.
Si frente es ig"al a final ' son distintos de M antes de sacar "n elemento&
8"iere decir 8"e ese elemento es el Fltimo.
Antes de insertar "n elemento& tendrD 8"e (er si la cola est7 llena =frente Q 1
' final Q 2a, o frente Q final H 1;.
Implementacin de colas con memoria est 7 tica-
1ipo datos- arra' U1..ma,ecolaV de KtipoL
Algoritmo mane#oecola
?ar
Cola- datos
.rente& final- entero
+lem& res"lt- KtipoL
Inicio
.rente M
.inal M
2eterecola =frente&final&cola&elem;
Si colae(acia =frente&final; Q (erdadero
+ntonces escri*ir RCola (acAaS
Sino sacarecola =frente&final&cola&res"lt;
+scri*ir R+lemento sacadoSres"lt
.in si
.in
."ncion colae(acia =frente- enteroJ final- entero;- *oolean
Inicio
Si =frente Q M; ' =final Q M;
+ntonces retorno (erdadero
PGINA 17 /176
Sino retorno falso
.in si
.in
Procedimiento meterecola =ent>sal cola-datosJ ent>sal frente-enteroJ ent>sal
final-enteroJ
Inicio
+lem- KtipoL;
Si ==frente Q 1; ' =final Q 2a,ecola;; o frente Q final H 1
+ntonces escri*ir RCola llenaS
Sino si colae(acia =frente&final; Q (erdadero
+ntonces frente 1
.inal 1
Sino si final Q 2a,ecola
+ntonces final 1
Sino final final H 1
.in si
.in si
.in
.in si
ColaUfinalV elem
Procedimiento sacarecola =ent>sal cola-datosJ ent>sal frente-enteroJ ent>sal
final-enteroJ
Inicio
+lem colaUfrenteV
Si frente Q final
+ntonces frente M
.inal M
+lem- KtipoL;
Sino si frente Q 2a,ecola
+ntonces frente 1
Sino frente frente H 1
.in si
.in si
.in
Implementacin de colas con memoria din7mica-
."ncion colae(acia =com- p"ntero a nodoedo*le;- *ooleano
Inicio
Si com Q nil
+ntonces retorno (erdadero
Sino retorno falso
.in si
.in
Procedimiento meterecola =ent>sal com- p"ntero a nodoedo*leJ
ent>sal final- p"ntero a nodoedo*leJ elem- KtipoL;
(ar
n"e(o- p"ntero a nodoedo*le
Inicio
Si %ISP Q nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP %ISPsig
N"e(oinfo elem
N"e(oant final
N"e(osig nil
.inalsig n"e(o
.inal n"e(o
Si colae(acia =frente; Q (erdadero
+ntonces frente n"e(o
.in si
.in si
.in
Procedimiento sacarecola =ent>sal com- p"ntero a nodoedo*leJ
ent>sal final- p"ntero a nodoedo*leJ res"lt- KtipoL;
(ar
ptr- p"ntero a nodoedo*le
Inicio
3es"lt cominfo
Ptr com
Com comsig
Si com Q nil
+ntonces final nil
Sino comant nil
.in si
Ptrsig %ISP
%ISP ptr
.in
Aplicacion e s de las col a s-
!as colas se s"elen "tili:ar en los procesos por lotes ' en la "tili:acin de
rec"rsos del sistema.
C"ando "n proceso 8"iere "sar "n rec"rso ' otro lo est7 "sando& tendr7 8"e
ponerse en la cola& ' se ir7 asignando el rec"rso segFn el orden en 8"e se 9a pedido.
A (eces& la "tili:acin de rec"rsos por parte de los procesos& nos interesa
8"e ciertos procesos tengan ma'or prioridad 8"e otros& incl"so a"n8"e lleg"en
m7s tarde& ' para ello "tili:arAamos las colas de prioridades.
Cada elemento de la cola& tendr7 otro campo 8"e indi8"e s" prioridad& tal
8"e a la 9ora de sacar "n elemento de la cola& saco el del frente& ' a la 9ora de
insertar "n elemento en la cola& tendrD en c"enta la prioridad del elemento 8"e
8"iero insertar& ' para ello se inserta en la cola por orden de prioridad& ' si 9a'
mas elementos 8"e tienen la misma prioridad 8"e el 8"e 8"eremos insertar& los
procesamos segFn s" orden de llegada& es decir& 8"e lo colocamos como el Fltimo
de los elementos con esa prioridad.
%4P!+S C4!AS 4 PIC4!AS-
6na *icola es "na lista lineal de elementos en la 8"e las inserciones '
*orrados es p"eden 9acer por c"al8"iera de s"s e,tremos.
?a a 9a*er 2 (aria*les& i:8"ierda ' derec9a& 8"e ap"ntan a s"s e,tremos.
Ta' 2 tipos especiales de *icolas-
> %e entrada restringida- C"e permite inserciones solo por "n e,tremo '
*orrados por los dos.
> %e salida restringida- C"e permite inserciones por c"al8"ier e,tremo '
*orrado solo por "no.
Se p"eden implementar con memoria est7tica o din7mica.
EJERCI CIOS: TEMA 11
1. %ise@ar "n algoritmo 8"e colo8"e el primer nodo de "na lista enla:ada como
penFltimo& pero cam*iando solo los campos enlace. !a lista es "na lista
enla:ada do*le.
Procedimiento res"ltado =ent>sal com- ptrea nodoJ ent>sal final- ptrea nodo;
?ar
Prin- p"ntero a nodo
Inicio
Si =com Q final; o =comsig Q final;
+ntonces escri*ir RNo se p"ede 9acer el cam*ioS
Sino prin com
Comsig final
Comant
finalant
.inalantsig com
.inalant com
Com prinsig
Comant nil
.in si
.in
2. %ada "na cadena de caracteres C1& en "n arra' de longit"d m7,ima N& ' con el
fin de cadena WkX& ' dada otra cadena C2 almacenada en "na lista enla:ada
simple& 8"e cada nodo de la lista contiene "na letra. Se trata de 8"e pasandole a
"n s"*programa 2 cadenas& determinar c"antas (eces aparece C1 en C2.
."ncion compara =c1- cadenaJ c2- ptrea nodo;- entero
?ar
Ini&p- p"ntero a nodo
I&res- entero
PGINA 1$1 /176
Inicio
3es M
P C2
2ientras =pKL nil;
Si =pinfo Q c1UiV;
+ntonces ini P
I 1
2ientras =pinfo Q c1UiV; ' =c1UiV KL WkX; ' =p KL nil;
I i H 1
P psig
.in mientras
Si c1UiV Q WkX
+ntonces res res H 1
Sino p inisig
.in si
Sino p psing
.in si
.in mientras
.in
. %ada "na lista do*lemente enla:ada 8"e contiene en cada nodo "n dAgito
decimal =M..0;& determinar el (alor 8"e se o*tiene si consideramos la
informacin de cada nodo de la lista como los tDrminos de "n polinomio& donde
el tDrmino de menor grado es el Fltimo nodo ' el de m7,imo grado es el del
comien:o& e(al"ando el polinomio para "n (alor 8"e se le pasa como
par7metro.
."ncion pot =*ase- enteroJ e,p- entero;- real
?ar
I- entero
Ac"m- real
Inicio
Ac"m 1
%esde i Q 1 9asta e,p
Ac"m ac"m I *ase
.in desde
3etorno ac"m
.in
."ncion polinomio =fin- ptrea nodoedo*leJ ,- entero;- real
?ar
3es- real
P- p"ntero a nodoedo*le
Inicio
+,p M
3es M
P final
2ientras p KL nil
3es res H =cinfo I pot =,&e,p;
P pant
PGINA 1$2 /176
+,p e,p H 1
.in mientras
3etorno res
.in
$. 1enemos almacenado en "n fic9ero de prod"ctos el stocN de cada "no de ellos
en el almacDn. Cada registro tiene identificador& nom*re& stocN act"al ' stocN
mAnimo. Iterati(amente& 9asta 8"e se introd":ca "n identificador de prod"cto
ig"al a M& se ir7n 9aciendo pedidos o entregas pidiDndonos el identificador& la
cantidad ' si es pedido o entrega& ' con ellos iremos act"ali:ando la cantidad de
prod"ctos en almacDn. Al final 8"iero tener el fic9ero act"ali:ado. Para ello&
"tili:aremos "na lista enla:ada como estr"ct"ra a",iliar.
1ipo prod"cto- registro
Indentificador- entero
Nom*re- cadena
StocNeact- entero
StocNemin- entero
.in registro
Nodo- registro
Info- prod"cto
Sig- p"ntero a nodo
.in registro
?ar
Com& ptr- p"ntero a nodo
3eg- prod"cto
.ic9- fic9ero de prod"cto
Id&cant- entero
Car- car7cter
Inicio
Com nil
A*rir =fic9&Sdatos.datS&entrada;
!eer =fic9&reg;
2ientras no eof =fic9;
Insertar =com&reg;
!eer =fic9&reg;
.in mientras
Cerrar =fic9;
+scri*ir RIdentificadorS
!eer =id;
2ientras id KL M
+scri*ir RCantidadS
!eer cant
+scri*ir RPedido/+ntregaS
!eer car
2odifica =com&id&cant&car;
+scri*ir RIdentificadorS
!eer id
.in mientras
A*rir =fic9&Sdatos.datS&salida;
Ptr com
2ientras com KL nil
+scri*ir =fic9&cominfo;
Com comsig
Ptrsig %ISP
%ISP ptr
Ptr com
.in mientras
Cerrar =fic9;
.in
Procedimiento insertar =ent>sal com- p"ntero a nodoJ elem- prod"cto;
?ar
!"g&l"gp&n"e(o- p"ntero a nodo
Inicio
Si %ISP Q Nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP
%ISPSig
N"e(oinfo elem
Si com Q nil
+ntonces n"e(osig com
Com n"e(o
Sino l"gp com
!"g comsig
2ientras =elem.identificador L l"ginfo; ' =l"g KL nil;
!"gp l"g
!"g
l"gsig
.in mientras
PGINA 1$/176
.in si
.in
.in si
N"e(osig l"g
!"gpsig n"e(o
Procedimiento modifica =prim- ptrea nodoJ d- enteroJ c- enteroJ caract- car7cter;
?ar
Ptr- p"ntero a nodo
Inicio
Si prin Q nil
+ntonces escri*ir R!ista (aciaS
Sino ptr prin
2ientras =ptr KL nil; ' =id KL ptrinfo.identificador;
Ptr ptrsig
.in mientras
Si ptr Q nil
+ntonces escri*ir R+l prod"cto no e,isteS
Sino si =caract Q WPX; o =caract Q WpX;
+ntonces ptrinfo.cantidad ptrinfo.cantidad H c
Sino si ptrinfo.cantidad LQ c
+ntonces ptrinfo.cantidad ptrinfo.cantidad i c
Sino escri*ir RNo 9a' cantidad s"ficienteS
.in si
.in si
.in
.in si
.in si
PGINA 1$$/176
). %adas 2 listas enla:adas simples& !1 ' !2& ordenadas en ascendente& act"ali:ar
las 2 listas de modo 8"e !2 8"ede (acAa ' !1 contenga a todos los elementos de
!2& menos a los repetidos. No *orrar elementos& 9a' 8"e enla:arlos.
Procedimiento #"ntar =ent>sal com1- ptrea nodoJ ent>sal com2- ptrea nodo;
?ar
P1&a1& a",& *orrado- p"ntero a nodo
Inicio
Si com2 KL nil
+ntonces si com1 Q nil
+ntonces com1 com2
Sino si =com2info K com1info; ' =com2 KL nil;
+ntonces a", com2
Com2
com2sig
A",sig com1
Com1 a",
Sino a1 com1
P1
com1sig
2ientras =p1 KL nil; ' =com2 KL nil;
Si =com2info K p1info;
+ntonces a1 p1
P1
p1sig
Sino si =com2info Q p1info;
+ntonces *orrado com2
Com2 com2sig
Porradosig %ISP
%ISP *orrado
Sino a", com2
A1sig com2
PGINA 1$)/176
.in si
.in si
Com2sig P1
Com2 a",sig
A1 a1sig
.in mientas
Si com2 KL nil
+ntonces a1sig com2
Com2 nil
.in si
.in
.in si
.in si
.in si
6. Implementar "na cola "sando listas enla:adas simples-
Procedimiento meter =ent>sal com- ptrea nodoJ ent>sal final- ptrea nodoJ e- KtipoL;
?ar
N"e(o- ptrea nodo
Inicio
Si %ISP Q nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP
%ISPsig
N"e(osig Nil
Si com Q nil
+ntonces com n"e(o
.inal n"e(o
Sino finalsig n"e(o
.inal n"e(o
.in si
.in
.in si
Procedimiento sacar =ent>sal com-ptrea nodoJ ent>sal final-ptrea nodoJ ent>sal
e-KtipoL;
?ar
Porrado- p"ntero a nodo
Inicio
+ cominfo
Porrado com
Com
comsig Si com
Q nil
PGINA 1$6/176
+ntonces final nil
.in si
Porradosig %ISP
%ISP *orrado
.in
7. Implementar "na cola de prioridades con listas enla:adas simples-
Procedimiento meter =ent>sal com- ptrea nodoJ e- KtipoLJ p- entero;
?ar
!"gp& l"g& n"e(o- p"ntero a nodo
Inicio
Si %ISP Q nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP %ISPsig
N"e(oinfo e
N"e(oprioridad p
!"gp nil
!"g com
2ientras =l"g KL nil; ' =p LQ l"gprior;
!"gp l"g
!"g l"gsig
.in mientras
Si l"gp Q nil
+ntonces n"e(osig com
Com n"e(o
Sino l"gpsig n"e(o
N"e(osig l"g
.in si
.in
.in si
Procedimiento sacar =ent>sal com-ptrea nodoJ ent>sal e-KtipoL;
PGINA 1$7/176
?ar
Porrado- p"ntero a nodo
Inicio
+ cominfo
Porrado com
Com
comsig
Porradosig %ISP
%ISP *orrado
.in
/. Implementar "na cola de prioridades como lista de listas-
1ipo nodoeprior- registro
Prior- entero
Prinp- ptrea nodoeinfo
Sig- ptrea nodoepr
.in registro
Nodoeinfo- registro
Info- KtipoL
+nl- ptrea nodoeinfo
.in registro
Procedimiento meter =ent>sal com-ptrea nodoepriorJ elem-KtipoLJ p- entero;
?ar
N"e(oi& l"gi- p"ntero a nodoeinfo
N"e(op& ptr& ptra- p"ntero a nodoeprior
Inicio
Si =%ISPP Q nil; ' =%ISPI Q nil;
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(oi %ISPI
%ISPI
%ISPIenl
N"e(oiinfo elem
N"e(osig NI!
Ptra nil
Ptr com
2ientras =ptr KL nil; ' =p L ptrprior;
Ptra ptr
Ptr ptrsig
PGINA 1$//176
PGINA 1$0 /176
.in mientras
Si =p Q ptrprior;
+ntonces l"gi ptrprinp
2ientras =l"gisig KL nil;
!"gi l"gienl
.in mientas
!"gisig n"e(o
Sino n"e(op %ISPP %ISPP
%ISPPsig
N"e(opprior p
N"e(opsig ptr
N"e(opprinp n"e(oi
Si =ptra Q nil;
+ntonces com n"e(op
Sino ptrasig n"e(op
.in si
.in si
.in
.in si
Procedimiento sacar =ent>sal com- ptrea nodoepriorJ ent>sal e-KtipoL;
?ar
Pori- ptrea nodoeinfo
Porp- ptrea nodoeprior
Inicio
+ comprinpinfo
Pori comprinp
Comprinp comprinpenl
Porienl %ISPI
Si comprinp Q nil
+ntonces *orp com Com
comsig
Porpsig %ISPP
%ISPP *orp
.in si
.in
>RBOLES Y GRAFOS: ESTRUCTURAS DE
DATOS NO LINEALES: TEMA 12
1. r*oles.
2. r*oles *inarios.
. r*oles *inarios de *Fs8"eda.
$. Aplicaciones de los 7r*oles *inarios.
). Grafos.
6. 4peraciones con grafos.
7. Aplicaciones de los grafos.
1. 3P4 ! +S-
!os 7r*oles est7n dentro de las estr"ct"ras de datos no lineales& 8"e
consisten en 8"e desde "n nodo tengo acceso a (arios elementos.
6n 7r*ol es "n con#"nto finito de elementos llamados nodos& 8"e g"ardan
entre sA "na relacin #er7r8"ica tal 8"e siempre (a a e,istir "n nodo raA:
diferenciado del resto& ' los restantes parten de Dl& formando con#"ntos dis#"ntos
cada "no de los c"ales es a s" (e: otro 7r*ol. A cada "no de esos 7r*oles se les
llama s"*7r*oles del raA:.
6n 7r*ol (acAo es a8"el 8"e no tiene ningFn nodo =3ai: Q NI!;.
A
P . !
C % + G T
I G j
1erminologAa de los 7r*oles-
> 3aA:- Nodo esencial de 8"e parten todos los dem7s. +s el Fnico 8"e no tiene
antecesor.
> Nodo- Cada "no de los elementos del 7r*ol.
> To#a o nodo terminal- Nodo 8"e no tiene ningFn otro s"*7r*ol de*a#o de Dl.
> Ti#o- Cada nodo 8"e no es 9o#a tiene de*a#o de Dl a otros s"*7r*oles.
> Padre- 1odo nodo e,cepto el raA:& 8"e tiene asociado "n predecesor del 8"e
desciende.
> Termano- 3elacin entre los nodos 9i#os del mismo padre.
> Nodo interno- +l 8"e tiene algFn 9i#o.
> Ni(el- Cada nodo de "n 7r*ol tiene asociado "n nFmero de ni(el. +l del raA: es
el M& ' a partir de a9A se (a a"mentando de 1 en 1.
> Camino entre A ' P- S"cesin de enlaces o nodos por los 8"e 9a' 8"e pasar
para llegar de A a P.
> 3ama- Camino 8"e termina en "na 9o#a.
> Prof"ndidad de "n 7r*ol- +s el nFmero m7,imo de nodos de la rama m7s larga
del 7r*ol. +8"i(ale al nFmero m7,imo de ni(eles H 1.
> Peso- NFmero de 9o#as 8"e tiene "n 7r*ol.
> Pos8"e- Coleccin de 2 o m7s 7r*oles.
2. 3P4 ! +S PINA3 I 4S-
Son "n con#"nto finito de elementos llamados nodos 8"e contienen "n nodo
raA: ' donde cada nodo p"ede tener M&1& 2 9i#os. A cada s"*ar*ol se le denomina
s"*ar*ol i:8"ierdo ' s"*ar*ol derec9o.
1erminologAa-
> %os 7r*oles *inarios son similares si tienen los nodos colocados ig"al.
> r*oles *inarios e8"i(alentes o copias- 1ienen la misma estr"ct"ra ' los
mismos contenidos.
> r*oles *inarios e8"ili*rados- A8"ellos 8"e en la alt"ra entre s" 7r*ol
i:8"ierdo ' derec9o se diferencian como m7,imo en "na "nidad.
> r*oles *inarios completos- A8"ellos en 8"e cada nodo del 7r*ol tiene M 2
9i#os& el nFmero m7,imo de 9i#os de "n determinado ni(el i ser7 2 ele(ado a i.
> r*ol lleno- C"ando todos los ni(eles est7n completos.
3epresentacin de 7r*oles *inarios-
Se p"eden representar con memoria est7tica o din7mica. Con memoria
din7mica la estr"ct"ra de "n nodo (a a tener el campo info ' otros 2 nodos 8"e
referDncien al 9i#o i:8"ierdo ' derec9o de cada nodo.
3epresentacin de 7r*oles *inarios con p"nteros-
Cada nodo (a a tener "n registro 8"e contiene el campo de informacin ' 2
campos de tipo p"ntero.
IN.4
IaC %+3
1ipo nodoear*ol- registro
Info- KtipoL
I:8&der- ptrea nodoear*ol
.in registro
A parte de los nodos& los 7r*oles tienen "na (aria*le especial llamada raA:&
8"e es de tipo p"ntero a nodoear*ol ' ap"nta al nodo 8"e est7 al comien:o del
7r*ol.
3ai:
%ISPeA3 (a a ser "na lista enla:ada simple en la 8"e las inserciones '
*orrados los 9acemos por el comien:o ' como campo de enlace (amos a "sar el
nodo i:8"ierdo.
3ecorrido de los 7r*oles *inarios-
+s pasar por todos s"s nodos. Para recorrer "n 7r*ol lo podemos 9acer de
formas& segFn el momento en el 8"e procesemos el nodo raA:. !as formas se
llaman - Preorden& Inorden& Posorden.
+n c"al8"iera de las tres& siempre se recorre primero el s"*7r*ol i:8"ierdo&
' l"ego el derec9o& ' se diferencian en el momento en el 8"e recorremos el raA:.
> Preorden- !a raA: se procesa primero& l"ego el i:8"ierdo ' l"ego el derec9o.
> Inorden- Primero la raA:& l"ego el i:8"ierdo ' l"ego el derec9o.
> Posorden- Primero el i:8"ierdo& l"ego el derec9o ' l"ego la raA:.
Preorden- A& P& %& +& G& C& .
Inorden- %& P& +& G& A& .& C
Posorden- %& G& +& P& .& C& A
> 3ecorrido de "n 7r*ol *inario-
!os ar*oles son estr"ct"ras rec"rsi(as& por lo 8"e los algoritmos m7s
eficientes con 7r*oles son los rec"rsi(os.
Procedimiento preorden =rai:- ptrea nodoear;
Inicio
Si rai: KL nil
+ntonces cprocesar rai:info;
.in si
.in
Preorden =rai:i:8;
Preorden =rai:der;
Procedimiento inorden =rai:- ptrea nodoear;
Inicio
Si rai: KL nil
+ntonces inorden =rai:i:8;
cprocesar rai:info;
inorden =rai:der;
.in si
.in
Procedimiento posorden =rai:- ptrea nodoear;
Inicio
Si rai: KL nil
+ntonces posorden =rai:i:8;
Posorden =rai:der;
cprocesar rai:info;
.in si
.in
1am*iDn se p"ede recorrer "n 7r*ol *inario con "n algoritmo no rec"rsi(o-
Algoritmo inorden
?ar
Pila- arra'U1..2a,V de p"ntero a nodoear
Cima- entero
3ai:& ptr- p"ntero a nodoear
Inicio
Cima 1
PilaUcimaV Nil
Ptr rai:
2ientras =ptr KL nil;
Cima cima H 1
PilaUcimaV ptr
Ptr ptri:8
.in mientras
Ptr pilaUcimaV
Cima cima>1
2ientras =ptr KL nil;
cprocesar ptrinfod
si ptrder KL nil
entonces ptr ptrder
mientras ptr KL nil
cima cima H 1
PGINA 1)/176
PGINA 1)$ /176
fin si
pilaUcimaV ptr
ptr ptri:8
fin mientras
ptr pilaUcimaV
cima cima i 1
fin mientras
.in
. 3P4 ! +S PINA3 I 4S %+ PmSC6+%A-
Son "n tipo especial de 7r*oles *inarios 8"e se caracteri:a por8"e los
elementos del 7r*ol son todos distintos ' adem7s est7n colocados de tal manera 8"e
el recorrido en Inorden de ese 7r*ol da l"gar a 8"e los elementos se procesen
ordenados segFn "n determinado campo de informacin& para ello es necesario 8"e
todos los nodos del 7r*ol c"mplan la sig"iente regla- C"e todo lo 8"e est7 a la
i:8"ierda de "n nodo tenga "n (alor menor 8"e el resto del nodo& ' todo lo 8"e esta
a la derec9a tenga "n (alor ma'or.
2)
1/ )
12 22 M /
11 1) 21 2 7 $M
1$ 16
3ecorrido inorden- 11&12&1$&1)&16&1/&21&22&2)&M&2&)&7&/&$M.
> PFs8"eda de "n elemento-
%ado "n elemento& mirar si se enc"entra o no en el 7r*ol& (o' a de(ol(er "n
p"ntero a ese elemento ' a s" padre.
Procedimiento *"scar =rai:- ptrea nodoearJ ent>sal act- ptrea nodoearJ
ent>sal pad- ptrea nodoearJ e-KtipoL;
Inicio
Pad Nil
Act rai:
2ientras =act KL nil; ' =actinfo KL e;
Pad act
Si =e K actinfo;
+ntonces act acti:8
Sino act actder
.in si
.in mientras
Si act KL nil
+ntonces escri*ir R+lemento encontradoS
Sino escri*ir R+lemento no encontradoS
.in si
.in
> Insercin en "n 7r*ol *inario-
Primero 9a' 8"e (er 8"e no 9a'a otro elemento ig"al en el 7r*ol& ' desp"Ds
9a*r7 8"e colocar el elemento a la i:8"ierda de s" padre si es menor 8"e Dl o al
derec9a si es ma'or.
Algoritmo no rec"rsi ( o-
Procedimiento insercion =ent>sal rai:- ptrea nodoearJ elem-KtipoL;
?ar
Ptr&pad&n"e(o- ptrea nodoear
Inicio
P"scar =rai:&ptr&pad&elem;
Si ptr KL nil
+ntonces escri*ir R+l elemento 'a e,isteS
Sino si %ISP Q Nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o %ISP
%ISP
%ISPIaC
N"e(oinfo elem
N"e(oi:8 nil
N"e(oder nil
Si PA% Q nil
+ntonces rai: n"e(o
Sino si elem K padinfo
+ntonces padi:8 n"e(o
sino Padder n"e(o
fin si
fin si
.in
fin si
fin si
Algoritmo rec"rsi(o-
Procedimiento insercion =ent>sal ptr- ptrea nodoearJ elem-KtipoL;
Inicio
Si ptr KL nil
+ntonces si elem K ptrinfo
+ntonces insercion =ptri:8&elem;
Sino si elem L ptrinfo
+ntonces insercion =ptrder&elem;
Sino escri*ir R+l elemento 'a e,isteS
.in si
.in si
Sino ptr %ISP
%ISP %ISPi:8
Ptrinfo elem
Ptri:8 nil
Ptrder nil
.in si
.in
> Porrado en "n 7r*ol *inario-
Si el nodo a *orrar slo tiene "n 9i#o& lo s"stit"imos por ese ' 'a se aca*o.
Pero si el nodo a *orrar tiene 2 9i#os& 9a' 8"e *"scar c"al es el s"cesor de ese nodo
=estar7 a la derec9a del m7s a la i:8"ierda; ' el padre de ese s"cesor. S"stit"ir el
nodo a *orrar por s" s"cesor. Al final 9a' 8"e poner como 9i#os del s"cesor =8"e es
el 8"e 9a s"stit"ido al nodo *orrado; a los 9i#os del nodo *orrado.
> Algoritmo no rec"rsi(o-
Procedimiento *orrar =ent>sal rai:- ptrea nodoearJ elem-KtipoL;
?ar
Ptr& pad- ptrea nodoear
Inicio
P"scar =rai:&ptr&pad&elem;
Si ptr Q nil
+ntonces escri*ir R+l elemento no e,isteS
Sino si =ptri:8 KL nil; ' =ptrder KL nil;
+ntonces *orrare2e9 =rai:&ptr&pad;
Sino *orrareM1e9 =rai:&ptr&pad;
.in si
Ptri:8 %ISP
%ISPi:8 ptr
.in si
.in
Procedimiento *orrare2e9 =ent>sal rai:- ptrea nodoearJ ent>sal- ptrea nodoearJ
pad- ptrea nodoear;
?ar
S"c&pads"c&9i#os"c- ptrea nodoear
Inicio
Pads"c ptr
S"c ptrder
2ientras s"ci:8 KL nil
Pads"c s"c
S"c s"ci:8
.in mientras
Ti#os"c
s"cder
Si pads"ci:8 Q s"c
+ntonces pads"ci:8 9i#os"c
Sino pads"cder 9i#os"c
.in si
Si pad Q nil
+ntonces rai: s"c
Sino si padi:8 Q ptr
+ntonces padi:8 s"c
Sino padder s"c
.in si
PGINA 1)6/176
.in si
PGINA 1)7 /176
S"ci:8 ptri:8
S"cder ptrder
.in
Procedimiento *orrareM1e9 =ent>sal rai:- ptrea nodoearJ ent>sal ptr- ptrea
nodoearJ
?ar
Ti#o- ptrea nodoear
Inicio
Si ptri:8 KL nil
Pad- ptrea nodoear;
+ntonces 9i#o ptri:8
Sino 9i#o ptrder
.in si
Si pad Q nil
+ntonces rai: 9i#o
Sino si ptr Q padi:8
+ntonces padi:8 9i#o
Sino padder 9i#o
.in si
.in si
.in
> Algoritmo rec"rsi(o-
Procedimiento *orrar =ptr- ptrea nodoearJ elem-KtipoL;
Inicio
Si ptr KL nil
+ntonces si elem K ptri:8
+ntonces *orrar =ptri:8& elem;
Sino si elem L ptrder
+ntonces *orrar =ptrder& elem;
Sino si ptri:8 Q Nil
+ntonces ptr
ptri:8
Sino si ptrder Q Nil
+ntonces ptr ptri:8
Sino eliminar =ptrder& ptr;
.in si
.in si
.in si
.in si
Ptri:8 %ISP
%ISP ptr
Sino escri*ir R+l nodo no e,isteS
.in
Procedimiento eliminar =ent>sal s"c- ptrea nodoearJ ent>sal ptr- ptrea nodoear;
Inicio
Si s"ci:8 KL nil
+ntonces eliminar =s"ci:8& ptr;
Sino ptrinfo s"cinfo
Ptr s"c
.in si
.in
$. AP!ICACI4N+S %+ !4S 3P4!+S P I NA3I4S-
> 6na de las aplicaciones m7s importantes es dentro de la inteligencia artificial& '
m7s concretamente en el 7rea de reconocimiento de patrones.
Se trata de "tili:ar los 7r*oles para reali:ar clasificaciones. !a cla(e est7 en
asignar a cada nodo del 7r*ol "n significado ' a cada rama& "na resp"esta 8"e
nos a'"de a determinar el sentido de la *Fs8"eda.
> 1ransformacin de "na notacin alge*raica a otra- Prefi#a& infi#a& posfi#a
=Ha*&aH*&a*H;. Para ello la raA: del 7r*ol de*e de ser "n signo ' para las ramas
o s"*7r*oles& otra e,presin o "n operando.
> Para implementar el algoritmo de Todman de compresin ' codificacin.
). G3A.4S-
+l grafo es "na estr"ct"ra de datos no lineal& tal 8"e a9ora desde "n nodo
podemos ap"ntar a (arios& pero a s" (e: "n nodo p"ede ser ap"ntado desde otros.
1erminologAa de los grafos-
6n grafo se compone por "n con#"nto ? de (Drtices ' "n con#"nto A de
aristas. Cada arista se identifica con "n par de (Drtices 8"e indican los (Drtices a
los 8"e "ne la arista. !os (Drtices de "na arista son entre sA nodos ad'acentes.
> Grado de "n nodo- NFmero de aristas 8"e contiene a ese nodo.
> Grado de "n grafo- NFmero de (Drtices de ese grafo. Si el grado de "n nodo es
M& se dice 8"e es "n nodo aislado.
> Camino- 6n camino C de longit"d N de "n nodo ?1 a "n nodo ?2& se define
como la sec"encia de nodos por los 8"e 9a' 8"e pasar para llegar del nodo ?1 a
?2. !a longit"d de ese camino es el nFmero de aristas 8"e comprende ese
camino.
+l camino es cerrado si empie:a ' termina en el mismo nodo. +l camino es
simple si todos los nodos de dic9o camino son distintos a e,cepcin de los de los
e,tremos 8"e p"eden ser ig"ales.
2
1 C =1&6;
$ 1&$&6 Caminos simples
PGINA 1)0 /176
6 1&$&)&6
) 1&$&&$&)&6
Aristas especiales-
> P"cles- +s "na arista c"'os e,tremos son idDnticos.
> Arista mFltiple- %os o m7s aristas 8"e conectan los mismos nodos.
1ipos de grafos-
> Grafo conectado o cone,o- +,iste "n camino simple entre 2 c"ales8"iera de s"s
nodos.
> Grafo desconectado- A8"el en 8"e e,isten nodos 8"e no est7n "nidos por
ningFn camino.
> Grafo dirigido- Cada arista tiene asignada "na direccin =identificada por "n
par ordenado;.
> Grafo no dirigido- !a arista est7 definida por "n par no ordenado.
> Grafo sencillo- A8"el 8"e no tiene ni *"cles ni aristas mFltiples.
> Grafo mFltiple o m"ltigrafo- Permite la e,istencia de aristas mFltiples o *"cles.
> Grafo completo- Cada nodo del grafo es ad'acente a todos los dem7s.
> Grafo eti8"etado con peso ponderado- A8"el en el 8"e a cada arista del grafo
(a asociado "n (alor 8"e es lo 8"e llamamos peso de la lista. Se "sa para
indicar algo& como la longit"d de la arista o la importancia de la arista& ...
> Peso de "n camino- !a s"ma de los pesos de las aristas del camino.
3epresentacin de los grafos-
Ta' 2 formas de representar los grafos& con memoria est7tica ' con
memoria din7mica-
Con memoria est7tica-
> 2atri: de ad'acencia- +s "na matri: 2 de NIN elementos donde N es el
nFmero de nodos del grafo& donde cada posicin 2=i&#; Andica si 9a' "na
cone,in o no entre el nodo 8"e aparece asociado a la posicin I de la matri: '
el nodo 8"e aparece asociado a la matri: G.
Si lo 8"e 8"iero es representar "n grafo ponderado en (e: de poner M ' 1&
pondremos M si no esta conectado ' el (alor de la arista si e,iste cone,in.
Si el grafo no es dirigido res"lta "na matri: simetrica.
!as potencias de la matri: de ad'acencia 2 ele(ado a j nos indican en las
posiciones 8"e tiene (alor 1 8"e e,iste "n camino de longit"d j entre los nodos
asociados a las posiciones I& G de esa matri:.
%estino
1 2 $ ) 6
1 M M M 1 M M
2 M M M M M M
1 1 M 1 M M
$ M M M M M M
PGINA 16M /176
) M M M 1 1 1
6 M M M M M M
4rigen
2

1
$
)
6
Con memoria din7mica-
?amos a "tili:ar 2 listas enla:adas& "na es la lista de nodos =formada por
todos los (Drtices ' aristas del grafo.
Cada nodo de esa lista tendr7 la sig"iente informacin-
> Info- Informacin del nodo.
> Sig- P"ntero 8"e enla:a con el sig"iente nodo de la lista de nodos.
> Ad'- Ap"nta al primer elemento de la lista de ad'acencia.
!a lista de ad'acencia contiene o enla:a a todas las aristas 8"e parten de ese
nodo. +l con#"nto de todas las listas de ad'acencia& forman "na lista de listas.
!a lista de ad'acencia se implementa como otra lista enla:ada en la 8"e
cada nodo de esa lista contiene 2 campos-
> %es =destino;- +s "n campo p"ntero al nodo destino de la lista.
> +nl =enlace;- +s "n campo p"ntero 8"e ap"nta al sig"iente nodo o arista
de la lista de ad'acencia de ese nodo.
1
1
Sig Ad' %es +nl
2
2

$
1ipo (ertice- registro
Info- KtipoL
Sig- ptrea (ertice
Ad'- ptrea arista
.in registro
1ipo arista
%es- ptrea (ertice
PGINA 161 /176
+nl- ptrea arista
=I +l peso de la arista irAa a8"A I;
.in registro
Para mane#ar la memoria disponi*le (amos a tener 2 listas-
> A%ISP- Ap"nta al primer nodo 8"e enla:a a los nodos de tipo arista disponi*le.
> N%ISP- Ap"nta la primer nodo 8"e enla:a a los nodos de tipo (Drtices. Nos
mo(emos con el campo sig.
6. 4P+3ACI4N+S C4N G3A . 4S-
> PFs8"eda de "n nodo-
!o 8"e se trata es de locali:ar "n nodo 8"e contiene "na determinada
informacin& para ello le pasamos la informacin al procedimiento ' nos de("el(e
la posicin si lo enc"entra o Nil si no lo enc"entra.
Procedimiento P"scarenodo =elem-KtipoLJent>sal ptr-ptrea (erticeJ prin- ptrea
(ertice;
Inicio
Ptr prin
2ientras =ptrinfo KL elem; ' =ptr KL nil;
Ptr ptrsig
.in mientras
.in
> PFs8"eda de "na arista-
Se trata de *"scar "na arista dados s"s campos de informacin origen '
destino. %e("el(e "n p"ntero a la lista de aristas 8"e ap"nta a esa arista o Nil si no
e,iste.
Procedimiento *"scarearista =prin- ptrea (eriticeJ orig-KtipoLJ des-KtipoLJ
ent>sal ptr- ptrea aristaJ ent>sal p1- ptrea (erticeJ
ent>sal p2- ptrea (ertice;
Inicio
P"scarenodo =prin&orig&p1;
Si p1 Q nil
+ntonces escri*ir RNo e,iste el nodo origenS
Sino *"scarenodo =prin&des&p2;
Si p2 Q nil
+ntonces escri*ir RNo e,iste el nodo destinoS
Sino ptr p1ad'
2ientras =ptr KL nil; ' =ptrdes KL p2;
Ptr ptrenl
.in mientras
.in si
PGINA 162 /176
.in si
.in
> Insercin de "n nodo-
Primero de*emos mirar si no e,iste "n nodo 8"e contenga esa informacin
' para insertar el nodo lo insertamos por el principio.
Procedimiento insertarenodo =ent>sal prin- ptrea (erticeJ elem- KtipoL
?ar
N"e(o- ptrea (erticeJ
Inicio
Si N%ISP Q Nil
+ntonces escri*ir RNo 9a' memoriaS
Sino n"e(o N%ISP
N%ISP
N%ISPSig
N"e(oinfo elem
N"e(oad' Nil
N"e(osig prin
Prin n"e(o
.in si
.in
> Insercin de "na arista-
Primero 9a' 8"e compro*ar si e,isten los nodos origen ' destino& l"ego 9a'
8"e compro*ar 8"e no e,iste "na arista ig"al en esa direccin ' para insertarla&
como el orden no importa se inserta por el principio.
Procedimiento insertarearista =prin- ptrea (erticeJ orig-KtipoLJ dest-KtipoLJ
ent>sal p1- ptrea (erticeJ ent>sal p2- ptrea (ertice;
?ar
N"e(o& pa- ptrea arista
Inicio
Si A%ISP Q Nil
+ntonces escri*ir RNo 9a' memoriaS
Sino *"scarearista =prin&orig&des&pa&p1&p2;
Si pa KL nil
+ntonces escri*ir R!a arista 'a e,isteS
Sino N"e(o A%ISP
A%ISP A%ISPSig
N"e(odest p2
PGINA 16 /176
.in si
.in
.in si
N"e(oenl p1ad'
P1ad' n"e(o
> Porrado de "na arista-
Procedimiento *orrarearista =prin- ptrea (erticeJ orig-KtipoLJ des-KtipoLJ
p1- ptrea (erticeJ p2- ptrea (ertice;
?ar
Act& ant& pa- ptrea arista
Inicio
P"scarearista =prim&or&dest&pa&p1&p2;
Si pa Q nil
+ntonces escri*ir R!a arista 'a e,isteS
Sino ant nil
Act p1ad'
2ientras =actdest KL p2; ' =act KL nil;
Ant act
Act actenl .in
mientras Antenl
actenl Si ant Q nil
+ntonces p1ad' p1ad'enl
Sino antenl actenl
.in si
Actenl A%ISP
A%ISP act
.in si
.in
> Porrado de "n nodo-
Primero 9a' 8"e compro*ar si e,iste el nodo ' desp"Ds se *orran todas s"s
aristas.
Procedimiento *orrarenodo =ent>sal prin- ptrea (erticeJ info-KtipoL;
?ar
Ptr& p1& p2& act& ant- ptrea (ertice
Pa& *orrado- ptrea arista
Inicio
Porrarenodo =prin&elem&ptr;
Si ptr Q nil
+ntonces escri*ir RNo e,iste el nodo a *orrarS
Sino act prin
2ientras act KL nil
Porrarearista =prin&actinfo&elem;
Act actsig
.in mientras
Actenl A%ISP
PGINA 16$ /176
A%ISP ptrad' S4!4 +N PS+6%4C5%IG4
Ptr ad' Nil
Porrado ptrad'
2ientras *orrado KL nil
Porrarearista =prin&elem&*orradodestinoinfo; +N
C6A!C6I+3
Porrado *orradoenl !+NG6AG+
.in mientras
.in si
.in
Antnil
Actprin
2ientras =act KL nil; ' =actinfo KL elem;
Ant ant
Act actsig
.in mientras
Si ant Q nil
+ntonces prin prinsig
Sino antsig actsig
.in si
Actsig N%ISP
N%ISP act
7. AP!ICACI4N+S %+ !4S G3A.4S-
> Se p"eden representar transformaciones de estado con los grafos.
> Sir(en en di(ersos campos de in(estigacin para encontrar el mDtodo m7s corto
' 8"e c"este lo menos posi*le.
> Para el 7lge*ra se "tili:a la matri: de ad'acencia.
EJERCI CIOS: TEMA 12
1. +n "n 7r*ol *inario de *Fs8"eda& dar todos los elementos inferiores a "no dado
con informacin elem.
Procedimiento *"scar =rai:- ptrea nodoearJ ent>sal ptr- ptrea nodoearJ elem-
KtipoL;
Inicio
Ptr rai:
2ientras =ptrinfo KL elem; ' =ptr KL nil;
Si ptrinfo L elem
+ntonces ptr ptrder
Sino ptr ptri:8
.in si
.in mientras
.in
PGINA 16) /176
Procedimiento inorden =ptr- ptrea nodoear;
Inicio
Si ptr KL nil
+ntonces inorden =ptri:8;
+scri*ir =ptrinfo;
Inorden =ptrder;
.in si
.in
Procedimiento inferiores =rai:- ptrea nodoearJ elem- KtipoL;
?ar
Ptr- ptrea nodoear
Inicio
P"scar =rai:&ptr&elem;
Si ptr Q nil
+ntonces escri*ir R+l elemento no e,isteS
Sino inorden =ptri:8;
.in si
.in
2. !istar en orden descendente el (alor de todos los nodos de "n 7r*ol *inario de
*Fs8"eda.
Procedimiento decreciente =p- ptrea nodoear;
Inicio
Si p KL nil
+ntonces decreciente =pder;
+scri*ir pinfo
%ecreciente =pi:8;
.in si
.in
. +ncontrar el m7,imo (alor de "n 7r*ol *inario de *Fs8"eda.
Procedimiento *"scaema, =rai:- ptrea nodoear;
?ar
Ptr- ptrea nodoear
Inicio
Ptr rai:
2ientras ptrder KL nil
Ptr ptrder
.in mientras
+scri*ir ptrinfo
.in
$. Porrar el elemento menor de "n 7r*ol *inario de *Fs8"eda.
Procedimiento *orraremin =ent>sal rai:- ptrea nodoear;
?ar
Pad& ptr- ptrea nodoear
PGINA 166 /176
Inicio
Si rai: Q nil
+ntonces escri*ir Rr*ol (acioS
Sino pad nil
Ptr rai:
2ientras ptri:8 KL nil
Pad ptr
Ptr ptri:8
.in mientras
Si pad Q nil
+ntonces rai: ptrder
Sino padi:8 ptrder
.in si
Ptri:8 %ISP
%ISP ptr
.in si
.in
). +ncontrar el seg"ndo elemento ma'or de "n 7r*ol *inario de *Fs8"eda.
Procedimiento %osema'or =rai:- ptrea nodoear;
?ar
Pad&ma,&ma,2- ptrea nodoear
Inicio
Si rai: Q nil
+ntonces escri*ir Rr*ol (acioS
Sino pad nil
2a, rai:
2ientras ptrder KL nil
Pad ma,
2a, ma,der
.in mientras
Si ptri:8 Q nil
+ntonces si pad KL nil
+ntonces escri*ir R+l seg"ndo ma'or esS padinfo
PGINA 167 /176
.in si
Sino ma,2
ptri:8
2ientras ma,2der KL nil
2a,2 ma,2der
.in mientras
+scri*ir R+l seg"ndo ma'or esS ma,2info
.in si
.in
.in si
6. A@adir "n *"cle en el nodo con informacin elem.
Procedimiento inse*"cle =prin- ptrea (erticeJ elem- KtipoL;
?ar
Ptr- ptrea (ertice
N"e(o- ptrea arista
Inicio
P"scarenodo =prin&elem&ptr;
Si ptr Q nil
+ntonces escri*ir RNo e,iste el nodoS
Sino n"e(o A%ISP
A%ISP
A%ISPsig
N"e(oder ptr
N"e(oenl
ptrad' Ptrad'
n"e(o
.in si
.in
7. %ado "n grafo& determinar si "n nodo con informacin elem es "n nodo f"ente
=8"e no le lleg"en aristas;
Procedimiento nodoef"ente =prin- ptrea (erticeJ elem- KtipoL;
?ar
Ptr& pn- ptrea (ertice
."ente- *oolean
Pa- ptrea arista
Inicio
P"scarenodo =prin&elem&ptr;
Si ptr Q nil
+ntonces escri*ir R+l nodo no e,isteS
Sino si ptrad' Q nil
+ntonces escri*ir RNodo sin aristas de origenS
Sino f"ente (erdadero
Pn prin
2ientras =pn KL nil; ' =f"ente Q (erdadero;
PGINA 16/ /176
Pa pnad'
PGINA 16/ /176
.in si
.in
.in si
2ientras =pa KL nil; ' =f"ente Q (erdadero;
Si padest Q ptr
+ntonces f"ente falso
Sino pa paenl
.in si
.in mientras
Pn pnsig
.in mientras
Si f"ente Q (erdadero
+ntonces escri*ir RSi es "n nodo f"enteS
Sino escri*ir RNo es "n nodo f"enteS
.in si
/. %ado "n grafo en 8"e cada arista tiene "n peso asociado& determinar 8"e
aristas del grado pesan m7s de 1MM& dando la informacin del nodo origen '
destino.
1ipo aristaepeso- registro
%es- ptrea (ertice
+nl- ptrea aristaepeso
.in registro
Procedimiento arepeso =prin- ptrea (ertice;
?ar
Pn- ptrea (ertice
Pa- ptrea aristaepeso
Inicio
Pn prin
2ientras pn KL nil
Pa pnad'
2ientras pa KL nil
PGINA 160 /176
Si papeso L 1MM
+ntonces escri*ir R4rigenS pninfo
Sino escri*ir R%estinoS padesinfo
.in si
Pa paenl
.in mientras
Pn pnsig
.in mientras
.in
TABLAS DE DEC I SIN:
TEMA 13
1. C"D es "na ta*la de decisin.
2. 1ipos de ta*las.
. Constr"ccin de ta*las.
$. Con(ersin de ta*las a programas.
1. C6g +S 6NA 1A P !A %+ % + CISI5N-
6na ta*la de decisin es "na 9erramienta 8"e me (a a ser(ir para
representar de manera m7s f7cil la lgica de "n pro*lema c"ando est7 es mas o
menos complicada.
Para ello se trata de identificar en el pro*lema las acciones 8"e 9a' 8"e
e#ec"tar ' las condiciones 8"e se tienen 8"e c"mplir para e#ec"tar esas acciones.
!as acciones normalmente las (amos a identificar a tra(Ds de los (er*os& ' las
condiciones (an a ser las condicionales =si&...;.
PGINA 17M /176
!a ta*la (a a tener $ partes-
Con#"nto de condiciones +ntrada de condiciones
o entradas com*inacin de condiciones
Con#"nto de acciones +#ec"cin de acciones
o salidas salida de acciones
Con#"nto de condiciones- Son las condiciones 8"e inter(ienen en el pro*lema.
+ntrada de condiciones- Son las com*inaciones posi*les entre los (alores de las
condiciones. SI& N4& %A IG6A!.
Con#"nto de acciones- A*arca todas las acciones 8"e se tienen 8"e e#ec"tar c"ando
se c"mplen "n con#"nto dado de condiciones.
Salida de e#ec"cin- Se determina c"ando se e#ec"ta cada accin.
BC"D es "na regla de d ecisinE-
+s "na com*inacin de "n estado en la entrada de condiciones ' de "na o
m7s acciones asociadas en la parte de la salida de acciones asociadas en la parte de
la salida de acciones siendo N el nFmero de condiciones ' consider7ndolas como
*inarias =SI/N4; 9a*r7 "n nFmero m7,imo de 2 ele(ado a N reglas.
Cada regla e8"i(ale desde el parte de (ista de programacin a "na
estr"ct"ra si.. entonces& ' en cada momento solo se p"ede c"mplir "na regla.
!as ta*las de decisin las podemos "sar para controlar la lgica de control
de "n programa& en los man"ales de "s"ario para controlar "n programa& para
sa*er c"ando se act"ali:a "n fic9ero&...
+#emplo-
Si me 9acen fi#o me compro "n corsa& si me 9acen fi#o ' me s"*en el s"eldo
me compro "n familiar& ' si me toca la loterAa me compro "n P2h.
C1- .i#o / no fi#o A1- No compro "n coc9e
C2- Salario / no salario A2- Compro "n corsa
C- !oterAa / no loterAa A- Compro "n familiar
A$- Compro "n P2h
.i#o S S S S N N N N
Salario S S N N S S N N
!oterAa S N S N S N S N
No coc9e Y Y Y Y
Corsa Y
.amiliar Y
PGINA 171 /176
P2h Y Y
2. 1IP4S %+ 1AP!A S -
> SegFn el planteamie n t o-
> Propias- Solo tienen reglas simples& solo 9a' SI / N4.
> Impropias- Son las 8"e tienen reglas comp"estas =SI/N4/IN%I.+3+NCIA;.
> SegFn entradas-
> !imitadas- C"ando las reglas son S / N / > / Y =Si se e#ec"ta para las
acciones;.
> +,tendidas- C"ando los (alores 8"e toman las condiciones son diferentes de
SI / N4& ' las acciones son distintas de si se e#ec"ta o no se e#ec"ta.
+n c"al8"ier caso& siempre se p"ede trad"cir "na ta*la mi,ta a "na ta*la
limitada. Cada condicin dar7 ig"al a tantas condiciones simples como (alores
p"eda tomar& ' para cada accin tantas acciones como estados p"eda tomar.
!a (enta#a de las ta*las mi,tas ' e,tendidas es 8"e se (e me#or a primera
(ista& el incon(eniente es 8"e son m7s difAciles de programar.
> SegFn el tratamie n to-
> A*iertas- C"ando desde "na ta*la se 9ace referencia a otra ta*la& pero
l"ego no se ("el(e a la inicial.
> Cerradas- !o mismo 8"e la anterior& pero se ("el(e a la original.
> P"cles- C"ando "na ta*la se llama a sA misma.
1ipos de reglas-
Normalmente las reglas de "na ta*la se consideran como reglas AN%& se
tienen 8"e c"mplir todos los (alores de las condiciones para 8"e se e#ec"te la
opcin asociada a esa regla.
Si se implementa como reglas 43& significa 8"e con 8"e se c"mpla "na sola
regla& se e#ec"ta la accin asociada.
!as reglas +!S+ se 9acen c"ando "n con#"nto de reglas de "na ta*la dan
todas l"gar a la misma accin& entonces se asocian todas como "na regla +!S+.
. C4NS 1 36CCI5N %+ 1 A P ! AS-
Primero locali:amos las condiciones en el en"nciado& desp"Ds las acciones '
las reglas entre las acciones ' las condiciones.
%esp"Ds compr"e*o 8"e la ta*la sea correcta. C"e no oc"rran-
> 3ed"ndancias- Poner la misma regla m7s de "na (e:.
> Completa- C"e no falte alg"na regla.
> Contradictoria- C"e la misma accin de l"gar a cosas contradictorias.
%esp"Ds se mira a (er si se p"ede simplificar la ta*la& a@adiendo si es
posi*le indiferencias =cada "na s"stit"'e a 2 reglas;.
6na ta*la se p"ede simplificar si 9a' 2 reglas 8"e dan l"gar a la misma
accin o con#"nto de acciones ' solo se diferencia en el estado o (alor de "na de s"s
condiciones& entonces s"stit"'o esas 2 reglas por "na sola& 8"e tenga para esa
condicin el (alor de indiferencia.
PGINA 172 /176
.i#o S S S S N N N N
Salario S S N N S S N N
!oterAa S N S N S N S N
No coc9e Y Y Y Y
Corsa Y
.amiliar Y
P2h Y Y
$. C4N? + 3SI5N %+ 1A P !AS A P34G3A2AS-
Primero 9a' 8"e (er si se p"ede simplificar la ta*la.
Ta' 2 formas de 9acer la con(ersin-
> Programacin directa- C"e cada regla e8"i(ale a "na sentencia condicional. +s
m"' ineficiente.
> Pasar la ta*la de decisin a fl"#ograma mediante el sig"iente el mDtodo-
1. Para cada regla al final de s" col"mna ponemos el nFmero de reglas simples a
las 8"e e8"i(ale. Cada indiferencia de "na regla e8"i(ale a 2 reglas simples.
2. Para cada condicin al final de s" fila 9allamos "n coeficiente 8"e res"lta de la
s"ma de los (alores de las reglas para las 8"e esa condicin (alga indiferente&
c"anto menor sea ese (alor& m7s importante es esa regla& por8"e (a a tener
menos reglas para las 8"e esa condicin es indiferente.
. +li#o la condicin con menor (alor en s" coeficiente& si 9a' (arias condiciones
8"e tienen el mismo (alor en s" coeficiente ' adem7s es el menor& 9allo "n
seg"ndo coeficiente 8"e se o*tiene por la diferencia en (alor a*sol"to de la
diferencia entre el nFmero de SI ' N4 en (alor a*sol"to de esas condiciones& '
eli#o la 8"e tenga la diferencia ma'or& ' si sig"e 9a*iendo empate co#o
c"al8"iera de ellas.
$. Para la regla elegida o*tengo otras 2 ta*las& 8"e se caracteri:an por8"e no
contienen 'a a la condicin por la 8"e 9e di(idido las ta*las& ' "na ta*la
contiene las reglas para las 8"e esa condicin contiene (alor SI& ' la otra
contiene las reglas para las 8"e la condicin es N4& ' para las reglas con
condicin indiferencia las pongo en las 2 ta*las& ' con las 2 ta*las ("el(o a
9acer otra (e: lo mismo 9asta 8"e no se p"eda di(idir m7s& ' cada (e: 8"e se
9ace "na di(isin pago la condicin en el fl"#ograma.
+#emplo anterior-
.i#o S S S N M
Salario > S N > 6
!oteria S N N > $
No coc9e Y
Corsa Y
.amiliar Y
P2h Y
2 1 1 $
.i#o SI
PGINA 17 /176
Salario > S N 2
!oteria S N N M
No coc9e
Corsa Y
.amiliar Y
P2h Y
2 1 1
.i#o N4
Salario >
!oteria >
No coc9e Y
Corsa
.amiliar
P2h
Si .i#o No
Si No
!oteria No coc9e
P2h Si Salario No
.amiliar Corsa
Si no fi#o
+ntonces escri*ir RNo coc9eS
Sino si loteria
+ntonces escri*ir RP2hS
Sino si salario
+ntonces escri*ir R.amiliarS
Sino escri*ir RCorsaS
.in si
.in si
.in si
PGINA 17$ /176
EJERCI CIOS: TEMA 13
1. %ado "n fic9ero de empleados ordenado por nFmero de empleado con el
formato& nFmero de empleado& antig^edad& se,o& categorAa& se trata de 9allar
mediante ta*las de decisin 8"e prima reci*e cada empleado sa*iendo 8"e-
A- 2"#eres 8"e son #efes.
P- 2"#eres empleadas con antig^edad ' 9om*res empleados.
C- Tom*res 8"e son #efes.
%- Sin prima. +l resto.
Tacer la ta*la de decisin ' el fl"#ograma.
Antig"edad S S S S N N N N
2"#er S N S N S S N N
PGINA 17) /176
Gefe S S N N S N S N
A Y Y
P Y Y Y
C Y Y
% Y
Antig"edad > > S N N $
2"#er S N > S N 2
Gefe S S N N N M
A Y
P Y Y
C Y
% Y
2 2 2 1 1
Gefe SI
Antig"edad > > $
2"#er S N M
A Y
P
C Y
%
2 2
Gefe N4
Antig"edad S N N M
2"#er > S N 2
A Y
P
C Y
% Y
2 1 1
Gefe
2"#er Antig"edad
P
A C 2"#er
% P
Si #efe
+ntonces si m"#er
+ntonces escri*ir RAS
Sino escri*ir RCS
.in si
Sino si antig^edad
+ntonces escri*ir RPS
Sino si m"#er
+ntonces escri*ir R%S
Sino escri*ir RPS
.in si
.in si
.in si
PGINA 176/176

You might also like