Logo Studenta

aac23d4c2381d8a413990731031ba26f

¡Este material tiene más páginas!

Vista previa del material en texto

PROGRAMACION I Lic. Ricardo Monzón 
Página 1 de 1 
 
PASCAL Y TURBO PASCAL 
 
 
PASCAL: Es un lenguaje de Alto Nivel y propósito general desarrollado por el 
prof. suizo Niklaus WIRTH eb 1968. 
 
Características: 
 Excelente herramienta para aprender programacón 
 Es un lenguaje de propósito general 
 Lenguaje procedural (imperativo, orientado a órdenes) 
 Lenguaje estructurado (soporta while, for y repeat. No necesita goto) 
 Lenguaje recursivo 
 Gran riqueza de tipos de datos predefinidos y definidos por el usuario 
 Códigos ejecutables rápidos y eficientes 
 
TURBO PASCAL: Lanzado en 1983 por BORLAND International. 
 
Características adicionales: 
 Entorno integrado de desarrollo 
 Editor de texto 
 Gráficos 
 Gestión de archivos 
 Compilación independiente 
 Gestión de proyectos 
 Enteros de gran presición 
 Programación orientada a objetos 
 Bilioteca de objetos 
 
 
PROGRAMACION I Lic. Ricardo Monzón 
Página 2 de 2 
Estrucutra de un Programa PASCAL 
 
Program identificador ; {cabecera opcional en Turbo Pascal} 
Uses identificadores 
Label lista de etiquetas ; {sección de etiquetas} 
Const 
 definiciones de constantes 
Type 
 declaración de tipos de datos definidos por el usuario 
Var 
 declaración de variables 
Procedure 
 definiciones de procedimientos 
Function 
 definiciones de funciones 
begin {cuerpo del programa} 
 sentencias 
end. 
 
Las cinco secciones de declaración -Label, Const, Type y Procedure y/o Function , así como la cláusula Uses 
y Program, no tiene que estar presentes en todos los programas. Turbo Pascal es muy flexible al momento de 
escribir las secciones de declaración, ya que se pueden hacer en cualquier orden (en Pascal estándar ISO si se 
require este orden). Sin embargo es conveniente seguir el orden establecido, le evitará futuros problemas. 
 
Ejemplo: 
Program MiPrimerPrograma; {cabecera} 
Uses 
 Crt; {declaraciones} 
Const 
 iva =0.10; 
Type 
 cadena =string[35]; 
 meses =1..12; 
Var 
 sueldo :real; 
 numero :integer; 
 nombre :cadena; 
 Nmes :meses; 
begin 
 ClrScr; {Limpia la pantalla} 
 Write ('Escribe tu nombre : '); 
 {Visualiza información en pantalla} 
 ReadLn(nombre);{Leer un dato del teclado} 
 WriteLn ('Bienvenido ', nombre); 
 {Visualiza información en pantalla} 
 Readkey; {Espera la pulsación de una tecla} 
 ClrScr 
end. 
 
Nota: Las declaraciones de constantes, tipos y variables también se pueden poner en los procedimientos y/o 
funciones. 
Todo objeto referenciado en un programa debe haber sido previamente definido. 
 
 
PROGRAMACION I Lic. Ricardo Monzón 
Página 3 de 3 
Ejemplo: 
Program Incorrecto; {cabecera} 
Const 
 pi=3.141592; 
Var 
 Meses:array [1..Max] of string[15]; 
begin 
 ................................... 
end. 
 
El programa anterior es incorrecto ya que hacemos referencia a la constante Max en la declaración de 
variables sin haberla definido en la declaración de constantes. 
 
 
Identificadores 
 
En la mayoría de los programas de computador, es necesario manejar datos de entrada o de salida, los cuales 
necesitan almacenarse en la memoria principal del computador en el tiempo de ejecución. Para poder 
manipular dichos datos, necesitamos tener acceso a las localidades de memoria donde se encuentran 
almacenados; esto se logra por medio de los nombres de los datos o IDENTIFICADORES. 
Los identificadores también se utilizan para los nombres de los programas, los nombres de los 
procedimientos y los nombres de las funciones, así como para las etiquetas, constantes y variables. 
 
Las reglas para formar los identificadores en Pascal son las siguientes : 
 
1. Pueden estar compuestos de caracteres alfabéticos, numéricos y el carácter de subrayado ( _ ). 
2. Deben comenzar con un carácter alfabético o el carácter de subrayado. 
3. Puede ser de cualquier longitud (sólo los 63 primeros caracteres son significativos). 
4. No se hace distinción entre mayúsculas y minúsculas. 
5. No se permite el uso de los IDENTIFICADORES RESERVADOS en los nombres de variables, 
constantes, programas o sub-programas. 
 
Identificadores válidos 
Nombre 
Cadena 
Edad_Maxima 
X_Y_Z 
Etiqueta2 
 
Identificadores no válidos 
Num&Dias : carácter & no válido 
X nombre : Contiene un blanco 
begin : es una palabra reservada 
eje@s : carácter @ no válido 
 
Elección de identificadores 
La elección de identificadores permite una mejor lectura y comprensión de un programa. No es aconsejable 
utilizar identificadores que no sugieran ningún significado. 
 
 
 
 
 
 
PROGRAMACION I Lic. Ricardo Monzón 
Página 4 de 4 
Declaración de etiquetas 
 
En el remoto caso de que sea necesaria la utilización de la instrucción Goto, deberá marcarse con una 
etiqueta la línea a donde desea enviarse el control de flujo del programa. 
La declaración deberá encabezarse con el identificador reservado Label, seguido por la lista de etiquetas 
separadas por comas y terminada por un punto y coma. 
Pascal estándar sólo permite etiquetas formadas por números de 1 a 4 dígitos. 
Turbo-Pascal permite la utilización de números y/o cualquier identificador, excepto los identificadores 
reservados. 
Su uso no está recomendado y en este tutorial no se empleará nunca. 
 
Definición de constantes 
 
En la definición de constantes se introducen identificadores que sirven como sinónimos de valores fijos. 
El identificador reservado Const debe encabezar la instrucción, seguido por una lista de asignaciones de 
constantes. Cada asignación de constante debe consistir de un identificador seguido por un signo de igual y 
un valor constante, como se muestra a continuación: 
 
Const 
 valor_maximo =255; 
 precision =0.0001; 
 palabra_clave='Tutankamen'; 
 encabezado =' NOMBRE DIRECCION TELEFONO '; 
 
