Está en la página 1de 33

Aprender a programar con Turbo Pascal

Realizar una aplicacin que realice la suma de dos nmeros.



Program suma;
Uses crt;
var
numero1:integer;
numero2:integer;
suma:integer;
begin
clrscr;
writeln ('Escriba el primer numero');
readln (numero1);
writeln ('Escriba el numero 2 );
readln (numero2);
suma := numero1 + numero2;
writeln ('El resultado de la suma es:', suma);
end.

Este pequeo ejemplo nos hace la suma de dos nmeros digitados desde el teclado y
luego hace la operacin mostrando luego el resultado.

Turbo pascal

El lenguaje presenta una serie de caractersticas que lo hacen el lenguaje perfecto para aquellas
personas iniciadas en la programacin:

1. Excelente para el aprendizaje de la programacin.
2. Lenguaje de propsito general, es decir, se puede aplicar a gran diversidad de aplicaciones.
3. Utilizacin de procedimiento (programacin modular).
4. Lenguaje estructurado, se utilizan secuencias de control de bifurcacin y bucles (If, For, While,
Repeat) sin necesidad de la famosa instruccin Goto tan utilizada en muchos lenguajes como
BASIC.
5. Soporta la recursividad, es decir, propiedad que tienen los procedimientos para llamarse a s
mismo.
6. Tipo de datos simples y estructurados, as como definidos por el usuario.
7. Posibilidad de trabajar con punteros (variables dinmicas), de este modo permite definir nuestras
propias estructuras de datos dinmicas (lista, pilas, colas, etc.).
Estructura de un Programa en Pascal:
Program Nombre;
Uses
Lista de Librerias;
Const
Lista de Constantes;
Type
Lista de tipos de datos;
Var
Lista de Variables;

Begin
Sentencias;
End.
Veamos un ejemplo de un programa bsico, que escribir en pantalla la palabra Hola:
Program Saludo;
Begin
Write ('Hola');
Readln;
End.
Lo primero es que la mayora de las sentencias son palabras en ingles o abreviaturas de estas. Este
programa lo podramos traducir literalmente, de la siguiente manera:
Programa Saludo
Comienzo
Escribe Hola
Final
La lnea Program es opcional y sirve para ponerle un nombre al programa; de esta manera, se tiene una
idea de lo que hace el mismo. La palabra Saludo, es el nombre del programa.
Las palabras Begin y End marcan el principio y el final del programa. No existe distincin entre
maysculas y minsculas, por lo que BEGIN es lo mismo que begin Begin.
Como podrn ver algunas lneas terminan con un punto y coma. Pues bien, cada sentencia de Pascal
debe terminar con un punto y coma (;), salvo el ltimo End, que lo har con un punto. No es necesario
un punto y coma despus de un Begin, ni antes de una palabra End o de un Until.
Cuando definamos variables, tipos, constantes, etc., veremos que tampoco va punto y coma despus de
las cabeceras de las declaraciones. Pero eso ya llegar...
La orden Write aparece algo ms a la derecha que el resto. Esto se llama escritura indentada, y consiste
en escribir a la misma altura todos los comandos que se encuentran a un mismo nivel, algo ms a la
derecha los que estn en un nivel inferior, y as sucesivamente, buscando mayor legibilidad. Se ir
viendo con ms detalle a medida que se avanza en el tutorial.
La sentencia Readln, en este caso, nos sirve para que tenga una pausa y uno pueda ver lo que apareci
en pantalla, hasta que se presione la tecla <ENTER>.
Una lnea del programa en Turbo Pascal puede tener hasta 128 caracteres.

Sentencias bsicas
Variables:
Las variables son muy importantes en todos los programas. Con las variables podrs guardar
informacin relevante con la que podrs operar ms tarde.

Una variable es simplemente un nombre que das a un rea de la memoria en la cual el valor dato es
guardado. Cuando necesites sacar esta parte del dato, o modificar este valor, puedes referirte a la
localizacin en memoria por el nombre de la variable.
Eres libre de dar a la variable un nombre descriptivo. Por ejemplo el nombre de variable telefono es
obvio que contendr algn tipo de nmero de telfono.
El nombre de la variable debe ser:
1. El primer carcter deber ser siempre una letra: mayscula o minscula.
2. Despus de la primera letra en el nombre de la variable podr ser letras, nmeros y el guion de
abajo (_).
3. El nombre de la variable no puede ser una sentencia, por ejemplo Write.
4. Puede tener cualquier longitud, pero solo 63 son significativos.
5. No puedes usar letras acentuadas, espacios ni la letra .
Tipos de Datos:
Los tipos de datos de la variable ms usados en Turbo Pascal, son los siguientes:
1. Integer: Es un nmero entero con signo, que puede valer desde -32768 hasta 32767. Ocupa 2
bytes de memoria.
2. Byte: Es un nmero entero, que puede valer entre 0 y 255. El espacio que ocupa en memoria es
el de 1 byte, como su propio nombre indica.
3. Char: Representa a un carcter (letra, nmero o smbolo). Ocupa 1 byte.
4. String: Es una cadena de caracteres, empleado para almacenar y representar mensajes de ms de
una letra (hasta 255). Ocupa 256 bytes. El formato en Pascal es string[n], donde n es la anchura
mxima que queremos almacenar en esa cadena de caracteres (de 0 a 255), y entonces ocupar
n+1 bytes en memoria.
5. Real: Es un numero real con signo. Puede almacenar nmeros con valores entre 2.9e-39 y
1.7e38. Tendremos 11 o 12 dgitos significativos y ocupan 6 bytes en memoria.
6. Boolean: Es una variable lgica, que puede valer TRUE (verdadero) o FALSE (falso), y se usa
para comprobar condiciones.

Declaracin:
Var
Numero:integer;
Sueldo:real;
Nombre, apellido:string[20];
letra:char;
Asignacin:
Nombre:='Pedro';
Numero:=1;
Operaciones Bsicas:
Operadores Matemticos:
Operadores Descripcin
+ Suma
- Resta
* Multiplicacin
/ Divisin
div Divisin de enteros
. Punto decimal
mod Resto de la divisin
Sqr Elevar al cuadrado
Sqrt Raz Cuadrada
Ln Logaritmo natural
Exp Exponencial (e elevado a un nmero)
Sin Seno
Cos Coseno
^ Exponente (ALT 094)
La barra de divisin / produce un resultado real independientemente del tipo de sus operandos; es decir,
3/4 produce 0.75, que es real, pero 2/4 produce 2.0, tambin de manera real, as que el resultado de una
divisin con la barra se debe asignar a una variable real.
Para obtener slo la parte entera de una divisin, se usa el operador Div. Por ejemplo, 7 Div 3 da como
resultado 2 (porque 7 cabe en 3 dos veces); este resultado se puede asignar a una variable entera. Claro
que hay una prdida de precisin en esta operacin; puede obtenerse por separado el residuo de la
divisin usando Mod, como en 7 Mod 3, que da por resultado 1. El uso ms importante de Mod es para
saber si un nmero dado es mltiplo de otro; en efecto, si A Mod B = 0, entonces A es mltiplo de B.
Ms adelante se ver cmo realizar decisiones en el programa.
5/2=2,5 ; resto=1
5div2=2
5mod2=1
Operadores de Relacin:
Los operadores relacionales nos sirven para determinar la relacin que tiene una expresin con otra. Los
operadores relacionales que manejaremos en Pascal son los siguientes:
Operadores Descripcin
= Es igual a
<> No es igual a
> Es mayor que
< Es menor que
>= Es mayor o igual que
<= Es menor o igual que
And y
Or o
Not no
Write, Read, CRT, CLRSCR:
Escribe en Pascal el siguiente programa y luego crrelo:
Fjate bien que despus de Hola y antes de la comilla simple hay un espacio, ya veras porque.
Program Saludo;
Var
nombre: string[20];

Begin
Writeln ('Introduce tu nombre, por favor');
Readln (nombre);
Write ('Hola ',nombre);
Readln;
End.
En primer lugar, hemos definido una variable, para lo que empleamos la palabra Var, seguida del
nombre que vamos a dar a la variable, y del tipo de datos que va a almacenar esa variable.
Con la palabra string decimos que la variable nombre va a contener una cadena de caracteres (letras o
nmeros). String[20] indica que el nombre podr estar formado hasta por 20 letras o nmeros.
Write es la orden que permite escribir un texto en pantalla. El conjunto de todo lo que se desee escribir
se indica entre parntesis. Cuando se trata de un texto que queremos que aparezca tal cual, ste se
encierra entre comillas (una comilla simple para el principio y otra para el final).
Esta vez se ha empleado Writeln, que es exactamente igual que Write con la nica diferencia de que
despus de visualizar el mensaje, el cursor (la posicin en la que se seguira escribiendo, marcada
normalmente por una rayita o un cuadrado que parpadea) pasa a la lnea siguiente, en vez de quedarse
justo despus del mensaje escrito.
Despus se espera a que el usuario introduzca su nombre, gracias a Read, y se guarda automticamente
en la variable nombre.
Finalmente, aparece en pantalla la palabra Hola seguida por el nombre que se ha introducido, sea,
Write llama a la variable nombre.
Obsrvese la combinacin de smbolos := del programa. Es un operador de asignacin y sirve, al igual
que el ReadLn, para darle valor a una variable. A diferencia del ReadLn, sin embargo, el valor que se
da a la variable no se lee del teclado, sino que se toma de una constante, de otra variable, o de una
expresin aritmtica (situadas a la derecha del operador de asignacin) y se copia hacia la variable cuyo
nombre est a la izquierda.
Otro Ejemplo:
Program Suma; {Ejemplo de un programa que Suma}
Uses CRT;
Var
A,B,Resultado:integer;

Begin
CLRSCR;
Write ('Ingrese primer numero:');
Readln (A);
Write ('Ingrese segundo numero:');
Readln (B);
Resultado:=A+B;
Writeln ('El Resultado es:',Resultado);
Readln;
End.
En este ejemplo lo que hacen las llaves {} es insertar un comentario en nuestro programa. El comentario
no ser tomando en cuenta por Pascal cuando se corra el programa, solo sirve como referencia para
saber, por ejemplo: cuando se hizo, quien lo hizo, para que sirve el programa, para que funciona cada
lnea, etc. Sirve para comentar tus programas y que otros usuarios lo entiendan.
La sentencia CLRSCR, nos permite borrar la pantalla antes de correr el programa. Es primordial limpiar
la pantalla cada vez que iniciemos un programa, para que no se vean lneas de programas anteriores.
Para que funcione debes colocar la unidad CRT.
CRT es la primera unidad que trataremos y es la encargada de gestionar (entre otras cosas) la pantalla en
modo texto. Para acceder a cualquier unidad, se emplea la sentencia Uses justo despus de Program y
antes de las declaraciones de variables:
Program Prueba;
Uses CRT;
Var
[...]
Otro ejemplo:
Program AreaCirculo;
Uses
Crt;
Const
pi = 3.1415927; {Declaracin de constante}
Var
area: Real; {Area del crculo}
radio: Integer; {Radio a teclear}

Begin
Write ('Radio: ');
ReadLn (radio);
area := pi * radio * radio;
WriteLn ('Area: ', area);
End.
La seccin llamada Const es para declarar las constantes. Son opcionales. Ntese que a una constante no
se le especifica el tipo de variable, slo el valor.
La escritura de una variable Real se produce por defecto en notacin cientfica. Para obviar esto, pueden
agregarse al final del nombre de la variable dentro del Write/WriteLn, dos nmeros separados por dos
puntos. El primero dice cuntos espacios en blanco insertar delante del nmero, y el segundo cuntas
cifras decimales imprimir:

WriteLn('Area: ', area:0:2);
If THEN
Muchas veces se nos presentan situaciones en las que tenemos que evaluar una condicin o situacin. Si
la condicin es verdadera, entonces ejecutamos una o ms instrucciones; si no es verdadera,
ejecutamos otra u otras instrucciones.
Sintaxis:
If <cond> then
Begin
<Bloque de Sentencias>;
End
Else
Begin
<Bloque de Sentencias>;
End;
Donde <cond> es una condicin que puede ser falsa o verdadera, y <bloque de sentencias> es una sola
sentencia, o bien varias sentencias encerradas entre un Begin y un End. El Begin y el End se usan
cuando hay mas de una sentencia y Else cuando es necesario. La forma general de una condicin es:
<expr1><op-rel><expr2>
Donde <expr> son expresiones y <op-rel> son los operadores relacionales.
Es bueno recalcar que el bloque del If se ejecuta slo si la condicin es verdadera, y que el bloque del
Else se ejecuta slo si la condicin es falsa. La lnea que est antes del Else no se le coloca punto y
coma.
Veamos un ejemplo:
Program Numeros;
Uses
CRT;
Var
numero:integer;

Begin
CLRSCR;
Write ('Escriba un nmero: ');
Readln (numero);
If numero>0 Then
Writeln ('El nmero es positivo');
Readln;
End.
Otro ejemplo, pero ahora con Else:
Program Numeros;
Uses
CRT;
Var
numero:integer;

Begin
CLRSCR;
Write ('Escriba un nmero: ');
Readln (numero);
If numero<0 Then
Writeln ('El nmero es negativo')
Else
Writeln ('El nmero es positivo o cero');
Readln;
End.
El programa pide un nmero.
Si (IF) el nmero introducido es menor que cero entonces (THEN) se imprime el mensaje El nmero
es negativo.
Si no (ELSE), es menor que cero, entonces se imprime el mensaje El nmero es positivo.
Otro ejemplo:
Program Mayor;
Uses
CRT;
Var
N1,N2,N3,NMayor:integer;

Begin
CLRSCR;
Write ('Ingrese primer nmero: ');
Readln (N1);
Write ('Ingrese segundo nmero: ');
Readln (N2);
Write ('Ingrese tercer nmero: ');
Readln (N3);
If (N1>=N2) And (N1>=N3) Then;
NMayor:=N1;
If (N2>=N1) And (N2>=N3) Then;
NMayor:=N2;
If (N3>=N1) And (N3>=N2) Then;
NMayor:=N3;
Writeln ('El numero mayor es: ',NMayor);
Readln;
End.
Otro Ejemplo:
Program Formula;
Uses
CRT;
Var
x,y,z:real;

Begin
CLRSCR;
Write ('Ingrese el valor de y: ');
Readln (y);
Write ('Ingrese el valor de z: ');
Readln (z);
If z<>0 Then;
Begin
x:=y/z;
Writeln('x= ',x:8:4);
End
Else
Writeln ('el valor de z debe ser diferente de cero');
Readln;
End.
Como se ha visto, la sentencia If presenta una forma de tomar decisiones basndose en el resultado de
evaluar una expresin condicional. Esto, por supuesto, tiene limitaciones; a veces es necesario evaluar
una expresin aritmtica en vez de lgica, y tomar varias decisiones segn los distintos valores. Si hay
muchos valores diferentes posibles, usar If para esto puede ser tedioso.
CASE OF
Es por esto que la sentencia Case ejecuta condicionalmente uno o ms bloques de cdigo de acuerdo
con el resultado de una expresin aritmtica que produzca un nmero entero. Su sintaxis es:
Case <expr> Of
<val1> : <bloq1>;
<val2> : <bloq2>;
. . .
<val-n> : <bloq-n>;
Else
<bloq>;
End;
Donde <expr> es la expresin a evaluar y <val1>, <val2>, ... <val-n> son valores de entre los que
puede tomar esa expresin, y para cada valor se ejecutar el bloque correspondiente. Como los valores
pueden repetirse, se pueden ejecutar uno o ms de los bloques, o bien ninguno.
Ntese que el Case termina siempre con un End;, a pesar de que no tiene Begin.
Ntese que la parte del Else es opcional, al igual que en el If, y su bloque asociado slo se ejecuta si la
expresin toma un valor para el cual no se ha especificado un bloque de cdigo. Sin embargo, si se usara
el Else, el ltimo bloque sobre l debe llevar un punto y coma al final de su ltima lnea, a diferencia de
como es en el If.
Veamos el siguiente ejemplo:
Program Case;
Uses
CRT;
Var
opcion:char;

Begin
CLRSCR;
Writeln ('Opcin: 1 ');
Writeln ('Opcin: 2 ');
Writeln ('Opcin: 3 ');
Write ('Escoge una opcin: ');
Readln (opcion);
Case opcion Of
'1': Writeln ('Escogiste la opcin: 1');
'2': Writeln ('Escogiste la opcin: 2');
'3': Writeln ('Escogiste la opcin: 3');
Else
Writeln ('Escogiste una opcin no valida');
End;
Readln;
End.
El ejemplo anterior nos presenta un pequeo men con 3 opciones a escoger, si escogemos la opcin 1,
y por tanto le damos a la variable opcion el valor de uno, entonces se ejecutaron las instrucciones que
corresponden al caso de que la variable sea igual a 1, si escogemos la opcin 2, entonces se ejecutarn
las instrucciones que corresponden al caso de que la variable sea igual a 2, etc.
Dentro de cada caso que tenga la expresin podemos ejecutar una o ms instrucciones, incluyendo
bloques If y anidar bloques Case si nos fuera necesario.
Otro ejemplo:
Program Directorio;
Uses
Crt;
Var
Piso: Integer;
Negocio: String;
Begin
Write ('Nmero de piso: ');
Readln (Piso);
Case Piso Of
1: Negocio:= 'Microsoft';
2: Negocio:= 'Compaq';
End;
If Negocio <> '' Then
Writeln ('El negocio en el piso ', Piso, ' es: ', Negocio)
Else
Writeln ('Este edificio slo tiene dos pisos');
End.
El programa trabaja como sigue: segn sea el piso escogido, se guardan los nombres de los negocios en
ese piso en una variable de tipo String. Luego, se consulta el valor de esa variable: si es nula (''), no se
le asign valor en el Case y entonces el nmero de piso no es vlido y se imprime el mensaje del Else.
En caso contrario, se muestran los negocios en ese piso.
Sin embargo, esta no es ms que una pequea muestra en el poder del Case. En efecto, una extensin a
su sintaxis de valores le permite ejecutar un mismo bloque de cdigo para un rango de valores de la
expresin:
Case X Of 1..5 : Write ('Entre 1 y 5');
7 : Write ('Siete');
End;
La idea es colocar dos expresiones separadas por punto punto (..); si el valor de la expresin evaluada
por el Case (en este caso el valor de la variable X) est comprendido en este rango, se ejecuta este
bloque.
Una ltima consideracin sobre el Case es que la expresin a ser evaluada debe producir siempre un
resultado entero, o un carcter:
Case X Of
'A'..'Z', 'a'..'z': Write ('Letra');
'0'..'9' : Write ('Nmero');
Else
Write ('Carcter especial');
End;
Aqu a es una variable del tipo Char. Como se ve adems en este ejemplo, se pueden colocar ms de un
rango en un solo bloque, como se ha hecho con las letras (ya que la computadora interpreta las
maysculas y las minsculas de formas distintas).
Otro ejemplo:
Program Case;
Uses
CRT;
Var
letra:char;

Begin
CLRSCR;
Write ('Escriba un smbolo: ');
Readln (letra);
Case letra Of
' ': Writeln ('Un espacio');
'A'..'Z', 'a'..'z': Writeln ('Una letra');
'0'..'9': Writeln ('Un dgito');
'+', '-', '*', '/': WriteLn('Un operador');
Else
Writeln ('No es espacio, ni letra, ni dgito, ni operador');
End;
Readln;
End.
Otro ejemplo:
Program Areas;
Uses
CRT;
Var
area,L,B,N:real;
opcion:integer;
Begin
CLRSCR;
Writeln ('1.- Area Triangulo');
Writeln ('2.- Area Rectngulo');
Writeln ('3.- Area Cuadrado');
Writeln ('4.- Salir');
Write ('Ingrese opcin: ');
Readln (opcion);
Case opcion Of
1: Begin
Write ('Ingrese base: ');
Readln (B);
Write ('Ingrese altura: ');
Readln (N);
area:=(B*N)/2;
Writeln ('El Area es: ',area:8:4);
End;
2: Begin
Write ('Ingrese base: ');
Readln (B);
Write ('Ingrese altura: ');
Readln (N);
area:=B*N;
Writeln ('El Area es: ',area:8:4);
End;
3: Begin
Write ('Ingrese lado: ');
Readln (L);
area:=Sqr(L);
Writeln ('El Area es: ',area:8:4);
End;
4: Writeln ('Hasta luego');
Else
Writeln ('Opcion Invalida');
End;
Readln;
End.
For TO DO
La primera forma de repetir cdigo que se ver lo hace mediante un conteo aritmtico. Es la sentencia
For, que tiene la siguiente sintaxis formal:
For <vc>:=<vi> To <vf> Do
<sentencia>;
For <vc>:=<vi> DownTo <vf> Do
<sentencia>;
Donde <vc> es una variable contadora de tipo entero, <vi> es un valor inicial para dicha variable y <vf>
es un valor final. El valor inicial se asigna a a la variable contadora, que despus se incrementa en uno
(si se usa To) o se decrementa en uno (si se usa DownTo) cada vez que se corre el bloque. Si se usa To,
esto se repite hasta que el valor de la variable contadora exceda el valor final. Si se usa el DownTo
(segunda forma), esto se repite hasta que el valor de la variable contadora sea menor que el valor final.
En general, el bloque se repite (<vf> - <vi> + 1) veces.
De la observacin de la manera en que la variable contadora es manipulada segn se use la opcin To o
DownTo, se desprende la siguiente regla: En caso de usar To, el valor inicial debe ser menor que el
valor final; en caso de usar DownTo, el valor inicial debe ser mayor que el valor final. Si no se cumple
con esto, el bloque del For no correr jams.
Si hay que colocar mas de una sentencia en For, se deben de colocar entre un Begin y un End;.
Veamos el siguiente ejemplo:
For i := 1 To 5 Do
Writeln (i);

Este fragmento imprime los nmeros desde el 1 hasta el 5.

Otro ejemplo:
Program Area;
Uses
CRT;
Var
area,B,H:real;
i,num:integer;
Begin
CLRSCR;
Writeln ('Cuantas areas desea calcular?');
Readln (num);
For i:=1 To num Do
Begin
Writeln ('Triangulo #: ',i);
Writeln ('Ingrese base: ');
Readln (B);
Write ('Ingrese altura: ');
Readln (H);
area:=(B*H)/2;
Writeln ('El Area es: ',area:8:4);
End;
Readln;
End.
Otro ejemplo:
Program Sumar;
Uses
CRT;
Var
N,num,cont,suma:integer;
Begin
CLRSCR;
Writeln ('Cuantas nmeros desea ingresar?');
Readln (N);
suma:=0;
For cont:=1 To N Do
Begin
Write ('Ingrese numero: ')
Readln (num);
suma:=suma+num;
End;
Writeln ('La suma total es: ',suma);
Readln;
End.
Otro ejemplo:
Program For;
Uses
CRT;
Var
letra:char;
Begin
CLRSCR;
For letra:='a' To 'z' Do
Writeln (letra);
Readln;
End.
While DO
La idea del While es repetir un bloque de cdigo hasta que una condicin dada sea falsa y mientras sea
verdadera.
Su sintaxis formal es:

While <cond> Do
<bloque>;
Si hay que colocar mas de una sentencia en While, se deben de colocar entre un Begin y un End;.
Veamos el siguiente ejemplo:
Program Suma;
Uses
CRT;
Var
N,num,cont,suma:integer;
Begin
CLRSCR;
Write ('Cuantos numeros desea ingresar?');
Readln (N);
suma:=0;
cont:=1;
While cont<=N Do
Begin
Write ('Ingrese Numero:');
Readln (num);
suma:=suma+num;
cont:=cont+1;
End;
Writeln ('La suma total es: ',suma);
Readln;
End.
Repeat UNTIL
El Repeat repite el bloque hasta que una condicin dada sea verdadera y mientras sea falsa.
Su sintaxis formal es:

Repeat
<bloque>
Until <cond>;


Una cosa muy interesante del Repeat es que puede manejar un bloque sin Begin ni End;, a diferencia de
los dems comandos de Pascal; esto es, se pueden poner tantas lneas de cdigo como se desee entre el
Repeat y el Until y todas se repetirn. <cond> es una condicin que se estructura de manera similar a la
de las condiciones del If; cuando es verdadera, cesa la repeticin del bloque.
Ntese que la condicin que detiene al Repeat no se revisa sino hasta el final del bloque; por tanto, ste
correr siempre al menos una vez.
Veamos el siguiente ejemplo:
Program Suma;
Uses
CRT;
Var
N,num,cont,suma:integer;
Begin
CLRSCR;
Write ('Cuantos numeros desea ingresar?');
Readln (N);
suma:=0;
cont:=1;
Repeat
Write ('Ingrese Numero:');
Readln (num);
suma:=suma+num;
cont:=cont+1;
Until cont>N;
Writeln ('La suma total es: ',suma);
Readln;
End.
Procedimiento y funcin
La programacin estructurada trata de dividir el programa en bloques ms pequeos, buscando una
mayor legibilidad, y ms comodidad a la hora de corregir o ampliar. Estos bloques sern de dos tipos:
procedimientos (procedure) y funciones (function).

La diferencia entre ellos es que un procedimiento ejecuta una serie de acciones que estn relacionadas
entre s, y no devuelve ningn valor, mientras que la funcin s va a devolver valores.
Procedimiento:
Su sintaxis es la siguiente:
Procedure identificador (parmetros);
Var
Variables locales;
Begin
Sentencias;
End;
Veamos este ejemplo:
Program Acceso;
Uses
CRT;
Const
ClaveCorrecta = 1 (Esta constante es global)
Procedure Password;
Var
clave:integer; (Esta variable es local)
Begin
Writeln ('Introduzca su clave de acceso');
Readln (clave);
If clave<>ClaveCorrecta then
Begin
Writeln ('La clave no es correcta!');
Exit
End;
End;

Begin
CLRSCR;
Password;
Readln;
End.
Un procedimiento puede tener sus propias variables, que llamaremos variables locales, frente a
las del resto del programa, que son globales. Desde dentro de un procedimiento podemos
acceder a las variables globales (como ClaveCorrecta del ejemplo anterior), pero desde fuera de
un procedimiento no podemos acceder a las variables locales que hemos definido dentro de l.
La orden Exit, que no habamos visto an, permite interrumpir la ejecucin del programa (o de
un procedimiento) en un determinado momento.
Veamos este otro ejemplo:
Program Numeros;
Uses
CRT;
Procedure Inicio(X1,Y1,Z1:integer);
Begin
X:=X1; Y:=Y1; Z:=Z1
End;

Begin
CLRSCR;
Inicio(1,2,3);
Writeln ('X=', X, ' Y=', Y, ' Z=', Z');
Inicio(4,5,6);
Writeln ('X=', X, ' Y=', Y, ' Z=', Z');
Readln;
End.
Funcin:
Su sintaxis es la siguiente:
Procedure identificador (parmetros): tipo;
Var
Variables locales;
Begin
Sentencias;
End;
Veamos este ejemplo:
Program Sumatoria;
Uses
CRT;
Var
Z:integer;
Function Suma (X1, X2 : integer) : integer;
Begin
Suma:= X1 + X2;
End;

Begin
CLRSCR;
Z:=Suma(1,1);
Writeln ('1+1=',Z);
Z:=Suma(2,2);
Writeln ('2+2=',Z);
Readln;
End.
Parmetros:
Las funciones y procedimientos normalmente las trabajamos con variables globales, limitando su campo
de accin. Con el uso de parmetros logramos indicar los valores y variables iniciales de los procesos,
logrando una mayor flexibilidad y portabilidad.
Contamos con dos tipos de parmetros:
Parmetros por valor:
Cuando se pasa un parmetro por valor, se obtiene una copia temporal de la variable usada, dentro de la
funcin o procedimiento se trabaja con la copia obtenida, no importando las operaciones que se realicen
con la copia, la variable introducida como parmetro, no ser afectada en su valor inicial al terminar el
proceso. Su sintaxis es la siguiente:
Procedure identificador (variable: Tipo);
Veamos este ejemplo:
Program PruebaDeParametros;
Var
dato:integer;
Procedure Modifica(variable:integer);
Begin
variable:=3;
Writeln ('Dentro: ', variable);
End;

Begin
dato:=2;
Writeln ('Antes: ', dato);
Modifica (dato);
Writeln ('Despus: ', dato);
End.


Qu dirais que pasa?, al finalizar escribir el valor dato... 3?
PUES NO!!!! Escribe un 2. Las modificaciones que hagamos a dato dentro del procedimiento
Modifica slo son vlidas mientras estemos dentro de ese procedimiento. Daos cuenta de que lo que
modificamos es la variable genrica que hemos llamado variable, y que no existe fuera del
procedimiento.
Eso es pasar un parmetro por valor. Pero, cmo hacemos si realmente queremos modificar el
parmetro?. Pues nada ms que aadir la palabra Var delante de cada parmetro que queremos permitir
que se pueda modificar.
Parmetro por referencia:
Cuando se pasa un parmetros por referencia, los cambios que se realicen a la variable introducida como
parmetro, se mantendrn vigentes al terminar el proceso, en este caso especfico solo se admiten
variables. Su sintaxis es la siguiente:
Procedure identificador (Var variable: Tipo);
Veamos este ejemplo:
Program PruebaDeParametros;
Var
dato:integer;
Procedure Modifica(Var variable:integer);
Begin
variable:=3;
Writeln ('Dentro: ', variable);
End;

Begin
dato:=2;
Writeln ('Antes: ', dato);
Modifica (dato);
Writeln ('Despus: ', dato);
End.
Esta vez la ltima lnea del programa s que escribe un 3 y no un 2, porque hemos permitido que los
cambios hechos a la variable salgan del procedimiento. Esto es pasar un parmetro por referencia.
Cadenas de caracteres
Las cadenas de caracteres son secuencias de caracteres con longitudes que varan desde 1 hasta los 255
caracteres. El tipo identificador de las cadenas es String. Cuando declaramos una variable de tipo
String ser posible introducir hasta 255 caracteres en ella, pero tambin es factible declarar cadenas ms
cortas agregando al momento de la declaracin la longitud de la variable, por ejemplo:
mensaje : String[30]; {longitud maxima de la cadena = 30 caracteres}
Comparacin de cadenas:
La comparacin de cadenas es una operacin muy comn en Pascal; estas comparaciones se realizan
con base en el orden del cdigo ASCII, por ejemplo la cadena Prueba es menor a la cadena prueba ya
que el valor del cdigo ASCII de P es 80 y el de p es 112. As tambin podemos diferenciar las cadenas
con respecto a su tamao: Hola es menor a Bienvenido.
Existe un caso especial de una cadena, que es cuando no tiene ningn carcter en ella, en ese momento
decimos que es una cadena nula o vaca. Se recomienda ampliamente inicializar todos los valores de las
cadenas a cadenas nulas al inicio del programa, ya que podran contener datos extraos e indeseables.

Manejo de los elementos de la cadena:
Es posible leer cada elemento de una cadena por separado, por ejemplo, si en la variable Calle
almacenamos la cadena Hidalgo es posible asignar a otra cadena el valor de Calle[x] donde x es el
carcter de la cadena que se quiere leer, as tambin es posible visualizar el carcter en pantalla usando
la instruccin WriteLn. Ejemplo:
Program Cadena;
Uses
CRT;
Var
Calle : String;
Letra : String;
Begin
CLRSCR;
Calle := 'Caracas';
WriteLn (Calle[2]); {Visualiza el segundo caracter de Calle}
Letra := Calle[1]; {Guarda en Letra el primer caracter de Calle}
WriteLn (Letra);
Readln;
End.
Length:
Para conocer la longitud de una cadena utilizamos la funcin Length, la longitud es la cantidad de
caracteres que contiene la cadena en un momento determinado.
Su sintaxis es:
Length (cadena);
La funcin regresa un valor entero.
Program Length;
Uses
CRT;
Var
Cadena : String;
Begin
CLRSCR;
Cadena := 'Prueba de longitud';
WriteLn ('Longitud de la cadena: ', Length (Cadena);
Readln;
End.
El programa imprime en la pantalla un mensaje con la longitud de la cadena almacenada en memoria, en
este caso especfico 18.
Operador (+):
Es una de las formas ms sencillas de unir dos cadenas y se maneja exactamente como una suma, la
nica limitante es que en caso de ser mayor la longitud resultante de la suma que la longitud que pueda
manejar la variable en que se almacenar se truncarn los caracteres sobrantes. Ejemplo:
Program unir cadenas;
Uses
CRT;
Var
Cadena1, Cadena2, Cadena3 : String;
Begin
CLRSCR;
Cadena1 := 'Buenos ';
Cadena2 := 'dias ';
Cadena3 := Cadena1 + Cadena2;
WriteLn (Cadena3);
Readln;
End.
Se imprimir en la pantalla: Buenos dias.
Concat:
La funcin Concat produce los mismos resultados que la concatenacin, es posible incluir cualquier
nmero de cadenas que se necesiten concatenar. La suma de las cadenas no deber sobrepasar la
longitud que la variable, a la cual se asignar dicha suma, puede manejar. Ejemplo:
Cadena := Concat (cad1, cad2, cad3, ... , cadn);
Pos:
La funcin Pos nos sirve para localizar una determinada cadena dentro de otra, en otras palabras para
verificar si una cadena es subcadena de otra segunda. Los parmetros que requiere son: la cadena que se
buscar y la cadena donde se buscar la primera.
Pos (cadbusqueda, cadfuente);
Cuando encuentra la cadena la funcin devuelve su posicin inicial, en caso de que no la encuentre
devuelve el valor de 0.

Ejemplo:
Program Pos;
Uses
CRT;
Var
Cadena : String;
Begin
CLRSCR;
Cadena := 'Domingo Lunes Martes Miercoles Jueves Viernes Sabado';
WriteLn (Cadena);
WriteLn (Pos ('Lunes', Cadena)); {Muestra 9}
WriteLn (Pos ('Jueves', Cadena)); {Muestra 32}
WriteLn (Pos ('Ayer', Cadena)); {Muestra 0}
Readln;
End.
Copy:
La funcin Copy regresa una subcadena de una variable o constante dada como parmetro. Su sintaxis
es:
Copy (Cadena, Inicio, Cantidad);
Donde Cadena es la fuente de la subcadena, Inicio es la posicin desde la cual se obtendr la subcadena
y Cantidad es el nmero de caracteres que se extraern. Los valores de Inicio y Cantidad deben ser de
tipo entero.
Ejemplo:
Program Pos;
Uses
CRT;
Var
Cadena : String;
Begin
CLRSCR;
Cadena := "Nuevos horizontes";
WriteLn (Copy (Cadena, 8, 10)); {Visualiza en pantalla: horizontes}
Readln;
End.

Insert:
El procedimiento Insert sirve para insertar una cadena dentro de otra en alguna posicin determinada.
Sintaxis:
Insert (Cadena1, Cadena2, Posicin)
Donde Cadena1 es la que se insertar, Cadena2 es donde se insertar y Posicin es el lugar donde se
insertar. El parmetro Posicin debe ser de tipo entero.
Delete:
Este procedimiento elimina un determinado nmero de caracteres de una cadena. Su sintaxis es:
Delete (Cadena, Inicio, Nmero)
Cadena es la variable en la cual se eliminarn los caracteres, Inicio es la posicin del primer caracter a
eliminar y Nmero es la cantidad de caracteres que se borrarn.
UpCase:
La funcin UpCase regresa la letra mayscula correspondiente al caracter dado como parmetro.
UpCase (Cadena)
Es muy comn trabajando con cadenas que se quiera convertir una que contiene un nmero a su valor
numrico, para poder utilizarlo en operaciones matemticas, as como convertir un nmero a su
equivalente en una cadena. Esto es ms fcil de entender si consideramos que no es lo mismo el valor 75
y el valor '75', en el primer caso es un nmero mientras que en el segundo es un par de caracteres
ASCII. Para lograr estos cambios de tipo en Pascal utilizamos los procedimientos siguientes:
Str:
El procedimiento Str obtiene una cadena a partir de un valor numrico. Su sintaxis es:
Str (Valor, Cadena)
Donde Valor es el nmero a convertir y Cadena es la variable donde se almacenar la cadena ya
convertida.
Val:
Este procedimiento convierte una cadena en un valor de tipo numrico, el problema con esta funcin es
que si la cadena no esta formada exclusivamente de nmeros siguiendo las reglas para el tipo de datos
que se vallan a obtener se generar un error. Sintaxis:
Val (Cadena, Num, Cdigo)
Cadena contiene la cadena que ser procesada, Num es la variable de tipo numrico donde se guardar
el valor de la cadena y Cdigo es una variable de tipo entero (Integer) que contendr el valor de 0 si no
hubo errores y un valor diferente en caso de que no se haya podido convertir la cadena, el valor de
Cdigo representa la posicin de la cadena donde ocurri el error.
Ejemplos:
Program Invertir;
Uses
CRT;
Type
Cadena : String[30];
Var
Cadorig, Cadinv : Cadena;
Function invierte-cadena (cad1 : Cadena) : Cadena;
Var
Longcad, i : integer;
cad2 : cadena;
Begin
Longcad := Length (cad1);
cad2 := ' ';
For i := Longcad down to 1 do
cad2 := cad2 + Copy (cad1, i, 1);
invierte-cadena := cad2;
End;
Begin
CLRSCR;
Write ('Ingrese Cadena: ');
ReadLn (Cadorig);
Cadinv := invierte-cadena (Cadorig);
WriteLn ('La cadena invertida de ', Cadorig, 'es: ', Cadinv);
Readln;
End.
Otro Ejemplo:
Program Contarletras;
Uses
CRT;
Type
Cadena : String[30];
Caracter : String[1];
Var
Cad : Cadena;
Letra : Caracter;
TotalLetras : Integer;
Function CuantasLetras (Cad : Cadena; Letra : Caracter) : Integer;
Var
Longcad, i, TotLetras: integer;
Begin
TotLetras := 0;
Longcad := Length (Cad);
For i := 1 to Longcad do
Begin
If UpCase (Letra) = UpCase (Copy (Cad, i, 1)) Then
TotLetras := TotLetras + 1;
End;
CuantasLetras := TotLetras;
End;
Begin
CLRSCR;
Write ('Ingrese Cadena: ');
ReadLn (Cad);
Write ('Ingrese letra a buscar: ');
ReadLn (Letra);
TotalLetras := CuantasLetras (Cad, Letra);
WriteLn (Letra, ' se encuentra ', TotalLetras, ' veces en ', Cad);
Readln;
End.
Otro Ejemplo:
Program Unir Cadenas;
Uses
CRT;
Type
Cadena : String[30];
Var
Cad1, Cad2, Cadresultante : Cadena;
Function Intercalar-cadenas (CadA, CadB : Cadena) : Cadena;
Var
Longcad, i : integer;
CadR : Cadena;
Begin
Longcad : Length (CadA);
CadR := ' ';
For i := 1 to Longcad do
CadR := CadR + Copy (CadA, i, 1) + Copy (CadB, i, 1);
Intercalar-cadenas := CadR;
End;
Begin
CLRSCR;
Write ('Ingrese Cadena1: ');
ReadLn (Cad1);
Write ('Ingrese Cadena2: ');
ReadLn (Cad2);
If Length (Cad1) = Length (Cad2) Then
Begin
Cadresultante := Intercalar-cadenas (Cad1, Cad2);
WriteLn ('La cadena intercalada es: ', Cadresultante);
End
Else
WriteLn ('Las cadenas deben ser del mismo tamao');
Readln;
End.
Otro Ejemplo:
Program Contar Vocales;
Uses
CRT;
Type
Cadena : String[30];
Var
Cad : Cadena;
TotalLetras : Integer;
Function CuantasLetras (Cad : Cadena) : integer;
Var
Longcad, i, TotLetras : integer;
Begin
TotLetras := 0;
Longcad := Length (Cad);
For i := 1 to Longcad do
Begin
If (UpCase (Copy (Cad, i, 1)) = 'A' ) or
(UpCase (Copy (Cad, i, 1)) = 'E' ) or
(UpCase (Copy (Cad, i, 1)) = 'I' ) or
(UpCase (Copy (Cad, i, 1)) = 'O' ) or
(UpCase (Copy (Cad, i, 1)) = 'U' ) Then
TotLetras := ToTLetras + 1;
End;
CuantasLetras := TotLetras;
End;
Begin
CLRSCR;
Write ('Ingrese Cadena: ');
ReadLn (Cad);
TotalLetras := CuantasLetras (Cad);
Write ('existen ', TotalLetras, ' vocales en ', Cad);
Readln;
End.
Otro Ejemplo:
Program SustituirLetras;
Uses
CRT;
Type
Cadena : String[30];
Caracter : String[1];
Var
Cad : Cadena;
LetraVieja, LetraNueva : Caracter;
Function CambiarLetra (Cad : Cadena; LetraV, LetraN : Caracter) : Cadena;
Var
Longcad, i : Integer;
cadaux : Cadena;
Begin
cadaux := ' ';
For i := 1 to Longcad do
Begin
If UpCase (LetraV) = UpCase (Copy (Cad, i, 1)) Then
cadaux := cadaux + LetraN
Else
cadaux := cadaux + Copy (Cad, i, 1);
End;
CambiarLetra := cadaux;
End;
Begin
CLRSCR;
Write ('Ingrese Cadena: ');
ReadLn (Cad);
Write ('Ingrese letra a buscar: ');
ReadLn (LetraVieja);
Write ('Ingrese nueva letra: ');
ReadLn (LetraNueva);
Cad := CambiarLetra (Cad, LetraVieja, LetraNueva);
Write ('La Cadena es: ', Cad);
Readln;
End.
Otro Ejemplo:
Program IntercalaCarater;
Uses
CRT;
Type
Cadena : String[60];
Caracter : String[1];
Var
Cad1, Cadresultante : Cadena;
Letra : Caracter;
Intervalo : Integer;
Function Inserta-Caracter (CadA : Cadena; CadB : Caracter; Num : Integer) : Cadena;
Var
Longcad, i : Integer;
CadR : Cadena;
Begin
Longcad := Length (CadA);
CadR := ' ';
For i := 1 to Longcad do
Begin
If (i mod Num) = 0 Then
CadR := CadR + Copy (CadA, i, 1) + CadB
Else
CadR := CadR + Copy (CadA, i, 1)
End;
Inserta-Caracter := CadR;
End;
Begin
CLRSCR;
Write ('Ingrese Cadena: ');
ReadLn (Cad1);
Write ('Ingrese caracter a insertar: ');
ReadLn (Letra);
Write ('Ingrese intervalo: ');
ReadLn (Intervalo);
Cadresultante := Inserta-Caracter (Cad1, Letra, Intervalo);
Write ('La Cadena resultante es: ', Cadresultante);
Readln;
End.

También podría gustarte