Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tutorial Pascal PDF
Tutorial Pascal PDF
Pascal
1. Introduccin
Pascal y Turbo Pascal
Pascal es un lenguaje de alto nivel y de propsito general (es aplicable a un gran nmero de
aplicaciones diversas) desarrollado por el profesor suizo Niklaus Wirth como un lenguaje para
ensear la programacin con un mtodo disciplinado y sistemtico. Wirth trat de eliminar las
inconsistencias de otros lenguajes de programacin de su poca y adems que sirviera para
ensear las tcnicas de programacin a sus alumnos.
Una versin preliminar del lenguaje apareci en 1968 y a finales de 1970 apareci el primero
compilador totalmente completo.
Las diferentes versiones ofrecan interpretaciones ligeramente diferentes que impedan la
compatibilidad entre ellas. Por estas razones, mediante diferentes proyectos, se logr la
estandarizacin bajo las normas ISO (International Standards Organization), ANSI (American
National Standards Institute) y IEEE (Institute of Electrical and Electronics Engineers). Sin
embargo, las versiones ms populares conocidas como UCSD (Construida por Regents) y
Turbo Pascal (de Borland) no estn estandarizadas. Esta ltima es la ms conocida y la ms
utilizada.
Caractersticas principales
-
Turbo Pascal
Fue lanzado por la firma Borland International en 1983 a modo experimental.
Fue todo un xito, pues adems de funcionar, compilaba y corra los programas
ms rpido.
Las versiones han evolucionado de la 1.0 hasta la 7.0 que cuenta con una
biblioteca de objetos denominada Turbo Visin.
3. Programacin modular
La programacin modular es uno de los mtodos de diseo ms flexibles y potentes para
mejorar la productividad de un programa. En programacin modular el programa se divide en
mdulos (partes independientes), cada una de las cuales ejecuta una nica funcin o actividad
y se codifican independientemente de otros mdulos. Cada uno de estos mdulos se analiza,
codifica y pone a punto por separado.
Cada programa contiene un mdulo denominado programa principal que controla todo lo que
sucede; se transfiere el control a los submdulos o subprogramas. Estos ejecutan su funcin y
una vez completada su tarea, devuelven el control al mdulo principal.
Cada submdulo se puede descomponer en otros submdulos, dependiendo de la complejidad
de la tarea a realizar y la subdivisin contina hasta que cada mdulo tenga una sola tarea
para ejecutar..
Un submdulo puede realizar tareas de distinta naturaleza como: entrada, salida, manipulacin
de datos, control de otros mdulos o una combinacin de stos. Un mdulo puede transferir
temporalmente (bifurcar) el control a otro mdulo; sin embargo, cada mdulo debe
eventualmente devolver el control al mdulo del cual recibi originalmente el control.
Si se asigna un valor fuera del lmite de cada tipo, producir un mensaje de error:
Error 76: Constant out of range
Byte: Son los datos comprendidos entre 0 y 255.
Integer: Enteros que estn entre -32.768 y 32.767.
Longint: A partir de la versin 4.0 se ampla el rango de los enteros. Van desde:
-2.147,483.647 hasta 2.147,483.647.
Shortint: Son datos enteros comprendidos entre -128 y 127. Son utilizados cuando se debe
trabajar con valores pequeos y se desea economizar memoria. Ocupan 1 byte de memoria.
Word: Se utiliza cuando se desea representar nicamente valores positivos. Ocupan dos bytes
de memoria y van de 0 a 65.535.
5. Identificadores y expresiones
Identificadores
Representan los objetos de un programa (constantes, variables, tipos de datos,
procedimientos, funciones, unidades, programas y campos de registros). Un identificador es
una secuencia de caracteres de cualquier longitud, pero el lmite significativo es de 63
caracteres.
Existen tres reglas bsicas para nombrar los identificadores:
Debe comenzar con una letra (A a Z, maysculas o minsculas). No puede contener blancos.
Los caracteres permitidos despus del primer carcter son letras, dgitos y el carcter de
subrayado ( _ ).
No se puede utilizar una palabra reservada como identificador. Las palabras reservadas son
aquellos trminos que tienen un significado especial para Pascal y no se pueden utilizar para
otros propsitos.
Algunas palabras reservadas son: absolute, and, array, begin, const, div, do, downto, else, if,
in,label,mod,not,of, packed, procedure, record, set, shr, then,to, unit, uses, var, while, xor.
Expresiones
Una expresin es un conjunto de datos o funciones unidos por operadores aritmticos.
Pascal soporta los siguientes operadores:
+, -
Regla asociativa izquierda. Los operadores en una misma expresin o subexpresin con igual
nivel de prioridad ( *, / ) se evalan de izquierda a derecha.
Ejemplos:
a.
4+2*5
4 + 10
14
b. 23 * 2 div 5
46 div 5
9
Prctica
Evale las siguientes expresiones:
8 * 5 * (7+2 - (4 + 4))
R/
40
(1 + 6) * 5 div 7 mod 4 + 1
R/
3 + 4 - 14 /2
R/
2 * (2 + 6 * 4)
R/
52
6. Concepto de sentencia
Las sentencias son pasos que describen las acciones algortmicas que pueden ser ejecutadas.
Se clasifican segn su operatividad en ejecutables y no ejecutables. Las ejecutables son
aquellas que especifican operaciones de clculos aritmticos y entradas/salidas de datos y no
ejecutables son las que no realizan ninguna accin concreta, sino que ayudan a la legibilidad
el programa sin afectar su ejecucin. Las sentencias ejecutables son aquellas que aparecen en
el cuerpo del programa luego de la palabra begin.
Estructura de un programa en Pascal
Program Nombre;
Uses
Crt,Printer;
Var
Cedula:
String[16];
Apellido1:
String[15];
Apellido2:
String[15];
Nombre:
String[20];
Edad:
Integer; Begin
Clrscr;
Write (`Digite la cdula: `);
Readln (Cedula);
Write (`Digite el primer apellido: );
Readln (Apellido1);
Write (`Digite el segundo apellido: `);
Readln (Apellido2);
Write (`Digite el nombre: `);
Readln (Nombre);
Write (`Digite la edad: `);
Readln (Edad);
Write (`El empleado se llama `,Apellido1, `,Apellido2, `,Nombre, `,y tiene `,Edad,
` `,aos);
End.
en 5).
Integer;
Valor2:
Integer;
Procedure Elmayor;
Begin
If
Begin
Write (`El mayor es: `,Valor1);
Readln
End
Else
If Valor1< Valor2 then
Begin
Write (`El mayor es: `,Valor2);
Readln
End
Else
Begin
Los datos estructurados como arrays, registros o conjuntos, no se pueden leer globalmente y
se suele recurrir a disear procedimientos especficos.
Los procedimientos de lectura son: Read y ReadLn. Estos esperan a que se pulse la tecla
ENTER antes de asignar un valor a la variable.
2.4.1.1 Ejemplo
Program Suma;
Uses
Crt;
Var
Clrscr;
Write (`Introduzca el primer nmero: `);
Readln (i);
Write (`Introduzca el segundo nmero: `);
Readln (j);
WriteLn (`La suma es `,i+j);
End.
2.4.2 Concepto de salida
Los programas para ser tiles deben proporcionar informacin de salida (resultados). Esta
salida toma informacin de la memoria y la sita o almacena en: la pantalla, en un dispositivo
de almacenamiento (disco duro o flexible), o en un puerto de E/S (puertos serie para
comunicaciones o impresoras). El procedimiento que se utiliza para visualizar o escribir la
informacin es el Write o el WriteLn. Tanto el Write como el WriteLn cumplen la misma
funcin, o sea desplegar informacin. La diferencia es que el WriteLn despliega la informacin
y salta a la lnea siguiente.
2.4.2.1 Ejemplo
Program Resultado;
Uses
Crt;
Var
Clrscr;
Nombre := `Pedro Picapiedra;
WriteLn (`Nuestro personaje se llama `,Nombre);
End.
9. Prctica
1.
Hacer un programa que lea su cdula, su nombre y su telfono y los imprima en pantalla.
2.
Hacer un programa que lea tres nmeros, que calcule el mayor y el menor de esos
nmeros y los imprima.
3.
Hacer un programa que lea un cdigo de producto, su descripcin, su precio unitario, las
unidades compradas y el precio total a pagar e imprima el resultado.
4.
Hacer un programa que lea dos nmeros y que imprima el resultado de su suma, su
resta, su multiplicacin y su divisin.
5.
Hacer un programa que lea la cdula de un trabajador, su nombre y su salario. Debe
calcular el 8% correspondiente al rebajo de la CCSS y el 1% del Banco Popular, el total de
deducciones y el salario neto.
Al final debe imprimir lo siguiente: "Estimado empleado: (nombre). En este mes su salario se
desglosa as:
Salario bruto: (Salario)
8% CCSS: (CCSS)
1% Banco Popular: (BP)
Total de deducciones: (Totded)
Salario Neto: (Salneto)
6.
Escriba un programa que lea tres nmeros para tres variables a, b y c. Con base en los
valores almacenados, calcule la expresin ((a+7*c)/(b+2-a)+2*b).
3.1.3.2 Operador or
Ejemplo:
Program Numeros;
Var
Numero : Real;
Begin
Writeln (`Introduzca un nmero `);
Read (Numero);
If Numero > 0.0 Then
Begin
Writeln (`El nmero introducido es positivo);
Readln
End
Else
Begin
Readln (A,B,C);
If A > B Then
If A > C Then
Elmayor := A
Else
Elmayor := C
Else
If B > C Then
Elmayor := B
Else
Elmayor := C;
Writeln (`El nmero mayor es: `,Elmayor)
End.
3.2.2 La sentencia CASE
La sentencia CASE se utiliza para elegir entre diferentes alternativas. Una sentencia CASE se
compone de varias sentencias simples. Cuando un CASE se ejecuta, una y slo una de las
sentencias simples se selecciona y se ejecuta.
Ejemplo:
Program Cursor;
(* Este programa mueve el cursor a travs de la pantalla mediante las teclas predefinidas,
cuando se presiona otra tecla, emite un pitido de advertencia*)
Uses
Wincrt;
Var
X,Y : Integer;
C : Char;
Begin
Clrscr;
X := 40;
Y := 10;
GotoXY (X,Y);
Write (`*);
Repeat
C := Readkey;
GotoXY (X,Y);
Write (` `);
Case C of
`S : Y := Y - 1;
`B : Y := Y + 1;
`D : X := X + 1;
`I : X := X - 1;
`P : Exit
Else
Write (Chr(7)
End;
GotoXY (X,Y);
Write (`*)
Until C = `P
End.
Program Primos;
Var
Primo
: bolean;
Nmero
: Integer;
Begin
Primo: =
True;
Divisor := 2;
WriteLn (`Introduzca un entero positivo: `);
ReadLn (Numero);
While (Divisor < Numero) and Primo do
Begin
If Numero mod Divisor = 0 then
Primo := False;
Divisor := Divisor + 1
End;
If primo = True then
Writeln (Numero,` ` , ` es primo)
Else
Writeln (Numero,` ` , ` no es primo)
End.
13. Ciclos
Es una estructura de control que permite la repeticin de una serie determinada de sentencias.
Se le llama tambin bucle o lazo.
El cuerpo del ciclo o bucle contiene las sentencias que se repiten. Pascal proporciona tres
estructuras o sentencias de control para especificar la repeticin: while, repeat, for.
Nos ocuparemos de estudiar el ciclo FOR y el ciclo REPEAT.
3.4.1 La sentencia FOR
En numerosas ocasiones se puede desear un bucle que se ejecute un nmero determinado de
veces, y cuyo nmero se conozca por anticipado. Para aplicaciones de este tipo se utiliza la
sentencia FOR.
La sentencia FOR requiere que conozcamos por anticipado el nmero de veces que se
ejecutan las sentencias que se encuentran dentro del ciclo. El ciclo for se incremente
automticamente.
Sintaxis:
For variable := valor inicial to valor final do
Sentencia;
Ejemplos:
1.
For c := 1 to 5 do
Begin
Write (`aa);
Write (`BB)
End;
Al ejecutarse, visualiza:
AaBBaaBBaaBBaaBBaaBB
For Caracter := `A to `Z do
WriteLn (Caracter);
3. 4. 1. 1 Decremento del contador FOR (Downto)
El contador del ciclo se puede decrementar de uno en uno en lugar de incrementar. La sintaxis
es la siguiente:
For variable := valor inicial downto valor final do
Sentencia;
Ejemplos:
For C := 5 downto 1 do
Begin
Write (`C);
Writeln
End;
Lo anterior produce la siguiente salida:
5
4
3
2
1
Tambin podemos encontrar ciclos FOR anidados:
For m := 1 to 10 do
begin
For n := 10 downto 2 do
WriteLn (m,n)
end;
3.4.2 La sentencia REPEAT
Es una variante de la sentencia while. La sentencia REPEAT especifica un ciclo condicional
que se repite hasta que la condicin se hace verdadera.
El diagrama de flujo se representa de la siguiente manera:
Begin
Sentencia 1;
Sentencia 2;
...
...
...
Sentencia n;
End;
Until expresion lgica
Ejemplo:
(* El siguiente programa imprime las secuencias de caracteres hasta que se presione cualquier
tecla *)
Uses wincrt;
Var
m : char;
n : integer;
Begin
Repeat
Begin
Write ('a e i o u');
Write ('1 2 3 4 5');
End;
Until keypressed
End.
14. Prctica
1. Los patos de un granjero se venden a precios especiales si son grandes pero no demasiado.
Disee un programa que lea el nmero de patos que posee el granjero y el peso de cada ave.
Al final debe especificar cuntos patos pesan entre 1.5 kilos y 2 kilos inclusive.
2. Disee un programa para calcular e imprimir los primeros 2000 nmeros enteros positivos.
3. Leer las notas de 50 exmenes e imprimir cuntos de ellos tienen nota mayor o igual a 70.
4. Hacer un programa que lea los montos de las N ventas hechas por una tienda en un da y
que imprima el monto total de ventas y el monto promedio.
5. Hacer un programa que lea 10 valores numricos (positivos y negativos). Debe imprimir el
Una cabecera del procedimiento que proporciona el nombre del mismo y, en caso de existir,
una lista de parmetros formales.
Una seccin de declaracin que puede contener constantes, variables e incluso otros
procedimientos.
Una seccin ejecutable: el cuerpo del procedimiento.
Ejemplo:
Program Recuadro;
Var I : Integer;
Procedure Estrellas;
(* Este procedimiento visualiza 15 asteriscos *)
Begin
For I := 1 to 15 do
Write (`*)
End;
Begin
Estrellas; (* Llamado del procedure *);
Write (`Mensajes);
Estrellas; (* Nuevo llamado del procedure *);
End.
4.1.3 Ventajas de utilizar procedimientos
La organizacin de un programa en procedimientos lo hace ms fcil de escribir y depurar. Los
procedimientos no deben exceder de 25 lneas.
Las ventajas de utilizar procedimientos son:
Facilita el diseo descendente.
Los procedimientos se pueden ejecutar ms de una vez en un programa y/o en diferentes
programas, ahorrando tiempo de programacin.
El uso de procedimientos facilita la divisin de las tareas entre un equipo de programadores y
se pueden comprobar individualmente.
16. Parmetros
4.2.1 Concepto
Un parmetro es un mtodo para pasar informacin (valores a variables) del programa principal
a un procedimiento y viceversa.
Un parmetro es, prcticamente, una variable cuyo valor debe ser ya sea proporcionado por el
programa principal al procedimiento o ser devuelto desde el procedimiento hasta el programa
principal. Por consiguiente, existen dos tipos de parmetros:
-
Parmetros de entrada: Sus valores deben ser proporcionados por el programa principal.
Imprimir (D, E, F)
End;
Begin
A := 2;
B := 3;
C := 4;
WriteLn ('Antes de llamar al procedimiento Pasar');
Imprimir (A, B, C);
Pasar(A, B, C);
WriteLn ('Despus de llamar al procedimiento Pasar');
Imprimir (A, B, C);
End.
La salida de este programa es:
Antes de llamar al procedimiento Pasar
a=2
b=3
c=4
b=3
c=4
b=3
c=6
b=3
c=6
Var
x,y : real;
Procedure mayor (a,b : real);
Var
max : real;
Begin
if a > b then
max := a
else
max := b;
writeln ('El mayor de los dos nmeros es ',max:4:2);
End;
Begin
repeat
write ('Introduzca dos nmeros ');
readln (x,y);
mayor (x,y)
until x = 0
End.
4.2.2 Ejemplo
El siguiente ejemplo muestra un intercambio de valores de dos variables con un procedimiento.
Program Intercambio;
Uses wincrt;
Var
x,y : real;
resp : char;
Procedure cambio (var a,b : real);
Var
aux : real;
Begin
aux := a;
a := b;
b := aux;
writeln ('Ahora el valor de a es ',a:5:2,' y el valor de b es ',b:5:2);
End;
Begin
repeat
clrscr;
write ('Introduzca el valor para x ');
readln (x);
write ('Introduzca el valor para y ');
readln (y);
cambio(x,y);
writeln;
write ('Desea continuar (S/N)?');
readln (resp);
until (resp = 'N') or (resp = 'n')
End.
Program Cubo;
Uses
Wincrt;
Var
Num,valor : integer;
Function El_cubo (Numero: integer):integer;
Begin
valor := Num*Num*Num;
End;
Begin
Write ('Digite un nmero entero: ');
Readln (Num);
El_cubo(Num);
Write ('El cubo de ',Num,' es ',valor);
End.
Disee un programa que mediante una funcin calcule la suma de los nmeros que estn en
un rango establecido. (Por ejemplo de 1 a 100). Pruebe con varios rangos.
Escribir un programa que, mediante una funcin devuelva el valor del da de la semana en
respuesta a la entrada de la letra inicial de dicho da.
Mediante una funcin, determinar el nmero de das de un mes dado.
Escriba un programa que mediante una funcin determine si un nmero es primo.
21. Respuestas
Respuesta No 1.
Program Salario;
Uses wincrt;
Var
id_empleado,i,n : integer;
nom_empleado : string [40];
sal_bruto,salario_neto,tod_ded: real;
resp : char;
Procedure calcula (var sal_brut : real);
Var
cc_ss,b_p : real;
Begin
cc_ss := sal_brut * 0.08;
b_p := sal_brut * 0.01;
tod_ded := cc_ss + b_p;
salario_neto := sal_brut - tod_ded
End;
Begin
i:=1;
Write ('Digite el nmero de empleados a procesar: ');
readln (n);
While i <= n do
begin
clrscr;
write ('Id. del empleado ',i,' de ',n,' : ');
readln (id_empleado);
write ('Nombre: ');
readln (nom_empleado);
write ('Salario bruto: ');
readln (sal_bruto);
writeln;
calcula(sal_bruto);
writeln;
writeln ('El salario neto de ',nom_empleado,' es ',salario_neto:10:2);
writeln ('Sus deducciones fueron ',tod_ded:10:2);
writeln;
writeln ('Presione enter para continuar...');
readln;
i := i+1;
end;
End.
Respuesta No. 3.
Program sumas;
Uses wincrt;
Var i,n:integer;
Function Sumar (N : integer) : integer;
Var suma : integer;
Begin
Suma := 0;
For i:= 1 to N do
suma := suma + i;
Sumar := Suma;
Write ('La suma de los nmeros del 1',' al ',n, ' es: ',suma);
Readln;
End;
Begin
Write ('Digite el nmero mximo: ');
Readln (N);
Sumar (N);
End.
Respuesta No. 6.
Program TestPrimos;
Uses Wincrt;
Var
N : integer;
Function Primo (Q : integer) : boolean;
Var
D : integer;
P : boolean;
Begin
If Q < 4 then
Primo := True
Else
Begin
P:= True;
D := 2;
22. Arreglos
Introduccin
Primero que todo, es importante conocer el concepto de estructura de datos. Una estructura de
datos es "una coleccin de datos organizados de un modo particular." Las estructuras de datos
pueden ser de dos tipos: estticas y dinmicas.
Las estructuras de datos estticas son aquellas a las que se le asigna una cantidad fija de
memoria cuando se declara la variable. Las estructuras de datos dinmicas son aquellas cuya
ocupacin de memoria puede aumentar o disminuir durante el tiempo de ejecucin. Entre las
estructuras de datos estticas podemos encontrar los vectores y los arreglos, tema que
estudiaremos a continuacin.
5.0 Concepto
Un array (se suele traducir como arreglo) es una estructura de datos en la que se almacena
una coleccin de datos del mismo tipo, por ejemplo, los salarios de los empleados de una
empresa.
Un array es una lista de un nmero determinado de elementos del mismo tipo. Se caracteriza
por: Almacenar los elementos del array en posiciones de memoria continua.
Tener un nico nombre de variable (por ejemplo salarios) que represente a todos los
elementos. stos a su vez se diferencian por un ndice o subndice.
-
Type
Nombre_array = array [rango del subndice] of tipo;
Nombre_array: Se refiere a un nombre de identificador vlido.
Tipo_subndice: Puede ser boolean, char o un rango de tipo enumerado.
Tipo: Se refiere al tipo de los elementos del vector. Todos los elementos deben ser del mismo
tipo.
Ejemplos:
Type
X = array [1..8] of real;
Type
Luces = (Rojo, Verde, mbar);
Type
DiasDeSemana=(Lunes, Martes, Mircoles, Jueves, Viernes, Sabado, Domingo);
ConjuntoDias = array
Type
Salarios = array [A..Z] of real;
(En este caso es de tipo real porque el salario es de ese tipo. El subndice indica que los
salarios van de los empleados cuya inicial es A hasta la Z).
Las declaraciones de tipo array no crea ninguna variable especfica de tipo array, sino que
proporciona informacin del array como un todo.
Para declarar una variable tipo array, se utiliza la siguiente sintaxis:
Type
Valores = array [1..10] of real;
Var
Precios : Valores;
Primeramente se crea el tipo del array y luego se declara la o las variables referenciadas al
array.
Otro ejemplo de aplicacin puede ser el siguiente:
Const
Max = 500;
Type
Texto = array [1..Max] of char;
Var
Palabras, Letras: Texto;
En este ejemplo se crean dos variables arrays: Palabras y Letras. Las posiciones del array van
de 1 a 500 y contendrn un valor tipo caracter.
5.1.2 Lectura y escritura de un vector
5.1.2.1 Lectura
Para leer un vector se debe hacer elemento a elemento y se requiere de alguna estructura
repetitiva, ya sea un while, repeat o for.
Ejemplos:
I := 1;
While I <= 100 do
I := 1;
For I:= 1 to n do
Repeat
Readln(Notas[I]);
Begin
Read (Notas[I]);
I := I + 1
Until I > 100
End;
5.1.2.1 Escritura
Para visualizar un vector, igualmente, es necesario situarlo dentro de una estructura repetitiva.
For I := 1 to Numero do
Writeln (Notas [I]:3);
Writeln; (* Evita que todas las salidas del vector aparezca en la misma lnea *)
Rango permitido
Ejemplo:
Type
Tabla = array [1..25,1..4] of real;
Var
Grados : Tabla;
Para localizar o almacenar un valor en el array se deben especificar dos posiciones o
subndices, uno para la fila y otro para la columna.
5.2.2 Escritura de una matriz
Para escribir un vector, se debe hacer referencia tanto a la fila como a la columna. As:
For fila := 1 to 3 do
Begin
For Columna := 1 to 4 do
Write (A[Fila, Columna]:4);
End;
Ejemplo:
Calcular el promedio de cada estudiante de una lista de veinticinco alumnos de una clase de
informtica con notas en cuatro asignaturas.
Program Promedio;
Var
Notas
I,J
: Integer;
Suma,Prom: Real;
Begin
For I := 1 to 25 do
Begin
Write (`Notas del estudiante: ,I:1);
Writeln (`En una misma lnea digite todas las notas);
Suma := 0;
For J := 1 to 4 do
Begin
Read (Notas[I,J]);
Suma := Suma + Notas[I,J]
End;
Readln;
Prom := Suma/4;
Writeln (`La nota promedio del estudiante `,I:1, es `,Prom:1:1)
End
End.
25. Prctica
Escriba un programa que almacene en un vector los das de la semana.
Escriba un programa que almacene en un vector su nombre.
Escriba un programa que almacene en un vector los nmeros pares del 1 al 10.
Escriba un programa que lea diez nmeros enteros y los invierta.
Escriba un programa que lea las dimensiones de una matriz, las lea, visualice la matriz y que
encuentre el menor y mayor elemento de esa matriz y sus posiciones.
Escriba un programa que encripte un password de siete letras debe contener consonantes y
vocales. El algoritmo de encriptacin ser sustituir cada vocal por el nmero que le
corresponde. (A=1, E=2,O=3,I=4,U=5).
Escribir un programa que en una matriz almacene los nmeros primos del 1 al 100.
Escriba un programa que capture e imprima la siguiente tabla:
Distrito
Candidato A
Candidato B
Candidato C
194
48
206
180
20
320
221
90
821
432
50
946
Escriba un programa que almacene en una matriz los nmeros pares del 1 al 40 y los imprima.
Begin
Mensaje := `Hola mis amigos, por favor estudien bastante;
Write (`Mi mensaje de hoy para ustedes es: `),Mensaje;
Writeln;
Write (`Presione enter...);
Readln
End.
6.1.2 Longitud de una cadena
Una cadena fsicamente es una estructura de una secuencia de 0 hasta 255 caracteres de
longitud. Sin embargo, la ocupacin en memoria de una cadena es un nmero de bytes igual al
de caracteres de la cadena ms uno. As la cadena:
`Programador
tiene una longitud de 11 caracteres, entonces ocupar en memoria 12 bytes. Esto se debe a
que el primer byte en una cadena, contiene la longitud de la cadena actualmente almacenada
en memoria.
Supongamos que esta palabra corresponde a un dato almacenado en la variable PUESTO que
fue definida de la siguiente manera:
Var
Puesto : String[20];
Sucede que, entonces, la longitud lgica de la variable ser de 11 bytes pero la longitud fsica
ser de 20 bytes pues as fue definida.
6.1.3 Asignacin de cadenas
A las variables de cadena, como se ha visto, se pueden dar valores con una sentencia de
asignacin o con una sentencia de lectura (read). Ambas situaciones se pueden describir con
la ecuacin:
Destino
fuente
Var
Cad1 : String [8];
Cad2 : String [11];
Cad3 : String [15];
Cad4 : String [11];
6.1.3.1 Caso I. Las longitudes de la cadena destino y fuente son iguales
Supongamos que se ejecuta la sentencia
Cad2 := `informatica;
Este caso no presenta problemas, pues cada posicin de cad2 se rellena con un carcter.
Cad2
N
1
F
3
M
5
A
6
T
7
I
8
C
9
A
10
11
I NFORM ATI C A
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
longitud actual = 11
longitud mxima = 15
6.1.3.3 Caso II. La longitud de la cadena destino es mayor que la cadena fuente
Supongamos que se trata de ejecutar ahora
Cad1 := Cad2;
En este caso, como Cad1 tiene una longitud de ocho caracteres, la cadena destino no se
puede almacenar totalmente. En este caso se trunca la cadena destino y se almacenan en
Cad1 los primeros ocho caracteres (de izquierda a derecha) de Cad2.
Cad1
I NFORM AT
longitud actual = 11
123 4 56 78
longitud mxima = 8
2.
Escriba un programa que almacene en un vector los nmeros pares del 1 al 10.
3.
Escribir un programa que en una matriz almacene los nmeros primos del 1 al 100 y que
al final del programa, en una variable proporcione la suma.
4.
5.
6.
Escriba un programa que lea una cadena de caracteres en minscula y la convierta a
mayscula. Utilice procedimientos.
7.
Escriba un programa para almacenar la siguiente tabla, que cuente los votos e imprima el
candidato ganador.
Distrito
Candidato A
Candidato B
Candidato C
194
48
206
180
20
320
221
90
140
432
50
821
8.
Hacer un programa que lea una cadena de caracteres, que imprima la longitud de la
cadena y contar el nmero de vocales que tiene la palabra o frase.
29. Punteros
Introduccin
Como vimos anteriormente en la leccin nmero 5, las estructuras de datos dinmicas son
aquellas cuya ocupacin de memoria puede aumentar o disminuir durante el tiempo de
ejecucin. Mediante los punteros, tema que estudiaremos a continuacin, podemos crear
estructuras de datos dinmicas que tienen capacidad de variar en tamao y ocupar tanta
memoria como realmente requieran. Estas estructuras son llamadas punteros.
7.1 Concepto
Los punteros son tambin llamados apuntadores. Son tipos de datos que permiten crear
estructuras de datos dinmicas, las cuales pueden variar en tamao y memoria requerida. Las
variables que se crean y se destruyen durante la ejecucin se llaman variables dinmicas o
annimas. As, durante la ejecucin de un programa, puede haber una posicin de memoria
especfica asociada con una variable dinmica y posteriormente puede no existir ninguna
posicin de memoria asociada con ella.
Al definir un puntero se debe indicar el tipo de valores que se almacenarn en las posiciones
designadas por los punteros. Esto se debe a que los diferentes tipos de datos requieren
distintas cantidades de memoria para almacenar sus constantes, una variable puntero puede
contener una direccin de una posicin de memoria adecuada slo para un tipo dado.
Por esta razn se dice que un puntero apunta a una variable particular, es decir, a otra posicin
de memoria.
Una variable tipo puntero contiene la direccin de la posicin de otra variable.
7.1.1 Declaracin de punteros
Se puede declarar un puntero a una variable carcter, a un array de enteros, a un registro, o a
cualquier otro tipo de dato. Y se pueden declarar como Var o Type.
La sintaxis para la declaracin de un puntero es la siguiente:
Var
Nombre-variable : ^ identificador - tipo
Ejemplo:
Var
Ptr : ^Real
La variable Ptr apunta a un tipo de dato TipoElemento.
Un ejemplo grfico es el siguiente, donde la variable P contiene 059164 que es la direccin de
memoria donde est la variable entera apuntada 345:
El valor de P^ es 1000
3 * P^ + 500
El valor de P^ es 3500
Ptr^ := `Mckenna;
La sentencia New (Ptr) crea una celda vaca de memoria a la que apunta Ptr. La segunda
sentencia sita el valor `Mckenna en esa celda de memoria.
Grficamente se representara as:
7.2.2 Dispose
El procedimiento Dispose libera la posicin de memoria ocupada por una variable dinmica.
Sintaxis:
Dispose (P) (* P es una variable tipo puntero *)
Grficamente se representa as:
Dispose (P)
End.
7.2.3 Assigned
Determina si un puntero o variable de tipo procedimiento es nil. Especifica si el argumento es
nil o e el argumento tiene un valor. Su sintaxis es:
Function Assigned (Var P) : Bolean;
P debe ser una referencia de un puntero o tipo procedimiento. La funcin devuelve verdadero
(true) si P no es nil o falso (false) si es nil. Una posible aplicacin puede ser la siguiente:
Var P : Pointer;
Begin
P : nil;
If Assigned (P) then
Writeln (`Prueba Uno);
P := @P;
If Assigned (P) then
Writeln (`Prueba Dos);
End.
La llamada Assigned(P) correspondiente a la evaluacin de P <> nil para una variable puntero,
mientras @P <> nil se corresponde a una variable por procedimiento.
Tipo cadena
Tipo real
Ejemplo:
Type
Empleado = record
Nombre : String[30];
Edad : Integer;
Domicilio : String[40];
Salario : Real;
End;
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.
Rewrite (f);
Existen algunos aspectos importantes que se deben tomar en cuenta al utilizar la sentencia
Rewrite:
Si al abrir el archivo de texto, con assign y reset, ya existe en el disco, la sentencia
Rewrite lo rescribir, en otras palabras, "se perderT el archivo contiguo.
Por el contrario, las sentencias assign y rewrite suponen la existencia del archivo
llamado en el disco. Si este archivo no existe, las sentencias anteriores producirn errores de
ejecucin.
El siguiente programa define un tipo registro (cliente) y a continuacin rellena (pone valores en
los campos) en la variable correspondiente. Otra variable del mismo tipo se asigna a la primera
variable y los campos de la segunda variable se imprimen uno a uno.
Program Visualiza_Registros;
Type
Datos = record
Nombre : String [80];
Direccion : String [80];
Edad : Integer;
Saldo : Real
End;
Var
Aux, Cliente : Datos;
Begin
Write (`Digite el nombre del cliente: `);
Readln (Cliente.Nombre);
Cliente.Direccin := `Calle El ltimo Grito;
Write (`Digite la edad del cliente: `);
Readln (Cliente.Edad);
Cliente.Saldo := 245320;
Aux := Cliente; (* Transfiere los datos al registro Aux *)
(* Visualizacin de los campos de Aux *)
Writeln (`Nombre:
`, Aux.Nombre);
Writeln (`Direccin:
`, Aux.Direccion);
Writeln (`Edad:
`, Aux.Edad:1);
Writeln (`Saldo:
`, Aux.Saldo:1:1);
End.
Este mtodo de lectura/escritura campo a campo es engorroso. Pascal proporciona la
sentencia with que facilitar el proceso de lectura/escritura de los registros.
8.3.2 - 8.3.3 Manipulacin de archivos tipificados y funciones
8.3.2.1 Escritura de un archivo
Una vez que se ha abierto el archivo para escritura, las sentencias write y writeln sirven para
escribir datos en el nuevo archivo.
Sintaxis:
Write (f,v1,v2,...);
f es una variable tipo archivo.
v1,v2,... son variables del tipo de datos.
Ejemplos:
1. Write (demo,Esto es una prueba de escritura);
Writeln (demo,y esta es la siguiente prueba);
2. Var NombreArch : string[60];
archtex
: text;
...
...
Write (`Nombre de archivo);
Readln (NombreArch);
Assign (Archtex,NombreArch);
Reset (Archtex);
8.3.2.2 Lectura de un archivo
La lectura de un archivo se efecta mediante las sentencias read o readln.
Sintaxis:
Read (f,v1,v2,...);
Las operaciones de Assign, Rewrite y Reset se utilizan de igual forma que en los archivos
tipificados.
El procedimiento Append abre un archivo existente para aadir datos al final del mismo.
La sintaxis es:
Append (f)
8.4.3 Funciones
Algunas funciones son: Append, Read, Readln, Write y Writeln, Eoln y Eof.
8.4.3.1 Eoln
Devuelve el estado de fin de lnea de un archivo. Es una funcin tipo lgico.
La sintaxis es:
Eoln (var f: text);
f es una variable de archivo de texto. Para llamar a la funcin se procede as:
eoln (f)
Devuelve true si en la posicin actual del archivo est la marca de fin de lnea o si eof (f) es
true; caso contrario devuelve false.
8.4.3.2 Eof (End of file)
Devuelve el estado de un archivo de texto. Es de tipo lgico e indica si el fin de archivo se ha
almacenado mediante true, caso contrario devuelve false. La sintaxis es la siguiente:
Eof (var:text);
Prctica
1.
Cree un archivo con sus datos personales: Cdula, nombre, direccin, telfono,email.
2.
El nombre de la unidad es arbitrario, pero debe coincidir con el nombre del archivo que
contiene. Por ejemplo, si la unidad se denomina Test
Unit Test;
El archivo que contiene el programa fuente de la unidad se debe llamar Test.PAS. Cuando
turbo Pascal combina la unidad, le asigna la extensin TPU (Turbo Pascal Unit). Si el nombre
de la unidad es diferente del nombre del archivo, el programa principal no podr encontrar el
archivo TPU (Turbo Pascal Unit). Si el nombre de la unidad es diferente del nombre del archivo,
el programa principal no podr encontrar el archivo TPU.
Una unidad creada por el usuario puede utilizar otras unidades, siempre que se incluyan en la
clusula uses que aparece inmediatamente despus de la palabra interface, y separadas por
comas.
9.1.2.2 Seccin de interfaz
La seccin de interface (interfaz) es la parte de la unidad que sirve para conectar dicha unidad
con otras unidades y programas. Esta seccin se conoce como "la parte pblica" de la unidad,
ya que todos los objetos que figuren en esta seccin son visibles desde el exterior o
exportables. Las restantes unidades y programas tienen acceso a la informacin contenida en
la seccin de interface.
En la interfaz de la unidad se pueden declarar constantes, tipos de datos, variables y
procedimientos. Los procedimientos y funciones visibles a cualquier programa que utilice la
unidad se declaran aqu, pero sus cuerpos, reales - implementaciones- se encuentran en la
seccin de implementacin. La seccin de interfaz indica a un programador cules
procedimientos y funciones se pueden utilizar en un programa. La seccin de implementacin
indica al compilador cmo implementarlos.
Ejemplo de declaracin
Unit Rayo;
Interface
Uses
DOS, Graph, Crt; (* se utilizan las unidades DOS, Graph y Crt *)
Var
a, b, c : integer;
Function Exponencial (a, b : integer) : real;
Procedure Dividir (x, y : integer; var cociente : integer);
9.1.2.3 Seccin de implementacin
La seccin de implementacin es estrictamente privada; su contenido no es exportable. Slo
los procedimientos o funciones que aparecen en la seccin interface pueden ser invocados
desde el exterior de la unidad. Esta seccin contiene el cuerpo de los procedimientos y
funciones declarados en la seccin de interface.
Unit Rayo;
Interface
Function Exponencial (A, B : Integer) : Real;
Procedure Dividir (X, Y : Integer; Var Cociente : Integer);
Implementation
Var
P, I : Integer;
Begin
P := 1;
For I := 1 to B do
P := P * ;
Exponencial := P
End;
Procedure Dividir (X, Y : Integer; Var Cociente : Integer);
Begin
Cociente := X div Y
End;
End.
Ntese que la declaracin de una unidad est terminada por la palabra reservada End y un
punto.
9.1.2.3 Seccin de iniciacin
La seccin de iniciacin puede contener instrucciones pero tambin puede estar vaca. Estas
instrucciones sirven, por ejemplo, para iniciar variables. La ejecucin de estas instrucciones se
efecta en el momento del lanzamiento o ejecucin de un programa que utiliza la unidad antes
de la ejecucin de la primera instruccin del cuerpo del programa.
En la seccin de iniciacin se inicializa cualquier estructura de datos (variables) que utilice la
unidad y las hace disponibles (a travs del interface) al programa que las utiliza. Comienza con
la palabra reservada begin seguida por una secuencia de sentencias y termina con "end. ".
La seccin de iniciacin debe llamarse antes de que el cuerpo del programa se ejecute.
37. Aplicacin
Una unidad tiene una estructura muy similar a la de un programa.
La clusula uses de la parte de interface slo es necesaria cuando la unidad actual llame a
otras unidades. Todos los procedimientos y funciones en la seccin de interface deben ser
definidos en la seccin de implementacin.
La cabecera de los procedimientos y funciones declarados en la parte de interface deben ser
idnticos a la cabecera de las mismas funciones definidas en la parte de implementacin; sin
embargo, es posible escribir la cabecera en forma abreviada en la seccin de implementacin.
Unit utilidad; (* este nombre de la unidad debe coincidir con el nombre del
archivo de programa *)
Interface
Uses
Wincrt, Printer;
Procedure Frase (Texto : String);
Implementation
Uses
Printer;
Var
MiVar : Integer
Procedure Frase;
Begin
Clrscr;
GotoXY ((80-Lenght (Texto)) div 2,1)
Write (texto);
End.
Begin
MiVar := 0
End.
Una vez que se dispone el cdigo fuente de una unidad, se compila de igual forma que un
programa, pero el archivo obtenido no es ejecutable directamente. Tiene la extensin TPU
(Turbo Pascal Unit).
Para utilizar esa unidad dentro de un programa, debe incluir una sentencia uses para indiciar al
compilador que est utilizando esa unidad.
ProgramPrueba;
Uses Utilidad;
Ejemplo:
Escribir una unidad que conste a su vez de un procedimiento para intercambiar los valores de
dos variables, as como calcular su valor mximo.
Unit Demo1;
Interface
Procedure Intercambio (Var I,J : Integer);
Function Mximo (I, J : Integer) : Integer;
Implementation
Procedure Intercambio;
Var
Aux : Integer;
Begin
Aux := I;
I := J;
J := Aux
End;
Function Mximo;
Begin
If I>J then
Maximo := I
Else
Maximo :=J
End;
End.
Una vez que lo haya escrito, gurdelo en disco con el nombre de Demo1.PAS, a continuacin,
complelo hacia el disco. El cdigo objeto se llamar Demo1.TPU. Esta unidad la utilizaremos
en el siguiente programa:
Program Prueba;
Uses
Demo1;
Var
X,Y : Integer;
Begin
Write (`Introducir dos nmeros enteros: `);
Readln (X,Y);
Intercambio (X,Y);
Writeln (X, `,Y);
Writeln (`El valor mximo es: `, Mximo (X,Y));
End.
38. Aplicaciones
9. 3. 1 Utilizacin de unidades estndar
El archivo TURBO.TPL que contiene todas las unidades estndar se carga en memoria central
a la vez que el propio compilador y est disponible en cualquier momento, con la ayuda de la
clusula uses.
Como se ha visto anteriormente, un programa debe contener la clusula uses, situada
inmediatamente despus de la cabecera.
9. 3. 1. 1 Unidad System
Esta unidad contiene todos los procedimientos y funciones estndar de Turbo Pascal relativas
a entradas/salidas, cadena de caracteres, gestin de memoria, etc.
9. 3. 1. 2 Unidad Wincrt
Esta unidad proporciona un conjunto especfico de declaraciones para entrada y salida:
constantes, variables, procedimientos y funciones, que permiten el acceso al control de los
modos de pantalla, al teclado, a los colores, al posicionamiento del cursor, etc.
La mayora de los programas de Pascal que hacen uso de la pantalla para representar salidas
recurren a la unidad Wincrt. Algunos procedimientos que necesitan de esta unidad son:
Clrscr: Limpia la pantalla