Un valor constante puede consistir de un número ( entero o real ), o de una constante de caracteres. 
La constante de caracteres consiste de una secuencia de caracteres encerrada entre apóstrofes ( ' ), y, en 
Turbo-Pascal, también puede formarse concatenándola con caracteres de control ( sin separadores ), por 
ejemplo : 
 
'Teclee su opción ==>'^G^G^G ; 
 
Esta constante sirve para desplegar el mensaje : 
 
Teclee su opción ==> 
 
y a continuación suena el timbre tres veces. 
Las constantes de caracteres pueden estar formadas por un solo carácter de control, p.ej. : 
 
hoja_nueva = ^L 
 
Existen dos notaciones para los caracteres de control en Turbo Pascal, a saber : 
 
1. El símbolo # seguido de un número entero entre 0 y 255 representa el carácter al que corresponde 
dicho valor decimal en el codigo ASCII. 
2. El símbolo ^ seguido por una letra, representa el correspondiente carácter de control. 
 
Ejemplos : 
#12 representa el valor decimal 12 
 ( hoja_nueva o alimentación de forma ). 
#$1B representa el valor hexadecimal 1B ( escape ). 
^G representa el carácter del timbre o campana. 
^M representa el carácter de retorno de carro. 
 
 
PROGRAMACION I Lic. Ricardo Monzón 
Página 5 de 5 
Pascal proporciona las siguientes CONSTANTES PREDEFINIDAS : 
 
Nombre Tipo Valor 
pi real 3.1415926536 (Sólo en Turbo Pascal) 
false boolean 
true boolean 
MaxInt integer 32767 
 
Además de las constantes literales para los tipos integer y real con representación decimal y hexadecimal, y 
las constantes literales para el conjunto de caracteres ASCII, más los caracteres especiales ( no incluidos en 
el conjunto estándar del ASCII ) 
 
Definición de tipos 
 
Además de identificadores, los datos deben tener asignado algún tipo que indique el espacio de memoria en 
que se almacenarán y que al mismo tiempo evitael error de tratar de guardar un dato en un espacio 
insuficiente de memoria . 
Un tipo de dato en Pascal puede ser cualquiera de los tipos predefinidos ( integer, real, byte, boolean, char ), 
o algún otro definido por el programador en la parte de definición de tipos . 
Los tipos definidos por el programador deben basarse en los tipos estándar predefinidos, para lo cual, debe 
iniciar con el identificador reservado Type , seguido de una o más asignaciones de tipo separadas por punto y 
coma. Cada asignación de tipo debe consistir de un identificador de tipo, seguido por un signo de igual y un 
identificador de tipo previamente definido. 
 
La asignación de tipos a los datos tiene dos objetivos principales: 
1. Detectar errores de operaciones en programas. 
2. Determinar cómo ejecutar las operaciones. 
 
Pascal se conoce como un lenguaje "fuertemente tipificado" (strongly-typed) o de tipos fuertes. Esto significa 
que todos los datos utilizados deben tener sus tipos declarados explícitamente y el lenguaje limita la mezcla 
de tipos en las expresiones. Pascal detecta muchos errores de programación antes de que el programa se 
ejecute. 
Los tipos definidos por el programador pueden utilizarse para definir nuevos tipos, por ejemplo : 
 
Type 
 entero = integer; 
 otro_entero = entero; 
 
A continuación se hace una breve descripción de los tipos predefinidos . 
 
Tipos enteros 
Tipos enteros predefinidos 
Tipo Rango Formato 
byte 0 .. 255 8 bits sin signo 
integer -32768 .. 32767 16 bits con signo 
longint -247483648 .. 2147483647 32 bits con signo 
shortint -128 .. 127 8 bits con signo 
word 0 .. 65535 16 bits sin signo 
 
PROGRAMACION I Lic. Ricardo Monzón 
Página 6 de 6 
 BYTE: El tipo byte es un subconjunto del tipo integer, en el rango de 0 a 255 . Donde quiera que se 
espere un valor byte, se puede colocar un valor integer; y viceversa ( EXCEPTO cuando cuando son 
pasados como PARAMETROS ). Asimismo, se pueden mezclar identificadores de tipo byte y de 
tipo integer en las expresiones. 
 Los valores de tipo byte se guardan en UN OCTETO de memoria. 
 INTEGER: El rango de los valores definidos por el tipo integer , en Turbo Pascal, se encuentra entre 
-32768 y 32767. Cada valor de este tipo se guarda en DOS OCTETOS de memoria. 
 LONGINT (enteros largos): A partir de la versión 4.0 se han incorporado números que amplían el 
rango de variación de los enteros a -2,147,483,648. Este tipo de datos se denomina longint (enteros 
largos). Ocupan CUATRO OCTETOS de memoria. Existe una constante predefinida de tipo longint, 
denominada MaxLongInt, cuyo valor es 2,147,483,647. 
 SHORTINT (enteros cortos): En ciertos casos, puede ser práctico disponer de valores enteros 
positivos y negativos cuyo alcance sea más restringido que el de los tipos enteros. Los tipos shortint 
pueden tomar valores entre -128 y 127. Ocupan UN OCTETO de memoria. 
 WORD : Existen casos en los que se desea representar únicamente valores positivos. Este es el caso. 
Por ejemplo, cuando se desea acceder desde un programa hasta una dirección de memoria. En tal 
situación, no tiene sentido una dirección negativa. Turbo Pascal dispone del tipo word (o palabra, de 
palabra de memoria), cuyo intervalo posible de valores es de 0 a 65535. Ocupa DOS OCTETOS de 
memoria. 
 
Tipos reales 
 
 REAL: En el contexto de Pascal, un número real es aquel que está compuesto de una parte entera y 
una parte decimal, separadas por un punto. El rango de estos números está dado entre los valores 1E-
38 y 1E+38 . Cada valor de este tipo se guarda en SEIS OCTETOS de memoria. Durante una 
operación aritmética con números reales, un valor mayor que 1E+38 (sobreflujo) causará la 
detención del programa y desplegará un mensaje de error ; mientras que un valor menor que 1E-38 
(bajoflujo), producirá un resultado igual a cero. 
 
Deben tomarse en cuenta las siguentes restricciones para los valores de tipo real : 
1. No pueden utilizarse como subindices en las definiciones del tipo estructurado array. 
2. No pueden formar subrangos. 
3. No se pueden usar para definir el tipo base de un conjunto (tipo estructurado set) 
4. No deben utilizarse para el control de las instrucciones for y case. 
5. Las funciones pred y succ no pueden tomarlos como argumentos. 
 
Los números reales están siempre disponibles en Turbo Pascal, pero si su sistema incluye un coprocesador 
matemático como 8087, 80287 u 80387, se dispone además de otros tipos de números reales: 
• real (real) 
• single (real corto) 
• comp (entero ampliado) 
• double (real de doble precisión) 
• extended (real ampliado) 
Computadoras sin coprocesador matemático (emulación por software) 
datos disponibles : real, comp, double, extended y single. 
Computadoras con coprocesador matemático 
datos disponibles : real, comp, double, extended y single (reales IEEE) 
Desde la versión 5.0 se permite utilizar los datos tipo coprocesador matemático aunque su computadora no lo 
tenga incorporado. La razón es que se emula dicho coprocesador. Los diferentes tipos reales se diferencian 
por el dominio de definición, el número de cifras significativas (precisión) y el espacio ocupado en memoria. 
• Turbo Pascal 4.0 requiere obligatoriamente un chip coprocesador matemático para hacer uso de 
números reales de coma flotante IEEE. 
• Turbo Pascal 5.0 a 7.0 emula el chip coprocesador matemático totalmente en software, permitiendo 
ejecutar tipos IEEE tanto si tiene como si no un chip 8087/287/387 instalado en su máquina. 
PROGRAMACION I Lic. Ricardo Monzón 
Página 7 de 7 
Tipo Rango Cifras Tamaño y bytes 
real 2.910 E -39 .. 1.710 E 38 11 -12 6 
single 1.510 E -45 .. 3.410 E 38 7 - 8 4 
double 5.010 E -324 .. 1.710 E 308 15 - 16 8 
extended 1.910 E -4932 .. 1.110 E 4932 19 - 20 10 
comp -2 E 63 +1 .. 2 E 63 - 1 19 - 20 8 
 
 BOOLEAN : Un valor de tipo boolean puede asumir cualquiera de los valores de verdad denotados 
por los identificadores true y false, los cuales están definidos de tal manera que false < true . Un 
valor de tipo boolean ocupa UN OCTETO en la memoria. 
 CHAR : Un valor de tipo char es cualquier carácter que se encuentre dentro del conjunto ASCII 
ampliado, el cual está formado por los 128 caracteres del ASCII más los 128 caracteres especiales 
que presenta, en este caso, IBM. 
Los valores ordinales del código ASCII ampliado se encuentran en el rango de 0 a 255. Dichos valores 
pueden representarse escribiendo el carácter correspondiente encerrado entre apóstrofes. 
Así podemos escribir : 
'A' < 'a' 
Que significa : " El valor ordinal de A es menor que el de a " o " A está antes que a " 
Un valor de tipo char se guarda en UN OCTETO de memoria. 
 
 CADENA (STRING): Un tipo string (cadena) es una secuencia de caracteres de cero o más 
caracteres correspondientes al código ASCII, escrito en una línea sobre el programa y encerrado 
entre apóstrofos. El tratamiento de cadenas es una característica muy potente de Turbo Pascal que 
contiene ISO Pascal estándar. 
Ejemplos: 
'Turbo Pascal','Tecnológico', #13#10 
Nota: 
• Una cadena sin nada entre los apóstrofos se llama cadena nula o cadena vacía. 
• La longitud de una cadena es el número de carácteres encerrados entre los apóstrofos. 
 
Operadores 
 
Los operadores sirven para combinar los términos de las expresiones. 
En Pascal, se manejan tres grupos de operadores : 
1. ARITMÉTICOS 
2. RELACIONALES 
3. LÓGICOS 
 
Operadores aritméticos 
Son aquellos que sirven para operar términos numéricos. Estos operadores podemos clasificarlos a su vez 
como : 
a. UNARIOS 
b. BINARIOS 
Los operadores UNARIOS son aquellos que trabajan con UN OPERANDO. 
Pascal permite el manejo de un operador unario llamado : 
MENOS UNARIO 
Este operador denota la negación del operando, y se representa por medio del signo menos ( - ) colocado 
antes del operando. 
Por ejemplo : 
Si x tiene asignadoel valor 100, -x dará como resultado -100 ; esto es que el resultado es el inverso aditivo 
del operando. 
PROGRAMACION I Lic. Ricardo Monzón 
Página 8 de 8 
Los operadores BINARIOS, son los que combinan DOS OPERANDOS , dando como resultado un valor 
numérico cuyo tipo será igual al mayor de los tipos que tengan los operandos. 
La siguiente tabla muestra los símbolos de los operadores binarios de Pascal así como los nombres de las 
operaciones que realizan. 
 
Operadores aritméticos básicos 
Operador Operación Operandos Ejemplo Resultado 
+ Suma real , integer a + b suma de a y b 
- Resta real , integer a - b Diferencia de a y b 
* Multiplicación real , integer a * b Producto de a por b 
/ División real , integer a / b Cociente de a por b 
div División entera integer a div b Cociente entero de a por b 
mod Módulo integer a mod b Resto de a por b 
shl Desplazamiento a la izquierda a shl b Desplazar a la izquierda b bits 
shr Desplazamiento a la derecha a shr b Desplazar a la derecha b bits 
 
Conviene observar lo siguiente : 
1. Cuando los dos operandos sean del tipo integer, el resultado será de tipo integer. 
2. Cuando cualquiera de los dos operandos, o ambos, sean del tipo real, el resultado será de tipo real. 
3. Cuando, en la operación div, OPERANDO-1 y OPERANDO-2 tienen el mismo signo, se obtiene un 
resultado con signo positivo; si los operandos difieren en signo, el resultado es negativo y el 
truncamiento tiene lugar hacia el cero. 
 
Ejemplos : 
7 div 3 = 2 
(-7) div (-3) = 2 
(-7) div 3 = -2 
7 div (-3) = -2 
15.0 div 3.0 = no válido 
15 div (4/2) = no válido 
La operación div almacena sólo la parte entera del resultado, perdiéndose la parte fraccionaria 
(truncamiento). 
4. La operación MODULO está definida solamente para OPERANDO-2 positivo. El resultado se dará 
como el entero no negativo más pequeño que puede ser restado de OPERANDO-1 para obtener un 
múltiplo de OPERANDO-2 ; por ejemplo : 
6 mod 3 = 0 
7 mod 3 = 1 
(-6) mod 3 = 0 
(-7) mod 3 = -1 
(-5) mod 3 = -2 
(-15) mod (-7) = -1 
 
En la operaciones aritméticas, debe asegurarse que el resultado de sumar, restar o multiplicar dos valores, no 
produzca un resultado fuera de los rangos definidos por la implementación para los diferentes tipos. 
 
Operadores relacionales 
Una RELACIÓN consiste de dos operandos separados por un operador relacional. Si la relación es 
satisfecha, el resultado tendrá un valor booleano true ; si la relación no se satisface, el resultado tendrá un 
valor false. Los operadores deben ser del mismo tipo, aunque los valores de tipo real, integer y byte pueden 
combinarse como operandos en las relaciones. A continuación se describen los operadores relacionales 
utilizados en Pascal: 
PROGRAMACION I Lic. Ricardo Monzón 
Página 9 de 9 
Símbolo Significado 
= IGUAL que 
<> NO IGUAL que 
< MENOR que 
> MAYOR que 
<= MENOR o IGUAL que 
>= MAYOR o IGUAL que 
Ejemplos: 
Relación Resultado 
20 = 11 false 
15 < 20 true 
PI > 3.14 true 
'A' < 20 false 
'A' = 65 true 
 
 
Operadores lógicos 
 
Al igual que las relaciones, en las operaciones con operadores lógicos se tienen resultados cuyo valor de 
verdad toma uno de los valores booleanos true o false. 
 
Los operadores lógicos en Pascal son : 
 
NOT 
Sintaxis : not operando 
Descripción : Invierte el valor de verdad de operando. 
Ejemplo : 
Si bandera tiene un valor de verdad true, not bandera produce un resultado con valor de verdad false. 
AND 
Sintaxis : operando.1 and operando.2 
Descripción : Produce un resultado con valor de verdad true cuando ambos operandos tienen valor de verdad 
true; en cualquier otro caso el resultado tendrá un valor de verdad false. 
OR 
Sintaxis : operando.1 or operando.2 
Descripción : Produce un resultado con valor de verdad false cuando ambos operadores tienen valores de 
verdad false; en cualquier otro caso el resultado tendrá un valor de verdad true. 
XOR 
Sintaxis : operando.1 xor operando.2 
Descripción : Un operando debe tener valor de verdad true y el otro false para que el resultado tenga valor de 
verdad true. 
 
 
 
 
Turbo Pascal también permite operaciones entre los bits de operandos exclusivamente de tipo entero : 
PROGRAMACION I Lic. Ricardo Monzón 
Página 10 de 10 
AND 
Sintaxis : operando.1 and operando.2 
Descripción: Pone a ceros los bits de operando.2 
cuyos correspondientes en operando.1 estén en ceros. 
Los valores se pasan a binario, y, sobre cada bit de operando.1 se 
realiza la operación and lógica con el correspondiente bit de operando.2. 
Ejemplo : 29 and 30 = 28 
Cuya forma en binario es : 
 0000000000011101 = 29 (operando.1) 
and 0000000000011110 = 30 (operando.2) 
 _____________________ 
 0000000000011100 = 28 (resultado) 
OR ( o inclusiva ) 
Sintaxis : operando.1 or operando.2 
Descripción : Pone a uno los bits de operando.1 cuyos correspondientes bits en operando.2 están a uno. 
Ejemplo : 17 or 30 = 31 
En binario: 
 0000000000010001 = 17 (operando.1) 
or 0000000000011110 = 30 (operando.2) 
 _____________________ 
 0000000000011111 = 31 (resultado) 
XOR ( o exclusiva ) 
Sintaxis : operando.1 xor operando.2 
Descripción : Invierte el estado de los bits de operando.1, cuyos correspondientes en operando.2 están a uno. 
Ejemplo : 103 xor 25 = 126 
En binario: 
 0000000001100111 = 103 (operando.1) 
xor 0000000000011001 = 25 (operando.2) 
 ______________________ 
 0000000001111110 = 126 (resultado) 
SHL 
Sintaxis : operando.1 shl operando.2 
Descripción : Desplaza hacia la izquierda los bits de operando.1, el número de posiciones establecidas por 
operando.2. 
Los bits que salen por el extremo izquierdo se pierden. 
Ejemplo : 10 shl 2 = 40 
En binario: 
 0000000000001010 = 10 (operando.1) 
shl 2 <= 0000000000101000 = 40 (resultado) 
(operando.2) 
SHR 
Sintaxis : operando.1 shr operando.2 
Descripción : Desplaza hacia la derecha los bits de operando.1 el número de posiciones establecidas por 
operando.2. 
Los bits que salen por el extremo derecho se pierden 
Ejemplo : 125 shr 3 = 15 
En binario : 
 0000000001111101 = 125 (operando.1) 
shr 3 => 0000000000001111 = 15 (resultado) 
(operando.2) 
PROGRAMACION I Lic. Ricardo Monzón 
Página 11 de 11 
 
 Expresiones 
 
Las expresiones son secuencias de constantes y/o variables separadas por operadores válidos. 
Se puede construir una expresión válida por medio de : 
1. Una sola constante o variable, la cual puede estar precedida por un signo + ó - . 
2. Una secuencia de términos (constantes, variables, funciones) separados por operadores. 
Además debe considerarse que: 
 Toda variable utilizada en una expresión debe tener un valor almacenado para que la expresión, al 
ser evaluada, dé como resultado un valor. 
 Cualquier constante o variable puede ser reemplazada por una llamada a una función. 
Como en las expresiones matemáticas, una expresión en Pascal se evalúa de acuerdo a la precedencia de 
operadores. La siguiente tabla muestra la precedencia de los operadores en Turbo Pascal: 
 
Precedencia de operadores 
5 - (Menos unario) 
4 not 
3 * / div mod and shl shr 
2 + - or xor 
1 = <> > < >= <= 
 
Las reglas de evaluación para las expresiones son : 
 
1. Si todos los operadores en una expresión tienen la misma precedencia, la evaluación de las 
operaciones se realiza de izquierda a derecha. 
2. Cuando los operadores sean de diferentes precedencias, se evalúan primero las operaciones de más 
alta precedencia (en una base de izquierda a derecha ), luego se evalúan las de precedencia siguiente, 
y así sucesivamente. 
3. Las reglas 1) y 2) pueden ser anuladas por la inclusión de paréntesis enuna expresión. 
Ejemplos : 
 3 + 2*5 {*,+} 
 4 + 10 =14 
 20*4 div 5 
 {Igual prioridad de izquierda a derecha : *,div} 
 div 5 = 16 
 3 - 5 * (20+(6/2)) 
 3 - 5 * (20+(6/2)) = 3 - 5 * (20 + 3) 
 {paréntesis más interno} 
 = 3 - 5 * 23 {segundo paréntesis} 
 = 3 - 115 {Multiplicación} 
 = -112 {resta} 
 
 
