Está en la página 1de 61

Tutorial Bsico

Pascal













1. Introduccin
Pascal y Turbo Pascal
Pascal es un lenguaje de alto nivel y de propsito general (es aplicable a un gran nmero de
aplicaciones diversas) desarrollado por el profesor suizo Niklaus Wirth como un lenguaje para
ensear la programacin con un mtodo disciplinado y sistemtico. Wirth trat de eliminar las
inconsistencias de otros lenguajes de programacin de su poca y adems que sirviera para
ensear las tcnicas de programacin a sus alumnos.
Una versin preliminar del lenguaje apareci en 1968 y a finales de 1970 apareci el primero
compilador totalmente completo.
Las diferentes versiones ofrecan interpretaciones ligeramente diferentes que impedan la
compatibilidad entre ellas. Por estas razones, mediante diferentes proyectos, se logr la
estandarizacin bajo las normas ISO (International Standards Organization), ANSI (American
National Standards Institute) y IEEE (Institute of Electrical and Electronics Engineers). Sin
embargo, las versiones ms populares conocidas como UCSD (Construida por Regents) y
Turbo Pascal (de Borland) no estn estandarizadas. Esta ltima es la ms conocida y la ms
utilizada.
Caractersticas principales
- Excelente para el aprendizaje de la informacin.
- Lenguaje de propsito general.
- Lenguaje procedimental (orientado a rdenes).
- Lenguaje estructurado (Permite while, for y repeat y no necesita el goto).
- Lenguaje recursivo (Puede llamarse a s mismo una funcin o
procedimiento).
- Riqueza en los tipos de datos.
Turbo Pascal
Fue lanzado por la firma Borland International en 1983 a modo experimental.
Fue todo un xito, pues adems de funcionar, compilaba y corra los programas
ms rpido.
Las versiones han evolucionado de la 1.0 hasta la 7.0 que cuenta con una
biblioteca de objetos denominada Turbo Visin.



2. Programacin descendente (Top - Down)
La programacin descendente o "Top - Down" es el proceso mediante el cual un problema se
descompone en una serie de niveles o pasos sucesivos de refinamiento (stepwise). La
metodologa descendente consiste en efectuar una relacin entre las sucesivas etapas de
estructuracin de modo que exista una relacin entre ellas mediante entradas y salidas de
informacin. El problema se descompone en varias estructuras jerrquicas, de forma que se
pueda considerar cada estructura desde dos puntos de vista: qu hace? y cmo lo hace?
Las estructuras desde los dos puntos de vista se representan de la siguiente
forma:

El diseo descendente se representa as:

3. Programacin modular
La programacin modular es uno de los mtodos de diseo ms flexibles y potentes para
mejorar la productividad de un programa. En programacin modular el programa se divide en
mdulos (partes independientes), cada una de las cuales ejecuta una nica funcin o actividad
y se codifican independientemente de otros mdulos. Cada uno de estos mdulos se analiza,
codifica y pone a punto por separado.
Cada programa contiene un mdulo denominado programa principal que controla todo lo que
sucede; se transfiere el control a los submdulos o subprogramas. Estos ejecutan su funcin y
una vez completada su tarea, devuelven el control al mdulo principal.
Cada submdulo se puede descomponer en otros submdulos, dependiendo de la complejidad
de la tarea a realizar y la subdivisin contina hasta que cada mdulo tenga una sola tarea
para ejecutar..
Un submdulo puede realizar tareas de distinta naturaleza como: entrada, salida, manipulacin
de datos, control de otros mdulos o una combinacin de stos. Un mdulo puede transferir
temporalmente (bifurcar) el control a otro mdulo; sin embargo, cada mdulo debe
eventualmente devolver el control al mdulo del cual recibi originalmente el control.

4. Conceptos bsicos de Pascal: datos y tipos de datos
Concepto de dato
Los diferentes objetos de informacin con los que trabaja un programa en Pascal se conocen
como datos. Todos los datos tienen un tipo asociado con ellos. Pueden ser de tipo carcter,
entero, un nmero real, etc.
La asignacin de tipos a los datos persigue dos objetivos:
- Detectar errores de operaciones en programas.
- Determinar cmo ejecutar las operaciones.

Clasificacin de los tipos de datos
Tipos de datos enteros
Turbo Pascal dispone de cinco tipos predefinidos (no necesitan una nueva definicin de parte
del programador pues cada tipo tiene un lmite) que permiten representar valores enteros.

Si se asigna un valor fuera del lmite de cada tipo, producir un mensaje de error:
Error 76: Constant out of range
Byte: Son los datos comprendidos entre 0 y 255.
Integer: Enteros que estn entre -32.768 y 32.767.
Longint: A partir de la versin 4.0 se ampla el rango de los enteros. Van desde:
-2.147,483.647 hasta 2.147,483.647.
Shortint: Son datos enteros comprendidos entre -128 y 127. Son utilizados cuando se debe
trabajar con valores pequeos y se desea economizar memoria. Ocupan 1 byte de memoria.
Word: Se utiliza cuando se desea representar nicamente valores positivos. Ocupan dos bytes
de memoria y van de 0 a 65.535.

5. Identificadores y expresiones
Identificadores
Representan los objetos de un programa (constantes, variables, tipos de datos,
procedimientos, funciones, unidades, programas y campos de registros). Un identificador es
una secuencia de caracteres de cualquier longitud, pero el lmite significativo es de 63
caracteres.
Existen tres reglas bsicas para nombrar los identificadores:
Debe comenzar con una letra (A a Z, maysculas o minsculas). No puede contener blancos.
Los caracteres permitidos despus del primer carcter son letras, dgitos y el carcter de
subrayado ( _ ).
No se puede utilizar una palabra reservada como identificador. Las palabras reservadas son
aquellos trminos que tienen un significado especial para Pascal y no se pueden utilizar para
otros propsitos.

Algunas palabras reservadas son: absolute, and, array, begin, const, div, do, downto, else, if,
in,label,mod,not,of, packed, procedure, record, set, shr, then,to, unit, uses, var, while, xor.
Expresiones
Una expresin es un conjunto de datos o funciones unidos por operadores aritmticos.
Pascal soporta los siguientes operadores:

