Sunteți pe pagina 1din 61

Tutorial Básico

Pascal
1. Introducción

Pascal y Turbo Pascal

Pascal es un lenguaje de alto nivel y de propósito general (es aplicable a un gran número de
aplicaciones diversas) desarrollado por el profesor suizo Niklaus Wirth como un lenguaje para
enseñar la programación con un método disciplinado y sistemático. Wirth trató de eliminar las
inconsistencias de otros lenguajes de programación de su época y además que sirviera para
enseñar las técnicas de programación a sus alumnos.

Una versión preliminar del lenguaje apareció en 1968 y a finales de 1970 apareció el primero
compilador totalmente completo.

Las diferentes versiones ofrecían interpretaciones ligeramente diferentes que impedían la


compatibilidad entre ellas. Por estas razones, mediante diferentes proyectos, se logró la
estandarización bajo las normas ISO (International Standards Organization), ANSI (American
National Standards Institute) y IEEE (Institute of Electrical and Electronics Engineers). Sin
embargo, las versiones más populares conocidas como UCSD (Construida por Regents) y
Turbo Pascal (de Borland) no están estandarizadas. Esta última es la más conocida y la más
utilizada.

Características principales

- Excelente para el aprendizaje de la información.

- Lenguaje de propósito 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 función 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 además de funcionar, compilaba y corría los programas
más rápido.

Las versiones han evolucionado de la 1.0 hasta la 7.0 que cuenta con una
biblioteca de objetos denominada Turbo Visión.
2. Programación descendente (“Top - Down”)
La programación 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
metodología descendente consiste en efectuar una relación entre las sucesivas etapas de
estructuración de modo que exista una relación entre ellas mediante entradas y salidas de
información. El problema se descompone en varias estructuras jerárquicas, de forma que se
pueda considerar cada estructura desde dos puntos de vista: ¿qué hace? y ¿cómo lo hace?

Las estructuras desde los dos puntos de vista se representan de la siguiente


forma:

El diseño descendente se representa así:

3. Programación modular
La programación modular es uno de los métodos de diseño más flexibles y potentes para
mejorar la productividad de un programa. En programación modular el programa se divide en
módulos (partes independientes), cada una de las cuales ejecuta una única función o actividad
y se codifican independientemente de otros módulos. Cada uno de estos módulos se analiza,
codifica y pone a punto por separado.

Cada programa contiene un módulo denominado programa principal que controla todo lo que
sucede; se transfiere el control a los submódulos o subprogramas. Estos ejecutan su función y
una vez completada su tarea, devuelven el control al módulo principal.

Cada submódulo se puede descomponer en otros submódulos, dependiendo de la complejidad


de la tarea a realizar y la subdivisión continúa hasta que cada módulo tenga una sola tarea
para ejecutar..

Un submódulo puede realizar tareas de distinta naturaleza como: entrada, salida, manipulación
de datos, control de otros módulos o una combinación de éstos. Un módulo puede transferir
temporalmente (bifurcar) el control a otro módulo; sin embargo, cada módulo debe
eventualmente devolver el control al módulo del cual recibió originalmente el control.
4. Conceptos básicos de Pascal: datos y tipos de datos
Concepto de dato

Los diferentes objetos de información 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 carácter,
entero, un número real, etc.

La asignación de tipos a los datos persigue dos objetivos:

- Detectar errores de operaciones en programas.

- Determinar cómo ejecutar las operaciones.

Clasificación de los tipos de datos

Tipos de datos enteros

Turbo Pascal dispone de cinco tipos predefinidos (no necesitan una nueva definición de parte
del programador pues cada tipo tiene un límite) que permiten representar valores enteros.

Si se asigna un valor fuera del límite 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 están entre -32.768 y 32.767.
Longint: A partir de la versión 4.0 se amplía 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 pequeños 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 límite significativo es de 63
caracteres.

Existen tres reglas básicas para nombrar los identificadores:

Debe comenzar con una letra (A a Z, mayúsculas o minúsculas). No puede contener blancos.

Los caracteres permitidos después del primer carácter son letras, dígitos y el carácter de
subrayado ( _ ).

No se puede utilizar una palabra reservada como identificador. Las palabras reservadas son
aquellos términos que tienen un significado especial para Pascal y no se pueden utilizar para
otros propósitos.

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 expresión es un conjunto de datos o funciones unidos por operadores aritméticos.