Instrucciones 
 
Aunque un programa en Pascal puede contar con una sola instrucción (también llamada enunciado, sentencia 
o estatuto), normalmente incluye una cantidad considerable de ellas. Uno de los tipos de instrucciones más 
importantes lo forman las instrucciones de asignación; las cuales asignan a una variable (por medio del 
símbolo := ) , el resultado de la evaluación de una expresión. 
La sintaxis para las instrucciones de asignación es : 
identificador := expresión ; 
 
PROGRAMACION I Lic. Ricardo Monzón 
Página 12 de 12 
 
Al símbolo := le llamaremos, en lo sucesivo : "simbolo de asignación" 
Los siguientes son ejemplos de instrucciones de asignacion : 
numero := 100 ; 
importe := precio * cantidad ; 
hipotenusa := sqrt(sqr(cateto_op)+sqr(cateto_ad )); 
Es posible construir una instrucción vacía escribiendo sólamente el punto y coma de una instrucción. 
Así podemos escribir : 
valor := valor + 1;; 
Lo que incluye las dos instrucciones : 
valor := valor + 1; 
y la instrucción vacía : ; 
 
 
Bloques de instrucciones 
 
En todo lugar donde sea válido utilizar una instrucción simple, es posible utilizar una instrucción compuesta 
o bloque de instrucciones, el cual se forma agrupando varias instrucciones simples por medio de los 
identificadores begin y end. 
Por ejemplo: 
begin 
 suma := 1000.0; 
 incr := 20.0; 
 total := suma + incr 
 {Obsérvese la ausencia de punto y coma 
 al final de la instrucción} 
end. 
No es necesario escribir el punto y coma antes de end ya que el punto y coma se usa para separar 
instrucciones, no para terminarlas. 
begin y end son delimitadores de bloque. 
 
Procedimientos de entrada / salida 
 
Desde el punto de vista del hardware, las instrucciones de entrada y salida le ayudan al programa a 
comunicarse con un periférico de la computadora tal como una terminal, una impresora o un disco. 
Las instrucciones de entrada estándar, sirven para leer carácteres desde el teclado, y las instrucciones de 
salida estándar despliegan carácteres en la pantalla. 
En Pascal todas las operaciones de entrada/salida se realizan ejecutando unidades de programa especiales 
denominados procedimientos de entrada/salida que forman parte del compilador y sus nombres son 
identificadores estándar: 
Procedimientos de entrada Read ReadLn 
Procedimientos de salida Write WriteLn 
 
Procedimientos Read y Readln 
Los procedimientos predefinidos Read y ReadLn (contracción de Read Line), constituyen la base para las 
instrucciones de entrada estándar. 
Las instrucciones de entrada proporcionan datos durante la ejecución de un programa. Las instrucciones para 
llamar a los procedimientos Read y ReadLn son de la siguiente forma : 
Read(lista_de_variables); 
ReadLn(lista_de_variables); 
donde : 
lista_de_variables : es una lista de identificadores de variables separados por comas, los datos que se pueden 
leer son : enteros, caracteres, o cadenas. No se puede leer un boolean o un elemento de tipo enumerado. 
PROGRAMACION I Lic. Ricardo Monzón 
Página 13 de 13 
Los datos estructurados , arrays, registros o conjuntos, no se pueden leer globalmente y se suele recurrir a 
diseñar procedimientos específicos. 
La acción de la instrucción es obtener, del teclado, tantos valores de datos como elementos hay en 
lista_de_variables. Los datos deberán ser compatibles con los tipos de las variables correspondientes en la 
lista. 
Cada valor entero o real en el flujo de entrada puede ser representado como una secuencia de caracteres en 
alguna de las formas permitidas para tales números, y puede estar inmediatamente precedido por un signo 
más o un signo menos. Cada valor entero o real puede ser precedido por cualquier cantidad de caracteres 
blancos o fines de línea, pero no deberá haber blancos o fines de línea entre el signo y el número. 
La diferencia entre las instrucciones Read y ReadLn consiste en que Read permite que la siguiente 
instrucción continúe leyendo valores en la misma línea; mientras que, con ReadLn la siguiente lectura se 
hará después de que se haya tecleado el carácter de fin de línea. 
Cuando se tienen datos de tipo char en una instrucción Read, los caracteres blancos y los de fin de línea son 
considerados en el conteo de los elementos de las cadenas de caracteres mientras no se complete el total 
especificado para cada una de ellas. Cada fin de línea es tratado como un carácter, pero el valor asignado a la 
variable será un carácter blanco. 
Es aconsejable que cada cadena de caracteres se lea en una instrucción Read o ReadLn por separado, para 
evitar el tener que ir contando hasta completar la cantidad exacta de caracteres que forman la cadena ( o de lo 
contrario se tendrán resultados sorpresivos y frustrantes al verificar los datos leídos ). 
Ejemplo: 
Var 
 nombre :string[30] ; 
 edad :integer; 
 estatura :real; 
 . 
 . 
 . 
 ReadLn(nombre); 
 ReadLn(edad); 
 ReadLn(estatura); 
 
Procedimientos Write Y Writeln 
 
La salida estándar se realiza en base a estos procedimientos predefinidos, y las instrucciones para invocarlos 
toman las siguientes formas : 
Write(lista_de_salida); 
WriteLn(lista_de_salida); 
donde : 
lista_de_salida es una lista de variables, expresiones y/o constantes, cuyos valores van a ser desplegados en 
la pantalla. 
El procedimiento Write permite que la siguiente instrucción se realice en la misma línea , mientras que 
WriteLn alimenta una nueva línea, antes de finalizar. 
Por ejemplo, las instrucciones : 
Write ('! HOLA '); 
WriteLn('AMIGOS !'); 
producirán la salida : 
! HOLA AMIGOS ! 
cursor en la siguiente línea. 
Mientras que : 
Write('TECLEE <CTRL> F PARA FINALIZAR ==> '); 
desplegará : 
TECLEE <CTRL> F PARA FINALIZAR ==> CURSOR 
Para producir un renglón en blanco, se debe escribir : 
WriteLn ; 
 
PROGRAMACION I Lic. Ricardo Monzón 
Página 14 de 14 
 
Un valor booleano desplegará cualquiera de las cadenas : TRUE o FALSE, así : 
Write('20 + 30 = ', 20 + 30 ,' ES ', 20 + 30 = 50); 
producirá : 
20 + 30 = 50 ES TRUE 
dejando el cursor en la misma línea, al final de TRUE. 
 
Cuando un valor de salida se escribe sin una especificación de longitud de campo, se utilizará la 
especificación de campo por omisión. 
La especificación de longitud de campo por omisión dependerá del tipo de valor de salida y de la 
implementación de Pascal. 
 
