Vous êtes sur la page 1sur 71

MANUAL

DE
PASCAL
Organizacin del Tutorial
El Manual de Pascal est dirigido a usuarios principiantes de Pascal. El tutorial coienza
con los conceptos !undaentales de prograacin" # cada cap$tulo contiene prograas
copletos %ue rea!iran los teas e&puestos. Los prograas se presentan con una
'ariedad de colores a !in de di!erenciar pala(ras reser'adas" s$(olos" identi!icadores"
coentarios" etc. De la siguiente anera)
Coentarios
Pala(ra reser'ada
*denti!icadores
S$(olos
Cadenas
N+eros
Capitulo I: Elementos del PASCAL
Estructuras general de programas en Pascal
Pascal es un lengua,e de prograacin de alto ni'el" %ue !acilita la prctica de la
prograacin estructurada. Utiliza un traductor %ue produce cdigo e,ecuta(le" lo cual
disinu#e los tiepos de e,ecucin de los prograas.
El lengua,e Pascal !ue desarrollado por Ni-laus .irt/" con el propsito de a#udar a los
estudiantes en el ane,o de las t0cnicas de la prograacin estructurada" pero en la
actualidad su aplicacin es de propsitos generales.
La construccin de prograas en Pascal se (asa en dulos %ue guardan las siguientes
reglas de construccin )
Program identificador ; {cabecera opcional en Turbo Pascal}
Uses identificadores
Label lista de etiquetas ; {seccin de etiuetas}
Const
definiciones de constantes
T!pe
declaracin de tipos de datos definidos por el usuario
"ar
Declaracin de variables
Procedure
definiciones de procedimientos
#unction
definiciones de funciones
begin {cuerpo del programa}
sentencias
end$
Las cinco secciones de declaracin 1La(el" Const" T#pe # Procedure #2o 3unction" as$ coo
la clusula Uses # Progra" no tiene %ue estar presentes en todos los prograas. Tur(o
Pascal es u# !le&i(le al oento de escri(ir las secciones de declaracin" #a %ue se
pueden /acer en cual%uier orden 4en Pascal estndar *SO si se re%uire este orden5. Sin
e(argo es con'eniente seguir el orden esta(lecido" le e'itar !uturos pro(leas.
Nota) Las declaraciones de constantes" tipos # 'aria(les ta(i0n se pueden poner en los
procediientos #2o !unciones.
Todo objeto referenciado en un programa debe haber sido previamente definido.
Identi%icadores
En la a#or$a de los prograas de coputador" es necesario ane,ar datos de entrada o de
salida" los cuales necesitan alacenarse en la eoria principal del coputador en el
tiepo de e,ecucin. Para poder anipular dic/os datos" necesitaos tener acceso a las
localidades de eoria donde se encuentran alacenados6 esto se logra por edio de los
no(res de los datos o *DENT*3*CADO7ES.
Los identi!icadores ta(i0n se utilizan para los no(res de los prograas" los no(res de
los procediientos # los no(res de las !unciones" as$ coo para las eti%uetas" constantes #
'aria(les.
Las reglas para !orar los identi!icadores en Pascal son las siguientes )
8. Pueden estar copuestos de caracteres al!a(0ticos" nu0ricos # el carcter de
su(ra#ado 4 9 5.
:. De(en coenzar con un carcter al!a(0tico o el carcter de su(ra#ado.
;. Puede ser de cual%uier longitud 4slo los <; prieros caracteres son signi!icati'os5.
=. No se /ace distincin entre a#+sculas # in+sculas.
>. No se perite el uso de los *DENT*3*CADO7ES 7ESE7?ADOS en los no(res
de 'aria(les" constantes" prograas o su(1prograas.
Identificadores vlidos
Nombre
Cadena
Edad_Maxima
X_Y_Z
Etiqueta2
Identificadores no vlidos
Num&Dias : carcter & no vlido
X nombre : Contiene un blanco
bein : es una !alabra reservada
e"e#s : carcter # no vlido
Eleccin de identificadores
La eleccin de identi!icadores perite una e,or lectura # coprensin de un prograa.
No es aconse,a(le utilizar identi!icadores %ue no sugieran ning+n signi!icado.
La siguiente ta(la uestra los *DENT*3*CADO7ES 7ESE7?ADOS en Tur(o1Pascal. Los
arcados con un asterisco no estn de!inidos en Pascal estndar . Los arcados con @ no se
utilizan en Tur(o1Pascal
AABSOLUTE *N ?A7 7ECO7D
AAND AO?E7LAC DOTO ELSE
A77AC AST7*ND @PACEED .F*LE
AEGTE7NAL BED*N TO LABEL
3*LE 3O7 D*? 7EPEAT
3O7.A7D O3 A*NL*NE .*TF
N*L TFEN P7OCEDU7E END
ASFL CASE UNT*L MOD
AND 3UNCT*ON DO SET
3*LE O7 *3 AGO7
NOT TCPE P7OD7AM
ASF7 CONST DO.NTO
Tur(o1Pascal de!ine los siguientes *DENT*3*CADO7ES ESTANDA7 de tipos
prede!inidos" constantes" 'aria(les" procediientos # !unciones. Cual%uiera de ellos puede
ser rede!inido" perdi0ndose as$ la !acilidad de utilizar su de!inicin original.
ADD7 DELAC LENDTF 7ELEASE
A7CTAN DELETE LN 7ENAME
ASS*DN EO3 LO 7ESET
AUG EOLN LO.?*DEO 7E.7*TE
AUG*NPT7 E7ASE LST 7OUND
AUGOUTPT7 EGECUTE LSTOUTPT7 SEEE
BLOCE7EAD EG*T MA7E S*N
BLOCE.7*TE EGP MAG*NT S*HEO3
BOOLEAN 3ALSE MEM SEEEEO3
BU3LEN 3*LEPOS MEMA?A*L SEEEEOLN
BCTE 3*LES*HE MO?E SI7
CFA*N 3*LLCFA7 NE. SI7T
CFA7 3LUSF NO7M?*DEO ST7
CF7 37AC ODD SUCC
CLOSE DETMEM O7D S.AP
CL7EOL DOTOGC OUTPUT TEGT
CL7SC7 FALT P* T7M
CON FEAPPT7 PO7T T7UE
CON*NPT7 F* POS T7UNC
CONOUTPT7 *O7ESULT P7ED UPCASE
CONCAT *NPUT PT7 US7
CONSTPT7 *NSL*NE 7ANDOM US7*NPT7
COPC *NSE7T 7ANDOM*HE US7OUTPT7
COS *NT 7EAD ?AL
.*NC7TEG*T *NTEDE7 7EADLN .7*TE
.*NC7T*N*T EBD 7EAL .7*TELN
DELL*NE EECP7ESSED
&eclaracin de etiuetas
En el reoto caso de %ue sea necesaria la utilizacin de la instruccin Doto" de(er
arcarse con una eti%ueta la l$nea a donde desea en'iarse el control de !lu,o del prograa.
La declaracin de(er enca(ezarse con el identi!icador reser'ado La(el" seguido por la lista
de eti%uetas separadas por coas # terinada por un punto # coa.
Pascal estndar slo perite eti%uetas !oradas por n+eros de 8 a = d$gitos.
Tur(o1Pascal perite la utilizacin de n+eros #2o cual%uier identi!icador" e&cepto los
identi!icadores reser'ados. Su uso no est recoendado # no se de(e eplear nunca.
&e%inicin de constantes
En la de!inicin de constantes se introducen identi!icadores %ue sir'en coo sinnios de
'alores !i,os.
El identi!icador reser'ado Const de(e enca(ezar la instruccin" seguido por una lista de
asignaciones de constantes. Cada asignacin de constante de(e consistir de un identi!icador
seguido por un signo de igual # un 'alor constante" coo se uestra a continuacin)
Const
valor_maximo $2%%&
!recision $'(''')&
!alabra_clave$*+utan,amen*&
encabe-ado $* N.M/0E D10ECC1.N +E2E3.N. *&
Un 'alor constante puede consistir de un n+ero 4entero o real5" o de una constante de
caracteres.
La constante de caracteres consiste de una secuencia de caracteres encerrada entre
apstro!es 4 J 5" #" en Tur(o1Pascal" ta(i0n puede !orarse concatenndola con caracteres
de control 4 sin separadores 5" por e,eplo )
*+eclee su o!ci4n $$5*676767&
Esta constante sir'e para desplegar el ensa,e )
+eclee su o!ci4n $$5
# a continuacin suena el ti(re tres 'eces.
Las constantes de caracteres pueden estar !oradas por un solo carcter de control" p.e,.)
8o"a_nueva $ 62
E&isten dos notaciones para los caracteres de control en Tur(o Pascal" a sa(er )
8. El s$(olo K seguido de un n+ero entero entre L # :>>
representa el carcter al %ue corresponde dic/o 'alor decial en el cdigo ASC**.
:. El s$(olo M seguido por una letra" representa el correspondiente carcter de
control.
E,eplos )
9)2 re!resenta el valor decimal )2
:8o"a_nueva o alimentaci4n de ;orma<(
9=)/ re!resenta el valor 8exadecimal )/ :esca!e<(
67 re!resenta el carcter del timbre o cam!ana(
6M re!resenta el carcter de retorno de carro(
Pascal proporciona las siguientes CONSTANTES P7EDE3*N*DAS )
No(re Tipo ?alor
pi real ;.8=8>N:<>;< 4Slo en Tur(o Pascal5
!alse (oolean
true (oolean
Ma&*nt integer ;:O<O
ades de las constantes literales para los tipos integer # real con representacin decial #
/e&adecial" # las constantes literales para el con,unto de caracteres ASC**" s los
caracteres especiales 4no incluidos en el con,unto estndar del ASC**5
&e%inicin de tipos
Ades de identi!icadores" los datos de(en tener asignado alg+n tipo %ue indi%ue el espacio
de eoria en %ue se alacenarn # %ue al iso tiepo e'ita el error de tratar de
guardar un dato en un espacio insu!iciente de eoria .
Un tipo de dato en Pascal puede ser cual%uiera de los tipos prede!inidos 4 integer" real" (#te"
(oolean" c/ar 5" o alg+n otro de!inido por el prograador en la parte de de!inicin de tipos .
Los tipos de!inidos por el prograador de(en (asarse en los tipos estndar prede!inidos"
para lo cual" de(e iniciar con el identi!icador reser'ado T#pe " seguido de una o s
asignaciones de tipo separadas por punto # coa. Cada asignacin de tipo de(e consistir de
un identi!icador de tipo" seguido por un signo de igual # un identi!icador de tipo
pre'iaente de!inido.
La asignacin de tipos a los datos tiene dos objetivos principales:
8. Detectar errores de operaciones en prograas.
:. Deterinar co e,ecutar las operaciones.
Pascal se conoce coo un lengua,e Pfuertemente tipeadoP 4strongl#1t#ped5 o de tipos
!uertes. Esto signi!ica %ue todos los datos utilizados de(en tener sus tipos declarados
e&pl$citaente # el lengua,e liita la ezcla de tipos en las e&presiones. Pascal detecta
uc/os errores de prograacin antes de que el programa se ejecute.
Los tipos de!inidos por el prograador pueden utilizarse para de!inir nue'os tipos" por
e,eplo )
+>!e
entero $ inteer&
otro_entero $ entero&
A continuacin se /ace una (re'e descripcin de los tipos prede!inidos .
Tipos enteros
Tipos enteros prede!inidos
Tipo 7ango 3orato
(#te L .. :>> Q (its sin signo
integer 1;:O<Q .. ;:O<O 8< (its con signo
longint 1:=O=Q;<=Q .. :8=O=Q;<=O ;: (its con signo
s/ortint 18:Q .. 8:O Q (its con signo
Rord L .. <>>;> 8< (its sin signo
BCTE
El tipo (#te es un su(con,unto del tipo integer" en el rango de L a :>> . Donde %uiera %ue se
espere un 'alor (#te" se puede colocar un 'alor integer6 # 'ice'ersa 4EGCEPTO cuando son
pasados coo PA7AMET7OS5. Asiiso" se pueden ezclar identi!icadores de tipo (#te
# de tipo integer en las e&presiones.
Los 'alores de tipo (#te se guardan en UN OCTETO de eoria.
*NTEDE7
El rango de los 'alores de!inidos por el tipo integer " en Tur(o Pascal" se encuentra entre
1;:O<Q # ;:O<O .
Cada 'alor de este tipo se guarda en DOS OCTETOS de eoria.
LOND*NT 4enteros largos5
A partir de la 'ersin =.L se /an incorporado n+eros %ue apl$an el rango de 'ariacin de
los enteros a 1:"8=O"=Q;"<=Q. Este tipo de datos se denoina longint 4enteros largos5.
Ocupan CUAT7O OCTETOS de eoria. E&iste una constante prede!inida de tipo
longint" denoinada Ma&Long*nt" cu#o 'alor es :"8=O"=Q;"<=O.
SFO7T*NT 4enteros cortos5
En ciertos casos" puede ser prctico disponer de 'alores enteros positi'os # negati'os cu#o
alcance sea s restringido %ue el de los tipos enteros. Los tipos s/ortint pueden toar
'alores entre 18:Q # 8:O. Ocupan UN OCTETO de eoria.
.O7D
E&isten casos en los %ue se desea representar +nicaente 'alores positi'os. Este es el caso.
Por e,eplo" cuando se desea acceder desde un prograa /asta una direccin de eoria.
En tal situacin" no tiene sentido una direccin negati'a. Tur(o Pascal dispone del tipo
Rord 4o pala(ra" de pala(ra de eoria5" cu#o inter'alo posi(le de 'alores es de L a <>>;>.
Ocupa DOS OCTETOS de eoria.
Tipos reales
7EAL
En el conte&to de Pascal" un n+ero real es a%uel %ue est copuesto de una parte entera #
una parte decial" separadas por un punto. El rango de estos n+eros est dado entre los
'alores 8E1;Q # 8ES;Q . Cada 'alor de este tipo se guarda en SE*S OCTETOS de eoria.
Durante una operacin arit0tica con n+eros reales" un 'alor a#or %ue 8ES;Q
4so(re!lu,o5 causar la detencin del prograa # desplegar un ensa,e de error 6 ientras
%ue un 'alor enor %ue 8E1;Q 4(a,o!lu,o5" producir un resultado igual a cero.
De(en toarse en cuenta las siguentes restricciones para los 'alores de tipo real )
8. No pueden utilizarse coo su(indices en las de!iniciones del tipo estructurado
arra#.
:. No pueden !orar su(rangos.
;. No se pueden usar para de!inir el tipo (ase de un con,unto 4tipo estructurado set5
=. No de(en utilizarse para el control de las instrucciones !or # case.
>. Las !unciones pred # succ no pueden toarlos coo arguentos.
Los n+eros reales estn siepre disponi(les en Tur(o Pascal" pero si su sistea inclu#e
un coprocesador atetico coo QLQO" QL:QO u QL;QO" se dispone ades de otros tipos
de n+eros reales)
real 4real5
single 4real corto5
cop 4entero apliado5
dou(le 4real de do(le precisin5
e&tended 4real apliado5
Coputadoras sin coprocesador atetico 4eulacin por so!tRare5
datos disponi(les ) real" cop" dou(le" e&tended # single.
Coputadoras con coprocesador atetico
datos disponi(les ) real" cop" dou(le" e&tended # single 4reales *EEE5
Desde la 'ersin >.L se perite utilizar los datos tipo coprocesador atetico aun%ue su
coputadora no lo tenga incorporado. La razn es %ue se eula dic/o coprocesador. Los
di!erentes tipos reales se di!erencian por el doinio de de!inicin" el n+ero de ci!ras
signi!icati'as 4precisin5 # el espacio ocupado en eoria.
Tur(o Pascal =.L re%uiere o(ligatoriaente un c/ip coprocesador atetico para
/acer uso de n+eros reales de coa !lotante *EEE.
Tur(o Pascal >.L a O.L eula el c/ip coprocesador atetico totalente en
so!tRare" peritiendo e,ecutar tipos *EEE tanto si tiene coo si no un c/ip
QLQO2:QO2;QO instalado en su %uina.
Tipo 7ango Ci!ras TaaTo # (#tes
real :.N8L E 1;N .. 8.O8L E ;Q 88 18: <
single 8.>8L E 1=> .. ;.=8L E ;Q O 1 Q =
dou(le >.L8L E 1;:= .. 8.O8L E ;LQ 8> 1 8< Q
e&tended 8.N8L E 1=N;: .. 8.88L E =N;: 8N 1 :L 8L
cop 1: E <; S8 .. : E <; 1 8 8N 1 :L Q
BOOLEAN
Un 'alor de tipo (oolean puede asuir cual%uiera de los 'alores de 'erdad denotados por
los identi!icadores true # !alse" los cuales estn de!inidos de tal anera %ue !alse U true .
Un 'alor de tipo (oolean ocupa UN OCTETO en la eoria.
CFA7
Un 'alor de tipo c/ar es cual%uier carcter %ue se encuentre dentro del con,unto ASC**
apliado" el cual est !orado por los 8:Q caracteres del ASC** s los 8:Q caracteres
especiales %ue presenta" en este caso" *BM.
Los 'alores ordinales del cdigo ASC** apliado se encuentran en el rango de L a :>>.
Dic/os 'alores pueden representarse escri(iendo el carcter correspondiente encerrado
entre apstro!es.
As$ podeos escri(ir )
*?* @ *a*
Iue signi!ica ) P El 'alor ordinal de A es enor %ue el de a P o P A est antes %ue a P
Un 'alor de tipo c/ar se guarda en UN OCTETO de eoria.
CADENA 4ST7*ND5
Un tipo string 4cadena5 es una secuencia de caracteres de cero o s caracteres
correspondientes al cdigo ASC**" escrito en una l$nea so(re el prograa # encerrado entre
apstro!os.
El trataiento de cadenas es una caracter$stica u# potente de Tur(o Pascal %ue contiene
*SO Pascal estndar.
E,eplos)
*+urbo Aascal*B*+ecnol4ico*B 9)C9)'
Nota)
Una cadena sin nada entre los apstro!os se llaa cadena nula o cadena 'ac$a.
La longitud de una cadena es el n+ero de carcteres encerrados entre los
apstro!os.
'peradores
Los operadores sir'en para co(inar los t0rinos de las e&presiones.
En Pascal" se ane,an tres grupos de operadores)
8. A7*TME7*COS
:. 7ELAC*ONALES
;. LOD*COS
'peradores aritm(ticos
Son a%uellos %ue sir'en para operar t0rinos nu0ricos. Estos operadores podeos
clasi!icarlos a su 'ez coo )
a. UNA7*OS
(. B*NA7*OS
Los operadores UNA7*OS son a%uellos %ue tra(a,an con UN OPE7ANDO.
Pascal perite el ane,o de un operador unario llaado)
MENOS UNA7*O
Este operador denota la negacin del operando" # se representa por edio del signo enos 4
1 5 colocado antes del operando.
Por e,eplo)
Si & tiene asignado el 'alor 8LL" 1& dar coo resultado 18LL 6 esto es %ue el resultado es el
in'erso aditi'o del operando.
Los operadores B*NA7*OS" son los %ue co(inan DOS OPE7ANDOS" dando coo
resultado un 'alor nu0rico cu#o tipo ser igual al a#or de los tipos %ue tengan los
operandos.
La siguiente ta(la uestra los s$(olos de los operadores (inarios de Pascal as$ coo los
no(res de las operaciones %ue realizan.
'peradores aritm(ticos b)sicos
Operador Operacin Operandos E,eplo 7esultado
S Sua real " integer a S ( sua de a # (
1 7esta real " integer a 1 ( Di!erencia de a # (
A Multiplicacin real " integer a A ( Producto de a por (
2 Di'isin real " integer a 2 ( Cociente de a por (
di' Di'isin entera integer a di' ( Cociente entero de a por (
od Mdulo integer a od ( 7esto de a por (
s/l
Desplazaiento a la
iz%uierda
a s/l (
Desplazar a la iz%uierda (
(its
s/r Desplazaiento a la derec/a a s/r ( Desplazar a la derec/a ( (its
Con'iene o(ser'ar lo siguiente)
8. Cuando los dos operandos sean del tipo integer" el resultado ser de tipo integer.
:. Cuando cual%uiera de los dos operandos" o a(os" sean del tipo real" el resultado
ser de tipo real.
;. Cuando" en la operacin di'" OPE7ANDO18 # OPE7ANDO1: tienen el iso
signo" se o(tiene un resultado con signo positi'o6 si los operandos di!ieren en signo"
el resultado es negati'o # el truncaiento tiene lugar /acia el cero.
E,eplos )
D div C $ 2
:ED< div :EC< $ 2
:ED< div C $ E2
D div :EC< $ E2
)%(' div C(' $ no vlido
)% div :FG2< $ no vlido
La operacin di' alacena slo la parte entera del resultado" perdi0ndose la parte
!raccionaria 4truncaiento5.
=. La operacin MODULO est de!inida solaente para OPE7ANDO1: positi'o. El
resultado se dar coo el entero no negati'o s pe%ueTo %ue puede ser restado de
OPE7ANDO18 para o(tener un +ltiplo de OPE7ANDO1: 6 por e,eplo )
H mod C $ '
D mod C $ )
:EH< mod C $ '
:ED< mod C $ E)
:E%< mod C $ E2
:E)%< mod :ED< $ E)
*'TA
En las operaciones arit0ticas" de(e asegurarse %ue el resultado de suar" restar o
ultiplicar dos 'alores" no produzca un resultado !uera de los rangos de!inidos por la
ipleentacin para los di!erentes tipos.
'peradores relacionales
Una 7ELAC*VN consiste de dos operandos separados por un operador relacional. Si la
relacin es satis!ec/a" el resultado tendr un 'alor (ooleano true6 si la relacin no se
satis!ace" el resultado tendr un 'alor !alse. Los operadores de(en ser del iso tipo"
aun%ue los 'alores de tipo real" integer # (#te pueden co(inarse coo operandos en las
relaciones. A continuacin se descri(en los operadores relacionales utilizados en Pascal)
S$(olo Signi!icado
W *DUAL %ue
UX NO *DUAL %ue
U MENO7 %ue
X MACO7 %ue
UW MENO7 o *DUAL %ue
XW MACO7 o *DUAL %ue
E,eplos)
7elacin 7esultado
:L W 88 !alse
8> U :L true
P* X ;.8= true
JAJ U :L !alse
JAJ W <> true
'peradores lgicos
Al igual ue las relaciones+ en las operaciones con operadores lgicos se tienen
resultados cu!o ,alor de ,erdad toma uno de los ,alores booleanos true o %alse$
Los operadores lgicos en Pascal son:
NOT
Sinta&is ) not operando
Descripcin ) *n'ierte el 'alor de 'erdad de operando.
E,eplo )
Si (andera tiene un 'alor de 'erdad true" not (andera produce un resultado con 'alor de
'erdad !alse.
AND
Sinta&is ) operando.8 and operando.:
Descripcin ) Produce un resultado con 'alor de 'erdad true cuando a(os operandos tienen
'alor de 'erdad true6 en cual%uier otro caso el resultado tendr un 'alor de 'erdad !alse.
O7
Sinta&is ) operando.8 or operando.:
Descripcin ) Produce un resultado con 'alor de 'erdad !alse cuando a(os operadores
tienen 'alores de 'erdad !alse6 en cual%uier otro caso el resultado tendr un 'alor de 'erdad
true.
GO7
Sinta&is ) operando.8 &or operando.:
Descripcin ) Un operando de(e tener 'alor de 'erdad true # el otro !alse para %ue el
resultado tenga 'alor de 'erdad true.
Tur(o Pascal ta(i0n perite las siguientes operaciones entre los (its de operandos
e&clusi'aente de tipo entero )
AND
Sinta&is ) operando.8 and operando.:
Descripcin) Pone a ceros los (its de operando.:
cu#os correspondientes en operando.8 est0n en ceros.
Los 'alores se pasan a (inario" #" so(re cada (it de operando.8 se
realiza la operacin and lgica con el correspondiente (it de operando.:.
E,eplo ) :N and ;L W :Q
Cu#a !ora en (inario es )
''''''''''')))') $ 2I :o!erando()<
and '''''''''''))))' $ C' :o!erando(2<
_____________________
''''''''''')))'' $ 2J :resultado<
O7 4 o inclusi'a 5
Sinta&is ) operando.8 or operando.:
Descripcin ) Pone a uno los (its de operando.8 cu#os correspondientes (its en operando.:
estn a uno.
E,eplo ) 8O or ;L W ;8
En (inario)
''''''''''')''') $ )D :o!erando()<
or '''''''''''))))' $ C' :o!erando(2<
_____________________
'''''''''''))))) $ C) :resultado<
GO7 4 o e&clusi'a 5
Sinta&is ) operando.8 &or operando.:
Descripcin ) *n'ierte el estado de los (its de operando.8" cu#os correspondientes en
operando.: estn a uno.
E,eplo ) 8L; &or :> W 8:<
En (inario)
'''''''''))''))) $ )'C :o!erando()<
xor '''''''''''))'') $ 2% :o!erando(2<
______________________
'''''''''))))))' $ )2H :resultado<
SFL
Sinta&is ) operando.8 s/l operando.:
Descripcin ) Desplaza /acia la iz%uierda los (its de operando.8" el n+ero de posiciones
esta(lecidas por operando.:.
Los (its %ue salen por el e&treo iz%uierdo se pierden.
E,eplo ) 8L s/l : W =L
En (inario)
'''''''''''')')' $ )' :o!erando()<
s8l 2 @$ '''''''''')')''' $ F' :resultado<
:o!erando(2<
SF7
Sinta&is ) operando.8 s/r operando.:
Descripcin ) Desplaza /acia la derec/a los (its de operando.8 el n+ero de posiciones
esta(lecidas por operando.:.
Los (its %ue salen por el e&treo derec/o se pierden
E,eplo ) 8:> s/r ; W 8>
En (inario )
''''''''')))))') $ )2% :o!erando()<
s8r C $5 '''''''''''')))) $ )% :resultado<
:o!erando(2<
E-presiones
Las e&presiones son secuencias de constantes #2o 'aria(les separadas por operadores
'lidos.
Se puede construir una e&presin 'lida por edio de)
8. Una sola constante o 'aria(le" la cual puede estar precedida por un signo S 1 .
:. Una secuencia de t0rinos 4constantes" 'aria(les" !unciones5 separados por
operadores.
Ades de(e considerarse %ue)
Toda 'aria(le utilizada en una e&presin de(e tener un 'alor alacenado para %ue la
e&presin" al ser e'aluada" d0 coo resultado un 'alor.
Cual%uier constante o 'aria(le puede ser reeplazada por una llaada a una !uncin.
Coo en las e&presiones ateticas" una e&presin en Pascal se e'al+a de acuerdo a la
precedencia de operadores. La siguiente ta(la uestra la precedencia de los operadores en
Tur(o Pascal)
Precedencia de operadores
> 1 4Menos unario5
= Not
; A 2 di' od and s/l s/r
: S 1 or &or
8 W UX X U XW UW
Las reglas de e'aluacin para las e&presiones son )
8. Si todos los operadores en una e&presin tienen la isa precedencia" la e'aluacin
de las operaciones se realiza de iz%uierda a derec/a.
:. Cuando los operadores sean de di!erentes precedencias" se e'al+an priero las
operaciones de s alta precedencia 4en una (ase de iz%uierda a derec/a 5" luego se
e'al+an las de precedencia siguiente" # as$ sucesi'aente.
;. Las reglas 85 # :5 pueden ser anuladas por la inclusin de par0ntesis en una
e&presin.
E,eplos )
)( C K 2L% MLBKN
2( F K )' $)F
C( 2' LF div %
F( M1ual !rioridad de i-quierda a derec8a : LBdivN
%( J' div % $ )H
H( C E % L :2'K:HG2<<
D( C E % L :2'K:HG2<< $ C E % L :2' K C<
J( M!arOntesis ms internoN
I( $ C E % L 2C Mseundo !arOntesisN
)'( $ C E ))% MMulti!licaci4nN
))( $ E))2 MrestaN
*nstrucciones
Aun%ue un prograa en Pascal puede contar con una sola instruccin 4ta(i0n llaada
enunciado" sentencia o estatuto5" noralente inclu#e una cantidad considera(le de ellas.
Uno de los tipos de instrucciones s iportantes lo !oran las instrucciones de
asignacin6 las cuales asignan a una 'aria(le 4por edio del s$(olo )W 5 " el resultado de la
e'aluacin de una e&presin.
La sinta&is para las instrucciones de asignacin es )
identi;icador :$ ex!resi4n &
Al s$(olo )W le llaareos" en lo sucesi'o ) Psi(olo de asignacinP
Los siguientes son e,eplos de instrucciones de asignacion )
numero :$ )'' &
im!orte :$ !recio L cantidad &
8i!otenusa :$ sqrt:sqr:cateto_o!<Ksqr:cateto_ad <<&
Es posi(le construir una instruccin vaca escri(iendo slaente el punto # coa de una
instruccin.
As$ podeos escri(ir )
valor :$ valor K )&&
Lo %ue inclu#e las dos instrucciones )
valor :$ valor K )&
> la instrucci4n vacPa : &
Bloques de instrucciones
En todo lugar donde sea 'lido utilizar una instruccin siple" es posi(le utilizar una
instruccin compuesta o bloque de instrucciones" el cual se !ora agrupando 'arias
instrucciones siples por edio de los identi!icadores (egin # end.
Por e,eplo)
bein
suma :$ )'''('&
incr :$ 2'('&
total :$ suma K incr
M.bsOrvese la ausencia de !unto > coma
al ;inal de la instrucci4nN
end(
No es necesario escri(ir el punto # coa antes de end #a %ue el punto y coma se usa para
separar instrucciones" no para terinarlas.
(egin # end son delimitadores de bloque.
Procediientos de entrada 2 salida
Desde el punto de 'ista del /ardRare" las instrucciones de entrada y salida le a#udan al
prograa a counicarse con un peri!0rico de la coputadora tal coo una terinal" una
ipresora o un disco.
Las instrucciones de entrada estndar" sir'en para leer carcteres desde el teclado" # las
instrucciones de salida estndar despliegan carcteres en la pantalla.
En Pascal todas las operaciones de entrada/salida se realizan e,ecutando unidades de
prograa especiales denoinados procedimientos de entrada/salida %ue !oran parte del
copilador # sus no(res son identi!icadores estndar)
Procediientos de entrada 7ead 7eadln
Procediientos de salida .rite .riteln

Procedimientos .ead ! .eadln
Los procediientos prede!inidos 7ead # 7eadLn 4contraccin de 7ead Line5" constitu#en
la (ase para las instrucciones de entrada estndar.
Las instrucciones de entrada proporcionan datos durante la e,ecucin de un prograa. Las
instrucciones para llaar a los procediientos 7ead # 7eadLn son de la siguiente !ora )
Read(lista_de_variables);
ReadLn(lista_de_variables);
donde )
lista9de9'aria(les ) es una lista de identi!icadores de 'aria(les separados por coas" los
datos %ue se pueden leer son ) enteros" caracteres" o cadenas. No se puede leer un boolean o
un elemento de tipo enumerado.
Los datos estructurados " arra#s" registros o con,untos" no se pueden leer glo(alente # se
suele recurrir a diseTar procediientos espec$!icos.
La accin de la instruccin es o(tener" del teclado" tantos 'alores de datos coo eleentos
/a# en lista9de9'aria(les. Los datos de(ern ser copati(les con los tipos de las 'aria(les
correspondientes en la lista.
Cada 'alor entero o real en el !lu,o de entrada puede ser representado coo una secuencia
de caracteres en alguna de las !oras peritidas para tales n+eros" # puede estar
inediataente precedido por un signo s o un signo enos. Cada 'alor entero o real
puede ser precedido por cual%uier cantidad de caracteres (lancos o !ines de l$nea" pero no
de(er /a(er (lancos o !ines de l$nea entre el signo # el n+ero.
La di!erencia entre las instrucciones 7ead # 7eadLn consiste en %ue 7ead perite %ue la
siguiente instruccin contin+e le#endo 'alores en la isa l$nea6 ientras %ue" con
7eadLn la siguiente lectura se /ar despu0s de %ue se /a#a tecleado el carcter de !in de
l$nea.
Cuando se tienen datos de tipo c/ar en una instruccin 7ead" los caracteres (lancos # los de
!in de l$nea son considerados en el conteo de los eleentos de las cadenas de caracteres
ientras no se coplete el total especi!icado para cada una de ellas. Cada !in de l$nea es
tratado coo un carcter" pero el 'alor asignado a la 'aria(le ser un carcter (lanco.
Es aconse,a(le %ue cada cadena de caracteres se lea en una instruccin 7ead o 7eadLn por
separado" para e'itar el tener %ue ir contando /asta copletar la cantidad e&acta de
caracteres %ue !oran la cadena 4o de lo contrario se tendrn resultados sorpresi'os #
!rustrantes al 'eri!icar los datos le$dos5.
Procediientos .rite C .riteln
La salida estndar se realiza en (ase a estos procediientos prede!inidos" # las
instrucciones para in'ocarlos toan las siguientes !oras )
Write(lista_de_salida);
WriteLn(lista_de_salida);
donde )
lista9de9salida es una lista de 'aria(les" e&presiones #2o constantes" cu#os 'alores 'an a ser
desplegados en la pantalla.
El procediiento .rite perite %ue la siguiente instruccin se realice en la isa l$nea "
ientras %ue .riteLn alienta una nue'a l$nea" antes de !inalizar.
Por e,eplo" las instrucciones )
Qrite :*R S.2? *<&
Qrite2n:*?M17.T R*<&
producirn la salida )
R S.2? ?M17.T R
cursor en la siuiente lPnea(
Mientras %ue )
Qrite:*+EC2EE @C+025 3 A?0? 31N?21Z?0 $$5 *<&
desplegar )
+EC2EE @C+025 3 A?0? 31N?21Z?0 $$5 CU0T.0
Para producir un rengln en (lanco" se de(e escri(ir )
.riteLn 6
Un 'alor (ooleano desplegar cual%uiera de las cadenas ) T7UE o 3ALSE"
as$ )
Qrite:*2' K C' $ *B 2' K C' B* ET *B 2' K C' $ %'<&
producir )
2' K C' $ %' ET +0UE
de,ando el cursor en la isa l$nea" al !inal de T7UE.
Cuando un 'alor de salida se escri(e sin una especi!icacin de longitud de capo" se
utilizar la especi!icacin de capo por oisin.
La especi!icacin de longitud de capo por oisin depender del tipo de 'alor de salida #
de la ipleentacin de Pascal.
As$ teneos %ue" para todas las ipleentaciones )
8. La especi!icacin de longitud de capo por oisin para los 'alores de tipo c/ar es
8
:. Si el 'alor a ser desplegado re%uiere enos del n+ero de caracteres especi!icado"
se ipriirn tantos caracteres (lancos coo sean necesarios para copletar dic/o
n+ero.
;. Si el 'alor a ser desplegado re%uiere un n+ero de caracteres a#or %ue el
especi!icado" se usa la $nia especi!icacin de longitud de capo %ue se re%uiera
para representar un 'alor de tipo real o entero" pero las cadenas sern truncadas
a,ustndolas al capo especi!icado # desec/ar los caracteres en e&ceso %ue se
encuentren s a la derec/a.
=. En el caso de 'alores de tipo real" se puede utilizar una especi!icacin de longitud
de !raccin.
Por oisin en Tur(o Pascal" los 'alores de tipo real se desplegarn en !orato de punto
flotante 4ta(i0n llaado e&ponencial5" as$ )
a. Para el caso de 'alores positi'os 4 7 XW L.L 5" el !orato es)
bbn(nnnnnnnnnnEsnn
(. Para 'alores negati'os 4 7 U L.L 5" el !orato es )
bEn(nnnnnnnnnnEsnn
donde )
( W (lanco
n W n+ero 4 81N 5
s W signo 4 S 1 5
E W letra PEP para e&ponente
La especi!icacin de capo $nia aceptada es )
para 7 XW L.L " S*ETE caracteres.
para 7 U L.L " OCFO caracteres.
E,eplos)
Sentencias 7esultados
.riteLn 4JFola MundoJ56 Fola Mundo
.riteLn4J::J S J:LJ56 :::L
.riteLn4pi56 ;.8=8>N:<>;<ESLL
.riteLn4;.L56 ;.LLLLLLLLLLESLL
De(ido a %ue Pascal alinea 4,usti!ica5 las ipresiones /acia la derec/a del capo
correspondiente" cuando es necesario acoodar ta(ularente los caracteres de cadenas %ue
no ocupan la totalidad de colunas especi!icadas.
Por e,eplo" suponiendo %ue no(re es un identi!icador de tipo stringY:LZ 4cadena con
!orato de :L caracteres5" para %ue la ipresin de todos los 'alores de no(re epiece en
la isa coluna" podeos utilizar la instruccin )
Qrite2n:numeroB*(E *BnombreB
* *:2'Elent8:nombre<Bcali;:C<&
#" al e,ecutar el prograa se tendr algo parecido a )
8.1 [UAN 3LO7ES NLNtese la justificacin de los nombres
:.1 ED7*D L. CAST7O 8LL!acia la i"quierda y los n#meros !acia
;.1 7AMON 7AM*7EH NNla derec!a$
Formatos de salida
#ormato / : .riteLn 4$te)anc/ura...56
Anchura: %&presin entera literal' constante' variable o llamada a funcin$ que
especifca la anc!ura total del campo en que se escribe tem.
#ormato 0 ) .riteLn 4$te)anc/ura)d$gitos ...56
Dgitos: dgitos decimales de un n#mero real
Anchura: (otal de dgitos del n#mero real contando parte entera' punto decimal y
dgitos decimales.
E1emplos:
"alor:2 03$4556;
Sentencias 7esultados Coentario
.riteLn 4?alor56 :.>LOO<LLLLLESL8
.riteLn4?alor):56 :.>ESL8
.riteLn4?alor):)856 :>.8 Notese el redondeo
.riteLn4?alor):)=56 :>.LOO<
.riteLn4?alor):)Q56 :>.LOO<LLLL
.riteLn4JTecJ)856 Tec
.riteLn4JTecJ);56 Tec
.riteLn4JTecJ)>56 9 9 Tec Espacios 'acios 9
Secuencia
En este caso" las instrucciones se e,ecutan una despu0s de la otra sin oitir ninguna de
ellas.
La sinta&is para las instrucciones e,ecutadas en secuencia es )
((((((((((((((((
((((((((((((((((
@instrucci4n()5 &
@instrucci4n(25 &
((((((((((((((((
((((((((((((((((
@instrucci4n(N5 &
((((((((((((((((
((((((((((((((((
Seleccin
La seleccin de alternati'as en Pascal se realiza con alguna de las dos siguientes !oras )
8. La sentencia i!
:. La sentencia case
I#7T8E*7ELSE
Dado %ue una condicin produce un 'alor 'erdadero o !also" se necesita una sentencia de
control %ue e,ecute deterinada sentencia si la condicin es 'erdadera " # otra si es !alsa.
En Pascal esta alternati'a se realiza con la sentencia *31TFEN1ELSE. A continuacin se
descri(e el diagraa de !lu,o # el !orato de la sentencia.
3oratos de la sentencia *3)
if <condicin>
then
<instruccin_1>
else
<instruccin_2>
if <condicin> then
<instruccin_1>
else
<instruccin_2>
En este caso" priero se e'al+a condicin # si el resultado arro,a un 'alor de
'erdad4'erdadero5" se e,ecuta instruccin98 6 en caso contrario se e,ecuta instruccin9:.
La condicin es una e&presin )ooleana %ue puede ser 'erdadera o !alsa 4true o false5. Una
e&presin )ooleana se !ora coparando 'alores de las e&presiones utilizando operadores
de relacin 4relacionales5 o comparacin # los operadores lgicos 'istos anteriorente.
E1emplos :
Omisin de clusula else :
Aroram Edades&
Uses Qincrt&
Var
edad : inteer &
bein
Qrite2n:*Escribe tu edad : *<&
0ead2n:edad<&
i; edad 5$ )J t8en
Qrite2n:*REres Ma>or de edad R*<&
Qrite2n:*Esta instrucci4n siem!re se e"ecuta*<&
0eadWe>
end(
*ota: Antes de la pala(ra end no se de(e anteponer un punto # coa coo se uestra en
este e,eplo. El /acerlo generar$a una sentencia 'ac$a 4sentencia %ue no /ace nada5.
Utilizacin de clusula else :
Aroram Edades&
Uses Qincrt&
Var
edad : inteer &
bein
Qrite2n:*Escribe tu edad : *< &
0ead2n:edad< &
i; edad 5$ )J t8en
Qrite2n:*REres Ma>or de edad R*<
else
Qrite2n:*REres Menor de edad R*<&
Qrite2n:*Esta instrucci4n siem!re se e"ecuta*<&
0eadWe>
end(
*ota: Antes de la clusula else no se antepone un punto # coa" si lo /u(iese el
copilador producir un ensa,e de error" puesto %ue no e&iste ninguna sentencia en
Pascal %ue coience con else. La parte else es opcional" pero la e,ecucin siepre
continuar en otra instruccin.
En lugar de utilizar instrucciones siples" se pueden usar (lo%ues de instrucciones" coo a
continuacin se uestra)
Aroram Edades&
Uses Qincrt&
Var
edad : inteer &
bein
Qrite2n:*Escribe tu edad : *< &
0ead2n:edad< &
i; edad 5$ )J t8en
bein
Qrite2n:*REres Ma>or de edad R*<&
Qrite2n:*RYa !uedes VotarR*<
end
else
bein
Qrite2n:*REres Menor de edad R*<&
Qrite2n:*R?Xn no !uedes votarR*<
end&
Qrite2n:*Esta instrucci4n siem!re se e"ecuta*<&
0eadWe>
end(
Sentencia IF anidadas :
Aroram NumMa>or&
Uses Qincrt&
Var
n)Bn2BnCBma>or : inteer &
bein
Qrite2n:*Escribe tres numeros enteros : *<&
0ead2n:n)Bn2BnC<&
i; n)5n2 t8en
i; n)5nC t8en
ma>or:$n)
else
ma>or:$nC
else
i; n25nC t8en
ma>or:$n2
else
ma>or:$nC&
Qrite2n:*El ma>or es *Bma>or<&
0eadWe>
end(
CASE1O31ELSE
Esta !ora es u# +til cuando se tiene %ue elegir entre s de dos opciones" por lo %ue le
llaareos !ora de seleccin m#ltiple.
La siguiente !igura representa la seleccin +ltiple.
Su !orato es)
case <selector> of
constante.1 :
bein
<instrucciones>;
end;
constante.2 :
bein
<instrucciones> ;
end;
.....................
.....................
constante.! :
bein
<instrucciones> ;
end
else
bein
<instrucciones> ;
end;
end; " #$! %& '()& *

Dependiendo del 'alor %ue tenga la e&presin selector" se e,ecutarn las instrucciones
eti%uetadas por constante .
A%u$ ta(i0n los (lo%ues de instrucciones pueden ser reeplazados por instrucciones
siples.
Con'iene tener presente %ue no de(e escri(irse punto y coma antes de la pala(ra else.
Reglas:
/$ La e&presin UselectorX se e'al+a # se copara con las constantes6las constantes
son listas de uno o s posi(les 'alores de UselectorX separados por coas.
E,ecutadas la4s5 UinstruccionesX" el control se pasa a la priera instruccin a
continuacin de end 4!in de case5.
0$ La clusula else es opcional.
9$ Si el 'alor de UselectorX no est coprendido en ninguna lista de constantes # no
e&iste la clusula else" no sucede nada # sigue el !lu,o del prograa6 si e&iste la
clusula else se e,ecutan la4s5 UinstruccionesX a continuacin de la clusula else.
:$ El selector de(e ser un tipo ordinal 4 integer" c/ar" (oolean o enuerado5. Los
n+eros reales no pueden ser utilizados #a %ue no son ordinales. Los 'alores
ordinales de los l$ites in!eriores # superiores de(en de estar dentro del rango
1;:O<Q a ;:O<O. Por consiguiente" los tipos string" longint # Rord no son 'lidos.
3$ Todas las constantes case de(en ser +nicas # de un tipo ordinal copati(le con el
tipo del selector.
6$ Cada sentencia" e&cepto la +ltia" de(en ir seguidas del punto # coa.
E1emplo:
Aroram +ecla&
MEl siuiente !rorama lee un carcter del teclado
> des!liea un mensa"e en !antalla si es letra o
nXmero o carcter es!ecialN
Uses Qincrt&
Var
caracter : c8ar&
bein
Qrite:*Escribe un caracter : *<&
caracter:$0eadWe>&Qrite2n&
case caracter o;
*'*((*I* : Qrite2n:*Es un nXmero*<&
*a*((*-*B*?*((*Z* : Qrite2n:*Es una letra*<
else
Qrite2n:*Es un caracter es!ecial*<
end&
0eadWe>
end(
*teracin
Las !oras de iteracin sir'en para e,ecutar ciclos repetidaente" dependiendo de %ue se
cuplan ciertas condiciones. Una estructura de control %ue perite la repeticin de una
serie deterinada de sentencias se denoina (ucle 4lazo o ciclo5 En ingl0s 4loop5.
El cuerpo del (ucle contiene las sentencias %ue se repiten. Pascal proporciona tres
estructuras o sentencias de control para especi!icar la repeticin)
8. ./ile
:. 7epeat
;. 3or
.F*LE1DO
La estructura repetiti'a R/ile4mientras5 es a%uella en la %ue el n+ero de iteraciones no se
conoce por anticipado # el cuerpo del bucle se e,ecuta repetidaente ientras %ue una
condicin sea 'erdadera .
Su !orato es )
+hile <condicin> do
bein
<instrucciones>;
&nd;
# su diagraa)
7eglas de !uncionaiento )
/$ La condicin se e'al+a antes # despu0s de cada e,ecucin del bucle. Si la condicin
es 'erdadera" se e,ecuta el bucle" # si es !alsa" el control pasa a la sentencia siguiente
al bucle.
0$ Si la condicin se e'al+a a !also cuando se e,ecuta el (ucle por priera 'ez" el
cuerpo del (ucle no se e,ecutar nunca.
9$ Mientras la condicin sea 'erdadera el (ucle se e,ecutar. Esto signi!ica %ue el (ucle
se e,ecutar inde!inidaente a enos %ue PalgoP en el interior del (ucle odi!i%ue
la condicin /aciendo %ue su 'alor pase a !also. Si la e&presin nunca ca(ia de
'alor" entonces el (ucle no terina nunca # se denoina bucle infinito lo cual no es
desea(le.
7EPEAT1UNT*L
La accin de repeat1until es repetir una serie de instrucciones !asta %ue se cupla una
deterinada condicin .
Su !orato es )
re,eat
<instruccin.1> ;
<instruccin.2> ;
..................
..................
<instruccin.!> ;
until <condicin>;
A%u$ las pala(ras repeat # until sir'en ta(i0n coo deliitadores de (lo%ue.
Su diagraa de !lu,o es)
7eglas de !uncionaiento)
/$ La condicin se e'al+a al !inal del (ucle" despu0s de e,ecutarse todas las sentencias.
0$ Si la condicin es !alsa" se 'uel'e a repetir el (ucle # se e,ecutan todas sus
instrucciones.
9$ Si la condicin es !alsa" se sale del (ucle # se e,ecuta la siguiente instruccin a until.
:$ La sinta&is no re%uiere (egin # end.
Anal$cense los diagraas de R/ile1do # repeat1until" para coprender las di!erencias entre
a(as !oras.
#'.7T'7&'
Cuando se sa(e de anteano el n+ero de 'eces %ue de(er e,ecutarse un ciclo
deterinado" 0sta es la !ora s con'eniente.
El !orato para !or1to1do es )
for <contador>:-<e.,resin.1> to <e.,resin.2> do
bein
<instrucciones> ;
end;
Al e,ecutarse la sentencia !or la priera 'ez" a contador se le asigna un 'alor
inicial4e&presion.85" # a continuacin se e,ecutan las intrucciones del interior del (ucle"
enseguida se 'eri!ica si el 'alor !inal 4e&presin.:5 es a#or %ue el 'alor inicial
4e&presin.856 en caso de no ser as$ se increenta contador en uno # se 'uel'en a e,ecutar
las instrucciones" /asta %ue el contador sea a#or %ue el 'alor !inal" en cu#o oento se
terina el (ucle.
A%u$" contador no puede ser de tipo real.
El contador se puede decreentar sustitu#endo la pala(ra to por la pala(ra doRnto.
#ormato:
for <contador>:-<e.,resin.1> do+nto <e.,resin.2> do
bein
<instrucciones> ;
end;
Tipos de datos
Pascal re%uiere %ue todos los tipos de datos sean !oralente de!inidos antes de ser
utilizados" #a %ue tal de!inicin ser usada por el copilador para deterinar cuanto
espacio de eoria se reser'ar para las 'aria(les de cada tipo" as$ coo para esta(lecer
los l$ites de los 'alores %ue pueden asignarse a cada 'aria(le" por lo %ue esta(lecereos
las siguientes reglas generales para los di!erentes tipos de datos %ue se utilizan en Pascal)
8. Cada 'aria(le de(e tener un solo tipo en el (lo%ue donde !ue declarada.
:. El tipo de cada 'aria(le de(e ser declarado antes de %ue la 'aria(le sea utilizada en
una instruccin e,ecuta(le.
;. A cada tipo de dato se le pueden aplicar ciertos operadores espec$!icos.
Para !acilitar su estudio" /eos clasi!icado a los tipos de datos %ue pueden ser de!inidos por
el prograador en S*MPLES # EST7UCTU7ADOS.
Tipos siples
Fasta a%u$" /eos considerado los tipos siples estndar integer" real" (oolean" c/ar # (#te
proporcionados por Tur(o Pascal.
Estos tipos de datos pueden ser utilizados para declarar 'aria(les nu0ricas" de caracteres
#2o lgicas. Sin e(argo" es posi(le %ue ninguno de ellos satis!aga los re%ueriientos de un
deterinado pro(lea" /aci0ndose necesaria la utilizacin de otros tipos coo)
TIPO SUBRANGO
El tipo de dato s siple %ue se puede de!inir en un prograa Pascal es el tipo subrango
o intervalo. Estos tipos son +tiles" so(re todo por la !acilidad %ue o!recen para 'eri!icar
autoticaente errores. Un tipo su(rango se de!ine de un tipo ordinal" especi!icando dos
constantes de ese tipo" %ue act+an coo lmite inferior # superior del con,unto de datos de
ese tipo. Un tipo su(rango es un tipo ordinal # sus 'alores se ordenan de igual odo %ue en
el tipo patrn de %ue se deducen.
E1emplos:
)( '((I
este ti!o subrano consta de los elementos
'B)B2BCBFB%BHBDBJBI
2( *'*((*I*
este subrano consta de los caracteres
*'* a *I*
C( *?*((*3*
este subrano consta de los caracteres
*?* a *3*
Se pueden crear 'aria(les cu#os 'alores se restrin,an a un su(rango dado. Las declaraciones
de tipo su(rango se sit+an entre las declaraciones de constantes # de 'aria(les.
#ormato:
t/,e
!o0bre - lmite inferior .. lmite superior
E1emplos:
M=0KN MDirectiva de com!ilador 0N
Aroram Aositivos&
Uses Qincrt&
MEl siuiente !rorama reali-a una validaci4n
!ara que s4lo se ace!ten valores !ositivos
entre ' > C2DHD !or medio de un ti!o subranoN
+>!e
NumAositivo $ '((Max1nt&
Var
numero : NumAositivo&
/ein
ClrTcr&
Mnumero:$E)& :est instrucci4n !rovocarPa un errorN
Qrite:*Escribe un nXmero entero !ositivo : *<&
0ead2n:numero<&
0eadWe>
end(
*ota: Puesto %ue Pascal no siepre produce un error cuando el 'alor de un tipo su(rango
est !uera de su rango de!inido. Sin e(argo se puede tener la posi(ilidad de 'isualizar
dic/os errores ediante la directi'a de copilador)
M=0KN activada
M=0EN desactivada
Por de!ault esta desacti'ada. *lo se debe usar durante la fase de depuracin.
TI!" #$%&#RAD!"
En estos tipos de datos siples" se listan los identi!icadores %ue sern asociados con cada
'alor a utilizar.
Por e,eplo)
+>!e
dias_semana $:lunesBmartesBmiercolesB"uevesB
viernesBsabadoBdomino<&
colores_bara"a $:es!adaBoroBbastoBco!a<&
De igual !ora las 'aria(les pueden ser de tipo enuerado)
Var
dias : dias_semana
!ara"a : colores_!ara"a
#ormato:
1/,e
no0bre - (constante12constante22...2constante!)
Los datos de tipo colores9(ara,a slo podrn toar los 'alores denotados por ) espada" oro"
(asto" copa . La posicin de cada 'alor en la lista de!ine su orden" por lo %ue para el tipo
dias9seana teneos %ue )
domino 5 viernes da como resultado true
sabado @ martes da como resultado ;alse
"ueves @5 miercoles da como resultado true
Caracter$sticas)
Un tipo de dato enuerado es un tipo ordinal cu#o orden se indica por la
disposicin de los 'alores en la de!inicin.
El n+ero de orden de cada eleento coienza en L para el prier eleento.
Las 'aria(les de tipo enuerado slo pueden toar 'alores de estos tipos.
Los +nicos operadores %ue pueden acopaTar a los tipos ordinales son los
operadores de relacin # asignacin.
A los 'alores de los tipos enuerados se les pueden aplicar las !unciones estndar succ 4de
sucesor5" pred 4de predecesor5 # ord 4de ordinal5.
En el caso del 'alor &io de un tipo enuerado" succ no est de!inido" #" para su 'alor
$nio" no est de!inido pred.
La !uncin estndar ord es aplica(le a los arguentos %ue sean 'alores de tipo enuerado.
La relacin (iun$'oca se da entre los 'alores del tipo # los enteros coprendidos entre L #
N18" donde N es la cardinalidad del tipo enuerado.
El tipo estndar (oolean es e%ui'alente a un tipo enuerado de la !ora )
boolean $ : ;alseB true<&
Aplicacin de las !unciones Ord" Pred" Succ
Arguento4&5 Tipos de datos Ord4&5 Pred4&5 Succ4&5
lunes dias9seana L *nde!inido artes
oro colores9(ara,a 8 espada (asto
:: *nteger :: :8 :;
L *nteger L 18 8
1:L *nteger 1:L 1:8 18N
Ma&*nt *nteger Ma&*nt Ma&*nt18 *nde!inido
!alse Lgico L *nde!inido true
E1emplo:
Aroram Dias_Temana&
Uses Qincrt&
MEl siuiete !rorama muestra los dias de
la semana !or medio de ti!os enumeradosN
+>!e
Dia_Temana $ :2unesBMartesBMiercolesBYuevesB
ViernesBTabadoBDomino<&
Var
dias :Dia_Temana&
i :b>te&
/ein
ClrTcr&
dias:$lunes&
;or i:$) to D do
bein
case dias o;
2unes :Qrite2n:*2unes *<&
Martes :Qrite2n:*Martes *<&
Miercoles :Qrite2n:*Miercoles*<&
Yueves :Qrite2n:*Yueves *<&
Viernes :Qrite2n:*Viernes *<&
Tabado :Qrite2n:*Tabado *<&
Domino :Qrite2n:*Domino *<
end&
dias:$succ:dias<
end&
0eadWe>
end(
Tipos estructurados
En Pascal" se pueden de!inir " a partir de los datos simples" otros tipos s cople,os
conocidos coo tipos estructurados.
Cuando se declara una 'aria(le coo de un tipo estructurado" se puede anipular la
estructura copleta" o (ien tra(a,ar con los datos indi'iduales %ue la !oran.
A continuacin" se descri(irn los di!erentes tipos estructurados %ue pueden ane,arse en
Pascal.
Cadenas 4String5
Arreglos 4Arra#5
7egistros 47ecord5
Con,untos 4Set5
Arc/i'os
Cadenas 4strings5
Tur(o Pascal proporciona el tipo string para el procesaiento de cadenas 4secuencias de
caracteres 5.
La de!inicin de un tipo string de(e especi!icar el n+ero &io de caracteres %ue puede
contener" esto es" la &ia longitud para las cadenas de ese tipo. La longitud se especi!$ca
por una constante entera en el rango de 8 a :>>.
El !orato para de!inir un tipo string es)
;identi%icador< 2 string =limite'superior>;
Las 'aria(les de cadena se declaran en la seccin ?ar o T#pe.
Declaracin en ?ar)
Var
nombre : strinZC'[&
domicilio : strinZC'[&
ciudad : strinZF'[&
Declaracin en T#pe)
T#pe
cadC' : strinZC'[&
cadF' : strinZF'[&
Var
nombre : cadC'&
domicilio : cadC'&
ciudad : cadF'&
Una Vez declaradas las $aria!les se pueden realizar asi%naciones u operaciones de
lectura&escritura'
nombre :$ *Erid 2orel> Castro 7on-ale-* &
domicilio :$ *?ltamirano 922'*&
ciudad :$ *2a Aa- /(C(T(*&
El contenido de la cadena se de(e encerrar entre apstro!es. Si se desea %ue !igure un
apstro!e en una cadena" es preciso do(larlo en la cadena. Los procediientos de
Entrada2Salida son de la siguiente !ora )
0ead2n :nombre<&
Qrite2n:*Sola *Bnombre<&
Longitud de una cadena
Las 'aria(les de tipo cadena pueden ocupar la &ia longitud de!inida" s un octeto %ue
contiene la longitud actual de la 'aria(le. Los caracteres %ue !oran la cadena son
nuerados desde 8 /asta la longitud de la cadena.
E1emplo:
Var
nombre : strinZ)'[&
bein
nombre :$ *Tusana*&
end(
O(s0r'ese %ue el prier (#te no es el carcter J<J si no el n+ero < en (inario 4LLLL L88L5
# los +ltios (#tes de la cadena /asta 8L 4O18L5 contienen datos aleatorios.
Una cadena en Tur(o Pascal tiene dos longitudes )
/$ Longitud fsica : Es la cantidad de eoria %ue ocupa realente" est se esta(lece
en tiepo de copilacin # nunca ca(ia
0$ Longitud lgica ) Es el n+ero de caracteres alacenados actualente en la 'ari(le
cadena. Este dato puede ca(iar durante la e,ecucin del prograa.
Es posi(le acceder a posiciones indi'iduales dentro de una 'aria(le cadena" ediante la
utilizacin de corc/etes %ue dentro de ellos se especi!$ca el n+ero indice dentro de la
cadena a utilizar as$ para el e,eplo anterior se tiene )
nombreZ)[ $$5 *T*
nombreZ2[ $$5 *u*
nombreZC[ $$5 *s*
nombreZF[ $$5 *a*
nombreZ%[ $$5 *n*
nombreZH[ $$5 *a*
Operaciones entre cadenas
Las operaciones (sicas entre cadenas son ) asignacin' comparacin y concatenacin. Es
posi(le asignar una cadena a otra cadena" incluso aun%ue sea de longitud !$sica s
pe%ueTa en cu#o caso ocurrir$a un truncaiento de la cadena.
E1emplo:
Var
nombre : TtrinZ2)[&
(
(
(
nombre :$ *1nstituto +ecnol4ico de 2a Aa-*&
El resultado de la asignacin en la 'aria(le no(re ser la cadena
J*nstituto TecnolgicoJ.
Las coparaciones de las cadenas de caracteres se /acen seg+n el orden de los caracteres
en el cdigo ASC** # con los operadores de relacin.
*'* @ *)* *2* 5 *)* *?* @ */* *m* 5 *l*
7eglas de coparacin de cadenas
Las dos cadenas se coparan de iz%uierda a derec/a /asta %ue se encuentran dos caracteres
di!erentes. El orden de las dos cadenas es el %ue corresponde al orden de los dos caracteres
di!erentes. Si las dos cadenas son iguales pero una de ella es s corta %ue la otra" entonces
la s corta es enor %ue la s larga.
E,eplo )
*?lex* 5 *?las*
M!uesto que *e* 5 *a*N
*?D?N* @ *adan*
M!uesto que *?* @ *a*N
*Damian* @ *Damiana*
M*Damian* tiene menos caracteres que *Damiana*N
*El ato* @ *2os atos*
M!uesto que :blanco< @ *s*N
Otra operacin (sica es la concatenacin. La concatenacin es un proceso de co(inar
dos o s cadenas en una sola cadena. El signo S se puede usar para concatenar cadenas
4 al igual %ue la !uncin concat 5" de(iendo cuidarse %ue la longitud del resultado no sea
a#or %ue :>>.
E1emplos :
*1NT+1+U+. *K*+ECN.2.71C.*$*1NT+1+U+. +ECN.2.71C.*
*C.N+?/*K*(*K*A?T*$ *C.N+?/(A?T*
Se puede asignar el 'alor de una e&presin de cadena a una 'aria(le cadena" por e,eplo )
;ec8a :$ *lunes*&
# utilizar la 'aria(le !ec/a en )
;rase:$*El !r4ximo *K;ec8aK* inician las clases*&
Si la longitud &ia de una cadena es e&cedida" se pierden los caracteres so(rantes a la
derec/a. Por e,eplo" si !ec/a /u(iera sido declarada del tipo stringYOZ" despu0s de la
asignacin contendr$a los siete prieros caracteres de la iz%uierda 4CENTENA5.
()O*E+I,IE-TOS . FU-*IO-ES +E */+E-/ I-TE)-OS
Tur(o Pascal incorpora las siguientes !unciones # procediientos para el trataiento de
cadenas.
rocedimientos ( funciones de cadena
Procedimiento #uncin
Delete Concat
*nsert Cop#
Str Lengt/
?al Pos

Procediiento Delete
Delete (orra o eliina una su(cadena de una cadena contenida en otra cadena de a#or
longitud$
#ormato :
&elete ?s) posicin) n*mero@
S Cadena oriinal o ;uente
Posicin Ex!resi4n entera que indica la !osici4n
del !rimer carcter a su!rimir(
Nmero Cantidad de caracteres a su!rimir(
Si posicin es a#or %ue la longitud de la cadena" no se (orra ning+n carcter. Si n+ero
especi!$ca s caracteres %ue los e&istentes desde la posicin inicial /asta el !inal de la
cadena" slo se (orran tantos caracteres coo est0n en la cadena.
E1emplo :
Cad :$ *+ecnol4ico*
Delete:cadB)B%<
0esulta la cadena *l4ico*

Procemiento Insert
*nsert inserta una su(cadena en una cadena.
#ormato :
Insert ?cad+) s) posicin@
cad1 cadena a insertar
s cadena donde se inserta
posicin carcter a !artir del cual se inserta
E1emplo:
cad:- 345.ico 3
$nsert (3 lindo / 6uerido32cad27)
Resulta 345.ico lindo / 6uerido3
Procedimiento Str
Este procediiento e!ect+a la con'ersin de un 'alor n+erico en una cadena.
#ormato :
Str ?valor)s@
Valor ex!resPon nXmerica
s cadena
E1emplos :
Numero :$ 2C%(%%&
Ttr:NumeroBcadena<&
Qrite:cadena<&
0esulta la cadena *2(C%%''''''EK'2*
Numero :$ )2CF%&
Ttr:NumeroBcadena<&
Qrite:cadena<&
0esulta la cadena *)2CF%*
Numero :$ )2CF%&
Ttr:NumeroK)''':)'Bcadena<&
Qrite:cadena<&
0esulta la cadena * )CCF%*
Procedimiento "al
Este procediiento con'ierte una cadena en 'aria(le n+erica. Para %ue esta con'ersin
sea e!ecti'a" el contenido de la cadena de caracteres de(e corresponderse a las reglas de
escritura de n+eros) no de(e de e&istir ning+n (lanco en la priera o +ltia posicin.
#ormato:
"al ?") variable) cdigo@
S cadena
Variable variable de ti!o entero o real
cdigo si la conversi4n 8a !odido ser
e;ectuada toma el valor cero& en
caso contrario contiene la !rimera
!osici4n del !rimer carcter de la
cadena T que im!ide la conversi4n
> en ese caso variable no queda de;inida
E1emplo:
Var
cad : strinZ)'[&
num)Bcodio : inteer&
num2 : real&
bein
cad:$*22(2%*&
Val:cadBnum2Bcodio<&
i; codio$' t8en
Qrite2n:num2:2:2<
MAroduce 22(2%N
else
Qrite2n:codio<&
cad:$*)2xF%*&
Val:cadBnum)Bcodio<&
i; codio$' t8en
Qrite2n:num)<
else
Qrite2n:codio<
MAroduce CN
end(
#uncin Concat
Ades del uso de JSJ para la concatenacin" Tur(o Pascal tiene la !uncin concat %ue
perite concatenar una secuencia de caracteres.
#ormato:
Concat ?"+)",)...)"n@
T)BT2(((cadenas o variables de
caracteres :ex!resi4n ti!o cadena<
E1emplo :
Var
cad)Bcad2 : strinZ2'[&
destino : strinZ%'[&
bein
cad):$*Sola como *&
cad2:$*Estas *&
destino:$Concat:cad)Bcad2B*B esto> bien*<
end(

Esto produce una cadena destino igual a JFola coo estas" esto# (ienJ

3uncin Cop#
Esta !uncin de'uel'e una cadena de caracteres 4su(cadena5 e&tra$da de una cadena.
3orato)
Cop#4s'posicin'n#mero5
s cadena :;uente<
posicin !rimer carcter a extraer :ti!o entero<
nmero total de caracteres a extraer :ti!o entero<
Si posicin es a#or %ue la longitud de S" se de'uel'e una cadena 'ac$a6 si n+ero
especi!$ca s caracteres %ue los indicados desde posicin" slo se de'uel'e el resto de la
cadena.
E1emplo:
cad :$ *1nstituto +ecnol4ico de 2a Aa-*&
cad2 :$ Co!>:cadB2HBH<&
Qrite:cad2<&
Lo %ue produce la cadena JLa PazJ contenida en cad:.
#uncin LengAt ?longitud@
La !uncin Leng/t proporciona la longitud lgica de una cadena de caracteres # de'uel'e
un 'alor entero.
#ormato :
LengtA ?s@
s ex!resi4n ti!o cadena
E1emplo :
Var
cad : strinZ2'[&
bein
cad:$*Sola*&
Qrite2n:2ent8 :*Sola como estas*<<&
Mdevuelve el valor )%N
Qrite2n:2ent8 :**<<&
Mdevuelve cero :cadena vacPa<N
Qrite2n:2ent8 :cad<<&
Mdevuelve el valor FN
Qrite2n:.rd:cadZ'[<<
Mdevuelve el valor FN
end(
#uncin Pos
Esta !uncin perite deterinar si una cadena est contenida en otra. En este caso" la
!uncin de'uel'e la posicin donde coienza la cadena (uscada en la cadena !uente" si la
cadena no e&iste" se de'uel'e el resultado L.
#ormato :
Pos ?cadena buscada) cadena fuente@
E1emplo:
cad:$ *uno dos tres cuatro cinco seis*&
Qrite2n:Aos:*dos*Bcad<<&
M0esulta % que es la !osici4n de *d*N
Qrite2n:Aos:*oc8o*Bcad<<&
M0esulta ' no existe la cadena *oc8o*N
Arreglos 4arra#5
Un arreglo est !orado por un n+ero !i,o de eleentos cont$guos de un iso tipo. Al
tipo se le llaa tipo base del arreglo. Los datos indi'iduales se llaan elementos del
arreglo.
Para de!inir un tipo estructurado arreglo" se de(e especi!icar el tipo (ase # el n+ero de
eleentos.
Un arra# se caracter$za por)
8. Alacenar los eleentos del arra# en posiciones de eoria cont$nua.
:. Tener un +nico no(re de 'aria(le %ue representa a todos los eleentos" # 0stos a
su 'ez se di!erenc$an por un $ndice o su($ndice.
;. Acceso directo o aleatorio a los eleentos indi'iduales del arra#.
Los arra#s se clasi!ican en)
Unidiensionales 4'ectores o listas5
Multidiensionales 4 ta(las o atrices5

El !orato para de!inir un tipo arra# es)
nombre+array W arra# Ytipo subndiceZ o! tipo
nombre_arra> identi;icador vlido
ti!o subPndice !uede ser de ti!o ordinal:
boolean o c8arB un ti!o
enumerado o un ti!o subrano(
Existe un elemento !or cada
valor del ti!o subPndice
ti!o describe el ti!o de cada elemento
del vector& todos los elementos
de un vector son del mismo ti!o
Las 'aria(les de tipo arra# se declaran en la seccin ?ar o T#pe.
Declaracin en ?ar)
Var
nombres : arra>Z)((C'[ o; strinZC'[&
cali; : arra>Z)((C'[ o; real&
numero : arra>Z'(()''[ o; )(()''&
Declaracin en T#pe)
T#pe
nombres : arra>Z)((C'[ o; strinZC'[&
cali; : arra>Z)((C'[ o; real&
numero : arra>Z'(()''[ o; )(()''&
Var
nom : nombres&
cali;ica : cali;&
num : numero&
/rra#s unidimensionales
Un arra# de una diensin 4'ector o lista5 es un tipo de datos estructurado copuesto de un
n+ero de eleentos !initos" taaTo !i,o # eleentos /oog0neos.
Supongaos %ue desea conser'ar las edades de 8L personas. Para alacenar estas edades
se necesita reser'ar 8L posiciones de eoria" darle un no(re al arra#" # a cada persona
asignarle su edad correspondiente.
Nombre del vector edades
TubPndice Z)[BZ2[B(((
Contenido edadesZ2[$ 2J
E1emplo:
Aroram Vector_edades&
MEl siuiente !rorama ca!tura 2' edades
> las muestra en ;orma ascendente !or medio
de arra>sN
Uses Qincrt&
Const
MaxAersonas $ )'&
Var
edades : arra> Z)((MaxAersonas[ o; b>te&
iB"B!aso : b>te&
bein
ClrTcr&
Mlectura de arra>N
;or i:$) to MaxAersonas do
bein
otox>:)'B%<&
ClrEol&
Qrite:*Edad de la *BiB* !ersona : *<&
0ead2n:edadesZi[<
end&
Mordenaci4nN
;or i:$) to MaxAersonasE) do
bein
;or ":$iK) to MaxAersonas do
bein
i; edadesZi[5edadesZ"[ t8en
bein
!aso :$edadesZi[&
edadesZi[:$edadesZ"[&
edadesZ"[:$!aso
end
end&
Qrite2n:edadesZi[< Mescritura del arra>N
end&
0ead,e>
end(
/rra#s paralelos
Dos o s arra#s %ue utilizan el iso su($ndice para re!erirse a t0rinos /ologos se
llaan arra#s paralelos.
Basados en el prograa anterior se tienen las edades de J&J personas" para sa(er a %ue
persona se re!iere dic/a edad se puede usar otro arreglo en !ora paralela # asociarle los
no(res de anera siultnea con las edades.
E1emplo:
Aroram Aaralelo_edades&
MEl siuiente !rorama ca!tura )' edades
> nombres !or medio de arra>s !aralelos >
los muestra ordenados en ;orma ascendenteN
Uses Qincrt&
Const
MaxAersonas $ )'&
Var
edades :arra> Z)((MaxAersonas[ o; b>te&
nombres :arra> Z)((MaxAersonas[ o; strin Z)'[&
aux_nom :strinZ)'[&
iB"Baux_edad :b>te&
bein
ClrTcr&
Mlectura de arra>s !aralelos de manera simultneaN
;or i:$) to MaxAersonas do
bein
otox>:)'B%<&
ClrEol&
Qrite:iB*(E Nombre : *B*Edad : *<&
otox>:2CB%<&0ead2n:nombresZi[< &
otox>:FJB%<&0ead2n:edadesZi[<
end&
Mordenaci4nN
;or i:$) to MaxAersonasE) do
;or ":$iK) to MaxAersonas do
i; edadesZi[5edadesZ"[ t8en
bein
aux_edad :$edadesZi[&
edadesZi[ :$edadesZ"[&
edadesZ"[ :$aux_edad&
aux_nom :$nombresZi[&
nombresZi[:$nombresZ"[&
nombresZ"[:$aux_nom
end&
ClrTcr&
;or i:$) to MaxAersonas do
Qrite2n:nombresZi[:)'B* *BedadesZi[:C<
Mescritura de los arra>s !aralelosN
0ead,e>
end(
7egistros 4record5
Un registro es una estructura %ue consiste de un n+ero !i,o de coponentes llaados
campos. Los campos pueden ser de di!erentes tipos # de(en tener un identificador de
campo.
La de!inicin de un tipo registro de(e consistir de la pala(ra reser'ada record" seguida de
una lista de capos # terinada por el identi!icador reser'ado end.
%ormato:
1/,e
tipo_reg = record
lista id1:tipo 1;
lista id2:tipo 2;
.
.
.
lista idn:tipo n
end;
tipo_reg no0bre de la estructura o dato reistro
lista id lista de uno o 08s no0bres de ca0,os
se,arados ,or co0as
tipo ,uede ser cual6uier ti,o de dato est8ndar
o definido ,or el usuario
E1emplo :
+>!e
reistro_em!leado $ 0ecord
nombre : strinZC'[ &
!ro;esion : strinZ2'[ &
!uesto : strinZ2'[ &
sueldo : real
end&
Un registro puede representarse gr)%icamente en %uncin de sus campos$
El registro coo un todo tiene el no(re registro9epleado. Este nue'o tipo %ue se aca(a
de de!inir puede utilizarse en la seccin ?ar" para declarar 'aria(les coo por e1emplo:
Var
em!leado : reistro_em!leado &
Para asignar 'alores a cada capo del registro epleado" puede procederse de la siguiente
anera )
.......................
.......................
.......................
em!leado(nombre :$ *MENDEZ 0.ME0. 3EDE01C\*&
em!leado(!ro;esion :$ *1N7EN1E0. C1V12*&
em!leado(!uesto :$ *D10EC+.0*&
em!leado(sueldo :$ %'''('' &
.......................
.......................
.......................
Para sipli!icar la notacin de los registros" se pueden utilizar instrucciones .it/ Do.
Por e,eplo" la instruccin :
Qrite2n:em!leado(nombre:C%B
em!leado(!uesto:2%B
em!leado(sueldo:)%:'<&
puede escri(irse :
Qit8 em!leado Do
Qrite2n:nombre:C%B!uesto:2%Bsueldo:)%:'<&
Asiiso" para leer datos usaos )
Qit8 em!leado Do
bein
Qrite:*N.M/0E : *<&
0ead2n:nombre<&
Qrite:*A0.3ET1.N : *<&
0ead2n:!ro;esion<&
Qrite:*AUET+. : *<&
0ead2n:!uesto<&
Qrite:*TUE2D. MENTU?2 : *<&
0ead2n:sueldo<
end&
O(s0r'ese el siguiente segento de prograa )
..............................
..............................
..............................
+>!e
;ec8a $ 0ecord
anio : )I''(()IJI &
mes : )(()2 &
dia : )((C)
end&
datos $ 0ecord
nombre : strinZC'[ &
sueldo : real &
;ec8a_inreso : ;ec8a
end&
Var
!ersonal : datos &
...............................
...............................
...............................
La asignacin del 'alor 8> al capo dia del registro personal se /ace de la siguiente
anera)
!ersonal(;ec8a_inreso(dia :$ )% &
donde )
!ersonal(;ec8a_inreso
/ace re!erencia al capo !ec/a9ingreso del registro personal" ientras %ue )
dia
se re!iere al capo dia del capo !ec/a9ingreso" %ue a su 'ez es un registro de tipo !ec/a.
Usando la !ora .it/ Do %uedar$a :
Qit8 !ersonal Do Qit8 ;ec8a_inreso Do
dia :$ )% &
%ue es e%ui'alente a )
Qit8 !ersonalB ;ec8a_inreso Do
dia :$ )% &
o ta(i0n a)
]it8 !ersonal Do
]it8 ;ec8a_inreso Do
dia:$)%&
E1emplo:
Aroram 0eistro&
ME2 siuiente !rorama ca!tura )' em!leados > sus
datos !ersonales en un arrelo con la utili-aci4n de
reistrosN
Uses Crt&
Const
MaxEm!leados$)'&
+>!e
reistro_em!leado $ 0ecord
nombre : strinZC'[&
!ro;esion : strinZ2'[&
!uesto : strinZ2'[&
sueldo : real
end&
Var
reistro : reistro_em!leado&
em!leado :arra>Z)((MaxEm!leados[ o; reistro_em!leado&
iBcolBren :b>te&
bein
ClrTcr&
Qrite:* Nombre Aro;esi4n Auesto
Tueldo*<&
col:$)&ren:$2&
;or i:$) to MaxEm!leados do
bein
Qit8 reistro do
bein
otox>:colBren<&
0ead2n:em!leadoZi[(nombre<&
otox>:colK2)Bren<&
0ead2n:em!leadoZi[(!ro;esion<&
otox>:colKF'Bren<&
0ead2n:em!leadoZi[(!uesto<&
otox>:colK%IBren<&
0ead2n:em!leadoZi[(sueldo<&
inc:ren<&
col:$)&
end
end&
0eadWe>
end(
Conjuntos (sets)
Un con,unto es una coleccin de o(,etos relacionados. Cada o(,eto en un con,unto es
llaado miembro o elemento del con,unto.
Aun%ue en ateticas no /a# restricciones para %ue los o(,etos puedan ser eleentos de
un con,unto" Pascal slo o!rece una !ora restringida de con,untos" por lo %ue )
8. Los eleentos de un con,unto de(en ser del iso tipo" llaado el tipo base.
:. El tipo base de(e ser un tipo siple" e&cepto el tipo real.
.epresentacin de con1untos:
Elementos *otacin Batem)tica Pascal
/+0+9+:+3 {/+0+9+:+3} =/+0+9+:+3>
a+b+c {a+b+c} =CaC+CbC+CcC>
Aun%ue se puede utilizar notacin de tipo su(rango para especi!icar secuencia de 'alores
%ue pertenezcan a un con,unto" los eleentos del con,unto no tienen una ordenacin interna
particular. La +nica relacin entre los ie(ros de un con,unto es) e&iste o no e&iste en el
con,unto.
Y>">Z # Y>Z son e%ui'alentes 4contienen un slo eleento5
E1emplos de con1untos:
=/+9+3> con1unto de tres enteros
=/$$9+D$$/4> con1unto de seis enteros =/+0+9+D+E+/4>
= > con1unto ,acFo ?ningGn elemento@
=CaC+CbC+CAC$$C&C> con1unto de seis elementos =CaC+CbC+CAC+CHC+CCC+C&C>
Un con,unto especial" denoinado con,unto 'ac$o" es a%uel %ue no contiene ning+n
eleento.
El !orato para la de!inicin de un tipo con,unto es )
t/,e
<identificador> - set of <ti,o_base>
E1emplos :
+>!e
dias_mes $ set o; '((C)&
ma>usculas $ set o; *?*((*Z*&
caracteres $ set o; c8ar&
equi!os $ :C8ivasBTantosBAumasB
+olucaB+iresB?mericaB
2eon<&
;utbol $ set o; equi!os&
Var
7ru!o?B7ru!o/ : ;utbol&
En Pascal" el &io n+ero de eleentos peritidos en un con,unto es :><" # los 'alores
ordinales del tipo (ase de(en estar en el rango de L a :>> .
/si%nacin en con"untos
Los eleentos se ponen en los con,untos utilizando una sentencia de asignacin.
7ru!o? :$ ZC8ivasBTantosB+oluca[&
7ru!o/ :$ Z+ires((2eon[&
Si dos tipos de con,untos son copati(les 4tienen los tipos de (ase copati(les) igual tipo
de dato" o uno su(rango de otro" o a(os del iso tipo patrn5" sus 'aria(les
representati'as se pueden utilizar en sentencias de asignacin.
7ru!o? :$ 7ru!o/&
7ru!o/ :$ Z[&Masinaci4n del con"unto vacPoN

0a relacin In
El operador relacional *n # una e&presin relacional nos perite conocer si un eleento
dado pertenece a un con,unto dado.
#ormato:
elemento in = lista de elementos >
El resultado de e'aluar la e&presin relacional puede ser true o !alse. El tipo de datos de
eleento # la lista de eleentos de(en ser copati(les.
E1emplo:
Aroram Sasta_Ti&
MEl siuiente !rorama obtiene del teclado un nombre
8asta que se !resiona la tecla *s* o *T* o EscN
Uses Crt&
Const
Esc $92D&
Var
nombre : strinZC'[&
tecla : c8ar&
bein
0e!eat
ClrTcr&
Qrite:*Escribe tu nombre : *<&
0ead2n:nombre<&
Qrite:*Desea Talir TGN ^ : *<&
+ecla:$0ead,e>
Until tecla inZ*s*B*T*BEsc[&
ClrTcr
end(
Operaciones con con"untos
Una 'ez creados los con,untos # las 'aria(les tipo con,unto es posi(le realizar tres
operaciones (inarias so(re ellos) unin" interseccin # di!erencia. La siguiente ta(la resue
el !uncionaiento de las operaciones con con,untos A # B.
'peraciones sobre dos con1untos A ! H
'peracin
*otacin
Pascal
Con1unto resultante
Unin I
AIH es el con1unto ue contiene todos los elementos ue est)n
en A+ en H o en ambos$
Interseccin
J
AJH es el con1unto cu!os elementos pertenecen a A ! H
simult)neamente$
&i%erencia
7
A7H es el con1unto cu!os elementos son de A pero no de H$
E1emplo:
'peracin .esultado
=/+9+:+3>I=/+0+:> =/+0+9+:+3>
=/+9+:+3>J=/+0+:> =/+:>
=/+9+:+3>7=/+0+:> =9+3>
=/+0+9>I= > =/+0+9>
=/+0+:>J=9+3+6> = >
=/+0+9>7= > = >
.eglas de prioridad
Cuando una e&presin de con,untos contiene dos o s operadores de con,unto" 0stos se
e'al+an de acuerdo a la siguiente prioridad)
J Prioridad m)s alta
I+7 Prioridad m)s ba1a
En caso de operaciones con igual prioridad se e'al+an de iz%uierda a derec/a.

*omparacin de con"untos 1operadores de relacin2
Los con,untos se pueden coparar entre s$ ediante el uso de los operadores relacionales
4WW"UX"UW"XW5. Los operandos de(en ser del iso tipo (ase. El resultado de la
coparacin es un 'alor lgico) true o !alse.
'peradores de relacin de con1untos A ! H
'perador
*ombre del
operador
.esultado
; 2 Subcon1unto
El ,alor de A; 2 H es true$ Si cada elemento de A es
tambi(n de H$ En caso contrario es %alse$
2 Igualdad
El ,alor de A 2 H es true si cada elemento de A est) en H !
cada elemento de H est) en A$ En caso contrario A 2 H es
%also+ A2H eui,ale a ?A;2H@ and ?H;2A@$
; < &esigualdad
El ,alor de A ; < H es true si el ,alor de A 2 H es %alse !
,ice,ersa$
< 2 Supercon1unto
A ; < H eui,ale a not ?A 2 H@+ A <2 H es true si H;2A es
true$

E1emplos :
Comparacin .esultado
=9+3> 2 =9+3> true
= > 2 =/> %alse
= > ;2 =/+3> true
=/+0> <2 =/+0+9+:> %alse
= > <2 =/+0> %alse
=/+:+3> 2 =:+3+/> true
Prioridad de operadores :
'perador Prioridad
*ot / ?m)s alta@
J+K+di,+mod+and 0
I+7+or 9
2+;<+;+;2+<+<2+in : ?m)s ba1a@

0ectura de con"untos
Algunas operaciones no se pueden e,ecutar so(re 'aria(les de con,unto. Por e,eplo" no se
puede leer cinco ciudades en un conjunto ,undo con la siguiente sentencia:
ReadLn(4undo)
La razn es %ue la coputadora no puede sa(er cuantos eleentos e&isten en el con,unto.
Si se desea leer # alacenar datos en un con,unto se de(e utilizar un (ucle.
for ele0ento:-1 to 9 do
bein
"leer un dato*
"al0acenar el valor en el
siuiente ele0ento del con:unto*
end;

.eglas :
8. InicialiLar A al con1unto ,acFo$
A :2 = >;
:. Leer cada elemento - del con1unto ! aMadirlo al con1unto A con la operacin
unin ?I@
.eadLn?-@;
A :2 A I =->;

Escritura de conjuntos
Los 'alores de con,untos no se pueden 'isualizar con la sentencia .rite.
Para 'isualizar los eleentos de un con,unto A se de(e utilizar el siguiente algorito)
/$ Copiar los eleentos de A en un con,unto au&iliar Au& %ue tenga un tipo (ase
copati(le con el de A.
0$ Declarar & una 'aria(le del tipo (ase de Au& e inicializar & al prier eleento de
est0 tipo (ase.
9$ Mientras & es di!erente del +ltio eleento de est0 tipo (ase # Au& no est 'ac$a"
/acer)
*. Si & pertenece a Au&" entonces 'isualizar & # eliinarlo de Au&
**. Sustituir & con su sucesor.
E1emplo:
Aroram 1m!ares&
MEl siuiente !rorama encuentra > muestra todos los
nXmeros im!ares menores o iual a un nXmero dado n
que estO entre el lPmite )((2%%N
Uses Crt&
+>!e
numeros $ set o; )((2%%&
Var
im!aresB?ux :numeros&
xBMaxNumBi :b>te&
bein
ClrTcr&
Qrite:*Escribe un nXmero entero : *<&
0ead2n:MaxNum<&
im!ares:$Z[& Miniciali-a a con"unto vacPoN
;or i:$) to MaxNum do
bein
i; odd:i< t8en
im!ares:$im!ares K Zi[
Ma_adir elementos al con"untoN
end&
Mvisuali-ar elementos del con"untoN
?ux:$im!ares&
x:$)&
]8ile :x@5MaxNumK)< and :?ux@5Z[< do
bein
i; x in ?ux t8en
bein
Qrite2n:x<&
?ux:$?uxEZx[
end&
x:$succ:x<
end&
0eadWe>&
ClrTcr
end(
Archivos (file)
Un tipo arc/i'o se de!ine con los identi!icadores reser'ados 3*LE O3" seguidas por el tipo
de los coponentes del arc/i'o.
Por e1emplo :
+>!e
em!leado $ ;ile o; 0ecord
nombre:strinZC'[&
sueldo:real&
end&
Var
nomina : em!leado &
tambi(n puede escribirse asF :
+>!e
em!leado $ 0ecord
nombre:strin ZC'[&
sueldo:real&
end&
Var
nomina : ;ile o; em!leado&
*'TA: as adelante se 'er con s detalle este tea.
Subprogamas
Un prograa en Pascal consiste de uno o s dulos" los cuales a su 'ez ta(i0n pueden
estar constitu$dos por otros dulos" # as$ sucesi'aente. Estos dulos sern llaados"
en t0rinos generales" SUHP.'N.ABAS" # en particular P.'CE&IBIE*T'S #
#U*CI'*ES.
Un su(prograa es un (lo%ue de prograa %ue realiza una tarea deterinada" # %ue al
llarsele o in'ocrsele puede necesitar %ue se le pasen PA.ABET.'S.
Los paretros son identi!icadores %ue pro'een un ecaniso para pasar in!oracin
/acia los su(prograas in'ocados.
Los paretros %ue se utilizan en la declaracin de su(prograas se llaan
PA.ABET.'S #'.BALES.
Un su(prograa puede ser in'ocado desde cual%uier punto del prograa" por edio de una
instruccin I*"'CA&'.A" la cual puede contener una lista de paretros llaados
PA.ABET.'S ACTUALES.
Procedimientos
Un procediiento es un su(prograa %ue realiza alguna de las tareas del prograa" # %ue
no de'uel'e ning+n 'alor al su(prograa %ue lo in'oc.
Un procediiento est copuesto de un grupo de sentencias a las %ue se asigna un no(re
4identificador5 # constitu#e una unidad del prograa. La tarea asignada al procediiento se
e,ecuta siepre %ue Pascal encuentra el no(re del procediiento.
En Tur(o Pascal resulta o(ligatorio declarar los procediientos antes de ser re!erenciados
en el cuerpo del prograa.
Declaracin de un procediiento
La sinta&is para declarar un procedimiento es :
-ormato . :
,rocedure nombre_procedimiento;
declaraciones locales
bein
cuerpo del procedimiento
end;
3orato :)
,rocedure nombre_procedimiento(parmetros formales);
declaraciones locales
bein
cuerpo del procedimiento
end;
La e&istencia de paretros9!orales depender de la naturaleza del procediiento" esto
es" de la tarea %ue 'a a realizar # de la !ora en %ue lo /a estructurado su creador.
*n'ocacin al procediiento
Para invocar a un procediiento" la sinta&is es )
;nombre'de'procedimiento< ?par-metros'actuales@ ;
donde la e&istencia de parmetros+actuales depender de %ue en la declaracin del
procediiento se /a#an utilizado paretros !orales.
Para e,epli!icar el uso de procediientos" diseTareos un prograa %ue resuel'a el
pro(lea de SUMA7 C MULT*PL*CA7 MAT7*CES.
PSEU&'C'&IN'
MA0.70?M? A?0? TUM?0 Y MU2+1A21C?0 M?+01CETN
1N1C1.
1MA01ME encabe-ado(
2EE las dimensiones de las matrices ? > /(
T1 las matrices no son com!atibles !ara la sumaB
EN+.NCET
1MA01ME mensa"e_)(
T1 las matrices no son com!atibles !ara la mult(B
EN+.NCET
1MA01ME mensa"e_2(
T1 son com!atibles !ara la suma o !ara la mult( B
EN+.NCET
1N1C1.
2EE las matrices ? > /(
1MA01ME las matrices ? > /(
T1 son com!atibles !ara la sumaB EN+.NCET
1N1C1.
TUM? las matrices ? > /(
1MA01ME la matri- resultado C(
31N
T1 son com!atibles !ara la multi!licacionB EN+.NCET
1N1C1.
MU2+1A21C? las matrices ? > /(
1MA01ME la matri- resultado D(
31N
31N
31N(
C'&I#ICACI'* :
Aroram .!era_matrices&
MArorama !ara sumar > multi!licar matrices de orden
8asta de dim_max !or dim_max N
Uses Qincrt&
Const
dim_max $ )'&
+>!e
mat $ arra> Z)((dim_max B )((dim_max[ o; real&
Var
mat_aBmat_bBmat_c : mat&
bandera_sumaBbandera_mult:boolean&
ren_aBren_bBcol_aBcol_b :inteer&
!rocedure inicio&
Var
contador : inteer&
bein
ClrTcr&
otox>:2CB2<&
Qrite2n:*TUM? Y MU2+1A21C?C1.N DE M?+01CET*<&
;or contador :$ ) to J' do
Qrite:*$*<&
Qrite2n
end&
M2ee las dimensiones de las matricesN
!rocedure dim &
bein
Qrite2n:*D1MENT1.NET DE 2? M?+01Z ?*<&
Qrite2n&
Qrite:*NXmero de renlones $$5 *<&
0ead2n:ren_a<&
Qrite:*Numero de columnas $$5 *<&
0ead2n:col_a<&
Qrite2n&
Qrite2n&
Qrite2n:*D1MENT1.NET DE 2? M?+01Z /*<&
Qrite2n&
Qrite:*NXmero de renlones $$5 *<&
0ead2n:ren_b<&
Qrite:*NXmero de columnas $$5 *<&
0ead2n:col_b<
end&
MVeri;ica la com!atibilidad !ara la sumaN
!rocedure com!at_suma :ren_;_aBren_;_bBcol_;_aBcol_;_b:inteer&
Var bandera_;:boolean<&
bein
i; ::ren_;_a @5 ren_;_b< or :col_;_a @5 col_;_b<< t8en
bein
Qrite2n&
Qrite2n:*2as matrices ? > / son incom!atibles !ara la suma*<&
bandera_; :$;alse
end
else
bandera_; :$true
end&
MVeri;ica la com!atibilidad !ara la multi!licaci4nN
!rocedure com!at_mult:ren_;_aBren_;_bBcol_;_aBcol_;_b:inteer&
Var bandera_;:boolean<&
bein
i; col_;_a @5 ren_;_b t8en
bein
Qrite2n&
Qrite2n:*2as matrices ? > / son icom!atibles !ara la
multi!licaci4n*<&
bandera_; :$ ;alse
end
else
bandera_; :$ true
end&
M2ee una matri-N
!rocedure lee:nmat:c8ar&Var mat_;:mat&ren_maxBcol_max:inteer<&
Var
renBcol : inteer&
bein
Qrite2n&
Qrite2n:*E2EMEN+.T DE 2? M?+01Z : *Bnmat<&
Qrite2n&
;or ren :$ ) to ren_max do
;or col :$ ) to col_max do
bein
Qrite:*Elemento Z *BrenB*B*BcolB*[ $ *<&
0ead2n:mat_;ZrenBcol[<
end
end&
MTuma dos matricesN
!rocedure suma: mat_;_aBmat_;_b:mat&Var mat_;_c:mat&
ren_;B col_; :inteer<&
Var
renBcol : inteer&
bein
Qrite2n&
Qrite2n:*2a suma de ? > / es :*<&
;or ren :$ ) to ren_; do
;or col :$ ) to col_; do
mat_;_cZrenBcol[ :$ mat_;_aZrenBcol[ K mat_;_bZrenBcol[
end&
MMulti!lica dos matricesN
!rocedure multi!lica: mat_;_aB mat_;_b: mat &Var mat_;_c : mat &
ren_;_aB col_;_aB col_;_b :inteer<&
Var
renB acolB bcol : inteer &
acum : real &
bein
Qrite2n&
Qrite2n:*El !roducto de ? > / es :*<&
;or ren :$ ) to ren_;_a do
;or bcol :$ ) to col_;_b do
bein
acum :$ '(' &
;or acol :$ ) to col_;_a do
acum :$ acum K mat_;_aZrenBacol[ L mat_;_bZacolBbcol[&
mat_;_cZrenBbcol[ :$ acum
end
end&
M1m!rime una matri-N
!rocedure im!rime:nmat : c8ar & mat_; : mat &
ren_;B col_; : inteer< &
Var
renB col : inteer&
bein
Qrite2n&
Qrite2n:*M?+01Z *Bnmat<&
;or ren :$ ) to ren_; do
;or col :$ ) to col_; do
bein
Qrite:mat_;ZrenBcol[:H:)B* *<&
Qrite2n
end&
Qrite2n&
Qrite:*.!rima una tecla !ara continuar((((( *<&
0eadWe>&
Qrite2n
end&
MM4dulo Arinci!alN
bein
inicio&
dim&
com!at_suma:ren_aBren_bBcol_aBcol_bBbandera_suma<&
com!at_mult:ren_aBren_bBcol_aBcol_bBbandera_mult<&
i; bandera_suma or bandera_mult t8en
bein
lee:*?*Bmat_aBren_aBcol_a<&
lee:*/*Bmat_bBren_bBcol_b<&
im!rime:*?*Bmat_aBren_aBcol_a<&
im!rime:*/*Bmat_bBren_bBcol_b<&
i; bandera_suma t8en
bein
suma:mat_aBmat_bBmat_cBren_aBcol_a<&
im!rime:*C*Bmat_cBren_aBcol_b<
end&
i; bandera_mult t8en
bein
multi!lica:mat_aBmat_bBmat_cBren_aBcol_aBcol_b<&
im!rime:*D*B mat_cB ren_aB col_b<
end
end
end(
O(ser'e %ue el BO&UL' P.I*CIPAL est !orado por un (lo%ue de instrucciones %ue
in'ocan a procediientos.
#unciones
La di!erencia principal entre un procediiento # una !uncin es %ue el identi!icador de la
!uncin asue un 'alor" # cuando la !uncin terina su tarea" de'uel'e ese 'alor al dulo
%ue la in'oc6 ientras %ue el procediiento no de'uel'e ning+n 'alor.
Puesto %ue el no(re de la !uncin toa un 'alor" dic/o no(re de(e tener asociado un
tipo de dato.
&eclaracin de %unciones
La declaracin de una !uncin tiene la siguiente !ora )
function Nombre (p1,p2,...):tipo
"declaraciones locales / sub,rora0as*
bein
cuerpo de la funci!n"
Nombre := #alor de la funci!n
end;
,12,22... lista de ,ar80etros for0ales
ti,o ti,o de dato del resultado
6ue devuelve la funcin
E1emplos :
;unction veri;ica : boolean &
M 3unci4n sin !armetros ;ormalesN
;unction cambia:Var valor_)B valor_2: real<:real&
;unction !otencia: baseB ex!onente : real <:real&
In,ocacin de %unciones
Las !unciones se in'ocan de la siguiente anera )
.nombre'funcin/ ?par-metros'locales0 1

donde )
paretros9locales es una lista de 'aria(les #2o constantes separadas por coas. La
e&istencia de paretros9locales depender de %ue e&istan parmetros formales en la
declaracin de la !uncin.
Por e,eplo" resol'aos el pro(lea de cacular la ra$z cuadrada de un n+ero" utilizando
el algorito de NeRton)
&4iS85 W &4i5 S L.> 4 a2&4i5 1&4i5 5
La codi!icacin del prograa ser$a )
Aroram 0ai-_cuadrada&
MEl siuiente !rorama calcula la raP-
cuadrada de un nXmeroN
Uses Qincrt&
Var
rai-B numero : real&
MDeclaraci4n de la ;unci4n rai-_cuadN
;unction rai-_cuad: a : real < : real &
Var
cBx : real &
bein
x :$ )EEI &
c :$ )(' &
]8ile ?bs :cEx<5)EEI do
bein
c :$ x &
x :$ x K '(% L : aGx Ex <
end&
rai-_cuad :$ x
MEl resultado se asina a nombre_;unci4nN
end&
bein
ClrTcr&
Qrite:*2a raP- cuadrada de : *<&
0ead2n:numero< &
rai-:$rai-_cuad:numero<&
M1nvoca a la ;unci4n rai-_cuadN
Qrite2n &
Qrite2n:*Es iual a : *Brai-:H:J<&
0eadWe>&
ClrTcr
end(
Ambito de ,ariables
Las 'aria(les se clasi!ican en LOCALES # DLOBALES. Una 'aria(le LOCAL es una
'aria(le declarada dentro de un su(prograa" # el signi!icado de dic/a 'aria(le se liita a
ese su(prograa # a los dulos %ue 0ste contiene. Cuando otro su(prograa utiliza el
iso no(re de 'aria(le" se crea una 'aria(le di!erente en otra posicin de la eoria.
Por eso" si un su(prograa asigna un 'alor a una de las 'aria(les locales" tal 'alor no es
accesi(le a los otros su(prograas.
Cuando se desea %ue otros su(prograas tengan acceso al 'alor de una 'aria(le" 0sta de(e
declararse coo DLOBAL" lo cual se logra declarndola en el dulo %ue a(arca a dic/os
su(prograas.
Para tener la seguridad de %ue una 'aria(le 'a a tener un alcance DLOBAL" con'iene
declararla en el MODULO P7*NC*PAL.
Los conceptos anteriores se aclaran por edio de la siguiente !igura)
;rora0 anidado;
.e%erencias de identi%icadores ,)lidos :
Hloue Identi%icador Signi%icado de cada identi%icador
anidado B constante global
i++1 ,aribles globales
A procedimiento declarado en anidado
A i par)metros de A
r+s ,ariables locales
H %uncin local
1 ,ariable declarada en anidado
H %uncin declarado en anidado
B constante global
H g par)metros de H
m+n ,ariables locales
r+s ,ariable declarada en A
i par)metro de A
! ,ariable declarada en anidado
A procedimiento declarado en anidado
H %uncin declarada en anidado
B constante global
Paso de par)metros
Al in'ocar a un su(prograa se le pueden pasar paretros" los cuales pueden consistir de
'alores de 'aria(les declaradas en el dulo in'ocador. El paso de tales paretros puede
/acerse de dos aneras)
Por 'alor
Por re!erencia
Paso por ,alor
El paso de paretros por 'alor consiste en en'iar una COP*A del 'alor de la 'aria(le al
dulo in'ocado.
De esta anera se asegura %ue el 'alor de la 'aria(le slo puede ser odi!icado por el
dulo %ue la declar.
Si la pala(ra ?ar no aparece delante del parmetro formal en un procediiento" Tur(o
Pascal supone %ue el paretro !oral es un parmetro por valor.
E1emplo:
Aroram Tuma_!or_Valor&
MEl siuiente !rorama reali-a la suma
de dos numeros N
Uses QinCrt&
Var
?B/BC:inteer&
!rocedure suma:?B/BC :inteer<&
bein
C :$ ? K /
end&
bein
ClrTcr&
C:$)'&
?:$)'&
/:$)'&
suma:?B/BC<&
Qrite2n:?B*B*B/B*B*BC<&
0eadWe>&
ClrTcr
end(
El resultado de la e,ecucin del prograa ser$a )
8L"8L"8L
El 'alor de C no se odi!ica puesto %ue es un paretro por 'alor.
Paso por re%erencia
En el caso de %ue se re%uiera %ue el 'alor de una 'aria(le sea odi!icado por el dulo
in'ocado" de(e /acerse el paso de paretro por re!erencia" por edio del cual el dulo
in'ocado tiene acceso a la direccin en %ue se guarda el 'alor a odi!icar.
Para aclarar los conceptos de paso por valor # paso por referencia" analiceos el prograa
de sua # ultiplicacin de atrices dado en la seccin anterior.
O(ser'aos %ue las in'ocaciones a su(prograas son siilares en los casos de paso por
'alor # paso por re!erencia.
Por e,eplo" las in'ocaciones a los procediientos iprie # sua %uedan de la siguiente
anera )
im!rime:*C*Bmat_cBren_aBcol_b<&
suma:mat_aBmat_bBmat_cBren_aBcol_a<&
# sus respecti'as declaraciones son )
!rocedure im!rime:nmat:c8ar&mat_;:mat&ren_;Bcol_;:inteer<&
!rocedure suma:mat_;_aBmat_;_b:mat&Var mat_;_c:mat&ren_;Bcol_;:inteer<&
?eos %ue en la declaracin del procediiento sua e&iste la parte) ?ar at9!9c ) at
la cual signi!ica lo siguiente )
PLa 'aria(le at9!9c contiene la direccin de la 'aria(le correspondiente en la in'ocacin
4at9c 5 " # es de tipo at P
Esto signi!ica %ue el paso del paretro at9c se /izo por referencia" # %ue el
procediiento in'ocado 4sua5 puede odi!icar el 'alor de at9c .
E,eplo)
Progra Sua9por97e!erencia6
MEl siuiente !rorama reali-a la suma
de dos nXmeros N
Uses Qincrt&
Var
?B/BC:inteer&
!rocedure suma:?B/:inteer&Var C:inteer<&
bein
C :$ ? K /
end&
bein
ClrTcr&
C:$)'&
?:$)'&
/:$)'&
suma:?B/BC<&
Qrite2n:?B*B*B/B*B*BC<&
0eadWe>&
ClrTcr
end(
El resultado de la e,ecucin del prograa ser$a )
8L"8L":L
El 'alor de C se odi!ica puesto %ue es un paretro por re!erencia.
Nota ) En Tur(o Pascal no se perite el paso de procediientos # !unciones coo
paretros
.ecursin
En Pascal" a un procediiento o !uncin le es peritido no slo in'ocar a otro
procediiento o !uncin" sino ta(i0n in'ocarse a s$ iso. Una in'ocacin de 0ste tipo se
dice %ue es recursiva.
La funcin recursiva s utilizada coo e,eplo es la %ue calcula el !actorial de un
n+ero entero no negati'o" partiendo de las siguientes de!iniciones)
;actorial :'< $ )
;actorial :n< $ nL;actorial:nE)<B !ara n5'
La !uncin" escrita en Pascal" %ueda de la siguiente anera )
;unction ;actorial:numero:inteer<:inteer&
bein
i; numero $ ' t8en
;actorial :$ )
else
;actorial :$ numero L ;actorial:numeroE)<
end&
Si nuero W =" la !uncin realiza los siguientes pasos )
8. !actorial4=5 )W = A !actorial4;5 Se in'oca a si isa # crea una segunda 'aria(le
cu#o no(re es nuero # su 'alor es igual a ;.
:. !actorial4;5 )W ; A !actorial4:5 Se in'oca a si isa # crea una tercera 'aria(le cu#o
no(re es nuero # su 'alor es igual a :.
;. !actorial4:5 )W : A !actorial485 Se in'oca a si isa # crea una cuarta 'aria(le cu#o
no(re es nuero # su 'alor es igual a 8.
=. !actorial485 )W 8 A !actorial4L5 Se in'oca a si isa # crea una %uinta 'aria(le cu#o
no(re es nuero # su 'alor es igual a L.
>. Coo !actorial4L5 )W 8" con 0ste 'alor se regresa a copletar la in'ocacin)
!actorial485 )W 8 A 8 " por lo %ue !actorial485 )W 8
<. Con !actorial485 )W 8" se regresa a copletar) !actorial4:5 )W : A 8" por lo %ue
!actorial4:5 )W :
O. Con !actorial4:5 )W :" se regresa a copletar ) !actorial4;5 )W ; A :" por lo %ue
!actorial4;5 )W <
Q. Con !actorial4;5 )W <" se regresa a copletar ) !actorial4=5 )W = A <" por lo %ue
!actorial4=5 )W := # 0ste ser el 'alor %ue la !uncin !actorial de'ol'er al dulo
%ue la /a#a in'ocado con un 'alor de paretro local igual a = .
Un e,eplo de procediiento recursi'o es el siguiente)
Supngase %ue una persona se ete a una piscina cu#a pro!undidad es de > etros. Su
intencin es tocar el !ondo de la piscina # despu0s salir a la super!icie. Tanto en el descenso
coo en el ascenso se le 'a indicando la distancia desde la super!icie 4a cada etro5.
Aroram Aiscina&
Uses Qincrt&
Const
!ro;_max $ %&
Var
!ro;undidad:inteer&
!rocedure -ambullida:Var !ro;un :inteer<&
bein
Qrite2n:*/?Y? ) A0.3UND1D?D $ *B!ro;un<&
!ro;un :$ !ro;un K )&
i; !ro;un @$ !ro;_max t8en
-ambullida:!ro;un<
else
Qrite2n&
!ro;un :$ !ro;un E )&
Qrite2n:*TU/E ) A0.3UND1D?D $ *B !ro;unE)<
end&
bein
ClrTcr&
!ro;undidad :$ )&
-ambullida:!ro;undidad<
end(

Vous aimerez peut-être aussi