Pascal soporta los siguientes operadores:

Reglas para la evaluación de expresiones

Todas las subexpresiones entre paréntesis se evalúan primero. Cuando existan


subexpresiones con paréntesis anidados se evalúan de dentro hacia fuera. El paréntesis más
interno se evalúa primero.

Prioridad de operaciones. Dentro de una misma expresión o subexpresión, los operadores se


evalúan en el siguiente orden:

1º *,/, div, mod

2º +, -

Regla asociativa izquierda. Los operadores en una misma expresión o subexpresión con igual
nivel de prioridad ( *, / ) se evalúan de izquierda a derecha.
Ejemplos:

a. 4+2*5 (primero la multiplicación, luego la suma)

4 + 10

14

b. 23 * 2 div 5 (de izquierda a derecha, primero * y luego div)

46 div 5

Práctica

Evalúe 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 operación:

a - (b + c div d) + e * f

6. Concepto de sentencia
Las sentencias son pasos que describen las acciones algorítmicas que pueden ser ejecutadas.
Se clasifican según su operatividad en ejecutables y no ejecutables. Las ejecutables son
aquellas que especifican operaciones de cálculos aritméticos y entradas/salidas de datos y no
ejecutables son las que no realizan ninguna acción concreta, sino que ayudan a la legibilidad
el programa sin afectar su ejecución. 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 cédula: `);

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,

` `,´años´);

End.

7. Sentencias simples y sentencias compuestas


2.3.1Sentencias simples

Es una sentencia que no contiene ninguna otra sentencia. Se clasifican en: asignación y
procedure.

2.3.1.1 Sentencia de asignación

La sentencia de asignación se utiliza para asignar (almacenar) valores o variables. La


asignación es una operación que sitúa un valor determinado en una posición de memoria. La
operación de asignación puede representar en un pseudocódigo con el símbolo `?´, para
denotar que el valor situado a su derecha se almacena en la variable a la izquierda.

Formato

Variable ? expresión

En Pascal el operador `?´ se sustituye por el símbolo :=, que se denomina carácter de
asignación.

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 incrementándose en 5).

2.3.1.2 Sentencia procedure

Un procedure o procedimiento es un subprograma que realiza una tarea específica. 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 sólo una acción, cuando se cumpla o no se


cumpla una determinada condición, 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 número es `,Numero)

End.

8. Entradas y salidas de información

2.4.1 Concepto de entrada

Una entrada de datos o valores es equivalente al término lectura. La entrada o lectura de datos
se refiere a la recepción de valores provenientes de un dispositivo periférico de entrada como
un teclado, una unidad de disco, un escáner, etc. y su direccionamiento hacia zonas de
memoria de la computadora.

Es la entrada la operación que nos permite proporcionar datos durante la ejecución 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 diseñar procedimientos específicos.

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 número: `);

Readln (i);

Write (`Introduzca el segundo número: `);

Readln (j);

WriteLn (`La suma es `,i+j);

End.

2.4.2 Concepto de salida

Los programas para ser útiles deben proporcionar información de salida (resultados). Esta
salida toma información de la memoria y la sitúa 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
información es el Write o el WriteLn. Tanto el Write como el WriteLn cumplen la misma
función, o sea desplegar información. La diferencia es que el WriteLn despliega la información
y salta a la línea 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. Práctica
1. Hacer un programa que lea su cédula, su nombre y su teléfono y los imprima en pantalla.
2. Hacer un programa que lea tres números, que calcule el mayor y el menor de esos
números y los imprima.
3. Hacer un programa que lea un código de producto, su descripción, su precio unitario, las
unidades compradas y el precio total a pagar e imprima el resultado.
4. Hacer un programa que lea dos números y que imprima el resultado de su suma, su
resta, su multiplicación y su división.
5. Hacer un programa que lea la cédula 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 números para tres variables a, b y c. Con base en los
valores almacenados, calcule la expresión ((a+7*c)/(b+2-a)+2*b).

10. Estructuras de control


3.1.1 Expresiones lógicas

Son acciones alternativas o decisiones que determinan el cumplimiento o no de una


determinada condición.

Por ejemplo, supongamos que se desea diseñar 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 cálculo de pago sería 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 relación

Se utilizan para expresar condiciones y describen una relación entre dos valores.
Es importante recordar aquí el orden de evaluación de expresiones aritméticas:

3.1.3 Operadores lógicos

Las expresiones lógicas pueden combinarse para formar expresiones más complejas. Esto se
logra utilizando los operadores lógicos: and, or y not.

La operación and (y) combina dos condiciones simples y produce un resultado verdadero sí y
sólo sí los dos operandos de la expresión son verdaderos.

La operación or (o) es verdadera si uno de los dos operandos es verdadero.

La operación not (no) actúa sobre una sola condición simple u operando y simplemente niega
o invierte su valor.

Esto se puede demostrar más fácilmente 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. Selección de acciones alternativas


3.2.1 La sentencia IF

Puesto que las expresiones lógicas 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
expresión 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 número `);