Así tenemos que, para todas las implementaciones : 
1. La especificación de longitud de campo por omisión para los valores de tipo char es 1 
2. Si el valor a ser desplegado requiere menos del número de caracteres especificado, se imprimirán 
tantos caracteres blancos como sean necesarios para completar dicho número. 
3. Si el valor a ser desplegado requiere un número de caracteres mayor que el especificado, se usa la 
mínima especificación de longitud de campo que se requiera para representar un valor de tipo real o 
entero, pero las cadenas serán truncadas ajustándolas al campo especificado y desechará los 
caracteres en exceso que se encuentren más a la derecha. 
4. En el caso de valores de tipo real, se puede utilizar una especificación de longitud de fracción. 
 
Por omisión en Turbo Pascal, los valores de tipo real se desplegarán en formato de punto flotante (también 
llamado exponencial), así : 
a. Para el caso de valores positivos ( R >= 0.0 ), el formato es: 
 bbn.nnnnnnnnnnEsnn 
b. Para valores negativos ( R < 0.0 ), el formato es : 
 b-n.nnnnnnnnnnEsnn 
donde : 
b = blanco 
n = número ( 1-9 ) 
s= signo ( + ó - ) 
E = letra "E" para exponente 
La especificación de campo mínima aceptada es : 
• para R >= 0.0 , SIETE caracteres. 
• para R < 0.0 , OCHO caracteres. 
 
Ejemplos: 
Sentencias Resultados 
WriteLn ('Hola Mundo'); Hola Mundo 
WriteLn('22' + '20'); 2220 
WriteLn(pi); 3.1415926536E+00 
WriteLn(3.0); 3.0000000000E+00 
 
Debido a que Pascal alinea (justifica) las impresiones hacia la derecha del campo correspondiente, cuando es 
necesario acomodar tabularmente los caracteres de cadenas que no ocupan la totalidad de columnas 
especificadas. 
 
 
 
PROGRAMACION I Lic. Ricardo Monzón 
Página 15 de 15 
Por ejemplo, suponiendo que nombre es un identificador de tipo string[20] (cadena con formato de 20 
caracteres), para que la impresión de todos los valores de nombre empiece en la misma columna, podemos 
utilizar la instrucción : 
 
 
WriteLn(numero,'.- ',nombre, 
' ':20-length(nombre),calif:3); 
 
y, al ejecutar el programa se tendrá algo parecido a : 
 
1.- JUAN FLORES 90 (Nótese la justificación de los nombres 
2.- EGRID L. CASTRO 100 hacia la izquierda y los números hacia 
3.- RAMON RAMIREZ 99 la derecha) 
 
Formatos de salida 
 
Formato 1 : WriteLn (ítem:anchura...); 
Anchura: Expresión entera (literal, constante, variable o llamada a función) que especifíca la 
anchura total del campo en que se escribe ítem. 
Formato 2 : WriteLn (ítem:anchura:dígitos ...); 
Dígitos: dígitos decimales de un número real 
Anchura: Total de dígitos del número real contando parte entera, punto decimal y dígitos 
decimales. 
Ejemplos: 
Valor:= 25.0776; 
Sentencias Resultados Comentario 
WriteLn (Valor); 2.5077600000E+01 
WriteLn(Valor:2); 2.5E+01 
WriteLn(Valor:2:1); 25.1 Notese el redondeo 
WriteLn(Valor:2:4); 25.0776 
WriteLn(Valor:2:8); 25.07760000 
WriteLn('Tec':1); Tec 
WriteLn('Tec':3); Tec 
WriteLn('Tec':5); _ _ Tec Espacios vacios _ 
 
Secuencia 
 
En este caso, las instrucciones se ejecutan una después de la otra sin omitir ninguna de ellas. 
La sintaxis para las instrucciones ejecutadas en secuencia es : 
 
................ 
................ 
<instrucción.1> ; 
<instrucción.2> ; 
................ 
................ 
<instrucción.N> ; 
................ 
................ 
PROGRAMACION I Lic. Ricardo Monzón 
Página 16 de 16 
Selección 
La selección de alternativas en Pascal se realiza con alguna de las dos siguientes formas : 
1. La sentencia if 
2. La sentencia case 
 IF-THEN-ELSE 
Dado que una condición produce un valor verdadero o falso, se necesita una sentencia de control que ejecute 
determinada sentencia si la condición es verdadera , y otra si es falsa. En Pascal esta alternativa se realiza 
con la sentencia IF-THEN-ELSE. A continuación se describe el diagrama de flujo y el formato de la 
sentencia. 
 
:if <condición> 
 then 
<instrucción_1> 
 else 
<instrucción_2> 
 
 
En este caso, primero se evalúa condición y si el resultado arroja un valor de verdad(verdadero), se ejecuta 
instrucción_1 ; en caso contrario se ejecuta instrucción_2. 
La condición es una expresión Booleana que puede ser verdadera o falsa (true o false). Una expresión 
Booleana se forma comparando valores de las expresiones utilizando operadores de relación (relacionales) o 
comparación y los operadores lógicos vistos anteriormente. 
 Ejemplos : 
Omisión de cláusula else : 
Program Edades; 
Uses Crt; 
Var 
 edad : integer ; 
begin 
 WriteLn('Escribe tu edad : '); 
 ReadLn(edad); 
 if edad >= 18 then 
 WriteLn('!Eres Mayor de edad !'); 
 WriteLn('Esta instrucción siempre se ejecuta'); 
 ReadKey 
end. 
Nota: Antes de la palabra end no se debe anteponer un punto y coma como se muestra en este ejemplo. El 
hacerlo generaria una sentencia vacia (sentencia que no hace nada). 
 Utilización de cláusula else : 
Program Edades; 
Uses Crt; 
Var 
 edad : integer ; 
begin 
 WriteLn('Escribe tu edad : ') ; 
 ReadLn(edad) ; 
 if edad >= 18 then 
 WriteLn('!Eres Mayor de edad !') 
 else 
 WriteLn('!Eres Menor de edad !'); 
 WriteLn('Esta instrucción siempre se ejecuta'); 
 ReadKey 
end. 
Diagrama 
de Flujo 
Formato de la sentencia IF :
PROGRAMACION I Lic. Ricardo Monzón 
Página 17 de 17 
Nota: Antes de la cláusula else no se antepone un punto y coma, si lo hubiese el compilador producirá un 
mensaje de error, puesto que no existe ninguna sentencia en Pascal que comience con else. La parte else es 
opcional, pero la ejecución siempre continuará en otra instrucción. 
En lugar de utilizar instrucciones simples, se pueden usar bloques de instrucciones: 
Program Edades; 
Uses Crt; 
Var 
 edad : integer ; 
begin 
 WriteLn('Escribe tu edad : ') ; 
 ReadLn(edad) ; 
 if edad >= 18 then 
 begin 
 WriteLn('!Eres Mayor de edad !'); 
 WriteLn('!Ya puedes Votar!') 
 end 
 else 
 begin 
 WriteLn('!Eres Menor de edad !'); 
 WriteLn('!Aún no puedes votar!') 
 end; 
 WriteLn('Esta instrucción siempre se ejecuta'); 
 ReadKey 
end. 
 
Sentencia IF anidadas : 
 
Program NumMayor; 
Uses Crt; 
Var 
 n1,n2,n3,mayor : integer ; 
begin 
 WriteLn('Escribe tres numeros enteros : '); 
 ReadLn(n1,n2,n3); 
 if n1>n2 then 
 if n1>n3 then 
 mayor:=n1 
 else 
 mayor:=n3 
 else 
 if n2>n3 then 
 mayor:=n2 
 else 
 mayor:=n3; 
 WriteLn('El mayor es ',mayor); 
 ReadKey 
end. 
 
 
 
 
 
 
 
 
 
 
 
PROGRAMACION I Lic. Ricardo Monzón 
Página 18 de 18 
CASE-OF-ELSE 
Esta forma es muy útil cuando se tiene que elegir entre más de dos opciones, por lo que le llamaremos forma 
de selección múltiple. 
La siguiente figura representa la selección múltiple. 
 
Su formato es : 
case <selector> of 
 constante.1 : 
 begin 
 <instrucciones>; 
 end; 
 
 constante.2 : 
 begin 
 <instrucciones> ; 
 end; 
 ..................... 
 ..................... 
 
 constante.N : 
 begin 
 <instrucciones> ; 
 end 
 else 
 begin 
 <instrucciones> ; 
 end; 
end; { FIN DE CASE } 
 
Dependiendo del valor que tenga la expresión selector, se ejecutarán las instrucciones etiquetadas por 
constante . 
Aquí también los bloques de instrucciones pueden ser reemplazados por instrucciones simples. 
Conviene tener presente que no debe escribirse punto y coma antes de la palabra else. 
Reglas: 
1. La expresión <selector> se evalúa y se compara con las constantes;las constantes son listas de uno o 
más posibles valores de <selector> separados por comas. Ejecutadas la(s) <instrucciones>, el control 
se pasa a la primera instrucción a continuación de end (fin de case). 
2. La cláusula else es opcional. 
PROGRAMACION I Lic. Ricardo Monzón 
Página 19 de 19 
3. Si el valor de <selector> no está comprendido en ninguna lista de constantes y no existe la cláusula 
else, no sucede nada y sigue el flujo del programa; si existe la cláusula else se ejecutan la(s) 
<instrucciones> a continuación de la cláusula else. 
4. El selector debe ser un tipo ordinal ( integer, char, boolean o enumerado). Los números reales no 
pueden ser utilizados ya que no son ordinales. Los valores ordinales de los límites inferiores y 
superiores deben de estar dentro del rango -32768 a 32767. Por consiguiente, los tipos string, longint 
y word no son válidos. 
5. Todas las constantes case deben ser únicas y de un tipo ordinal compatible con el tipo del selector. 
6. Cada sentencia, excepto la última, deben ir seguidas del punto y coma. 
Ejemplo: 
Program Tecla; {El siguiente programa lee un carácter del teclado y despliegaun mensaje en 
pantalla si es letra o número o carácter especial} 
Uses Crt; 
Var 
 caracter : char; 
begin 
 Write('Escribe un caracter : '); 
 caracter:=ReadKey;WriteLn; 
 case caracter of 
 '0'..'9' : WriteLn('Es un número'); 
 'a'..'z','A'..'Z' : WriteLn('Es una letra') 
 else 
 WriteLn('Es un caracter especial') 
 end; 
 ReadKey 
end. 
 
Iteración 
 
Las formas de iteración sirven para ejecutar ciclos repetidamente, dependiendo de que se cumplan ciertas 
condiciones. Una estructura de control que permite la repetición de una serie determinada de sentencias se 
denomina bucle1 (lazo o ciclo). 
El cuerpo del bucle contiene las sentencias que se repiten. Pascal proporciona tres estructuras o sentencias de 
control para especificar la repetición: 
1. While 
2. Repeat 
3. For 
1 En inglés, loop. 
 
