Вы находитесь на странице: 1из 69

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 p
ara
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 p
rimero
compilador totalmente completo.
Las diferentes versiones ofrecían interpretaciones ligeramente diferentes que impe
dí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 En
gineers). 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 proble
ma 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 salid
as de
información. El problema se descompone en varias estructuras jerárquicas, de forma q
ue 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 di
vide en
módulos (partes independientes), cada una de las cuales ejecuta una única función o ac
tividad
y se codifican independientemente de otros módulos. Cada uno de estos módulos se ana
liza,
codifica y pone a punto por separado.
Cada programa contiene un módulo denominado programa principal que controla todo l
o que
sucede; se transfiere el control a los submódulos o subprogramas. Estos ejecutan s
u 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 complejid
ad
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, m
anipulación
de datos, control de otros módulos o una combinación de éstos. Un módulo puede transferi
r
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 contro
l.
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 tip
o 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 definic
ión de parte
del programador pues cada tipo tiene un límite) que permiten representar valores e
nteros.

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 memo
ria.
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 identi
ficador 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 blan
cos.
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 rese
rvadas son
aquellos términos que tienen un significado especial para Pascal y no se pueden ut
ilizar para
otros propósitos.

Algunas palabras reservadas son: absolute, and, array, begin, const, div, do, do
wnto, else, if,
in,label,mod,not,of, packed, procedure, record, set, shr, then,to, unit, uses, v
ar, 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 operador
es 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
b. 23 * 2 div 5 (de izquierda a derecha, primero * y luego div)
46 div 5
9
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 ej
ecutadas.
Se clasifican según su operatividad en ejecutables y no ejecutables. Las ejecutabl
es son
aquellas que especifican operaciones de cálculos aritméticos y entradas/salidas de d
atos 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: asign
ació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. L
a
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 izquie
rda.
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. E
stos son
ejecutados cuando Pascal encuentra el nombre del procedimiento. Deben estar decl
arados
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 p
osible
gracias a las sentencias compuestas. Una sentencia compuesta es un conjunto de s
entencias
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 lec
tura de datos
se refiere a la recepción de valores provenientes de un dispositivo periférico de en
trada como
un teclado, una unidad de disco, un escáner, etc. y su direccionamiento hacia zona
s de
memoria de la computadora.
Es la entrada la operación que nos permite proporcionar datos durante la ejecución d
e un
programa. Los datos que se pueden leer son: enteros, reales, caracteres o cadena
s. 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 gl
obalmente y
se suele recurrir a diseñar procedimientos específicos.
Los procedimientos de lectura son: Read y ReadLn. Estos esperan a que se pulse l
a 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 d
ispositivo
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 mi
sma
función, o sea desplegar información. La diferencia es que el WriteLn despliega la i
nformació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 pan
talla.
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 unitar
io, 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. D
ebe
calcular el 8% correspondiente al rebajo de la CCSS y el 1% del Banco Popular, e
l total de
deducciones y el salario neto.
Al final debe imprimir lo siguiente: "Estimado empleado: (nombre). En este mes s
u 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 un
a
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 toda
s 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. Est
o se
logra utilizando los operadores lógicos: and, or y not.
La operación and (y) combina dos condiciones simples y produce un resultado verdad
ero 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 n
iega

o invierte su valor.
Esto se puede demostrar más fácilmente mediante las tabla de verdad para cada operad
or.
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 u
na 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 logr
a 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 o
tra 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 sent
encia 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 prede
finidas,

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 condici
ones 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 propo
rciona 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 determina
do 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 incr
emente
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
4
3
2
1
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 c
ondicional
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 presi
one 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 n
o demasiado.
Diseñe un programa que lea el número de patos que posee el granjero y el peso de cad
a 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 pos
itivos.
3. Leer las notas de 50 exámenes e imprimir cuántos de ellos tienen nota mayor o igu
al 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 im
primir el
número de valores negativos, el número de valores iguales a cero y el promedio de va
lores
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 Int
eré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úm
ero 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, imp
uesto
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 po
r 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 ce
ro o más
valores del programa que llama y devolver cero o más valores al programa que reali
zó la
llamada. Un procedimiento está compuesto de un grupo de sentencias a las que se as
igna un
nombre (identificador) y constituye una unidad de programa. La tarea asignada al
procedimiento se ejecuta siempre que Pascal encuentra el nombre del procedimient
o.
Los procedimientos es obligatorio declararlos y deben ser declarados antes de qu
e puedan ser
referenciados en el cuerpo del programa. En Pascal reciben el nombre de PROCEDUR
E.
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 ejecut
e las
instrucciones dadas, sino que indica a la computadora cuáles son estas instruccion
es 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 Varia
bles Locales
y a las que se ubican en el cuerpo principal, fuera de los procedimientos, se le
s 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 depur
ar. 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 diferen
tes
programas, ahorrando tiempo de programación.

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