Read (Numero);

If Numero > 0.0 Then

Begin

Writeln (`El número introducido es positivo´);

Readln

End Else Begin

Writeln (`El número 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 están anidadas.

Ejemplo:

Program Mayor;

Uses

Wincrt;

Var

A,B,C : Integer;

Elmayor : Integer;

Begin

Writeln (`Digite tres números 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 número 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 sólo una de las
sentencias simples se selecciona y se ejecuta.

Ejemplo:

Program Cursor;

(* Este programa mueve el cursor a través 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 lógicas
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:

Diseñar un programa que verifique si un número es primo.


Program Primos;

Var

Primo : bolean;

Número : 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 repetición de una serie determinada de sentencias.
Se le llama también 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 repetición: 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 número determinado de


veces, y cuyo número se conozca por anticipado. Para aplicaciones de este tipo se utiliza la
sentencia FOR.
La sentencia FOR requiere que conozcamos por anticipado el número de veces que se
ejecutan las sentencias que se encuentran dentro del ciclo. El ciclo for se incremente
automáticamente.

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

También 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 condición se hace verdadera.

El diagrama de flujo se representa de la siguiente manera:

El seudocódigo se representa así:

Repetir

Sentencias

Hasta_que condición

Sintaxis:

Repeat
Begin

Sentencia 1;

Sentencia 2;

...

...

...

Sentencia n;

End;

Until expresion lógica

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. Práctica
1. Los patos de un granjero se venden a precios especiales si son grandes pero no demasiado.
Diseñe un programa que lea el número de patos que posee el granjero y el peso de cada ave.
Al final debe especificar cuántos patos pesan entre 1.5 kilos y 2 kilos inclusive.
2. Diseñe un programa para calcular e imprimir los primeros 2000 números enteros positivos.
3. Leer las notas de 50 exámenes e imprimir cuántos 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 día y
que imprima el monto total de ventas y el monto promedio.
5. Hacer un programa que lea 10 valores numéricos (positivos y negativos). Debe imprimir el
número de valores negativos, el número de valores iguales a cero y el promedio de valores
positivos.
6. Encuentre la suma de los primeros 50 números enteros pares.
7. El interés simple se calcula mediante la fórmula A=P(1+i*n), donde A=Monto de Interés,
P=Capital, N=Número de años e i=tasa de interés.
8. Hacer un programa que lea: P, i, y N e imprima el monto de interés a través del número de
años leído.
9. Diseñe un programa para calcular la nómina semanal de una compañía con N empleados.
Por cada empleado, se debe leer: Nº de empleado, salario por hora y número 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 (más de 40) se paga 1.5% adicional por hora.
10. Diseñe un programa para calcular cuántas veces se puede dividir un número X entre un
número Y de tal manera que el resultado de la división sea un número entero.

15. Subprogramas: Funciones y Procedimientos


4.1 Procedimientos

4.1.1 Concepto

Un procedimiento es un programa que realiza una tarea específica. Puede recibir cero o más
valores del programa que llama y devolver cero o más 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 Declaración de un procedimiento

Al igual que los identificadores, los procedimientos deben declararse dentro del cuerpo del
programa. La declaración de un procedimiento NO indica a la computadora que ejecute las
instrucciones dadas, sino que indica a la computadora cuáles son estas instrucciones y dónde
están 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 parámetros formales.

Una sección de declaración que puede contener constantes, variables e incluso otros
procedimientos.

Una sección 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 organización de un programa en procedimientos lo hace más fácil de escribir y depurar. Los


procedimientos no deben exceder de 25 líneas.

Las ventajas de utilizar procedimientos son:

Facilita el diseño descendente.

Los procedimientos se pueden ejecutar más de una vez en un programa y/o en diferentes
programas, ahorrando tiempo de programación.

El uso de procedimientos facilita la división de las tareas entre un equipo de programadores y


se pueden comprobar individualmente.
16. Parámetros

4.2.1 Concepto

Un parámetro es un método para pasar información (valores a variables) del programa principal
a un procedimiento y viceversa.

Un parámetro es, prácticamente, 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 parámetros:

- Parámetros de entrada: Sus valores deben ser proporcionados por el programa principal.

- Parámetros de salida: Son parámetros cuyos valores se calcularán en el procedimiento y


se deben devolver al programa principal para su proceso posterior.

4.2.2 Transferencia de información desde y/o hasta los procedimientos

Existen dos tipos de procedimientos:

- Procedimientos sin parámetros: No existe comunicación entre el programa principal y los


procedimientos ni viceversa.

- Procedimientos con parámetros: Existe comunicación entre el programa principal y los


procedimientos o entre dos procedimientos.

Ejemplo 1:

(Parámetros de entrada)

Procedure RecuadroDos (N : Integer);

Var

J : Integer;

Begin

For J := 1 to N do

Write(`*´)

End;

Ejemplo 2:

(Parámetros de entrada/salida)

El procedimiento Geometria recibe la longitud y anchura de un rectángulo, calcula el área y


perímetro del rectángulo y devuelve los valores obtenidos al programa principal.

Procedure Geometria (Longitud, Anchura : Real; Var Area, Perímetro : Real);

Begin
Area := Longitud * Anchura;

Perimetro := 2 * (Longitud + Anchura)

End;

4.2.3 Parámetros actuales y formales

Las sentencias llamadas a procedimientos constan de dos partes: un nombre de procedimiento


y una lista de parámetros llamados actuales:

Nombreproc (pa1,pa2, pa3,...);

Los parámetros actuales pa1, pa2, pa3, ... deben tener unos valores que se pasan al
procedimiento nombreproc.

En la declaración de un procedimiento cuando se incluyen parámetros, éstos se denominan


parámetros formales o ficticios (pf1, pf2, pf3, ...). Ellos sirven para contener los valores de los
parámetros actuales cuando se invoca el procedimiento.

Procedure nombreproc (pf1, pf2, pf3, ...)

El valor de los parámetros 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 (* Geometría *)

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 perímetro es: ', P:6:2)

End.

17. Parámetros valor y parámetros variable


4.2.4.1 Parámetros valor

Son parámetros unidireccionales que se utilizan para proporcionar información a un


procedimiento, pero no pueden devolver valores. Si la palabra var no aparece delante del
parámetro formal en un procedimiento, la computadora supone que el parámetro formal es un
parámetro valor. En la llamada al procedimiento el valor del parámetro actual se pasa a la
variable que represente el parámetro 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 Parámetros variable

En la declaración de un procedimiento, los nombres de los parámetros variables están


precedidos con la palabra var. Los parámetros variable se utilizan tanto para recibir como para
transmitir valores entre el subprograma y el programa llamante. Estos parámetros pueden
actuar como parámetros de salida o de entrada/salida.

El siguiente ejemplo ilustra la diferencia entre parámetros 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 ('Después 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

Después del retorno del procedimiento Pasar

a=2 b=3 c=6

18. Subprogramas: Funciones y Procedimientos


4.2 Paso de parámetros (repaso...)

4.2.1 Ejemplo

En este ejemplo los parámetros formales a y b recibe, cuando son llamados, los valores
contenidos en los parámetros 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 números es ',max:4:2);

End;

Begin

repeat

write ('Introduzca dos números ');

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 función es un subprograma que recibe como argumentos o parámetros datos de un tipo
numérico o no numérico (char, string, bolean u otros) y devuelve un resultado. Esta
característica le diferencia de un procedimiento.

El pseudocódigo es el siguiente:

Nombre_función (argumento1,argumento2,...);

Los argumentos es lo que se conoce en Pascal como parámetros. Para poder calcular el valor
o resultado de la función, todo lo que se necesita conocer es el valor o valores de los
parámetros respectivos.
4.3.1 Funciones aritméticas o matemáticas

4.3.2 Funciones definidas por el usuario

Además de las funciones predefinidas citadas anteriormente, es posible que el usuario pueda
declarar sus propias funciones de igual modo que declara sus procedimientos.

Una función 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 (parámetros): tipo

(declaración de variables locales)

begin

<cuerpo de la función>

nombre de la función := valor de la función

end;

Comparación 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 función es un identificador. Sin embargo,
el nombre de la función se refiere a la posición de memoria que contiene el valor devuelto por
la función.

La lista de los parámetros 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 función.

En el cuerpo de la función tiene que existir una sentencia de asignación como la siguiente:

Nombre_función := valor_función

La función sólo devuelve un valor, el procedimiento puede devolver cero, uno o varios valores.

El tipo de dato del resultado de la función 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 número entero: ');

Readln (Num);

El_cubo(Num);

Write ('El cubo de ',Num,' es ',valor);

End.

20. Práctica 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 cálculo tomando como parámetro el salario bruto (utilice una
variable diferente al del programa principal). Finalmente, debe calcular la deducción de la Caja
y del Banco Popular y el salario neto.

La salida del programa debe ser la siguiente:

El empleado (nombre), cédula No. (id_empleado), obtuvo un salario neto de...

Sus deducciones suman ....

Hacer un programa de funciones aritméticas que lea un número real y mediante un menú y
utilizando procedimientos para cada función calcule:

- El seno de ese número

- El cuadrado de ese número

- La raíz cuadrada de ese número

- La parte decimal del número


- La parte entera del número

Diseñe un programa que mediante una función calcule la suma de los números que están en
un rango establecido. (Por ejemplo de 1 a 100). Pruebe con varios rangos.

Escribir un programa que, mediante una función devuelva el valor del día de la semana en
respuesta a la entrada de la letra inicial de dicho día.

Mediante una función, determinar el número de días de un mes dado.

Escriba un programa que mediante una función determine si un número 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 número 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 números del 1',' al ',n, ' es: ',suma);

Readln;

End;

Begin

Write ('Digite el número máximo: ');

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
Introducción

Primero que todo, es importante conocer el concepto de estructura de datos. Una estructura de
datos es "una colección de datos organizados de un modo particular." Las estructuras de datos
pueden ser de dos tipos: estáticas y dinámicas.

Las estructuras de datos estáticas son aquellas a las que se le asigna una cantidad fija de
memoria cuando se declara la variable. Las estructuras de datos dinámicas son aquellas cuya
ocupación de memoria puede aumentar o disminuir durante el tiempo de ejecución. Entre las
estructuras de datos estáticas podemos encontrar los vectores y los arreglos, tema que
estudiaremos a continuación.

5.0 Concepto

Un array (se suele traducir como arreglo) es una estructura de datos en la que se almacena
una colección de datos del mismo tipo, por ejemplo, los salarios de los empleados de una
empresa.

Un array es una lista de un número 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 subíndice.

- Se puede accesar directa o aleatoriamente los elementos del array.

23. Arrays unidimensionales: Los vectores


Un array de una dimensión (unidimensional), también llamado vector o fila, es un tipo de datos
estructurado compuesto de un número determinado de elementos, de tamaño fijo y elementos
homogéneos (del mismo tipo). La característica de tamaño fijo se refiere a que el tamaño del
array debe ser conocido en tiempo de compilación.

Por ejemplo, si deseamos conservar las puntuaciones de los 50 estudiantes de un examen de


informática, se necesita reservar cincuenta posiciones de memoria, dar un nombre al arreglo y
a cada uno de los 50 estudiantes asignarles una posición o índice del arreglo.

5.1.1 Declaración 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 subíndice] of tipo;

Nombre_array: Se refiere a un nombre de identificador válido.

Tipo_subíndice: 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, Miércoles, 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 subíndice indica que los
salarios van de los empleados cuya inicial es A hasta la Z).