WHILE-DO 
La estructura repetitiva while(mientras) es aquella en la que el número de iteraciones no se conoce por 
anticipado y el cuerpo del bucle se ejecuta repetidamente mientras que una condición sea verdadera . 
 
Su formato es : 
 while <condición> do 
 begin 
 <instrucciones>; 
 end; 
 
y su diagrama : 
 
 
 
 
PROGRAMACION I Lic. Ricardo Monzón 
Página 20 de 20 
Reglas de funcionamiento : 
1. La condición se evalúa antes y después de cada ejecución del bucle. Si la condición es verdadera, se 
ejecuta el bucle, y si es falsa, el control pasa a la sentencia siguiente al bucle. 
2. Si la condición se evalúa a falso cuando se ejecuta el bucle por primera vez, el cuerpo del bucle no se 
ejecutará nunca. 
3. Mientras la condición sea verdadera el bucle se ejecutará. Esto significa que el bucle se ejecutará 
indefinidamente a menos que "algo" en el interior del bucle modifique la condición haciendo que su 
valor pase a falso. Si la expresión nunca cambia de valor, entonces el bucle no termina nunca y se 
denomina bucle infinito lo cual no es deseable. 
 
ejemplos: 
Program Ej_While; {El siguiente programa captura una cadena, hasta que se presione la tecla 
Esc(escape), cuyo ordinal es el #27.} 
Uses Crt; 
Const 
 Esc = #27; 
Var 
 nombre : string[30]; 
 tecla : char; 
 cont : word; 
begin 
 ClrScr; 
 cont:=1; 
 While (tecla<>Esc) do 
 begin 
 Write(cont,' Nombre : '); 
 ReadLn(nombre); 
 inc(cont); 
 tecla:=ReadKey 
 end 
end. 
 
REPEAT-UNTIL 
La acción de repeat-until es repetir una serie de instrucciones hasta que se cumpla una determinada 
condición . 
Su formato es : 
 repeat 
 <instrucción.1> ; 
 <instrucción.2> ; 
 .................. 
 .................. 
 <instrucción.N> ; 
 until <condición>; 
Aquí las palabras repeat y until sirven también 
como delimitadores de bloque. 
Su diagrama de flujo es : 
 
Reglas de funcionamiento: 
1. La condición se evalúa al final del bucle, después de ejecutarse todas las sentencias. 
2. Si la condición es falsa, se vuelve a repetir el bucle y se ejecutan todas sus instrucciones. 
3. Si la condición es falsa, se sale del bucle y se ejecuta la siguiente instrucción a until. 
4. La sintaxis no requiere begin y end. 
Analícense los diagramas de while-do y repeat-until, para comprender las diferencias entre ambas formas. 
 
 
 
PROGRAMACION I Lic. Ricardo Monzón 
Página 21 de 21 
Ejemplo: 
 
Program Ej_Repeat; {El siguiente programa captura una cadena, hasta que se presione la tecla 
Esc(escape), cuyo ordinal es el #27.} 
Uses Crt; 
Const 
 Esc = #27; 
Var 
 nombre: string[30]; 
 tecla : char; 
 cont : word; 
begin 
 ClrScr; 
 cont:=1; 
 Repeat 
 Write(cont,' Nombre : '); 
 ReadLn(nombre); 
 inc(cont); 
 tecla:=ReadKey 
 Until (tecla=Esc) 
end. 
 
FOR-TO-DO 
Cuando se sabe de antemano el número de veces que deberá ejecutarse un ciclo determinado, ésta es la forma 
más conveniente. 
El formato para for-to-do es : 
for <contador>:=<expresión.1> to <expresión.2> 
do 
 begin 
 <instrucciones> ; 
 end; 
 
Al ejecutarse la sentencia for la primera vez, a contador se le asigna un valor inicial(expresion.1), y a 
continuación se ejecutan las intrucciones del interior del bucle, enseguida se verifica si el valor final 
(expresión.2) es mayor que el valor inicial (expresión.1); en caso de no ser así se incrementa contador en uno 
y se vuelven a ejecutar las instrucciones, hasta que el contador sea mayor que el valor final, en cuyo 
momento se termina el bucle. 
Aquí, contador no puede ser de tipo real. 
Ejemplo: 
Program Ej_For; {El siguiente programa despliega en pantalla el numero de veces que se 
ejecuta las instrucciones contenidas en el bucle for} 
Uses Crt; 
Var 
 Valor_final,contador : integer; 
Begin 
 ClrScr; 
 Write('Escribe el número de iteraciones : '); 
 ReadLn(valor_final); 
 for contador:=1 to valor_final do 
 WriteLn('Iteración : ',contador); 
 ReadKey 
end. 
PROGRAMACION I Lic. Ricardo Monzón 
Página 22 de 22 
El contador se puede decrementar sustituyendo la palabra to por la palabra downto. 
 
Formato: 
for <contador>:=<expresión.1> downto <expresión.2> do 
 begin 
 <instrucciones> ; 
 end; 
Ejemplo: 
Program Ej_Downto; {El siguiente programa despliega en pantalla el numero de veces que se 
ejecuta las instrucciones contenidas en el bucle for} 
Uses Crt; 
Var 
 Valor_final,contador : integer; 
Begin 
 ClrScr; 
 Write('Escribe el número de iteraciones : '); 
 ReadLn(valor_final); 
 for contador:=valor_final downto 1 do 
 WriteLn('Iteración : ',contador); 
 ReadKey 
end. 
Tipos de datos 
 
Pascal requiere que todos los tipos de datos sean formalmente definidos antes de ser utilizados, ya que tal 
definición será usada por el compilador para determinar cuanto espacio de memoria se reservará para las 
variables de cada tipo, así como para establecer los límites de los valores que pueden asignarse a cada 
variable, por lo que estableceremos las siguientes reglas generales para los diferentes tipos de datos que se 
utilizan en Pascal: 
1. Cada variable debe tener un solo tipo en el bloque donde fue declarada. 
2. El tipo de cada variable debe ser declarado antes de que la variable sea utilizada en una instrucción 
ejecutable. 
3. A cada tipo de dato se le pueden aplicar ciertos operadores específicos. 
Para facilitar su estudio, hemos clasificado a los tipos de datos que pueden ser definidos por el programador 
en SIMPLES y ESTRUCTURADOS. 
 
Tipos simples 
Hasta aquí, hemos considerado los tipos simples estándar integer, real, boolean, char y byte proporcionados 
por Turbo Pascal. 
Estos tipos de datos pueden ser utilizados para declarar variables numéricas, de caracteres y/o lógicas. Sin 
embargo, es posible que ninguno de ellos satisfaga los requerimientos de un determinado problema, 
haciéndose necesaria la utilización de otros tipos como: 
TIPO SUBRANGO: El tipo de dato más simple que se puede definir en un programa Pascal es el tipo 
subrango o intervalo. Estos tipos son útiles, sobre todo por la facilidad que ofrecen para verificar 
automáticamente errores. Un tipo subrango se define de un tipo ordinal, especificando dos constantes de ese 
tipo, que actúan como límite inferior y superior del conjunto de datos de ese tipo. Un tipo subrango es un 
tipo ordinal y sus valores se ordenan de igual modo que en el tipo patrón de que se deducen. 
Ejemplos: 
1. 0..9 este tipo subrango consta de los elementos 
0,1,2,3,4,5,6,7,8,9 
2. '0'..'9' este subrango consta de los caracteres 
'0' a '9' 
3. 'A'..'F' este subrango consta de los caracteres 
'A' a 'F' 
PROGRAMACION I Lic. Ricardo Monzón 
Página 23 de 23 
Se pueden crear variables cuyos valores se restrinjan a un subrango dado. Las declaraciones de tipo subrango 
se sitúan entre las declaraciones de constantes y de variables. 
Formato: 
type 
 Nombre = límite inferior .. límite superiorEjemplos: 
{$R+} {Directiva de compilador R} 
Program Positivos; {El siguiente programa realiza una validación para que sólo se acepten 
valores positivos entre 0 y 32767 por medio de un tipo subrango} 
Uses Crt; 
Type 
 NumPositivo = 0..MaxInt; 
Var 
 numero : NumPositivo; 
Begin 
 ClrScr; 
 {numero:=-1; (está instrucción provocaría un error} 
 Write('Escribe un número entero positivo : '); 
 ReadLn(numero); 
 ReadKey 
end. 
Nota: Puesto que Turbo Pascal no siempre produce un error cuando el valor de un tipo subrango está fuera de 
su rango definido. Sin embargo se puede tener la posibilidad de visualizar dichos errores mediante la 
directiva de compilador: 
{$R+} activada 
{$R-} desactivada 
Por default esta desactivada. Sólo se debe usar durante la fase de depuración. 
 TIPOS ENUMERADOS: En estos tipos de datos simples, se listan los identificadores que serán 
asociados con cada valor a utilizar. 
Por ejemplo : 
Type 
 dias_semana =(lunes,martes,miercoles,jueves, 
 viernes,sabado,domingo); 
 colores_baraja =(espada,oro,basto,copa); 
De igual forma las variables pueden ser de tipo enumerado: 
Var 
 dias : dias_semana; 
 baraja : colores_baraja; 
 
Formato: 
Type 
 nombre = (constante1,constante2,...,constanteN) 
 
Los datos de tipo colores_baraja sólo podrán tomar los valores denotados por : espada, oro, basto, copa . La 
posición de cada valor en la lista define su orden, por lo que para el tipo dias_semana tenemos que : 
domingo > viernes da como resultado true 
sabado < martes da como resultado false 
jueves <> miercoles da como resultado true 
 
Características: 
• Un tipo de dato enumerado es un tipo ordinal cuyo orden se indica por la disposición de los valores 
en la definición. 
• El número de orden de cada elemento comienza en 0 para el primer elemento. 
• Las variables de tipo enumerado sólo pueden tomar valores de estos tipos. 
PROGRAMACION I Lic. Ricardo Monzón 
Página 24 de 24 
• Los únicos operadores que pueden acompañar a los tipos ordinales son los operadores de relación y 
asignación. 
 
A los valores de los tipos enumerados se les pueden aplicar las funciones estándar succ (de sucesor), pred (de 
predecesor) y ord (de ordinal). 
 
En el caso del valor máximo de un tipo enumerado, succ no está definido, y, para su valor mínimo, no está 
definido pred. 
 
La función estándar ord es aplicable a los argumentos que sean valores de tipo enumerado. La relación 
biunívoca se da entre los valores del tipo y los enteros comprendidos entre 0 y N-1, donde N es la 
cardinalidad del tipo enumerado. 
 
El tipo estándar boolean es equivalente a un tipo enumerado de la forma : 
boolean = ( false, true); 
 
Aplicación de las funciones Ord, Pred, Succ 
Argumento(x) Tipos de datos Ord(x) Pred(x) Succ(x) 
lunes dias_semana 0 Indefinido martes 
oro colores_baraja 1 espada basto 
22 Integer 22 21 23 
0 Integer 0 -1 1 
-20 Integer -20 -21 -19 
MaxInt Integer MaxInt MaxInt-1 Indefinido 
false Lógico 0 Indefinido true 
Ejemplo: 
Program Dias_Semana; {El siguiete programa muestra los dias de la semana por medio de tipos 
enumerados} 
Uses Crt; 
Type 
 Dia_Semana = (Lunes,Martes,Miercoles,Jueves, 
 Viernes,Sabado,Domingo); 
Var 
 dias :Dia_Semana; 
 i :byte; 
Begin 
 ClrScr; 
 dias:=lunes; 
 for i:=1 to 7 do 
 begin 
 case dias of 
 Lunes :WriteLn('Lunes '); 
 Martes :WriteLn('Martes '); 
 Miercoles :WriteLn('Miercoles'); 
 Jueves :WriteLn('Jueves '); 
 Viernes :WriteLn('Viernes '); 
 Sabado :WriteLn('Sabado '); 
 Domingo :WriteLn('Domingo ') 
 end; 
 dias:=succ(dias) 
 end; 
 ReadKey 
end. 
PROGRAMACION I Lic. Ricardo Monzón 
Página 25 de 25 
 
TIPOS ESTRUCTURADOS: En Pascal, se pueden definir , a partir de los datos simples, otros tipos más 
complejos conocidos como tipos estructurados. 
Cuando se declara una variable como de un tipo estructurado, se puede manipular la estructura completa, o 
bien trabajar con los datos individuales que la forman. 
 
A continuación, se describirán los diferentes tipos estructurados que pueden manejarse en Pascal. 
 
• Cadenas (String) 
• Arreglos (Array) 
• Registros (Record) 
• Conjuntos (Set) 
• Archivos 
 
TIPO CADENAS (strings) : Turbo Pascal proporciona el tipo string para el procesamiento de cadenas 
(secuencias de caracteres ). 
La definición de un tipo string debe especificar el número máximo de caracteres que puede contener, esto es, 
la máxima longitud para las cadenas de ese tipo. La longitud se especifíca por una constante entera en el 
rango de 1 a 255. 
El formato para definir un tipo string es : 
 
<identificador> = string [limite_superior]; 
 
Las variables de cadena se declaran en la sección Var o Type. 
 
 
 
Declaración en Var: 
Var 
 nombre : string[30]; 
 domicilio : string[30]; 
 ciudad : string[40]; 
 
Declaración en Type: 
Type 
 cad30 : string[30]; 
 cad40 : string[40]; 
Var 
 nombre : cad30; 
 domicilio : cad30; 
 ciudad : cad40; 
 
Una Vez declaradas las variables se pueden realizar asignaciones u operaciones de lectura/escritura. 
 
nombre := 'Egrid Lorely Castro Gonzalez' ; 
domicilio := 'Altamirano #220'; 
ciudad := 'La Paz B.C.S.'; 
 
El contenido de la cadena se debe encerrar entre apóstrofes. Si se desea que figure un apóstrofe en una 
cadena, es preciso doblarlo en la cadena. Los procedimientos de Entrada/Salida son de la siguiente forma : 
 
ReadLn (nombre); 
WriteLn('Hola ',nombre); 
PROGRAMACION I Lic. Ricardo Monzón 
Página 26 de 26 
 Longitud de una cadena 
Las variables de tipo cadena pueden ocupar la máxima longitud definida, más un octeto que contiene la 
longitud actual de la variable. Los caracteres que forman la cadena son numerados desde 1 hasta la longitud 
de la cadena. 
Ejemplo: 
Var 
 nombre : string[10]; 
begin 
 nombre := 'Susana'; 
end. 
 
Obsérvese que el primer byte no es el carácter '6' si no el número 6 en binario (0000 0110) y los últimos 
bytes de la cadena hasta 10 (7-10) contienen datos aleatorios. 
Una cadena en Turbo Pascal tiene dos longitudes : 
1. Longitud física : Es la cantidad de memoria que ocupa realmente, está se establece en tiempo de 
compilación y nunca cambia 
2. Longitud lógica : Es el número de caracteres almacenados actualmente en la varible cadena. Este 
dato puede cambiar durante la ejecución del programa. 
 
Es posible acceder a posiciones individuales dentro de una variable cadena, mediante la utilización de 
corchetes que dentro de ellos se especifíca el número indice dentro de la cadena a utilizar así para el ejemplo 
anterior se tiene : 
nombre[1] ==> 'S' 
nombre[2] ==> 'u' 
nombre[3] ==> 's' 
nombre[4] ==> 'a' 
nombre[5] ==> 'n' 
nombre[6] ==> 'a' 
 
 
Operaciones entre cadenas 
 
Las operciones básicas entre cadenas son : asignación, comparación y concatenación. Es posible asignar 
una cadena a otra cadena, incluso aunque sea de longitud física más pequeña en cuyo caso ocurriría un 
truncamiento de la cadena. 
Ejemplo: 
Var 
 nombre : String[21]; 
 . 
 . 
 . 
 nombre := 'Instituto Tecnológico de La Paz'; 
 
El resultado de la asignación en la variable nombre será la cadena 
'Instituto Tecnológico'. 
 
Las comparaciones de las cadenas de caracteres se hacen según el orden de los caracteres en el código ASCII 
y con los operadores de relación. 
 '0' < '1' '2' > '1' 'A' < 'B' 'm' > 'l' 
 
 
Reglas de comparación de cadenas 
PROGRAMACION I Lic. Ricardo Monzón 
Página 27 de 27 
Las dos cadenas se comparan de izquierda a derecha hasta que se encuentran dos caracteres diferentes. El 
orden de las dos cadenas es el que corresponde al orden de los dos caracteres diferentes. Si las dos cadenasson iguales pero una de ella es más corta que la otra, entonces la más corta es menor que la más larga. 
Ejemplo : 
'Alex' > 'Alas' 
{puesto que 'e' > 'a'} 
'ADAN' < 'adan' 
{puesto que 'A' < 'a'} 
'Damian' < 'Damiana' 
{'Damian' tiene menos caracteres que 'Damiana'} 
Otra operación básica es la concatenación. La concatenación es un proceso de combinar dos o más cadenas 
en una sola cadena. El signo + se puede usar para concatenar cadenas ( al igual que la función concat ), 
debiendo cuidarse que la longitud del resultado no sea mayor que 255. 
Ejemplos : 
'INSTITUTO '+'TECNOLOGICO'='INSTITUTO TECNOLOGICO' 
'CONTAB'+'.'+'PAS'= 'CONTAB.PAS' 
Se puede asignar el valor de una expresión de cadena a una variable cadena, por ejemplo : 
fecha := 'lunes'; 
y utilizar la variable fecha en : 
frase:='El próximo '+fecha+' inician las clases'; 
Si la longitud máxima de una cadena es excedida, se pierden los caracteres sobrantes a la derecha. Por 
ejemplo, si fecha hubiera sido declarada del tipo string[7], después de la asignación contendría los siete 
primeros caracteres de la izquierda (CENTENA). 
 
PROCEDIMIENTOS Y FUNCIONES DE CADENA INTERNOS 
Turbo Pascal incorpora las siguientes funciones y procedimientos para el tratamiento de cadenas. 
Procedimientos y funciones de cadena 
Procedimiento Función 
Delete Concat 
Insert Copy 
Str Length 
Val Pos 
 
Procedimiento Delete 
Delete borra o elimina una subcadena de una cadena contenida en otra cadena de mayor longitud. 
Formato : 
Delete (s, posición, número) 
S Cadena original o fuente 
Posición Expresión entera que indica la posición 
 del primer carácter a suprimir. 
Número Cantidad de caracteres a suprimir. 
 
Si posición es mayor que la longitud de la cadena, no se borra ningún carácter. Si número especifíca más 
caracteres que los existentes desde la posición inicial hasta el final de la cadena, sólo se borran tantos 
caracteres como estén en la cadena. 
Ejemplo : 
Cad := 'Tecnológico' 
Delete(cad,1,5) 
Resulta la cadena 'lógico' 
 
Procedimiento Insert 
PROGRAMACION I Lic. Ricardo Monzón 
Página 28 de 28 
Insert inserta una subcadena en una cadena. 
Formato : 
Insert (cad1, s, posición) 
cad1 cadena a insertar 
s cadena donde se inserta 
posición carácter a partir del cual se inserta 
Ejemplo: 
cad:= 'México ' 
Insert (' lindo y querido',cad,7) 
Resulta 'México lindo y querido' 
 
Procedimiento Str 
 
Este procedimiento efectúa la conversión de un valor númerico en una cadena. 
 
Formato : 
Str (valor,s) 
Valor expresíon númerica 
s cadena 
Ejemplos : 
 Numero := 235.55; 
 Str(Numero,cadena); 
 Write(cadena); 
 Resulta la cadena '2.355000000E+02' 
 Numero := 12345; 
 Str(Numero,cadena); 
 Write(cadena); 
 Resulta la cadena '12345' 
 Numero := 12345; 
 Str(Numero+1000:10,cadena); 
 Write(cadena); 
 Resulta la cadena ' 13345' 
 
Procedimiento Val 
Este procedimiento convierte una cadena en variable númerica. Para que esta conversión sea efectiva, el 
contenido de la cadena de caracteres debe corresponderse a las reglas de escritura de números: no debe de 
existir ningún blanco en la primera o última posición. 
Formato: 
Val (S, variable, código) 
S cadena 
Variable variable de tipo entero o real 
código si la conversión ha podido ser 
 efectuada toma el valor cero; en 
 caso contrario contiene la primera 
 posición del primer carácter de la 
 cadena S que impide la conversión 
 y en ese caso variable no queda definida 
Ejemplo: 
Var 
 cad : string[10]; 
 num1,codigo : integer; 
 num2 : real; 
PROGRAMACION I Lic. Ricardo Monzón 
Página 29 de 29 
begin 
 cad:='22.25'; 
 Val(cad,num2,codigo); 
 if codigo=0 then 
 WriteLn(num2:2:2) 
 {Produce 22.25} 
 else 
 WriteLn(codigo); 
 cad:='12x45'; 
 Val(cad,num1,codigo); 
 if codigo=0 then 
 WriteLn(num1) 
 else 
 WriteLn(codigo) 
 {Produce 3} 
end. 
 
Función Concat 
Además del uso de '+' para la concatenación, Turbo Pascal tiene la función concat que permite concatenar 
una secuencia de caracteres. 
Formato: 
Concat (S1,S2,...,Sn) 
S1,S2...cadenas o variables de 
 caracteres (expresión tipo cadena) 
Ejemplo : 
Var 
 cad1,cad2 : string[20]; 
 destino : string[50]; 
begin 
 cad1:='Hola como '; 
 cad2:='Estas '; 
 destino:=Concat(cad1,cad2,', estoy bien') 
end. 
 
Esto produce una cadena destino igual a 'Hola como estas, estoy bien' 
 
Función Copy 
Esta función devuelve una cadena de caracteres (subcadena) extraída de una cadena. 
Formato: 
Copy(s,posición,número) 
s cadena (fuente) 
posición primer carácter a extraer (tipo entero) 
número total de caracteres a extraer (tipo entero) 
Si posición es mayor que la longitud de S, se devuelve una cadena vacía; si número especifíca más caracteres 
que los indicados desde posición, sólo se devuelve el resto de la cadena. 
Ejemplo: 
cad := 'Instituto Tecnológico de La Paz'; 
cad2 := Copy(cad,26,6); 
Write(cad2); 
 
Lo que produce la cadena 'La Paz' contenida en cad2. 
 
 
 
Función Lenght (longitud) 
PROGRAMACION I Lic. Ricardo Monzón 
Página 30 de 30 
La función Lenght proporciona la longitud lógica de una cadena de caracteres y devuelve un valor entero. 
Formato : 
Length (s) 
 s expresión tipo cadena 
Ejemplo : 
Var 
 cad : string[20]; 
begin 
 cad:='Hola'; 
 WriteLn(Length ('Hola como estas')); {devuelve el valor 15} 
 WriteLn(Length ('')); {devuelve cero (cadena vacía)} 
 WriteLn(Length (cad)); {devuelve el valor 4} 
 WriteLn(Ord(cad[0])) {devuelve el valor 4} 
end. 
 
 
Función Pos 
Esta función permite determinar si una cadena está contenida en otra. En este caso, la función devuelve la 
posición donde comienza la cadena buscada en la cadena fuente, si la cadena no existe, se devuelve el 
resultado 0. 
Formato : 
Pos (cadena buscada, cadena fuente) 
Ejemplo: 
cad:= 'uno dos tres cuatro cinco seis'; 
WriteLn(Pos('dos',cad)); 
{Resulta 5 que es la posición de 'd'} 
WriteLn(Pos('ocho',cad)); 
{Resulta 0 no existe la cadena 'ocho'} 
 
 
Arreglos (array) 
 
Un arreglo está formado por un número fijo de elementos contíguos de un mismo tipo. Al tipo se le llama 
tipo base del arreglo. Los datos individuales se llaman elementos del arreglo. 
Para definir un tipo estructurado arreglo, se debe especificar el tipo base y el número de elementos. 
 
Un array se caracteríza por : 
1. Almacenar los elementos del array en posiciones de memoria contínua 
2. Tener un único nombre de variable que representa a todos los elementos, y éstos a su vez se 
diferencían por un índice o subíndice. 
3. Acceso directo o aleatorio a los elementos individuales del array. 
 
Los arrays se clasifican en : 
• Unidimensionales (vectores o listas) 
• Multidimensionales ( tablas o matrices) 
 
 
 
 
 
 
 
 
El formato para definir un tipo array es : 
PROGRAMACION I Lic. Ricardo Monzón 
Página 31 de 31 
nombre_array = array [tipo subíndice] of tipo 
nombre_array identificador válido 
tipo subíndice puede ser de tipo ordinal: 
 boolean o char, un tipo 
 enumerado o un tipo subrango. 
 Existe un elemento por cada 
 valor del tipo subíndice 
tipo describe el tipo de cada elemento 
 del vector; todos los elementos 
 de un vector son del mismo tipo 
 
Las variables de tipo array se declaran en la sección Var o Type. 
 
Declaración en Var: 
Var 
 nombres : array[1..30] of string[30]; 
 calif : array[1..30] of real; 
 numero : array[0..100] of 1..100; 
 
 
Declaración en Type: 
Type 
 nombres : array[1..30] of string[30]; 
 calif : array[1..30] of real; 
 numero: array[0..100] of 1..100; 
Var 
 nom : nombres; 
 califica : calif; 
 num : numero; 
 
 
Arrays unidimensionales 
 
Un array de una dimensión (vector o lista) es un tipo de datos estructurado compuesto de un número de 
elementos finitos, tamaño fijo y elementos homogéneos. 
Supongamos que desea conservar las edades de 10 personas. Para almacenar estas edades se necesita 
reservar 10 posiciones de memoria, darle un nombre al array, y a cada persona asignarle su edad 
correspondiente. 
 
 
Nombre del vector edades 
Subíndice [1],[2],... 
Contenido edades[2]= 28 
Ejemplo: 
Program Vector_edades; {El siguiente programa captura 20 edades y las muestra en forma 
ascendente} 
Uses Crt; 
Const 
 MaxPersonas = 10; 
Var 
PROGRAMACION I Lic. Ricardo Monzón 
Página 32 de 32 
 edades : array [1..MaxPersonas] of byte; 
 i,j,paso : byte; 
begin 
 ClrScr; 
 {lectura de array} 
 for i:=1 to MaxPersonas do 
 begin 
 gotoxy(10,5); 
 ClrEol; 
 Write('Edad de la ',i,' persona : '); 
 ReadLn(edades[i]) 
 end; 
 {ordenación} 
 for i:=1 to MaxPersonas-1 do 
 begin 
 for j:=i+1 to MaxPersonas do 
 begin 
 if edades[i]>edades[j] then 
 begin 
 paso :=edades[i]; 
 edades[i]:=edades[j]; 
 edades[j]:=paso 
 end 
 end; 
 WriteLn(edades[i]) {escritura del array} 
 end; 
 Readkey 
end. 
 
 
 
Arrays paralelos 
 
Dos o más arrays que utilizan el mismo subíndice para referirse a términos homólogos se llaman arrays 
paralelos. 
Basados en el programa anterior se tienen las edades de 'x' personas, para saber a que persona se refiere dicha 
edad se puede usar otro arreglo en forma paralela y asociarle los nombres de manera simultánea con las 
edades. 
 
 
 
Ejemplo: 
Program Paralelo_edades; {El siguiente programa captura 10 edades y nombres por medio de 
arrays paralelos y los muestra ordenados en forma ascendente} 
Uses Crt; 
Const 
 MaxPersonas = 10; 
Var 
 edades :array [1..MaxPersonas] of byte; 
 nombres :array [1..MaxPersonas] of string [10]; 
 aux_nom :string[10]; 
 i,j,aux_edad :byte; 
begin 
 ClrScr; 
 {lectura de arrays paralelos de manera simultánea} 
PROGRAMACION I Lic. Ricardo Monzón 
Página 33 de 33 
 for i:=1 to MaxPersonas do 
 begin 
 gotoxy(10,5); 
 ClrEol; 
 Write(i,'.- Nombre : ','Edad : '); 
 gotoxy(23,5);ReadLn(nombres[i]) ; 
 gotoxy(48,5);ReadLn(edades[i]) 
 end; 
 {ordenación} 
 for i:=1 to MaxPersonas-1 do 
 begin 
 for j:=i+1 to MaxPersonas do 
 begin 
 if edades[i]>edades[j] then 
 begin 
 aux_edad :=edades[i]; 
 edades[i] :=edades[j]; 
 edades[j] :=aux_edad; 
 aux_nom :=nombres[i]; 
 nombres[i]:=nombres[j]; 
 nombres[j]:=aux_nom 
 end 
 end; 
 WriteLn(nombres[i]:10,' ',edades[i]:3) 
 {escritura de los arrays paralelos} 
 end; 
 Readkey 
end. 
Arrays bidimensionales (tablas) 
 
Un array bidimensional (tabla o matríz) es un array con dos índices, al igual que los vectores que deben ser 
ordinales o tipo subrango. 
 
Para localizar o almacenar un valor en el array se deben especificar dos posiciones (dos subíndices), uno para 
la fila y otro para la columna. 
 
Formato: 
1. identificador = array [índice1, indice 2] of tipo de elemento 
2. identificador = array [ índice 1 ] of array [ indice 2 ] of tipo de elemento 
 
Supongase que se desea almacenar las calificaciones de 5 alumnos obtenidas en 3 examenes y mostrar en 
orden ascendente sus promedios respectivamente. En este caso se usará un array bidimensional (tabla o 
matríz) de 5 filas y 4 columnas en la cual se almacenará las calificaciones de 3 examenes en 3 columnas y la 
cuarta columna se utilizará para almacenar su promedio respectivo, además de un array unidimensional 
(vector) donde en forma paralela se almacenarán los nombres de los alumnos de la siguiente forma : 
 
 
 
Ejemplo: 
PROGRAMACION I Lic. Ricardo Monzón 
Página 34 de 34 
Program Matriz_Vector; {El siguiente programa captura las calificaciones de 5 alumnos en 3 
examenes, y despliega en pantalla los promedios ordenados en forma descendente } 
Uses Crt; 
Const 
 MaxAlumno = 5; 
 MaxExamen = 4;{Columna 4 almacena el promedio} 
Var 
 Alumno :array[1..MaxAlumno] of string[10]; 
 examen :array[1..MaxAlumno,1..MaxExamen] of real; 
 aux_examen :array[1..MaxExamen] of real; 
{reserva 20 posiciones de memoria de datos reales: 5 filas por 4 columnas} 
 promedio :real; 
 aux_alumno :string [10]; 
 i,j,col,ren :byte; 
begin 
 ClrScr; 
 {lectura de arrays paralelos de manera simultánea} 
 gotoxy(5,5);Write('Nombre'); 
 gotoxy(20,5);Write('Examen1 Examen2 Examen3 Promedio'); 
 col:=5;ren:=6; 
 for i:=1 to MaxAlumno do 
 begin 
 gotoxy(col,ren); 
 ReadLn(alumno[i]); {lectura de vector} 
 col:=22;promedio:=0; 
 for j:=1 to MaxExamen-1 do 
 begin 
 gotoxy(col,ren); 
 ReadLn(examen[i,j]); {lectura de matríz} 
 promedio:=promedio+examen[i,j]; 
 col:=col+10 
 end; 
 examen[i,j+1]:=promedio/3; 
 gotoxy(col,ren);Write(promedio/3:3:2); 
 inc(ren); 
 col:=5 
 end; 
 {ordenación} 
 for i:=1 to MaxAlumno-1 do 
 for j:=i+1 to MaxAlumno do 
 begin 
 if examen[i,MaxExamen]<examen[j,MaxExamen] then 
 begin 
 {intercambio de nombres en vector} 
 aux_alumno:=alumno[i]; 
 alumno[i] :=alumno[j]; 
 alumno[j] :=aux_alumno; 
 {intercambio de calificaciones en matríz} 
 move(examen[i],aux_examen,SizeOf(aux_examen)); 
 move(examen[j],examen[i],SizeOf(aux_examen)); 
 move(aux_examen,examen[j],SizeOf(aux_examen)) 
 end 
 end; 
 {recorrido de matríz y vector} 
 gotoxy(25,14);Write('Datos ordenados'); 
 gotoxy(5,16);Write('Nombre'); 
 gotoxy(20,16);Write('Examen1 Examen2 Examen3 Promedio'); 
 col:=5;ren:=17; 
 for i:=1 to MaxAlumno do 
PROGRAMACION I Lic. Ricardo Monzón 
Página 35 de 35 
 begin 
 gotoxy(col,ren); 
 Write(alumno[i]); 
 col:=22; 
 for j:=1 to MaxExamen do 
 begin 
 gotoxy(col,ren); 
 Write(examen[i,j]:3:2); 
 col:=col+10 
 end; 
 col:=5; 
 inc(ren) 
 end; 
 readkey 
end. 
 
Arrays multidimensionales 
Turbo Pascal no limita el número de dimensiones de un array, pero sí que debe estar declarado el tipo de 
cada subíndice. 
 
Formato : 
1. identificador = array [índice1] of array [índice 2].. 
of array [índice n] of tipo de elemento 
2. identificador = array [índice 1, índice 2,...,índice n] of tipo de elemento 
 
Ampliando el ejemplo anterior supongase que ahora deseamos capturar calificaciones para 3 materias en 
cuyo caso aplicaremos un array tridimensional. De la siguiente forma : 
 
 
(nombre,examen,materia) 
 
Ejemplo: 
 
Program Tridimensional; {El siguiente programa captura calificaciones de 5 alumnos en 3 
examenes de 3 materias distintas, y despliega en pantalla los promedios ordenados en forma 
descendente } 
Uses Crt; 
Const 
 MaxAlumno = 5; 
 MaxExamen = 4; {Columna 4 almacena el promedio} 
 MaxMateria = 3; 
 materia : array[1..3]of string[8]=('Fisica','Ingles','Historia'); 
Var 
 Alumno : array [1..MaxAlumno] of string[10]; 
 examen : array [1..MaxAlumno,1..MaxExamen,1..MaxMateria] of real; 
 aux_examen : array [1..MaxExamen]of real; 
 {reserva 60 posiciones de memoria de datos reales : 
 5 filas por 4 columnas y 3 dimensiones} 
PROGRAMACION I Lic. Ricardo Monzón 
Página 36de 36 
 promedio :real; 
 aux_alumno :string [10]; 
 i,j,k,col,ren : byte; 
begin 
 ClrScr; 
 {lectura de arrays paralelos de manera simultánea} 
 for k:=1 to MaxMateria do 
 begin 
 ClrScr; 
 gotoxy(34,3);Write(materia[k]); 
 gotoxy(5,5);Write('Nombre'); 
 gotoxy(20,5);Write('Examen1 Examen2 Examen3 Promedio'); 
 col:=5;ren:=6; 
 for i:=1 to MaxAlumno do 
 begin 
 gotoxy(col,ren); 
 if k=1 then 
 ReadLn(alumno[i]) {lectura de vector} 
 else 
 Write(alumno[i]); 
 col:=22;promedio:=0; 
 for j:=1 to MaxExamen-1 do 
 begin 
 gotoxy(col,ren); 
 ReadLn(examen[i,j,k]); {lectura de matríz} 
 promedio:=promedio+examen[i,j,k]; 
 col:=col+10 
 end; 
 examen[i,j+1,k]:=promedio/3; 
 gotoxy(col,ren);Write(promedio/3:3:2); 
 inc(ren); 
 col:=5 
 end; 
 gotoxy(15,22); 
 Write('Presione una tecla para continuar....'); 
 ReadKey 
 end; 
 {ordenación} 
 for k:=1 to MaxMateria do 
 for i:=1 to MaxAlumno-1 do 
 for j:=i+1 to MaxAlumno do 
 begin 
 if examen[i,MaxExamen,k]<examen[j,MaxExamen,k] then 
 begin 
 {intercambio de nombres en vector} 
 aux_alumno:=alumno[i]; 
 alumno[i] :=alumno[j]; 
 alumno[j] :=aux_alumno; 
 {intercambio de calificaciones en matríz} 
 move(examen[i,k],aux_examen,SizeOf(aux_examen)); 
 move(examen[j,k],examen[i,k],SizeOf(aux_examen)); 
 move(aux_examen,examen[j,k],SizeOf(aux_examen)) 
 end 
 end; 
 {recorrido de matríz y vector} 
 for k:=1 to MaxMateria do 
 begin 
 ClrScr; 
 gotoxy(35,4);Write(materia[k]); 
PROGRAMACION I Lic. Ricardo Monzón 
Página 37 de 37 
 gotoxy(25,5);Write('Datos ordenados'); 
 gotoxy(5,6);Write('Nombre'); 
 gotoxy(20,6);Write('Examen1 Examen2 Examen3 Promedio'); 
 col:=5;ren:=7; 
 for i:=1 to MaxAlumno do 
 begin 
 gotoxy(col,ren); 
 Write(alumno[i]); 
 col:=22; 
 for j:=1 to MaxExamen do 
 begin 
 gotoxy(col,ren); 
 Write(examen[i,j,k]:3:2); 
 col:=col+10 
 end; 
 col:=5; 
 inc(ren) 
 end; 
 gotoxy(15,22); 
 Write('Presione una tecla para continuar....'); 
 readkey 
 end 
end. 
 
Registros (record) 
Un registro es una estructura que consiste de un número fijo de componentes llamados campos. Los campos 
pueden ser de diferentes tipos y deben tener un identificador de campo. 
La definición de un tipo registro debe consistir de la palabra reservada record, seguida de una lista de campos 
y terminada por el identificador reservado end. 
 
formato: 
type 
 tipo_reg = record 
 lista id1:tipo 1; 
 lista id2:tipo 2; 
 . 
 . 
 . 
 lista idn:tipo n 
 end; 
tipo_reg nombre de la estructura o dato registro 
lista id lista de uno o más nombres de campos 
 separados por comas 
tipo puede ser cualquier tipo de dato estándar 
 o definido por el usuario 
Ejemplo : 
 
Type 
 registro_empleado = Record 
 nombre : string[30] ; 
 profesion : string[20] ; 
 puesto : string[20] ; 
 sueldo : real 
 end; 
 
Un registro puede representarse gráficamente en función de sus campos. 
PROGRAMACION I Lic. Ricardo Monzón 
Página 38 de 38 
 
 
 
 
El registro como un todo tiene el nombre registro_empleado. Este nuevo tipo que se acaba de definir puede 
utilizarse en la sección Var, para declarar variables como por ejemplo : 
 
Var 
 empleado : registro_empleado ; 
 
 
 
 
 
Para asignar valores a cada campo del registro empleado, puede procederse de la siguiente manera : 
....................... 
....................... 
....................... 
empleado.nombre := 'MENDEZ ROMERO FEDERICÓ'; 
empleado.profesion := 'INGENIERO CIVIL'; 
empleado.puesto := 'DIRECTOR'; 
empleado.sueldo := 5000.00 ; 
....................... 
....................... 
....................... 
 
Para simplificar la notación de los registros, se pueden utilizar instrucciones With Do. 
Por ejemplo, la instrucción : 
 
WriteLn(empleado.nombre:35, 
 empleado.puesto:25, 
 empleado.sueldo:15:0); 
puede escribirse : 
With empleado Do 
WriteLn(nombre:35,puesto:25,sueldo:15:0); 
Asimismo, para leer datos usamos : 
With empleado Do 
begin 
 Write('NOMBRE : '); 
 ReadLn(nombre); 
 Write('PROFESION : '); 
 ReadLn(profesion); 
 Write('PUESTO : '); 
 ReadLn(puesto); 
 Write('SUELDO MENSUAL : '); 
 ReadLn(sueldo) 
end; 
 
 
 
 
Obsérvese el siguiente segmento de programa : 
PROGRAMACION I Lic. Ricardo Monzón 
Página 39 de 39 
.............................. 
.............................. 
.............................. 
Type 
 fecha = Record 
 anio : 1900..1989 ; 
 mes : 1..12 ; 
 dia : 1..31 
 end; 
 datos = Record 
 nombre : string[30] ; 
 sueldo : real ; 
 fecha_ingreso : fecha 
 end; 
Var 
 personal : datos ; 
 ............................... 
 ............................... 
 ............................... 
 
La asignación del valor 15 al campo dia del registro personal se hace de la siguiente manera : 
personal.fecha_ingreso.dia := 15 ; 
donde : 
personal.fecha_ingreso 
hace referencia al campo fecha_ingreso del registro personal, mientras que : 
dia 
se refiere al campo dia del campo fecha_ingreso, que a su vez es un registro de tipo fecha. 
 
Usando la forma With Do quedaría : 
With personal Do With fecha_ingreso Do 
 dia := 15 ; 
que es equivalente a : 
 
With personal, fecha_ingreso Do 
 dia := 15 ; 
o también a: 
with personal Do 
 with fecha_ingreso Do 
 dia:=15; 
Ejemplo: 
Program Registro; {El siguiente programa captura 10 empleados y sus datos personales en un 
arreglo con la utilización de registros} 
Uses Crt; 
Const 
 MaxEmpleados=10; 
Type 
 registro_empleado = Record 
 nombre : string[30]; 
 profesion : string[20]; 
 puesto : string[20]; 
 sueldo : real 
 end; 
Var 
 registro : registro_empleado; 
 empleado :array[1..MaxEmpleados] of registro_empleado; 
 i,col,ren :byte; 
begin 
 ClrScr; 
PROGRAMACION I Lic. Ricardo Monzón 
Página 40 de 40 
 Write(' Nombre Profesión Puesto Sueldo'); 
 col:=1;ren:=2; 
 for i:=1 to MaxEmpleados do 
 begin 
 With registro do 
 begin 
 gotoxy(col,ren); 
 ReadLn(empleado[i].nombre); 
 gotoxy(col+21,ren); 
 ReadLn(empleado[i].profesion); 
 gotoxy(col+40,ren); 
 ReadLn(empleado[i].puesto); 
 gotoxy(col+59,ren); 
 ReadLn(empleado[i].sueldo); 
 inc(ren); 
 col:=1; 
 end 
 end; 
 ReadKey 
end. 
Conjuntos (sets) 
 
Un conjunto es una colección de objetos relacionados. Cada objeto en un conjunto es llamado miembro o 
elemento del conjunto. 
 
Aunque en matemáticas no hay restricciones para que los objetos puedan ser elementos de un conjunto, 
Pascal sólo ofrece una forma restringida de conjuntos, por lo que : 
1. Los elementos de un conjunto deben ser del mismo tipo, llamado el tipo base. 
2. El tipo base debe ser un tipo simple, excepto

Continuar navegando

Contenido elegido para ti

45 pag.
Programacion Estructurada

SIN SIGLA

User badge image

Vanina Gisele Beguiristain

153 pag.
Introduccion-prog--C

IPN

User badge image

Todos los Materiales

80 pag.
Lenguaje-C

UBAM

User badge image

Contenidos Muy Locos

151 pag.