gramadores 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 pr
incipal
a un procedimiento y viceversa.
Un parámetro es, prácticamente, una variable cuyo valor debe ser ya sea proporcionad
o 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 princ
ipal.
-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 lo
s
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 pro
cedimiento
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 a
l
procedimiento nombreproc.
En la declaración de un procedimiento cuando se incluyen parámetros, éstos se denomina
n
parámetros formales o ficticios (pf1, pf2, pf3, ...). Ellos sirven para contener l
os 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 procedimient
o, sin
embargo, cuando se ejecuta la sentencia de llamada al procedimiento es preciso q
ue 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 del
ante 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 pas
a a la
variable que represente el parámetro actual. Este valor puede ser modificado dentr
o del
programa, pero su valor no se puede devolver al programa o procedimiento llamant
e.
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 reci
bir como para
transmitir valores entre el subprograma y el programa llamante. Estos parámetros p
ueden
actuar como parámetros de salida o de entrada/salida.
El siguiente ejemplo ilustra la diferencia entre parámetros valor y variable en Pa
scal 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 val
ores
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 p
rocedimiento.
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 ti
po
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 d
e 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 usua
rio 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 subprogr
ama
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 de
vuelto por
la función.
La lista de los parámetros formales son los identificadores utilizados para recibi
r 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 sig
uiente:
Nombre_función := valor_función
La función sólo devuelve un valor, el procedimiento puede devolver cero, uno o vario
s valores.
El tipo de dato del resultado de la función debe estar indicado en la cabecera y p
uede 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 (u
tilice una
variable diferente al del programa principal). Finalmente, debe calcular la dedu
cció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 seman
a 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 estructur
as 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 cantida
d fija de
memoria cuando se declara la variable. Las estructuras de datos dinámicas son aque
llas cuya
ocupación de memoria puede aumentar o disminuir durante el tiempo de ejecución. Entr
e 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 s
e 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 car
acteriza
por: -Almacenar los elementos del array en posiciones de memoria continua.
-Tener un único nombre de variable (por ejemplo salarios) que represente a todos l
os
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 tip
o de datos
estructurado compuesto de un número determinado de elementos, de tamaño fijo y eleme
ntos
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 a
l 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 vecto
r 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 indic
a 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 ref
erenciadas 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 es
tructura
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 estru
ctura 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 declaracion
es 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 posicio
nes 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 colu
mna. 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 u


na 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 conso
nantes 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 ti
ene el tipo de
dato string que almacena información de texto. Este dato se puede almacenar en con
stantes y
en variables de cadena. Una variable de cadena está declarada para la palabra stri
ng 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 bie
n
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 caractere
s de
longitud. Sin embargo, la ocupación en memoria de una cadena es un número de bytes i
gual 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 PUES