Reglas para la evaluacin de expresiones
Todas las subexpresiones entre parntesis se evalan primero. Cuando existan
subexpresiones con parntesis anidados se evalan de dentro hacia fuera. El parntesis ms
interno se evala primero.
Prioridad de operaciones. Dentro de una misma expresin o subexpresin, los operadores se
evalan en el siguiente orden:
1 *,/, div, mod
2 +, -
Regla asociativa izquierda. Los operadores en una misma expresin o subexpresin con igual
nivel de prioridad ( *, / ) se evalan de izquierda a derecha.
Ejemplos:
a. 4 + 2 * 5 (primero la multiplicacin, luego la suma)
4 + 10
14
b. 23 * 2 div 5 (de izquierda a derecha, primero * y luego div)
46 div 5
9
Prctica
Evale las siguientes expresiones:
8 * 5 * (7+2 - (4 + 4)) R/ 40
(1 + 6) * 5 div 7 mod 4 + 1 R/ 2
3 + 4 - 14 /2 R/ 0
2 * (2 + 6 * 4) R/ 52
Especifique el orden de desarrollo de la siguiente operacin:
a - (b + c div d) + e * f
6. Concepto de sentencia
Las sentencias son pasos que describen las acciones algortmicas que pueden ser ejecutadas.
Se clasifican segn su operatividad en ejecutables y no ejecutables. Las ejecutables son
aquellas que especifican operaciones de clculos aritmticos y entradas/salidas de datos y no
ejecutables son las que no realizan ninguna accin concreta, sino que ayudan a la legibilidad
el programa sin afectar su ejecucin. Las sentencias ejecutables son aquellas que aparecen en
el cuerpo del programa luego de la palabra begin.
Estructura de un programa en Pascal
Program Nombre;
Uses
Crt,Printer;
Var
Cedula: String[16];
Apellido1: String[15];
Apellido2: String[15];
Nombre: String[20];
Edad: Integer; Begin
Clrscr;
Write (`Digite la cdula: `);
Readln (Cedula);
Write (`Digite el primer apellido: );
Readln (Apellido1);
Write (`Digite el segundo apellido: `);
Readln (Apellido2);
Write (`Digite el nombre: `);
Readln (Nombre);
Write (`Digite la edad: `);
Readln (Edad);
Write (`El empleado se llama `,Apellido1, `,Apellido2, `,Nombre, `,y tiene `,Edad,
` `,aos);
End.
7. Sentencias simples y sentencias compuestas
2.3.1Sentencias simples
Es una sentencia que no contiene ninguna otra sentencia. Se clasifican en: asignacin y
procedure.
2.3.1.1 Sentencia de asignacin
La sentencia de asignacin se utiliza para asignar (almacenar) valores o variables. La
asignacin es una operacin que sita un valor determinado en una posicin de memoria. La
operacin de asignacin puede representar en un pseudocdigo con el smbolo `?, para
denotar que el valor situado a su derecha se almacena en la variable a la izquierda.
Formato
Variable ? expresin
En Pascal el operador `? se sustituye por el smbolo :=, que se denomina carcter de
asignacin.
Ejemplos:
A := 16 (Se le asigna 16 a la variable A)
Inicial := `LJ (Se asigna el texto LJ a la variable Inicial)
N1 := N2 (El valor de la variable N1 se cambia por el valor de la variable N2).
N1 := N1 + 5 (El valor de N1 se modifica incrementndose en 5).
2.3.1.2 Sentencia procedure
Un procedure o procedimiento es un subprograma que realiza una tarea especfica. Estos son
ejecutados cuando Pascal encuentra el nombre del procedimiento. Deben estar declarados
antes de ser referenciados dentro del programa.
Ejemplo:
Program Calcula;
Var
Valor1: Integer;
Valor2: Integer;
Procedure Elmayor;
Begin
If Valor1> Valor2 then
Begin
Write (`El mayor es: `,Valor1);
Readln
End
Else
If Valor1< Valor2 then
Begin
Write (`El mayor es: `,Valor2);
Readln
End
Else
Begin
Write (`Son iguales);
Readln
End
End;
Begin
Write (`Digite un valor: `);
Readln (Valor1);
Write (`Digite otro valor: `);
Readln (Valor2);
Elmayor
End.
2.3.2 Sentencias compuestas
En numerosas ocasiones, en vez de realizar slo una accin, cuando se cumpla o no se
cumpla una determinada condicin, se deben realizar diferentes acciones. Esto es posible
gracias a las sentencias compuestas. Una sentencia compuesta es un conjunto de sentencias
separadas por puntos y comas y encerradas entre las palabras begin y end.
Ejemplo:
Begin
Readln (Numero);
Numero:= Numero+1;
Write (`El nmero es `,Numero)
End.
8. Entradas y salidas de informacin

2.4.1 Concepto de entrada
Una entrada de datos o valores es equivalente al trmino lectura. La entrada o lectura de datos
se refiere a la recepcin de valores provenientes de un dispositivo perifrico de entrada como
un teclado, una unidad de disco, un escner, etc. y su direccionamiento hacia zonas de
memoria de la computadora.
Es la entrada la operacin que nos permite proporcionar datos durante la ejecucin de un
programa. Los datos que se pueden leer son: enteros, reales, caracteres o cadenas. NO se
puede leer un boolean por tener valores preestablecidos (V o F).
Los datos estructurados como arrays, registros o conjuntos, no se pueden leer globalmente y
se suele recurrir a disear procedimientos especficos.
Los procedimientos de lectura son: Read y ReadLn. Estos esperan a que se pulse la tecla
ENTER antes de asignar un valor a la variable.
2.4.1.1 Ejemplo
Program Suma;
Uses
Crt;
Var i,j : integer; Begin
Clrscr;
Write (`Introduzca el primer nmero: `);
Readln (i);
Write (`Introduzca el segundo nmero: `);
Readln (j);
WriteLn (`La suma es `,i+j);
End.
2.4.2 Concepto de salida
Los programas para ser tiles deben proporcionar informacin de salida (resultados). Esta
salida toma informacin de la memoria y la sita o almacena en: la pantalla, en un dispositivo
de almacenamiento (disco duro o flexible), o en un puerto de E/S (puertos serie para
comunicaciones o impresoras). El procedimiento que se utiliza para visualizar o escribir la
informacin es el Write o el WriteLn. Tanto el Write como el WriteLn cumplen la misma
funcin, o sea desplegar informacin. La diferencia es que el WriteLn despliega la informacin
y salta a la lnea siguiente.
2.4.2.1 Ejemplo
Program Resultado;
Uses
Crt;
Var Nombre : String[30]; Begin
Clrscr;
Nombre := `Pedro Picapiedra;
WriteLn (`Nuestro personaje se llama `,Nombre);
End.
9. Prctica
1. Hacer un programa que lea su cdula, su nombre y su telfono y los imprima en pantalla.
2. Hacer un programa que lea tres nmeros, que calcule el mayor y el menor de esos
nmeros y los imprima.
3. Hacer un programa que lea un cdigo de producto, su descripcin, su precio unitario, las
unidades compradas y el precio total a pagar e imprima el resultado.
4. Hacer un programa que lea dos nmeros y que imprima el resultado de su suma, su
resta, su multiplicacin y su divisin.
5. Hacer un programa que lea la cdula de un trabajador, su nombre y su salario. Debe
calcular el 8% correspondiente al rebajo de la CCSS y el 1% del Banco Popular, el total de
deducciones y el salario neto.
Al final debe imprimir lo siguiente: "Estimado empleado: (nombre). En este mes su salario se
desglosa as:
Salario bruto: (Salario)
8% CCSS: (CCSS)
1% Banco Popular: (BP)
Total de deducciones: (Totded)
Salario Neto: (Salneto)
6. Escriba un programa que lea tres nmeros para tres variables a, b y c. Con base en los
valores almacenados, calcule la expresin ((a+7*c)/(b+2-a)+2*b).
10. Estructuras de control
3.1.1 Expresiones lgicas
Son acciones alternativas o decisiones que determinan el cumplimiento o no de una
determinada condicin.
Por ejemplo, supongamos que se desea disear un programa para calcular el salario semanal
de un empleado que trabaja por horas; la empresa paga un 1.5% adicional por todas las horas
trabajadas superiores a 40. El algoritmo de clculo de pago sera el siguiente:
Leer HorasTrabajadas
Si HorasTrabajadas>40 entonces
Adicional ?(HorasTrabajadas-40)*SalarioHora*1.5%
Si no
Adicional ?(HorasTrabajadas * SalarioHora)
Fin_Si
3.1.2 Operadores de relacin
Se utilizan para expresar condiciones y describen una relacin entre dos valores.

Es importante recordar aqu el orden de evaluacin de expresiones aritmticas:

3.1.3 Operadores lgicos
Las expresiones lgicas pueden combinarse para formar expresiones ms complejas. Esto se
logra utilizando los operadores lgicos: and, or y not.
La operacin and (y) combina dos condiciones simples y produce un resultado verdadero s y
slo s los dos operandos de la expresin son verdaderos.
La operacin or (o) es verdadera si uno de los dos operandos es verdadero.
La operacin not (no) acta sobre una sola condicin simple u operando y simplemente niega
o invierte su valor.
Esto se puede demostrar ms fcilmente mediante las tabla de verdad para cada operador.
3.1.3.1 Operador and

3.1.3.2 Operador or

3.1.3.3 Operador not


11. Seleccin de acciones alternativas
3.2.1 La sentencia IF
Puesto que las expresiones lgicas toman el valor verdadero o falso, se necesita una sentencia
de control que indique a la computadora que ejecute una sentencia en caso de que la
expresin sea verdadera y otra sentencia en el caso de que sea falsa. Esto se logra mediante
la sentencia IF. El siguiente ejemplo describe su utilidad.
Ejemplo:
Program Numeros;
Var
Numero : Real;
Begin
Writeln (`Introduzca un nmero `);
Read (Numero);
If Numero > 0.0 Then
Begin
Writeln (`El nmero introducido es positivo);
Readln
End Else Begin
Writeln (`El nmero introducido es negativo);
Readln
End;
End.
3.2.1 Sentencias IF anidadas
La sentencia que sigue a la palabra reservada then o else puede ser cualquiera, incluso otra
sentencia if - then - else. Cuando existe una sentencia if - then - else dentro de otra sentencia if
- then - else, se dice que dichas sentencias estn anidadas.
Ejemplo:
Program Mayor;
Uses
Wincrt;
Var
A,B,C : Integer;
Elmayor : Integer;
Begin
Writeln (`Digite tres nmeros enteros `);
Readln (A,B,C);
If A > B Then
If A > C Then
Elmayor := A
Else
Elmayor := C
Else
If B > C Then
Elmayor := B
Else
Elmayor := C;
Writeln (`El nmero mayor es: `,Elmayor)
End.
3.2.2 La sentencia CASE
La sentencia CASE se utiliza para elegir entre diferentes alternativas. Una sentencia CASE se
compone de varias sentencias simples. Cuando un CASE se ejecuta, una y slo una de las
sentencias simples se selecciona y se ejecuta.
Ejemplo:
Program Cursor;
(* Este programa mueve el cursor a travs de la pantalla mediante las teclas predefinidas,
cuando se presiona otra tecla, emite un pitido de advertencia*)
Uses
Wincrt;
Var
X,Y : Integer;
C : Char;
Begin
Clrscr;
X := 40;
Y := 10;
GotoXY (X,Y);
Write (`*);
Repeat
C := Readkey;
GotoXY (X,Y);
Write (` `);
Case C of
`S : Y := Y - 1;
`B : Y := Y + 1;
`D : X := X + 1;
`I : X := X - 1;
`P : Exit
Else
Write (Chr(7)
End;
GotoXY (X,Y);
Write (`*)
Until C = `P
End.
12. Condiciones compuestas
En numerosas ocasiones las expresiones de control de un ciclo pueden ser condiciones lgicas
compuestas, como las siguientes:
While (Datos >= 100) and (Datos >= 1000) do
While not (A <= 5) do
While (A <> B) and not Eof (input) do
Ejemplo:
Disear un programa que verifique si un nmero es primo.
Program Primos;
Var
Primo : bolean;
Nmero : Integer;
Begin
Primo: = True;
Divisor := 2;
WriteLn (`Introduzca un entero positivo: `);
ReadLn (Numero);
While (Divisor < Numero) and Primo do
Begin
If Numero mod Divisor = 0 then
Primo := False;
Divisor := Divisor + 1
End;
If primo = True then
Writeln (Numero,` ` , ` es primo)
Else
Writeln (Numero,` ` , ` no es primo)
End.
13. Ciclos
Es una estructura de control que permite la repeticin de una serie determinada de sentencias.
Se le llama tambin bucle o lazo.
El cuerpo del ciclo o bucle contiene las sentencias que se repiten. Pascal proporciona tres
estructuras o sentencias de control para especificar la repeticin: while, repeat, for.
Nos ocuparemos de estudiar el ciclo FOR y el ciclo REPEAT.
3.4.1 La sentencia FOR
En numerosas ocasiones se puede desear un bucle que se ejecute un nmero determinado de
veces, y cuyo nmero se conozca por anticipado. Para aplicaciones de este tipo se utiliza la
sentencia FOR.
La sentencia FOR requiere que conozcamos por anticipado el nmero de veces que se
ejecutan las sentencias que se encuentran dentro del ciclo. El ciclo for se incremente
automticamente.
Sintaxis:
For variable := valor inicial to valor final do
Sentencia;
Ejemplos:
1.
For c := 1 to 5 do
Begin
Write (`aa);
Write (`BB)
End;
Al ejecutarse, visualiza:
AaBBaaBBaaBBaaBBaaBB
For Caracter := `A to `Z do
WriteLn (Caracter);
3. 4. 1. 1 Decremento del contador FOR (Downto)
El contador del ciclo se puede decrementar de uno en uno en lugar de incrementar. La sintaxis
es la siguiente:
For variable := valor inicial downto valor final do
Sentencia;
Ejemplos:
For C := 5 downto 1 do
Begin
Write (`C);
Writeln
End;
Lo anterior produce la siguiente salida:
5
4
3
2
1
Tambin podemos encontrar ciclos FOR anidados:
For m := 1 to 10 do
begin
For n := 10 downto 2 do
WriteLn (m,n)
end;
3.4.2 La sentencia REPEAT
Es una variante de la sentencia while. La sentencia REPEAT especifica un ciclo condicional
que se repite hasta que la condicin se hace verdadera.
El diagrama de flujo se representa de la siguiente manera:

El seudocdigo se representa as:
Repetir
Sentencias
Hasta_que condicin
Sintaxis:
Repeat
Begin
Sentencia 1;
Sentencia 2;
...
...
...
Sentencia n;
End;
Until expresion lgica
Ejemplo:
(* El siguiente programa imprime las secuencias de caracteres hasta que se presione cualquier
tecla *)
Uses wincrt;
Var m : char;
n : integer;
Begin
Repeat
Begin
Write ('a e i o u');
Write ('1 2 3 4 5');
End;
Until keypressed
End.
14. Prctica
1. Los patos de un granjero se venden a precios especiales si son grandes pero no demasiado.
Disee un programa que lea el nmero de patos que posee el granjero y el peso de cada ave.
Al final debe especificar cuntos patos pesan entre 1.5 kilos y 2 kilos inclusive.
2. Disee un programa para calcular e imprimir los primeros 2000 nmeros enteros positivos.
3. Leer las notas de 50 exmenes e imprimir cuntos de ellos tienen nota mayor o igual a 70.
4. Hacer un programa que lea los montos de las N ventas hechas por una tienda en un da y
que imprima el monto total de ventas y el monto promedio.
5. Hacer un programa que lea 10 valores numricos (positivos y negativos). Debe imprimir el
nmero de valores negativos, el nmero de valores iguales a cero y el promedio de valores
positivos.
6. Encuentre la suma de los primeros 50 nmeros enteros pares.
7. El inters simple se calcula mediante la frmula A=P(1+i*n), donde A=Monto de Inters,
P=Capital, N=Nmero de aos e i=tasa de inters.
8. Hacer un programa que lea: P, i, y N e imprima el monto de inters a travs del nmero de
aos ledo.
9. Disee un programa para calcular la nmina semanal de una compaa con N empleados.
Por cada empleado, se debe leer: N de empleado, salario por hora y nmero de horas
trabajadas. Por cada empleado se debe imprimir: N de empleado, salario bruto, impuesto
federal, impuesto estatal, cuota del seguro social y salario neto. Los impuestos federales son el
15% del salario bruto, los estatales el 6% y el seguro social el 7%. El salario se calcula de la
siguiente manera: Por las primeras 40 horas o menos se paga el salario normal por hora. Por
las horas extra (ms de 40) se paga 1.5% adicional por hora.
10. Disee un programa para calcular cuntas veces se puede dividir un nmero X entre un
nmero Y de tal manera que el resultado de la divisin sea un nmero entero.
15. Subprogramas: Funciones y Procedimientos
4.1 Procedimientos
4.1.1 Concepto
Un procedimiento es un programa que realiza una tarea especfica. Puede recibir cero o ms
valores del programa que llama y devolver cero o ms valores al programa que realiz la
llamada. Un procedimiento est compuesto de un grupo de sentencias a las que se asigna un
nombre (identificador) y constituye una unidad de programa. La tarea asignada al
procedimiento se ejecuta siempre que Pascal encuentra el nombre del procedimiento.
Los procedimientos es obligatorio declararlos y deben ser declarados antes de que puedan ser
referenciados en el cuerpo del programa. En Pascal reciben el nombre de PROCEDURE.
4.1.2 Declaracin de un procedimiento
Al igual que los identificadores, los procedimientos deben declararse dentro del cuerpo del
programa. La declaracin de un procedimiento NO indica a la computadora que ejecute las
instrucciones dadas, sino que indica a la computadora cules son estas instrucciones y dnde
estn localizadas cuando sea necesario.
El formato del procedimiento es el siguiente:
Procedure nombreproc;
Declaraciones locales
Begin
Cuerpo del procedimiento
End;
A las variables que se encuentran dentro de un procedimiento se les llaman Variables Locales
y a las que se ubican en el cuerpo principal, fuera de los procedimientos, se les llama
Variables Globales.
En resumen, un procedimiento, al igual que un programa, consta de tres partes:
Una cabecera del procedimiento que proporciona el nombre del mismo y, en caso de existir,
una lista de parmetros formales.
Una seccin de declaracin que puede contener constantes, variables e incluso otros
procedimientos.
Una seccin ejecutable: el cuerpo del procedimiento.
Ejemplo:
Program Recuadro;
Var I : Integer;
Procedure Estrellas;
(* Este procedimiento visualiza 15 asteriscos *)
Begin
For I := 1 to 15 do
Write (`*)
End;
Begin
Estrellas; (* Llamado del procedure *);
Write (`Mensajes);
Estrellas; (* Nuevo llamado del procedure *);
End.
4.1.3 Ventajas de utilizar procedimientos
La organizacin de un programa en procedimientos lo hace ms fcil de escribir y depurar. Los
procedimientos no deben exceder de 25 lneas.
Las ventajas de utilizar procedimientos son:
Facilita el diseo descendente.
Los procedimientos se pueden ejecutar ms de una vez en un programa y/o en diferentes
programas, ahorrando tiempo de programacin.
El uso de procedimientos facilita la divisin de las tareas entre un equipo de programadores y
se pueden comprobar individualmente.


16. Parmetros

4.2.1 Concepto
Un parmetro es un mtodo para pasar informacin (valores a variables) del programa principal
a un procedimiento y viceversa.
Un parmetro es, prcticamente, una variable cuyo valor debe ser ya sea proporcionado por el
programa principal al procedimiento o ser devuelto desde el procedimiento hasta el programa
principal. Por consiguiente, existen dos tipos de parmetros:
- Parmetros de entrada: Sus valores deben ser proporcionados por el programa principal.
- Parmetros de salida: Son parmetros cuyos valores se calcularn en el procedimiento y
se deben devolver al programa principal para su proceso posterior.
4.2.2 Transferencia de informacin desde y/o hasta los procedimientos
Existen dos tipos de procedimientos:
- Procedimientos sin parmetros: No existe comunicacin entre el programa principal y los
procedimientos ni viceversa.
- Procedimientos con parmetros: Existe comunicacin entre el programa principal y los
procedimientos o entre dos procedimientos.
Ejemplo 1:
(Parmetros de entrada)
Procedure RecuadroDos (N : Integer);
Var
J : Integer;
Begin
For J := 1 to N do
Write(`*)
End;
Ejemplo 2:
(Parmetros de entrada/salida)
El procedimiento Geometria recibe la longitud y anchura de un rectngulo, calcula el rea y
permetro del rectngulo y devuelve los valores obtenidos al programa principal.
Procedure Geometria (Longitud, Anchura : Real; Var Area, Permetro : Real);
Begin
Area := Longitud * Anchura;
Perimetro := 2 * (Longitud + Anchura)
End;
4.2.3 Parmetros actuales y formales
Las sentencias llamadas a procedimientos constan de dos partes: un nombre de procedimiento
y una lista de parmetros llamados actuales:
Nombreproc (pa1,pa2, pa3,...);
Los parmetros actuales pa1, pa2, pa3, ... deben tener unos valores que se pasan al
procedimiento nombreproc.
En la declaracin de un procedimiento cuando se incluyen parmetros, stos se denominan
parmetros formales o ficticios (pf1, pf2, pf3, ...). Ellos sirven para contener los valores de los
parmetros actuales cuando se invoca el procedimiento.
Procedure nombreproc (pf1, pf2, pf3, ...)
El valor de los parmetros actuales no se conoce cuando se declara el procedimiento, sin
embargo, cuando se ejecuta la sentencia de llamada al procedimiento es preciso que tengan
valores asignados, ya que en caso contrario se producir un error.
Program Correspondencia;
Uses Wincrt;
Var
X,Y,A,P : real;
Procedure Geometria (Longitud, Anchura : Real; Var Area, Perimetro : Real);
Begin (* Geometra *)
Area := Longitud * Anchura;
Perimetro := 2 * (Longitud + Anchura)
End;
Begin
WriteLn ('Introducir longitud: ');
Readln (X);
WriteLn ('Introducir anchura: ');
Readln (Y);
Geometria (X,Y,A,P); (* Llamada al procedimiento *)
WriteLn ('El rea es: ', A:6:2);
WriteLn ('El permetro es: ', P:6:2)
End.
17. Parmetros valor y parmetros variable
4.2.4.1 Parmetros valor
Son parmetros unidireccionales que se utilizan para proporcionar informacin a un
procedimiento, pero no pueden devolver valores. Si la palabra var no aparece delante del
parmetro formal en un procedimiento, la computadora supone que el parmetro formal es un
parmetro valor. En la llamada al procedimiento el valor del parmetro actual se pasa a la
variable que represente el parmetro actual. Este valor puede ser modificado dentro del
programa, pero su valor no se puede devolver al programa o procedimiento llamante.
4.2.4.2 Parmetros variable
En la declaracin de un procedimiento, los nombres de los parmetros variables estn
precedidos con la palabra var. Los parmetros variable se utilizan tanto para recibir como para
transmitir valores entre el subprograma y el programa llamante. Estos parmetros pueden
actuar como parmetros de salida o de entrada/salida.
El siguiente ejemplo ilustra la diferencia entre parmetros valor y variable en Pascal y la
correspondencia entre ellos.
Program EjemploParametros;
Uses Wincrt;
Var
A,B,C : Integer;
Procedure Imprimir (D, E, F : Integer);
Begin
WriteLn ('A = ', D:1, ' ':5,'B = ', E:1,' ':5,'C = ', F:1)
End;
Procedure Pasar (D,E : Integer; Var F : Integer);
Begin
Writeln ('Entrada al procedimiento Pasar');
Imprimir (D, E, F);
F := D * E;
WriteLn ('Salida del procedimiento Pasar');
Imprimir (D, E, F)
End;
Begin
A := 2;
B := 3;
C := 4;
WriteLn ('Antes de llamar al procedimiento Pasar');
Imprimir (A, B, C);
Pasar(A, B, C);
WriteLn ('Despus de llamar al procedimiento Pasar');
Imprimir (A, B, C);
End.
La salida de este programa es:
Antes de llamar al procedimiento Pasar
a = 2 b = 3 c = 4
Entrada al procedimiento Pasar
a = 2 b = 3 c = 4
Salida del procedimiento Pasar
a = 2 b = 3 c = 6
Despus del retorno del procedimiento Pasar
a = 2 b = 3 c = 6
18. Subprogramas: Funciones y Procedimientos
4.2 Paso de parmetros (repaso...)
4.2.1 Ejemplo
En este ejemplo los parmetros formales a y b recibe, cuando son llamados, los valores
contenidos en los parmetros actuales de x e y.
Program Calculo;
Uses wincrt;
Var
x,y : real;
Procedure mayor (a,b : real);
Var
max : real;
Begin
if a > b then
max := a
else
max := b;
writeln ('El mayor de los dos nmeros es ',max:4:2);
End;
Begin
repeat
write ('Introduzca dos nmeros ');
readln (x,y);
mayor (x,y)
until x = 0
End.
4.2.2 Ejemplo
El siguiente ejemplo muestra un intercambio de valores de dos variables con un procedimiento.
Program Intercambio;
Uses wincrt;
Var
x,y : real;
resp : char;
Procedure cambio (var a,b : real);
Var
aux : real;
Begin
aux := a;
a := b;
b := aux;
writeln ('Ahora el valor de a es ',a:5:2,' y el valor de b es ',b:5:2);
End;
Begin
repeat
clrscr;
write ('Introduzca el valor para x ');
readln (x);
write ('Introduzca el valor para y ');
readln (y);
cambio(x,y);
writeln;
write ('Desea continuar (S/N)?');
readln (resp);
until (resp = 'N') or (resp = 'n')
End.
19. Funciones en Turbo Pascal
Una funcin es un subprograma que recibe como argumentos o parmetros datos de un tipo
numrico o no numrico (char, string, bolean u otros) y devuelve un resultado. Esta
caracterstica le diferencia de un procedimiento.
El pseudocdigo es el siguiente:
Nombre_funcin (argumento1,argumento2,...);
Los argumentos es lo que se conoce en Pascal como parmetros. Para poder calcular el valor
o resultado de la funcin, todo lo que se necesita conocer es el valor o valores de los
parmetros respectivos.

4.3.1 Funciones aritmticas o matemticas
4.3.2 Funciones definidas por el usuario
Adems de las funciones predefinidas citadas anteriormente, es posible que el usuario pueda
declarar sus propias funciones de igual modo que declara sus procedimientos.
Una funcin es un subprograma que devuelve un nico resultado al programa o subprograma
que le llam. La sintaxis es muy similar a la de un procedimiento.
Function nombre (parmetros): tipo
(declaracin de variables locales)
begin
<cuerpo de la funcin>
nombre de la funcin := valor de la funcin
end;
Comparacin entre funciones y procedimientos
En vez de la palabra procedure se debe utilizar la palabra function
Al igual que en los procedimientos, el nombre de una funcin es un identificador. Sin embargo,
el nombre de la funcin se refiere a la posicin de memoria que contiene el valor devuelto por
la funcin.
La lista de los parmetros formales son los identificadores utilizados para recibir valores del
programa.
El tipo de datos del resultado coincide con el tipo expresado en la cabecera de la funcin.
En el cuerpo de la funcin tiene que existir una sentencia de asignacin como la siguiente:
Nombre_funcin := valor_funcin
La funcin slo devuelve un valor, el procedimiento puede devolver cero, uno o varios valores.
El tipo de dato del resultado de la funcin debe estar indicado en la cabecera y puede ser tipo
char, integer, real o bolean.
Ejemplo:
Program Cubo;
Uses
Wincrt;
Var
Num,valor : integer;
Function El_cubo (Numero: integer):integer;
Begin
valor := Num*Num*Num;
End;
Begin
Write ('Digite un nmero entero: ');
Readln (Num);
El_cubo(Num);
Write ('El cubo de ',Num,' es ',valor);
End.
20. Prctica general
1. Hacer un programa que calcule lea el Id. del empleado, el nombre del empleado y el
salario bruto.
Debe utilizar un procedimiento de clculo tomando como parmetro el salario bruto (utilice una
variable diferente al del programa principal). Finalmente, debe calcular la deduccin de la Caja
y del Banco Popular y el salario neto.
La salida del programa debe ser la siguiente:
El empleado (nombre), cdula No. (id_empleado), obtuvo un salario neto de...
Sus deducciones suman ....
Hacer un programa de funciones aritmticas que lea un nmero real y mediante un men y
utilizando procedimientos para cada funcin calcule:
- El seno de ese nmero
- El cuadrado de ese nmero
- La raz cuadrada de ese nmero
- La parte decimal del nmero
- La parte entera del nmero
Disee un programa que mediante una funcin calcule la suma de los nmeros que estn en
un rango establecido. (Por ejemplo de 1 a 100). Pruebe con varios rangos.
Escribir un programa que, mediante una funcin devuelva el valor del da de la semana en
respuesta a la entrada de la letra inicial de dicho da.
Mediante una funcin, determinar el nmero de das de un mes dado.
Escriba un programa que mediante una funcin determine si un nmero es primo.
21. Respuestas
Respuesta No 1.
Program Salario;
Uses wincrt;
Var
id_empleado,i,n : integer;
nom_empleado : string [40];
sal_bruto,salario_neto,tod_ded: real;
resp : char;
Procedure calcula (var sal_brut : real);
Var
cc_ss,b_p : real;
Begin
cc_ss := sal_brut * 0.08;
b_p := sal_brut * 0.01;
tod_ded := cc_ss + b_p;
salario_neto := sal_brut - tod_ded
End;
Begin
i:=1;
Write ('Digite el nmero de empleados a procesar: ');
readln (n);
While i <= n do
begin
clrscr;
write ('Id. del empleado ',i,' de ',n,' : ');
readln (id_empleado);
write ('Nombre: ');
readln (nom_empleado);
write ('Salario bruto: ');
readln (sal_bruto);
writeln;
calcula(sal_bruto);
writeln;
writeln ('El salario neto de ',nom_empleado,' es ',salario_neto:10:2);
writeln ('Sus deducciones fueron ',tod_ded:10:2);
writeln;
writeln ('Presione enter para continuar...');
readln;
i := i+1;
end;
End.
Respuesta No. 3.
Program sumas;
Uses wincrt;
Var i,n:integer;
Function Sumar (N : integer) : integer;
Var suma : integer;
Begin
Suma := 0;
For i:= 1 to N do
suma := suma + i;
Sumar := Suma;
Write ('La suma de los nmeros del 1',' al ',n, ' es: ',suma);
Readln;
End;
Begin
Write ('Digite el nmero mximo: ');
Readln (N);
Sumar (N);
End.
Respuesta No. 6.
Program TestPrimos;
Uses Wincrt;
Var
N : integer;
Function Primo (Q : integer) : boolean;
Var
D : integer;
P : boolean;
Begin
If Q < 4 then
Primo := True
Else
Begin
P:= True;
D := 2;
While P and (D<=Q div 2) do
Begin
P := Q mod D <> 0;
D := D + 1
End;
Primo := P
End
End;
Begin
Writeln ('Introduzca un entero positivo o cero para terminar: ');
Readln (N);
While N > 0 do
Begin
If Primo (N) then
Writeln (N,' es primo')
Else
Writeln (N,' no es primo');
Writeln ('Introduzca otro entero');
Readln (N);
End;
Writeln
End.
22. Arreglos
Introduccin
Primero que todo, es importante conocer el concepto de estructura de datos. Una estructura de
datos es "una coleccin de datos organizados de un modo particular." Las estructuras de datos
pueden ser de dos tipos: estticas y dinmicas.
Las estructuras de datos estticas son aquellas a las que se le asigna una cantidad fija de
memoria cuando se declara la variable. Las estructuras de datos dinmicas son aquellas cuya
ocupacin de memoria puede aumentar o disminuir durante el tiempo de ejecucin. Entre las
estructuras de datos estticas podemos encontrar los vectores y los arreglos, tema que
estudiaremos a continuacin.
5.0 Concepto
Un array (se suele traducir como arreglo) es una estructura de datos en la que se almacena
una coleccin de datos del mismo tipo, por ejemplo, los salarios de los empleados de una
empresa.
Un array es una lista de un nmero determinado de elementos del mismo tipo. Se caracteriza
por: - Almacenar los elementos del array en posiciones de memoria continua.
- Tener un nico nombre de variable (por ejemplo salarios) que represente a todos los
elementos. stos a su vez se diferencian por un ndice o subndice.
- Se puede accesar directa o aleatoriamente los elementos del array.
23. Arrays unidimensionales: Los vectores
Un array de una dimensin (unidimensional), tambin llamado vector o fila, es un tipo de datos
estructurado compuesto de un nmero determinado de elementos, de tamao fijo y elementos
homogneos (del mismo tipo). La caracterstica de tamao fijo se refiere a que el tamao del
array debe ser conocido en tiempo de compilacin.
Por ejemplo, si deseamos conservar las puntuaciones de los 50 estudiantes de un examen de
informtica, se necesita reservar cincuenta posiciones de memoria, dar un nombre al arreglo y
a cada uno de los 50 estudiantes asignarles una posicin o ndice del arreglo.

5.1.1 Declaracin de un array o vector
Siempre se deben declarar luego de las constantes (si existen). Un array o vector se declara
por medio del tipo de array. La sintaxis es la siguiente:
Type
Nombre_array = array [rango del subndice] of tipo;
Nombre_array: Se refiere a un nombre de identificador vlido.
Tipo_subndice: Puede ser boolean, char o un rango de tipo enumerado.
Tipo: Se refiere al tipo de los elementos del vector. Todos los elementos deben ser del mismo
tipo.
Ejemplos:
Type
X = array [1..8] of real;
Type
Luces = (Rojo, Verde, mbar);
Type
DiasDeSemana=(Lunes, Martes, Mircoles, Jueves, Viernes, Sabado, Domingo);
ConjuntoDias = array
Type
Salarios = array [A..Z] of real;
(En este caso es de tipo real porque el salario es de ese tipo. El subndice indica que los
salarios van de los empleados cuya inicial es A hasta la Z).
Las declaraciones de tipo array no crea ninguna variable especfica de tipo array, sino que
proporciona informacin del array como un todo.
Para declarar una variable tipo array, se utiliza la siguiente sintaxis:
Type
Valores = array [1..10] of real;
Var
Precios : Valores;
Primeramente se crea el tipo del array y luego se declara la o las variables referenciadas al
array.
Otro ejemplo de aplicacin puede ser el siguiente:
Const
Max = 500;
Type
Texto = array [1..Max] of char;
Var
Palabras, Letras: Texto;
En este ejemplo se crean dos variables arrays: Palabras y Letras. Las posiciones del array van
de 1 a 500 y contendrn un valor tipo caracter.
5.1.2 Lectura y escritura de un vector
5.1.2.1 Lectura
Para leer un vector se debe hacer elemento a elemento y se requiere de alguna estructura
repetitiva, ya sea un while, repeat o for.
Ejemplos:
I := 1; I := 1; For I:= 1 to n do
While I <= 100 do Repeat Readln(Notas[I]);
Begin Read (Notas[I]);
Read (Notas [I]); I := I + 1
I := I+1 Until I > 100
End;
5.1.2.1 Escritura
Para visualizar un vector, igualmente, es necesario situarlo dentro de una estructura repetitiva.
For I := 1 to Numero do
Writeln (Notas [I]:3);
Writeln; (* Evita que todas las salidas del vector aparezca en la misma lnea *)
24. Arrays bidimensionales: Tablas o matrices
Un array bidimensional (tambin llamado tabla o matriz) es un array con dos ndices. Al igual
que los vectores deben ser ordinales. Se declaran de igual manera que los arrays de una
dimensin.
5.2.1 Declaracin de un array bidimensional
Al igual que en los arrays unidimensionales o vectores, se crean con declaraciones type y var
y deben ser de tipo ordinales o subrango. Se deben indicar:
- El nombre del array
- Tipo del array
- Rango permitido
Ejemplo:
Type
Tabla = array [1..25,1..4] of real;
Var
Grados : Tabla;
Para localizar o almacenar un valor en el array se deben especificar dos posiciones o
subndices, uno para la fila y otro para la columna.
5.2.2 Escritura de una matriz
Para escribir un vector, se debe hacer referencia tanto a la fila como a la columna. As:
For fila := 1 to 3 do
Begin
For Columna := 1 to 4 do
Write (A[Fila, Columna]:4);
End;
Ejemplo:
Calcular el promedio de cada estudiante de una lista de veinticinco alumnos de una clase de
informtica con notas en cuatro asignaturas.
Program Promedio;
Var
Notas : Array [1..25,1..4] of real;
I,J : Integer;
Suma,Prom: Real;
Begin
For I := 1 to 25 do
Begin
Write (`Notas del estudiante: ,I:1);
Writeln (`En una misma lnea digite todas las notas);
Suma := 0;
For J := 1 to 4 do
Begin
Read (Notas[I,J]);
Suma := Suma + Notas[I,J]
End;
Readln;
Prom := Suma/4;
Writeln (`La nota promedio del estudiante `,I:1, es `,Prom:1:1)
End
End.
25. Prctica
Escriba un programa que almacene en un vector los das de la semana.
Escriba un programa que almacene en un vector su nombre.
Escriba un programa que almacene en un vector los nmeros pares del 1 al 10.
Escriba un programa que lea diez nmeros enteros y los invierta.
Escriba un programa que lea las dimensiones de una matriz, las lea, visualice la matriz y que
encuentre el menor y mayor elemento de esa matriz y sus posiciones.
Escriba un programa que encripte un password de siete letras debe contener consonantes y
vocales. El algoritmo de encriptacin ser sustituir cada vocal por el nmero que le
corresponde. (A=1, E=2,O=3,I=4,U=5).
Escribir un programa que en una matriz almacene los nmeros primos del 1 al 100.
Escriba un programa que capture e imprima la siguiente tabla:
Distrito Candidato A Candidato B Candidato C
1 194 48 206
2 180 20 320
3 221 90 821
4 432 50 946
Escriba un programa que almacene en una matriz los nmeros pares del 1 al 40 y los imprima.
26. Cadenas (Strings)
6.1 Definicin
Pascal, como cualquier otro lenguaje, debe tener la capacidad de procesar frases como
"Presione ENTER para continuar", "Calculando...", "Proceso terminado", etc.
Los datos tipo char y string permiten la manipulacin de datos no numricos.
Una cadena de caracteres o string es una serie de caracteres cuya longitud (nmero de
caracteres que contiene) puede variar de 1 hasta 255 caracteres. Turbo Pascal tiene el tipo de
dato string que almacena informacin de texto. Este dato se puede almacenar en constantes y
en variables de cadena. Una variable de cadena est declarada para la palabra string seguida
de la longitud mxima de la cadena encerrada entre corchetes.
6.1.1 Declaracin de una variable tipo string
Las variables de cadena se pueden declarar las de cualquier otro tipo, ya sea en la seccin var
o en type.
Si se declara como var, se hace de la siguiente manera:
Var
Mensaje : string [80];
Nombre : string [40];
Si la cadena es declarada como type, haramos la declaracin as:
Type
Cadena80 = string [80];
Cadena40 = string [40];
Var
Mensaje : Cadena80;
Nombre : Cadena40;
Es importante recordar que si se declara como Type inmediatamente despus, dentro de las
variables, se debe declarar una variable que haga referencia al Type.
Una vez declaradas las variables de cadena se pueden realizar asignaciones o bien
operaciones de lectura / escritura en los programas.
Por ejemplo:
Program Ejemplo;
Var
Mensaje = string[40];
Begin
Mensaje := `Hola mis amigos, por favor estudien bastante;
Write (`Mi mensaje de hoy para ustedes es: `),Mensaje;
Writeln;
Write (`Presione enter...);
Readln
End.
6.1.2 Longitud de una cadena
Una cadena fsicamente es una estructura de una secuencia de 0 hasta 255 caracteres de
longitud. Sin embargo, la ocupacin en memoria de una cadena es un nmero de bytes igual al
de caracteres de la cadena ms uno. As la cadena:
`Programador
tiene una longitud de 11 caracteres, entonces ocupar en memoria 12 bytes. Esto se debe a
que el primer byte en una cadena, contiene la longitud de la cadena actualmente almacenada
en memoria.

Supongamos que esta palabra corresponde a un dato almacenado en la variable PUESTO que
fue definida de la siguiente manera:
Var
Puesto : String[20];
Sucede que, entonces, la longitud lgica de la variable ser de 11 bytes pero la longitud fsica
ser de 20 bytes pues as fue definida.
6.1.3 Asignacin de cadenas
A las variables de cadena, como se ha visto, se pueden dar valores con una sentencia de
asignacin o con una sentencia de lectura (read). Ambas situaciones se pueden describir con
la ecuacin:
Destino fuente
Donde destino es la cadena a la que se da un valor y fuente es la expresin de cadena que
contiene el correspondiente valor. Esta ecuacin acta como la sentencia de asignacin que
evala la cadena fuente y se almacena en la variable de la cadena destino.
Dependiendo del tamao (longitud de la cadena) de las cadenas fuente y destino se pueden
presentar tres casos diferentes que analizaremos a partir de la siguiente declaracin de
variables de cadena.
Var
Cad1 : String [8];
Cad2 : String [11];
Cad3 : String [15];
Cad4 : String [11];
6.1.3.1 Caso I. Las longitudes de la cadena destino y fuente son iguales
Supongamos que se ejecuta la sentencia
Cad2 := `informatica;
Este caso no presenta problemas, pues cada posicin de cad2 se rellena con un carcter.
Cad2 I N F O R M A T I C A
1 2 3 4 5 6 7 8 9 10 11
Lo mismo sucede si se ejecuta la sentencia
Cad4 := Cad2;
6.1.3.2 Caso II. La longitud de la cadena destino es mayor que la cadena fuente
Supongamos que ahora se ejecuta la sentencia
Cad3 := Cad2;
Resultar que Cad3 tiene 15 caracteres y slo hay 11 caracteres en cad2. La cadena Cad3
seguir teniendo una longitud mxima de 15 caracteres, pero slo se almacenan en ella ahora
11 caracteres y su longitud actual ser de 11.
Cad3 I N F O R M A T I C A longitud actual = 11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 longitud mxima = 15
6.1.3.3 Caso II. La longitud de la cadena destino es mayor que la cadena fuente
Supongamos que se trata de ejecutar ahora
Cad1 := Cad2;
En este caso, como Cad1 tiene una longitud de ocho caracteres, la cadena destino no se
puede almacenar totalmente. En este caso se trunca la cadena destino y se almacenan en
Cad1 los primeros ocho caracteres (de izquierda a derecha) de Cad2.
Cad1 I N F O R M A T longitud actual = 11
1 2 3 4 5 6 7 8 longitud mxima = 8

28. Prctica para el examen
1. Escriba un programa que almacene en una cadena su nombre y lo invierta.
2. Escriba un programa que almacene en un vector los nmeros pares del 1 al 10.
3. Escribir un programa que en una matriz almacene los nmeros primos del 1 al 100 y que
al final del programa, en una variable proporcione la suma.
4. Escriba un programa que lea diez nmeros enteros y los invierta.
5. Escriba un programa que cuente las vocales de una palabra.
6. Escriba un programa que lea una cadena de caracteres en minscula y la convierta a
mayscula. Utilice procedimientos.
7. Escriba un programa para almacenar la siguiente tabla, que cuente los votos e imprima el
candidato ganador.
Distrito Candidato A Candidato B Candidato C
1 194 48 206
2 180 20 320
3 221 90 140
4 432 50 821
8. Hacer un programa que lea una cadena de caracteres, que imprima la longitud de la
cadena y contar el nmero de vocales que tiene la palabra o frase.

29. Punteros
Introduccin
Como vimos anteriormente en la leccin nmero 5, las estructuras de datos dinmicas son
aquellas cuya ocupacin de memoria puede aumentar o disminuir durante el tiempo de
ejecucin. Mediante los punteros, tema que estudiaremos a continuacin, podemos crear
estructuras de datos dinmicas que tienen capacidad de variar en tamao y ocupar tanta
memoria como realmente requieran. Estas estructuras son llamadas punteros.
7.1 Concepto
Los punteros son tambin llamados apuntadores. Son tipos de datos que permiten crear
estructuras de datos dinmicas, las cuales pueden variar en tamao y memoria requerida. Las
variables que se crean y se destruyen durante la ejecucin se llaman variables dinmicas o
annimas. As, durante la ejecucin de un programa, puede haber una posicin de memoria
especfica asociada con una variable dinmica y posteriormente puede no existir ninguna
posicin de memoria asociada con ella.
Una estructura de datos dinmica es una coleccin de elementos llamados nodos de la
estructura - normalmente tipo registro- que se enlazan o encadenan juntos. Este enlace se
establece asociando con cada nodo un puntero que apunta al nodo siguiente de la estructura.
Las estructuras de datos dinmicas son tiles para almacenar y procesar conjuntos de datos
cuyos tamaos cambian durante la ejecucin del programa, por ejemplo, el conjunto de
trabajos que se han introducido en una computadora y estn esperando su ejecucin o el
conjunto de nombres de pasajeros y asignacin o el conjunto de nombres de pasajeros y
asignacin respectiva de asientos de un vuelo de avin determinado.
Pascal proporciona los mtodos para asignar y liberar espacio de memoria utilizando punteros
y los procedimientos new y dispose.
El tipo de datos puntero es de tipo simple pues no se puede romper en otros componentes ms
pequeos, como s sucede con el array o el registro. Los punteros son variables que se utilizan
para almacenar la direccin de memoria de otra variable. Las variables que se utilizan para
almacenar direcciones son llamadas variables puntero o simplemente puntero.
Grficamente se representa as

Al definir un puntero se debe indicar el tipo de valores que se almacenarn en las posiciones
designadas por los punteros. Esto se debe a que los diferentes tipos de datos requieren
distintas cantidades de memoria para almacenar sus constantes, una variable puntero puede
contener una direccin de una posicin de memoria adecuada slo para un tipo dado.
Por esta razn se dice que un puntero apunta a una variable particular, es decir, a otra posicin
de memoria.
Una variable tipo puntero contiene la direccin de la posicin de otra variable.
7.1.1 Declaracin de punteros
Se puede declarar un puntero a una variable carcter, a un array de enteros, a un registro, o a
cualquier otro tipo de dato. Y se pueden declarar como Var o Type.
La sintaxis para la declaracin de un puntero es la siguiente:
Var
Nombre-variable : ^ identificador - tipo
Ejemplo:
Var
Ptr : ^Real
La variable Ptr apunta a un tipo de dato TipoElemento.
Un ejemplo grfico es el siguiente, donde la variable P contiene 059164 que es la direccin de
memoria donde est la variable entera apuntada 345:

30. Operaciones con punteros
Como se dijo anteriormente, los punteros se crean con las declaraciones:
Type
PuntX = ^Real;
Var
P : PuntX;
P es una variable puntero de tipo PuntX que apunta a posiciones que contienen valores de tipo
real. La posicin de memoria designada por el valor de la variable puntero P se representa por
P^. Se pueden asignar valores a P^ y utilizar valores de P^ en expresiones tal como cualquier
otra variable. Si P apunta a posiciones que contiene reales, P^ es una variable real.
Ejemplo:
P^ := 1000 El valor de P^ es 1000
3 * P^ + 500 El valor de P^ es 3500
Sin embargo, estas operaciones no se pueden realizar directamente luego de la declaracin,
debido a que el objeto o direccin P^ no existe. Antes de que un programa utilice un puntero,
se requiere abrir espacio para el tipo de datos objeto de la direccin del puntero. Para iniciar un
puntero se debe utilizar el procedimiento NEW.
7.2.1 New
La declaracin de un puntero P no crea una celda de memoria para apuntar a ella. El
procedimiento (sentencia) New se utiliza para crear la celda de memoria P; es decir, el
procedimiento New crea una variable dinmica y establece que una variable puntero apunte a
ella.
Sintaxis:
New (P)
P representa la variable puntero.
La sentencia New (P); llama al procedimiento New que asigna almacenamiento para un valor
determinado y sita la direccin de esta celda de memoria en la variable puntero P. Una vez
que se asigna almacenamiento para un valor de tipo determinado al que est apuntando P, se
puede almacenar un valor en esa celda de memoria y manipularlo.
Ejemplo:
New (Ptr);
Ptr^ := `Mckenna;
La sentencia New (Ptr) crea una celda vaca de memoria a la que apunta Ptr. La segunda
sentencia sita el valor `Mckenna en esa celda de memoria.
Grficamente se representara as:

7.2.2 Dispose
El procedimiento Dispose libera la posicin de memoria ocupada por una variable dinmica.
Sintaxis:
Dispose (P) (* P es una variable tipo puntero *)
Grficamente se representa as:

Dispose destruye la variable referenciada por P y devuelve su zona de memoria
7.2.2.1 Constante nil
Pascal proporciona una constante predefinida, nil (nulo. La constante nil se utiliza para dar un
valor a una variable puntero que no apunta a ninguna posicin, nil puede ser asignad a un
puntero de cualquier tipo.
P:= nil;
P:=5
Ejemplo:
Var
P,Q : ^Integer;
Begin
New (P);
P^ :=8;
Q^ :=P;
Q^ :=5;
Dispose (P)
End.
7.2.3 Assigned
Determina si un puntero o variable de tipo procedimiento es nil. Especifica si el argumento es
nil o e el argumento tiene un valor. Su sintaxis es:
Function Assigned (Var P) : Bolean;
P debe ser una referencia de un puntero o tipo procedimiento. La funcin devuelve verdadero
(true) si P no es nil o falso (false) si es nil. Una posible aplicacin puede ser la siguiente:
Var P : Pointer;
Begin
P : nil;
If Assigned (P) then
Writeln (`Prueba Uno);
P := @P;
If Assigned (P) then
Writeln (`Prueba Dos);
End.
La llamada Assigned(P) correspondiente a la evaluacin de P <> nil para una variable puntero,
mientras @P <> nil se corresponde a una variable por procedimiento.
31. Archivos y registros
Concepto de registro
Un registro (record) es un tipo de datos estructurado (denominado dato record) que consta de
un conjunto de elementos que pueden ser del mismo tipo o de tipos diferentes.
Los componentes de un registro se denominan campos. Cada campo tiene un nombre llamado
identificador de campo, que es algn identificador elegido por el programador cuando se
declara el tipo de registro y un tipo que se especifica cuando se declara el tipo de dato record.
32. Declaracin de datos tipo registro
La sintaxis para declarar un registro es la siguiente:
Type
Nombre_reg = record
Lista id1 : Tipo1;
Lista id2 : Tipo2;
Lista id3 : Tipo3;
.
.
.
Lista idN : TipoN;
End;
Nombre_reg: Nombre de la estructura o registro.
Lista id: Lista de uno o ms nombres de campos que componen el registro.
Tipo: Puede ser cualquier tipo de dato estndar o definido por el usuario.
Un registro se suele representar grficamente en funcin de sus campos:
Empleado

Tipo cadena Tipo Entero Tipo cadena Tipo real
Ejemplo:
Type
Empleado = record
Nombre : String[30];
Edad : Integer;
Domicilio : String[40];
Salario : Real;
End;
33. Manipulacin de datos tipo registro
8.2.1 Acceso a los campos de un registro
Se puede acceder a cada campo de un registro directamente utilizando un designador o
selector de campo de la forma:
NombreReg.NombreCampo
Los datos mostrados anteriormente en Empleado mediante una secuencia de sentencias de
asignacin:
Empleado.Nombre := `Chi-ki-tico;
Empleado.Edad := 34;
Empleado.Domicilio := `Calle El ltimo Grito;
Empleado.Salario := 245320;
Una vez que los datos estn almacenados en un registro, se pueden manipular de igual forma
que otros datos en memoria.
Write (Empleado.Nombre); (* Visualiza Chi-ki-tico *)
8.2.2 Operaciones sobre registros
Los procedimientos de lectura y escritura permiten nicamente nmeros caracteres o cadenas.
Un registro al ser una estructura compuesta (distintos tipos de datos) es preciso efectuar las
operaciones de lectura y escritura individualmente.
Otra operacin que se puede realizar entre registros es la asignacin (copia del contenido de
un registro en otro del mismo tipo). Si A y D son variables registro del mismo tipo, la sentencia:
A := D
copia todos los valores asociados con el registro D al registro A.
Ejemplo:
Type
Stock = record
Numeros : Integer;
Nombre : String[20];
Precio : Real;
end;
Var
Articulo : Stock
8.2.3 La sentencia WITH
La tarea de escribir el selector de campo completo cada vez que se referencia un campo de un
registro es tediosa, sobre todo si el nmeros es grande. La sentencia WITH permite referenciar
el nombre del registro en su cabecera y posteriormente para llamar a algn campo slo se
necesita el nombre del campo y no el selector de campo completo, con el nombre del registro
(por ejemplo, Edad en vez de Cliente.Edad).
Sintaxis:
With Camporegistro do
Begin
(* Sentencias que hacen referencia a campos de Camporegistro *)
End;
Camporegistro: Nombre o nombres de registros.
Sentencias: Relacionadas con los campos.
Ejemplo:
Program Ejemplo;
Type
Empleado = record
Nombre : String [20];
Edad : Integer;
Empresa : String [30];
End;
Var
Socio : Empleado;
Deducciones : Real;
Begin
With Socio do
Begin
Readln (Nombre);
Neto := Salario - Deducciones;
Writeln (Empresa);
End;
End.

34. Archivos tipificados o aleatorios
Son archivos que pueden contener datos tipo integer, real o record. Para declarar un archivo se
procede de la siguiente manera:
Type
Nombrearchivo = file oftipo de datos
Ejemplo:
Type
Nombres = file of string[60];
Var
Nom: Nombres;
8.3.1 Creacin de un archivo tipificado
Para crear un archivo se utilizan las sentencias Assign la cual crea el archivo y Rewrite para
abrir el archivo.
La sintaxis es la siguiente:
Assign (f,nombre);
f: Nombre interno del archivo dentro del programa.
nombre: Nombre externo con el que se conoce al archivo por el sistema operativo.
La operacin Assign establece una correspondencia entre la variable tipo archivo con un
archivo externo situado en disco.
8.3.1 Apertura de un archivo
Luego de haber sido asignado, el archivo debe ser abierto. Esta operacin se realiza por medio
de uno de los dos procedimientos predefinidos: rewrite y reset.
8.3.1.1 Reset
Abre un nuevo archivo existente para una operacin de lectura. Si se intenta llamar a Reset y el
archivo especificado no existe, se producir un error de E/S (entrada/salida).
Sintaxis:
Reset (NombreArch);
8.3.1.2 Rewrite
Crea y abre un nuevo archivo. Si el archivo ya existe, Rewrite borra su contenido; en caso
contrario, el archivo queda abierto para una operacin de escritura.
Sintaxis:
Rewrite (f);
Existen algunos aspectos importantes que se deben tomar en cuenta al utilizar la sentencia
Rewrite:
- Si al abrir el archivo de texto, con assign y reset, ya existe en el disco, la sentencia
Rewrite lo rescribir, en otras palabras, "se perderT el archivo contiguo.
- Por el contrario, las sentencias assign y rewrite suponen la existencia del archivo
llamado en el disco. Si este archivo no existe, las sentencias anteriores producirn errores de
ejecucin.
El siguiente programa define un tipo registro (cliente) y a continuacin rellena (pone valores en
los campos) en la variable correspondiente. Otra variable del mismo tipo se asigna a la primera
variable y los campos de la segunda variable se imprimen uno a uno.
Program Visualiza_Registros;
Type
Datos = record
Nombre : String [80];
Direccion : String [80];
Edad : Integer;
Saldo : Real
End;
Var
Aux, Cliente : Datos;
Begin
Write (`Digite el nombre del cliente: `);
Readln (Cliente.Nombre);
Cliente.Direccin := `Calle El ltimo Grito;
Write (`Digite la edad del cliente: `);
Readln (Cliente.Edad);
Cliente.Saldo := 245320;
Aux := Cliente; (* Transfiere los datos al registro Aux *)
(* Visualizacin de los campos de Aux *)
Writeln (`Nombre: `, Aux.Nombre);
Writeln (`Direccin: `, Aux.Direccion);
Writeln (`Edad: `, Aux.Edad:1);
Writeln (`Saldo: `, Aux.Saldo:1:1);
End.
Este mtodo de lectura/escritura campo a campo es engorroso. Pascal proporciona la
sentencia with que facilitar el proceso de lectura/escritura de los registros.
8.3.2 - 8.3.3 Manipulacin de archivos tipificados y funciones
8.3.2.1 Escritura de un archivo
Una vez que se ha abierto el archivo para escritura, las sentencias write y writeln sirven para
escribir datos en el nuevo archivo.
Sintaxis:
Write (f,v1,v2,...);
f es una variable tipo archivo.
v1,v2,... son variables del tipo de datos.
Ejemplos:
1. Write (demo,Esto es una prueba de escritura);
Writeln (demo,y esta es la siguiente prueba);
2. Var NombreArch : string[60];
archtex : text;
...
...
Write (`Nombre de archivo);
Readln (NombreArch);
Assign (Archtex,NombreArch);
Reset (Archtex);
8.3.2.2 Lectura de un archivo
La lectura de un archivo se efecta mediante las sentencias read o readln.
Sintaxis:
Read (f,v1,v2,...);
f es una variable tipo archivo.
v1,v2,... son variables del tipo de datos.
Ejemplo:
Var
Horas : Real;
Archivo : Text;
Mensaje : string [30];
Begin
Assign (Archivo,Demo);
Reset (Archivo);
...
...
Readln (Archivo,Mensaje,Horas);
End.
8.3.2.3 Cierre de un archivo
Para cerrar un archivo se utiliza la siguiente sintaxis:
Close (Nombrearchivo);
35. Archivos de texto
Un archivo de texto es un tipo estndar, como se ha comentado anteriormente. Consta de una
serie de lneas separadas por una marca de fin de lnea (eoln, "end of line"). La marca de fin de
lnea se obtiene pulsando la tecla Enter o bien la combinacin de teclas CTRL M.
8.4.1 Declaracin de un archivo texto
El formato general para declarar una variable tipo text es:
Var
NombreVariable : Text;
Nombrevariable es cualquier nombre vlido de variable.
La longitud de una variable tipo text NO se indica.
8.4.2 Manipulacin de archivos de texto
Las operaciones de Assign, Rewrite y Reset se utilizan de igual forma que en los archivos
tipificados.
El procedimiento Append abre un archivo existente para aadir datos al final del mismo.
La sintaxis es:
Append (f)
8.4.3 Funciones
Algunas funciones son: Append, Read, Readln, Write y Writeln, Eoln y Eof.
8.4.3.1 Eoln
Devuelve el estado de fin de lnea de un archivo. Es una funcin tipo lgico.
La sintaxis es:
Eoln (var f: text);
f es una variable de archivo de texto. Para llamar a la funcin se procede as:
eoln (f)
Devuelve true si en la posicin actual del archivo est la marca de fin de lnea o si eof (f) es
true; caso contrario devuelve false.
8.4.3.2 Eof (End of file)
Devuelve el estado de un archivo de texto. Es de tipo lgico e indica si el fin de archivo se ha
almacenado mediante true, caso contrario devuelve false. La sintaxis es la siguiente:
Eof (var:text); eoln(f) llamada a la funcin
Prctica
1. Cree un archivo con sus datos personales: Cdula, nombre, direccin, telfono,email.
2. Abra el archivo creado y agrguele cuatro registros ms con otros datos.
3. Cree un archivo de nmeros enteros de 1 a 100, lalo y visualcelo en pantalla.
36. Unidades en Turbo Pascal
Introduccin
9.1.1 Concepto
Una unidad es un conjunto de constantes, tipos de datos variables, procedimientos y funciones.
Cada unidad es como un programa independiente Pascal o bien una librera de declaraciones
que se pueden poner en un programa y que permiten que ste se pueda dividir y compilar
independientemente. Una unidad puede utilizar otras unidades y posee una parte que puede
contener instrucciones de iniciacin.
Una unidad contiene uno o ms procedimientos, funciones constantes definidas y a veces
otros elementos. Se puede compilar, probar y depurar una unidad independientemente de un
programa principal. Una vez que una unidad ha sido compilada y depurada, no necesita
compilarse ms veces, Turbo Pascal se encarga de enlazar la unidad al programa que utiliza
esa unidad, empleando siempre en esta tarea menor tiempo que en la propia compilacin. Los
procedimientos, funciones y constantes que se definen en una unidad pueden ser utilizados por
cualquier futuro programa que escriba sin tener que ser declarados en el programa.
Las unidades tienen una estructura similar a los programas y en consecuencia requieren un
formato estricto, y es preciso declararlas por el usuario como si se tratara de un programa o
subprograma.
Turbo Pascal proporciona siete unidades estndar para el uso del programador: System,
Graph, DOS, Crt, Printer, Turbo3 y Graph3. Las cinco primeras sirven para escribir sus
programas y las dos ltimas para mantener compatibilidad con programas y archivos de datos
creados con la versin 3.0 de Turbo Pascal. Las siete unidades estn almacenadas en el
archivo TURBO/.TPL (librera de programas residente propia del programa Turbo Pascal). La
versin 7.0 introdujo dos nuevas unidades WinDos y Strings.
9.1.2 Estructura de una unidad
Una unidad est constituida de cuatro partes: cabecera de la unidad, seccin de interface
(interfaz), seccin implementation (implementacin) y seccin initialization (inicializacin).
Formato:
Unit <identificador>
Interface
Uses <lista de unidades>; (* opcional *)
(* declaraciones pblicas de objetos *)
Implementation
(* declaraciones privadas *)
(* definicin de procedimientos y funciones pblicos *)
begin
(* cdigo de inicializacin *) (* opcional *)
end
9.1.2.1 Cabecera de la unidad
La cabecera de la unidad comienza con la palabra reservada unit, seguida por el nombre de la
unidad (identificador vlido). Es similar a una cabecera de programa, donde la palabra
reservada unit reemplaza a la palabra reservada program. Por ejemplo para crear una unidad
denominada MiUnidad se ha de utilizar la cabecera de la unidad, as:
Unit MiUnidad;
El nombre de la unidad es arbitrario, pero debe coincidir con el nombre del archivo que
contiene. Por ejemplo, si la unidad se denomina Test
Unit Test;
El archivo que contiene el programa fuente de la unidad se debe llamar Test.PAS. Cuando
turbo Pascal combina la unidad, le asigna la extensin TPU (Turbo Pascal Unit). Si el nombre
de la unidad es diferente del nombre del archivo, el programa principal no podr encontrar el
archivo TPU (Turbo Pascal Unit). Si el nombre de la unidad es diferente del nombre del archivo,
el programa principal no podr encontrar el archivo TPU.
Una unidad creada por el usuario puede utilizar otras unidades, siempre que se incluyan en la
clusula uses que aparece inmediatamente despus de la palabra interface, y separadas por
comas.
9.1.2.2 Seccin de interfaz
La seccin de interface (interfaz) es la parte de la unidad que sirve para conectar dicha unidad
con otras unidades y programas. Esta seccin se conoce como "la parte pblica" de la unidad,
ya que todos los objetos que figuren en esta seccin son visibles desde el exterior o
exportables. Las restantes unidades y programas tienen acceso a la informacin contenida en
la seccin de interface.
En la interfaz de la unidad se pueden declarar constantes, tipos de datos, variables y
procedimientos. Los procedimientos y funciones visibles a cualquier programa que utilice la
unidad se declaran aqu, pero sus cuerpos, reales - implementaciones- se encuentran en la
seccin de implementacin. La seccin de interfaz indica a un programador cules
procedimientos y funciones se pueden utilizar en un programa. La seccin de implementacin
indica al compilador cmo implementarlos.
Ejemplo de declaracin
Unit Rayo;
Interface
Uses
DOS, Graph, Crt; (* se utilizan las unidades DOS, Graph y Crt *)
Var
a, b, c : integer;
Function Exponencial (a, b : integer) : real;
Procedure Dividir (x, y : integer; var cociente : integer);
9.1.2.3 Seccin de implementacin
La seccin de implementacin es estrictamente privada; su contenido no es exportable. Slo
los procedimientos o funciones que aparecen en la seccin interface pueden ser invocados
desde el exterior de la unidad. Esta seccin contiene el cuerpo de los procedimientos y
funciones declarados en la seccin de interface.
Unit Rayo;
Interface
Function Exponencial (A, B : Integer) : Real;
Procedure Dividir (X, Y : Integer; Var Cociente : Integer);
Implementation Function Exponencial (A, B : Integer) : Real; Var
P, I : Integer;
Begin
P := 1;
For I := 1 to B do
P := P * ;
Exponencial := P
End;
Procedure Dividir (X, Y : Integer; Var Cociente : Integer);
Begin
Cociente := X div Y
End;
End.
Ntese que la declaracin de una unidad est terminada por la palabra reservada End y un
punto.
9.1.2.3 Seccin de iniciacin
La seccin de iniciacin puede contener instrucciones pero tambin puede estar vaca. Estas
instrucciones sirven, por ejemplo, para iniciar variables. La ejecucin de estas instrucciones se
efecta en el momento del lanzamiento o ejecucin de un programa que utiliza la unidad antes
de la ejecucin de la primera instruccin del cuerpo del programa.
En la seccin de iniciacin se inicializa cualquier estructura de datos (variables) que utilice la
unidad y las hace disponibles (a travs del interface) al programa que las utiliza. Comienza con
la palabra reservada begin seguida por una secuencia de sentencias y termina con "end. ".
La seccin de iniciacin debe llamarse antes de que el cuerpo del programa se ejecute.



37. Aplicacin
Una unidad tiene una estructura muy similar a la de un programa.
La clusula uses de la parte de interface slo es necesaria cuando la unidad actual llame a
otras unidades. Todos los procedimientos y funciones en la seccin de interface deben ser
definidos en la seccin de implementacin.
La cabecera de los procedimientos y funciones declarados en la parte de interface deben ser
idnticos a la cabecera de las mismas funciones definidas en la parte de implementacin; sin
embargo, es posible escribir la cabecera en forma abreviada en la seccin de implementacin.
Unit utilidad; (* este nombre de la unidad debe coincidir con el nombre del
archivo de programa *)
Interface
Uses
Wincrt, Printer;
Procedure Frase (Texto : String);
Implementation
Uses
Printer;
Var
MiVar : Integer
Procedure Frase;
Begin
Clrscr;
GotoXY ((80-Lenght (Texto)) div 2,1)
Write (texto);
End.
Begin
MiVar := 0
End.
Una vez que se dispone el cdigo fuente de una unidad, se compila de igual forma que un
programa, pero el archivo obtenido no es ejecutable directamente. Tiene la extensin TPU
(Turbo Pascal Unit).
Para utilizar esa unidad dentro de un programa, debe incluir una sentencia uses para indiciar al
compilador que est utilizando esa unidad.
ProgramPrueba;
Uses Utilidad;
Ejemplo:
Escribir una unidad que conste a su vez de un procedimiento para intercambiar los valores de
dos variables, as como calcular su valor mximo.
Unit Demo1;
Interface
Procedure Intercambio (Var I,J : Integer);
Function Mximo (I, J : Integer) : Integer;
Implementation
Procedure Intercambio;
Var
Aux : Integer;
Begin
Aux := I;
I := J;
J := Aux
End;
Function Mximo;
Begin
If I>J then
Maximo := I
Else
Maximo :=J
End;
End.
Una vez que lo haya escrito, gurdelo en disco con el nombre de Demo1.PAS, a continuacin,
complelo hacia el disco. El cdigo objeto se llamar Demo1.TPU. Esta unidad la utilizaremos
en el siguiente programa:
Program Prueba;
Uses
Demo1;
Var
X,Y : Integer;
Begin
Write (`Introducir dos nmeros enteros: `);
Readln (X,Y);
Intercambio (X,Y);
Writeln (X, `,Y);
Writeln (`El valor mximo es: `, Mximo (X,Y));
End.
38. Aplicaciones
9. 3. 1 Utilizacin de unidades estndar
El archivo TURBO.TPL que contiene todas las unidades estndar se carga en memoria central
a la vez que el propio compilador y est disponible en cualquier momento, con la ayuda de la
clusula uses.
Como se ha visto anteriormente, un programa debe contener la clusula uses, situada
inmediatamente despus de la cabecera.
9. 3. 1. 1 Unidad System
Esta unidad contiene todos los procedimientos y funciones estndar de Turbo Pascal relativas
a entradas/salidas, cadena de caracteres, gestin de memoria, etc.
9. 3. 1. 2 Unidad Wincrt
Esta unidad proporciona un conjunto especfico de declaraciones para entrada y salida:
constantes, variables, procedimientos y funciones, que permiten el acceso al control de los
modos de pantalla, al teclado, a los colores, al posicionamiento del cursor, etc.
La mayora de los programas de Pascal que hacen uso de la pantalla para representar salidas
recurren a la unidad Wincrt. Algunos procedimientos que necesitan de esta unidad son:
Clrscr: Limpia la pantalla
KeyPressed: Detecta la pulsacin de una tecla
Sound: Hace sonar el altavoz interno
Window: Define una ventana de texto en la pantalla
9. 3. 1. 3 Unidad WinDos
Esta unidad contiene declaraciones, constantes, tipos, variables, procedimientos y funciones
relacionadas con el sistema operativo DOS y la gestin de archivos. Los subprogramas que
constituyen esta unidad no existen en Pascal estndar. Esta unidad no necesita ninguna otra
unidad en su declaracin.
Algunos procedimientos importantes son: GetTime, SetTime, DiskSize, GetAttr.
Ejemplo:
Visualizar la hora en la esquina superior derecha de la pantalla.
Program Hora;
Uses
Wincrt,Windos;
Var
Horas, Minutos, Segundos, Centesimas : Word;
Begin
Clrscr;
While not keypressed do
Begin
Gotoxy (64,1);
GetTime(Horas, Minutos, Segundos, Centesimas);
(* Hora reloj interno *)
Writeln (Horas:2, `;, minutos:2,`:, Segundos:2,:,Centesimas:2)
End
End.

También podría gustarte