Las declaraciones de tipo array no crea ninguna variable específica de tipo array, sino que
proporciona información 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 aplicación 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 contendrán 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 línea *)

24. Arrays bidimensionales: Tablas o matrices


Un array bidimensional (también 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
dimensión.

5.2.1 Declaración 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


subíndices, 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
informática 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 línea 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. Práctica
Escriba un programa que almacene en un vector los días de la semana.

Escriba un programa que almacene en un vector su nombre.

Escriba un programa que almacene en un vector los números pares del 1 al 10.

Escriba un programa que lea diez números 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 encriptación será sustituir cada vocal por el número que le
corresponde. (A=1, E=2,O=3,I=4,U=5).

Escribir un programa que en una matriz almacene los números 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 números pares del 1 al 40 y los imprima.
26. Cadenas (“Strings”)
6.1 Definición

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 manipulación de datos no numéricos.

Una cadena de caracteres o string es una serie de caracteres cuya longitud (número de
caracteres que contiene) puede variar de 1 hasta 255 caracteres. Turbo Pascal tiene el tipo de
dato string que almacena información 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 máxima de la cadena encerrada entre corchetes.

6.1.1 Declaración de una variable tipo string

Las variables de cadena se pueden declarar las de cualquier otro tipo, ya sea en la sección 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, haríamos la declaración así:

Type

Cadena80 = string [80];

Cadena40 = string [40];

Var

Mensaje : Cadena80;

Nombre : Cadena40;

Es importante recordar que si se declara como Type inmediatamente después, 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 físicamente es una estructura de una secuencia de 0 hasta 255 caracteres de
longitud. Sin embargo, la ocupación en memoria de una cadena es un número de bytes igual al
de caracteres de la cadena más 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 lógica de la variable será de 11 bytes pero la longitud física
será de 20 bytes pues así fue definida.

6.1.3 Asignación de cadenas

A las variables de cadena, como se ha visto, se pueden dar valores con una sentencia de
asignación o con una sentencia de lectura (read). Ambas situaciones se pueden describir con
la ecuación:

Destino fuente

Donde destino es la cadena a la que se da un valor y fuente es la expresión de cadena que


contiene el correspondiente valor. Esta ecuación actúa como la sentencia de asignación que
evalúa la cadena fuente y se almacena en la variable de la cadena destino.

Dependiendo del tamaño (longitud de la cadena) de las cadenas fuente y destino se pueden
presentar tres casos diferentes que analizaremos a partir de la siguiente declaración 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 posición de cad2 se rellena con un carácter.

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 sólo hay 11 caracteres en cad2. La cadena Cad3
seguirá teniendo una longitud máxima de 15 caracteres, pero sólo se almacenan en ella ahora
11 caracteres y su longitud actual será de 11.

Cad3 I NFORM ATI C A longitud actual = 11

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 longitud máxima = 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 NFORM AT longitud actual = 11

123 4 56 78 longitud máxima = 8


28. Práctica 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 números pares del 1 al 10.

3. Escribir un programa que en una matriz almacene los números primos del 1 al 100 y que
al final del programa, en una variable proporcione la suma.

4. Escriba un programa que lea diez números 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 minúscula y la convierta a


mayúscula. 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 número de vocales que tiene la palabra o frase.

29. Punteros
Introducción

Como vimos anteriormente en la lección número 5, las estructuras de datos dinámicas son
aquellas cuya ocupación de memoria puede aumentar o disminuir durante el tiempo de
ejecución. Mediante los punteros, tema que estudiaremos a continuación, podemos crear
estructuras de datos dinámicas que tienen capacidad de variar en tamaño y ocupar tanta
memoria como realmente requieran. Estas estructuras son llamadas punteros.

7.1 Concepto

Los punteros son también llamados apuntadores. Son tipos de datos que permiten crear
estructuras de datos dinámicas, las cuales pueden variar en tamaño y memoria requerida. Las
variables que se crean y se destruyen durante la ejecución se llaman variables dinámicas o
anónimas. Así, durante la ejecución de un programa, puede haber una posición de memoria
específica asociada con una variable dinámica y posteriormente puede no existir ninguna
posición de memoria asociada con ella.
Una estructura de datos dinámica es una colección 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 dinámicas son útiles para almacenar y procesar conjuntos de datos
cuyos tamaños cambian durante la ejecución del programa, por ejemplo, el conjunto de
trabajos que se han introducido en una computadora y están esperando su ejecución o el
conjunto de nombres de pasajeros y asignación o el conjunto de nombres de pasajeros y
asignación respectiva de asientos de un vuelo de avión determinado.

Pascal proporciona los métodos 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 más
pequeños, como sí sucede con el array o el registro. Los punteros son variables que se utilizan
para almacenar la dirección de memoria de otra variable. Las variables que se utilizan para
almacenar direcciones son llamadas variables puntero o simplemente puntero.

Gráficamente se representa así

Al definir un puntero se debe indicar el tipo de valores que se almacenarán 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 dirección de una posición de memoria adecuada sólo para un tipo dado.

Por esta razón se dice que un puntero apunta a una variable particular, es decir, a otra posición
de memoria.

Una variable tipo puntero contiene la dirección de la posición de otra variable.

7.1.1 Declaración de punteros

Se puede declarar un puntero a una variable carácter, 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 declaración 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 gráfico es el siguiente, donde la variable P contiene 059164 que es la dirección 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 posición 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 declaración,


debido a que el objeto o dirección P^ no existe. Antes de que un programa utilice un puntero,
se requiere abrir espacio para el tipo de datos objeto de la dirección del puntero. Para iniciar un
puntero se debe utilizar el procedimiento NEW.

7.2.1 New

La declaración 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 dinámica 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 sitúa la dirección 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 vacía de memoria a la que apunta Ptr. La segunda
sentencia sitúa el valor `Mckenna´ en esa celda de memoria.

Gráficamente se representaría así:

7.2.2 Dispose

El procedimiento Dispose libera la posición de memoria ocupada por una variable dinámica.

Sintaxis:

Dispose (P) (* P es una variable tipo puntero *)

Gráficamente 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 posición, 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 función devuelve verdadero
(true) si P no es nil o falso (false) si es nil. Una posible aplicación 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 evaluación 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 algún 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. Declaración 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 más nombres de campos que componen el registro.

Tipo: Puede ser cualquier tipo de dato estándar o definido por el usuario.

Un registro se suele representar gráficamente en función 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. Manipulación 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
asignación:

Empleado.Nombre := `Chi-ki-tico´;

Empleado.Edad := 34;

Empleado.Domicilio := `Calle El Último Grito´;

Empleado.Salario := 245320;

Una vez que los datos están 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 números 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 operación que se puede realizar entre registros es la asignación (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 números es grande. La sentencia WITH permite referenciar
el nombre del registro en su cabecera y posteriormente para llamar a algún campo sólo 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 Creación 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 operación 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 operación 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 operación 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 operación 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 producirán errores de
ejecución.

El siguiente programa define un tipo registro (cliente) y a continuación 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.Dirección := `Calle El Último Grito´;

Write (`Digite la edad del cliente: `);

Readln (Cliente.Edad);

Cliente.Saldo := 245320;

Aux := Cliente; (* Transfiere los datos al registro Aux *)

(* Visualización de los campos de Aux *)

Writeln (`Nombre: `, Aux.Nombre);


Writeln (`Dirección: `, Aux.Direccion);

Writeln (`Edad: `, Aux.Edad:1);

Writeln (`Saldo: `, Aux.Saldo:1:1);

End.

Este método 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 Manipulación 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 efectúa 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 estándar, como se ha comentado anteriormente. Consta de una
serie de líneas separadas por una marca de fin de línea (eoln, "end of line"). La marca de fin de
línea se obtiene pulsando la tecla Enter o bien la combinación de teclas CTRL M.

8.4.1 Declaración de un archivo texto

El formato general para declarar una variable tipo text es:

Var

NombreVariable : Text;

Nombrevariable es cualquier nombre válido de variable.

La longitud de una variable tipo text NO se indica.

8.4.2 Manipulación 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 añadir 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 línea de un archivo. Es una función tipo lógico.

La sintaxis es:

Eoln (var f: text);

f es una variable de archivo de texto. Para llamar a la función se procede así:

eoln (f)

Devuelve true si en la posición actual del archivo está la marca de fin de línea 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 lógico 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 función

Práctica

1. Cree un archivo con sus datos personales: Cédula, nombre, dirección, teléfono,email.

2. Abra el archivo creado y agréguele cuatro registros más con otros datos.

3. Cree un archivo de números enteros de 1 a 100, léalo y visualícelo en pantalla.

36. Unidades en Turbo Pascal


Introducción

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 librería 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 iniciación.
Una unidad contiene uno o más 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 más 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 compilación. 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 estándar 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 versión 3.0 de Turbo Pascal. Las siete unidades están almacenadas en el
archivo TURBO/.TPL (librería de programas residente propia del programa Turbo Pascal). La
versión 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, sección de interface
(interfaz), sección implementation (implementación) y sección initialization (inicialización).

Formato:

Unit <identificador>

Interface

Uses <lista de unidades>; (* opcional *)

(* declaraciones públicas de objetos *)

Implementation

(* declaraciones privadas *)

(* definición de procedimientos y funciones públicos *)

begin

(* código de inicialización *) (* 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 válido). 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 extensión 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
cláusula uses que aparece inmediatamente después de la palabra interface, y separadas por
comas.

9.1.2.2 Sección de interfaz

La sección de interface (interfaz) es la parte de la unidad que sirve para conectar dicha unidad
con otras unidades y programas. Esta sección se conoce como "la parte pública" de la unidad,
ya que todos los objetos que figuren en esta sección son visibles desde el exterior o
exportables. Las restantes unidades y programas tienen acceso a la información contenida en
la sección 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
sección de implementación. La sección de interfaz indica a un programador cuáles
procedimientos y funciones se pueden utilizar en un programa. La sección de implementación
indica al compilador cómo implementarlos.

Ejemplo de declaración

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 Sección de implementación

La sección de implementación es estrictamente privada; su contenido no es exportable. Sólo


los procedimientos o funciones que aparecen en la sección interface pueden ser invocados
desde el exterior de la unidad. Esta sección contiene el cuerpo de los procedimientos y
funciones declarados en la sección 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.

Nótese que la declaración de una unidad está terminada por la palabra reservada End y un
punto.

9.1.2.3 Sección de iniciación

La sección de iniciación puede contener instrucciones pero también puede estar vacía. Estas
instrucciones sirven, por ejemplo, para iniciar variables. La ejecución de estas instrucciones se
efectúa en el momento del lanzamiento o ejecución de un programa que utiliza la unidad antes
de la ejecución de la primera instrucción del cuerpo del programa.

En la sección de iniciación se inicializa cualquier estructura de datos (variables) que utilice la


unidad y las hace disponibles (a través del interface) al programa que las utiliza. Comienza con
la palabra reservada begin seguida por una secuencia de sentencias y termina con "end. ".

La sección de iniciación debe llamarse antes de que el cuerpo del programa se ejecute.
37. Aplicación
Una unidad tiene una estructura muy similar a la de un programa.

La cláusula uses de la parte de interface sólo es necesaria cuando la unidad actual llame a
otras unidades. Todos los procedimientos y funciones en la sección de interface deben ser
definidos en la sección de implementación.

La cabecera de los procedimientos y funciones declarados en la parte de interface deben ser


idénticos a la cabecera de las mismas funciones definidas en la parte de implementación; sin
embargo, es posible escribir la cabecera en forma abreviada en la sección de implementación.

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 código fuente de una unidad, se compila de igual forma que un
programa, pero el archivo obtenido no es ejecutable directamente. Tiene la extensión 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 máximo.

Unit Demo1;

Interface

Procedure Intercambio (Var I,J : Integer);

Function Máximo (I, J : Integer) : Integer;

Implementation

Procedure Intercambio;

Var

Aux : Integer;

Begin

Aux := I;

I := J;

J := Aux

End;

Function Máximo;

Begin

If I>J then

Maximo := I

Else

Maximo :=J

End;

End.
Una vez que lo haya escrito, guárdelo en disco con el nombre de Demo1.PAS, a continuación,
compílelo hacia el disco. El código 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 números enteros: `);

Readln (X,Y);

Intercambio (X,Y);

Writeln (X,´ `,Y);

Writeln (`El valor máximo es: `, Máximo (X,Y));

End.

38. Aplicaciones
9. 3. 1 Utilización de unidades estándar

El archivo TURBO.TPL que contiene todas las unidades estándar se carga en memoria central
a la vez que el propio compilador y está disponible en cualquier momento, con la ayuda de la
cláusula uses.

Como se ha visto anteriormente, un programa debe contener la cláusula uses, situada


inmediatamente después de la cabecera.

9. 3. 1. 1 Unidad System

Esta unidad contiene todos los procedimientos y funciones estándar de Turbo Pascal relativas
a entradas/salidas, cadena de caracteres, gestión de memoria, etc.

9. 3. 1. 2 Unidad Wincrt

Esta unidad proporciona un conjunto específico 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 mayoría 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 pulsación 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 gestión de archivos. Los subprogramas que
constituyen esta unidad no existen en Pascal estándar. Esta unidad no necesita ninguna otra
unidad en su declaración.

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.

S-ar putea să vă placă și