TO 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 lon
gitud 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 sente
ncia de
asignación o con una sentencia de lectura (read). Ambas situaciones se pueden desc
ribir 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 cad
ena 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 declar
ació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áct
er.
Cad2 I NFORMAT I CA
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 C
ad3
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 longitudactual=11
123 4 56 7891011 12 13 14 15 longitudmá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 almace
nan en
Cad1 los primeros ocho caracteres (de izquierda a derecha) de Cad2.
Cad1 I NFORM AT longitudactual=11
123 4 56 78 longitudmá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 conviert
a 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 d
e 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 so
n
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 crea
r
estructuras de datos dinámicas que tienen capacidad de variar en tamaño y ocupar tan
ta
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 cre
ar
estructuras de datos dinámicas, las cuales pueden variar en tamaño y memoria requeri
da. Las
variables que se crean y se destruyen durante la ejecución se llaman variables dinám
icas 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 ning
una
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 en
lace 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 pasajero
s 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 utilizand
o punteros
y los procedimientos new y dispose.
El tipo de datos puntero es de tipo simple pues no se puede romper en otros comp
onentes 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 util
izan 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 re
quieren
distintas cantidades de memoria para almacenar sus constantes, una variable punt
ero 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 va
lores de tipo
real. La posición de memoria designada por el valor de la variable puntero P se re
presenta por
P^. Se pueden asignar valores a P^ y utilizar valores de P^ en expresiones tal c
omo 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 de
claració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. E
l
procedimiento (sentencia) New se utiliza para crear la celda de memoria P; es de
cir, 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á apuntan
do 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 seg
unda
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 di
ná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 uti
liza para dar un
valor a una variable puntero que no apunta a ninguna posición, nil puede ser asign
ad 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 e
l 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 variab
le 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) q
ue 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 l
lamado
identificador de campo, que es algún identificador elegido por el programador cuan
do se
declara el tipo de registro y un tipo que se especifica cuando se declara el tip
o 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 designad
or o
selector de campo de la forma:
NombreReg.NombreCampo
Los datos mostrados anteriormente en Empleado mediante una secuencia de sentenci
as 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 igu
al 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 c
adenas.
Un registro al ser una estructura compuesta (distintos tipos de datos) es precis
o efectuar las
operaciones de lectura y escritura individualmente.
Otra operación que se puede realizar entre registros es la asignación (copia del con
tenido de
un registro en otro del mismo tipo). Si A y D son variables registro del mismo t
ipo, 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ól
o se
necesita el nombre del campo y no el selector de campo completo, con el nombre d
el 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 declara
r 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 c
on 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 reali
za 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 llama
r 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 contenid
o; 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 arc
hivo
llamado en el disco. Si este archivo no existe, las sentencias anteriores produc
irá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 asig
na 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 writ
eln 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. Const
a de una
serie de líneas separadas por una marca de fin de línea (eoln, "end of line"). La ma
rca 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 m
ismo.
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 sigui
ente:
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, procedimiento
s y funciones.
Cada unidad es como un programa independiente Pascal o bien una librería de declar
aciones
que se pueden poner en un programa y que permiten que éste se pueda dividir y comp
ilar
independientemente. Una unidad puede utilizar otras unidades y posee una parte q
ue puede
contener instrucciones de iniciación.
Una unidad contiene uno o más procedimientos, funciones constantes definidas y a v
eces
otros elementos. Se puede compilar, probar y depurar una unidad independientemen
te de un
programa principal. Una vez que una unidad ha sido compilada y depurada, no nece
sita
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 compil
ación. Los
procedimientos, funciones y constantes que se definen en una unidad pueden ser u
tilizados por
cualquier futuro programa que escriba sin tener que ser declarados en el program
a.
Las unidades tienen una estructura similar a los programas y en consecuencia req
uieren 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: Syst
em,
Graph, DOS, Crt, Printer, Turbo3 y Graph3. Las cinco primeras sirven para escrib
ir 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 Pasc
al). 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 inte
rface
(interfaz), sección implementation (implementación) y sección initialization (iniciali
zació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 pal
abra
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 arch
ivo 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á e
ncontrar el
archivo TPU (Turbo Pascal Unit). Si el nombre de la unidad es diferente del nomb
re del archivo,
el programa principal no podrá encontrar el archivo TPU.
Una unidad creada por el usuario puede utilizar otras unidades, siempre que se i
ncluyan en la
cláusula uses que aparece inmediatamente después de la palabra interface, y separada
s 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 conecta
r 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 exterio
r o
exportables. Las restantes unidades y programas tienen acceso a la información con
tenida en
la sección de interface.
En la interfaz de la unidad se pueden declarar constantes, tipos de datos, varia
bles 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 implem
entació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 inv
ocados
desde el exterior de la unidad. Esta sección contiene el cuerpo de los procedimien
tos 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. Es
tas
instrucciones sirven, por ejemplo, para iniciar variables. La ejecución de estas i
nstrucciones se
efectúa en el momento del lanzamiento o ejecución de un programa que utiliza la unid
ad 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 ejecut
e.
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 de
ben ser
definidos en la sección de implementación.
La cabecera de los procedimientos y funciones declarados en la parte de interfac
e deben ser
idénticos a la cabecera de las mismas funciones definidas en la parte de implement
ación; sin
embargo, es posible escribir la cabecera en forma abreviada en la sección de imple
mentació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 q
ue un
programa, pero el archivo obtenido no es ejecutable directamente. Tiene la exten
sió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 lo
s 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 conti
nuación,
compílelo hacia el disco. El código objeto se llamará Demo1.TPU. Esta unidad la utiliz
aremos
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 a
yuda de la
cláusula uses.
Como se ha visto anteriormente, un programa debe contener la cláusula uses, situad
a
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 sal
ida:
constantes, variables, procedimientos y funciones, que permiten el acceso al con
trol 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 representa
r 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 subprogram
as que
constituyen esta unidad no existen en Pascal estándar. Esta unidad no necesita nin
guna 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.

Вам также может понравиться