Académique Documents
Professionnel Documents
Culture Documents
Compiladores
En el Laboratorio de Informtica se emplea el
compilador de Pascal de Borland, que ofrece
muchas facilidades para el aprendizaje, como el
realzado de sintaxis y la ubicacin de los errores en
la lnea de cdigo en que ocurren.
Para uso en la casa, existen varios compiladores
gratis en Internet; se recomienda BloodShed
DevPascal, disponible en http://www.bloodshed.nu.
Algunos detalles sobre su uso aparecen en http
://www.intec.edu.do/~ceis/pascal/
Qu es un programa?
Un programa no es ms que una serie de lneas de
texto, cada una de las cuales contiene alguna
definicin sobre la informacin a ser usada en el
programa o bien alguna instruccin que se desea que
la computadora ejecute.
Definiciones (1)
Constante:
como su nombre lo indica, es un valor que a lo
largo de la ejecucin de un programa no vara.
Variable:
este es un espacio o contenedor, es como un vaso,
que puede almacenar diversos valores durante la
ejecucin del programa.
Definiciones (2)
Identificador:
Es una combinacin de letras, nmeros y el caracter
'_', pudiendo empezar con cualquiera de ellos
excepto nmeros.
Es un concepto muy importante en Pascal, ya que
sirve para nombrar las constantes, las variables e
incluso el mismo programa.
Tipos de Datos
En Pascal se debe especificar a la computadora qu
clase de datos va a contener una variable.
A simple vista, podemos distinguir entre una palabra
como 'Hola' o un nmero como 47.
La computadora no puede hacer esto, as que se le
debe decir qu tipo de datos se pondr en cada
variable. Una vez hecho esto, no puede almacenarse
un valor de cualquier tipo en esa variable, sino de
algunos tipos
Tipos Ordinales
Un tipo ordinal representa una secuencia ordenada
de valores individuales, a los que se pueden aplicar
los conceptos de predecesor y sucesor (Ej. enteros,
carcter, booleanos).
En cada tipo de datos ordinales hay un primer valor
y un ltimo valor.
Tipos Enumerados
Los tipos enumerados son ordinales. Cada uno
lleva asociado un nmero entero: al primero se le
asigna el O, al segundo un 1, y as sucesivamente,
por lo que no es independiente el orden de
declaracin.
Un valor de tipo enumerado no puede pertenecer
a dos declaraciones de tipo distintas y no pueden
leerse desde teclado, ni escribirse en pantalla.
Esqueleto de un Programa en
Pascal (I)
Todos los programas de Pascal comparten ciertas
caractersticas comunes, algunas de las cuales son
opcionales. Esto se llama esqueleto del programa y
se muestra a continuacin.
Convencin
En este esqueleto, lo que se ponga entre signos de
mayor y menor (<>) indicarn elementos que
deben reemplazarse en un programa real.
Esqueleto de un Programa en
Pascal (II)
Program <identificador>;
Uses WinCrt;
Const {constantes}
<identificador> = <valor>;
Var {variables}
<identificador> : <tipo>;
Begin {instrucciones}
...
End.
Operaciones de Entrada/Salida
Sentencias de salida o escritura.
Write o Writeln (NombreArchivo, Nomvarl ,Nomvar2...):
Realizan conversin de tipos de datos antes de que la salida
llegue al archivo de salida. Las variables o argumentos de
esta sentencia pueden ser: expresiones. constantes o variables
numricas, de carcter, de cadena o booleanas.
Operaciones de Entrada/Salida
Sentencias de salida o escritura.
Formatos: Write o Writeln (argumento)
Write o Writeln (argumcnto:m)
Write o Writeln (argumento:m:n)
Donde m es el nmero de caracteres que ocupar la
salida ajustando la informacin a la derecha, y n slo
se emplea cuando el argumento es numrico real
indica el nmero de caracteres que ocupar en la
salida la parte decimal.
Operaciones de Entrada/Salida
Sentencia de entrada o lectura.
Read o Readln (NombreArchivo,Nomvarl ,Nomvar2..);
Operadores Aritmticos
Operador
Funcin
Operador unario.
Invierte el signo.
+
*
producto.
Operador binario
/
Operador binario
divisin real.
div
Operador binario
divisin entera.
Operador de asignacin
La combinacin de smbolos := es el operador de
asignacin y sirve, al igual que el ReadLn, para
darle valor a una variable.
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.
Concepto y clasificacin de
estructuras
La Estructura Array
Es una estructura homognea de datos de tamao
constante accediendo a cada uno de sus elementos
mediante un identificador comn y uno o varios
ndices.
Todos los elementos del array son del mismo tipo.
El nmero de ellos no vara durante la ejecucin
del programa.
La Estructura Array
Accedemos a un elemento de la estructura
mediante un identificador comn, el nombre del
array, y con el valor que toman uno o varios ndices.
Al nmero de ndices necesarios para designar un
elemento del array se le denomina dimensin del
array.
El nmero mximo de valores posibles que puede
tomar cada ndice se denomina rango de esa
dimensin o ndice. Los valores han de ser
consecutivos, por lo que el ndice ha de ser de un
tipo ordinal
Declaracin de tipos y
variables Array
La declaracin ms general de un array es la siguiente:
Type
Rango1 = tipoordinal1;
Rango2 = tipoordinal2;
...
rangon = tipoordinaln;
tipobase = (*cualquier predefinido o definido por el
usuario*)
tipoarray = array [rango1,rango2,...,rangon] of tipobase,
Ejemplo 1
Arreglo de una dimensin:
const n = 10;
var arr: array [1..n] of integer;
Ejemplo 2
Arreglo de varias dimensiones: Para almacenar las notas
correspondiente a todos los alumnos de un colegio.
Suponiendo lo siguiente:
Numero de cursos 5
Grupos por curso 3
Numero de evaluaciones 3
Numero de asignaturas 6
Numero de alumnos por curso 20
Ejemplo 2.1
Const
Numcurso=5;
Numasig=6;
Numalum=20;
Type
Cursos=1.. nurneurso;
Grupos='A'..'C';
Eval=(primera,segunda,tercera);
Asign=1.. numasin;
Alum=1. .numalum;
Tiponotas=array[cursos,grupos,eval,asign,alum] of real;
Ejemplo 2.2
Var
Notas: tiponotas;
Curso: cursos;
Grupo: grupos;
Evaluacion: eval;
Materia: asign;
Alumno: alum;
Con los elementos de un array podemos realizar las mismas
operaciones que el tipo base al que pertenecen.
de
Operaciones y Tratamiento de
cadenas
Las dos operaciones bsicas son:
Comparacin
Concatenacin.
Operador de concatenacin (+) Se utiliza para reunir
varias cadenas en una sola
Ejemplo: Cad1:='esto es un ejemplo';
Cad2:='de concatenacin de cadenas';
Cadr:=cad1+cad2;
Write (cadr);
esto es un ejemplo de concatenacin de cadenas
Operaciones y Tratamiento de
cadenas
La funcin concat realiza la misma funcin que el operador
de concatenacin. La sintaxis es:
Function concat (cad1,cad2,...:string): string;
La cadena vaca o nula se representa con dos caracteres
apstrofes seguidos ' '.
El acceso a los elementos de una cadena individualmente se
hace como si fuera un array.
Ejemplo: cad1:='ejemplo';
cad1[1] devuelve el primer elemento, la letra e.
Operaciones y Tratamiento de
cadenas
La funcin Length proporciona la longitud lgica
de una cadena de caracteres.
Ejemplo:
Longitud:=length(cad1);
La variable longitud tomara el valor 7.
Funciones de tratamiento de
cadenas
Instruccin
Funcin
COPY
Copy (cadl,po,num)
POS
Pos (subcadena,cadena)
DELETE
Delete (Cad,Po,Num)
Funciones de tratamiento de
cadenas
Instruccin
Funcin
INSERT
Insert (subcadena,destino,posicion)
Subcadena: Cadena a insertar
Destino: Cadena donde se va a insertar
Posicion: Lugar a partir del cual se va a insertar
UPCASE
Upcase(x)
Donde x es una variable de tipo char.
STR
Str(valor,cad)
Funciones de tratamiento de
cadenas
Instruccin
Funcin
VAL
Val(cad,variable,codigo)
Cad: la cadena a convertir en valor numrico.
Variable: el numero que se obtenga.
Codigo: cero si se ha podido convertir.
Funciones Predefinidas
Instruccin
Funcin
Abs(x)
ArcTan(x)
Chr(x)
Cos(x)
Exp(x)
La exponencial de x(eX).
Frac(x)
Parte decimal de x.
Int(x)
Parte entera de x.
Ln(x)
Logaritmo neperiano de x.
Odd(x)
Ord(x)
Pred(x)
Funciones Predefinidas
Instruccin
Funcin.
Round(x)
Succ(x)
Sin(x)
Seno de x.
Sqr(x)
Cuadrado de x.
Sqrt(x)
Trunc(x)
Parte entera de x.
Estructuras de Control
Se denominan estructuras de control a aquellas que
determinan qu instrucciones deben ejecutarse y qu
nmero de veces.
Existen dos tipos de estructuras de control:
alternativas o de seleccin
repetitivas o de iteracin.
Estructuras Alternativas
Son aquellas que bifurcan o dirigen la ejecucin de
un programa hacia un grupo de sentencias u otro
dependiendo del resultado de una condicin. Las
dos sentencias alternativas de Pascal son:
Sentencia alternativa simple IF-THEN-ELSE
Sentencia alternativa mltiple CASE-OF.
IF THEN ELSE
IF (expresin lgica o booleana)
THEN
Sentencia1 (simple o compuesta)
ELSE
Sentencia2 (simple o compuesta);
Ejemplo
Ejemplo:
IF n>O then Writeln (`Nmero positivo');
IF n>O then
Writeln (`Nmero positivo')
ELSE
Writeln (`Negativo o cero');
No puede existir un punto y coma inmediatamente antes de
una palabra ELSE ya que sera interpretado como final de
IF.
CASE OF
CASE (expresin o variable) OF
(lista de constantes1):(sentencia1);
(lista de conslantes2):(sentencia2);
(lista de constantes3):(senteneia3);
...
(lista de constantesN):(sentenciaN);
ELSE (SENTENCIA)
...
END;
Ejemplo
Program menu;
Var Numerodia: integer;
Begin
Write('introduzca el ordinal de un da laborable de la semana:'); Readln
(numerodia);
Write (`Hoy es ');
Case numerodia Of
1:Writeln ('Lunes');
2:Writeln ('Martes');
3:Writeln ('Miercoles');
4:Writeln ('Jueves');
5:Writeln ('Viernes');
6:Writeln ('Sbado')
Else Writeln ('Domingo!!! No es da laborable');
End.
Estructuras Repetitivas
Son aquellas que crean un bucle (repeticin continua de un
conjunto de instrucciones) en la ejecucin de un programa
respecto de un grupo de sentencias en funcin de una
condicin.
Las tres sentencias repetitivas de Turbo Pascal son:
SENTENCIA WHILE
SENTENCIA REPEAT-UNTIL
SENTENCIA FOR
CUNDO SE USA CADA UNO
Sentencia While
Indica al ordenador que se ejecuten una o ms
sentencias mientras se cumpla una determinada
condicin establecida por una variable o expresin
booleana.
Sentencia While
Esta sentencia comprueba inicialmente si la
condicin es verdadera. Si la condicin es
verdadera se ejecutan las sentencias mientras la
condicin de su enunciado sea verdadera y finaliza
cuando la condicin es falsa.
Dado que la condicin puede ser falsa inicialmente,
es decir antes de comenzar el bucle, habr casos en
que el bucle no se ejecute.
Sentencia While
WHILE condicin DO
BEGIN
(sentencia1);
...
(sentenciaN);
END;
WHILE condicin DO
(sentencia);
Ejemplo
Escribir los N primeros nmeros naturales, donde N es un valor
introducido por el usuario.
Program escribeenteros;
Var N,contador: integer;
Begin
Write ('Introduzca numero mximo de enteros: ');
Readln (N);
Contador:=1;
While contador<=N do
Begin
Write (contador:5); Contador:=contador+1;
End;
Writeln ('Fin de programa. Contador = ',contador);
End.
Ejemplo
Program escribeenteros;
Var N,contador:integer;
Begin
Write ('Introduzca nmero mximo de enteros: ');
Readin (N);
Contador:= O;
Repeat
Contador:=contador+1;
Write (contador:5)
Until contador = N;
Writeln ('Fin de programa. Contador = ',contador)
End.
Sentencia For
Repite la ejecucin de una o varias sentencias un
nmero fijo de veces. previamente establecido.
Necesita una variable de control del bucle que es
necesariamente de tipo ordinal, ya que el bucle se
ejecuta mientras la variable de control toma una
serie consecutiva de valores de tipo ordinal,
comprendidos entre dos valores extremos (inferior
y superior).
Sentencia For
Formato ascendente:
FOR variablecontrol:=valorinicial TO valorfinal DO
(sentencia);
Formato descendente:
FOR variablecontrol:=valorincial DOWNTO valorfinal DO
(sentencia);
donde (sentencia) puede ser una sentencia simple o compuesta.
Ejemplo
Program escribeenteros;
Var N,contador: integer;
Begin
Write ('Introduzca numero mximo de enteros: ');
Readln (N);
For contador:=1 to n do
Write (contador:5);
Writeln
End.
Cundo Utilizar
While/Repeat/For
Utilizar la sentencia o estructura FOR cuando se
Registros
Un registro es una estructura heterognea de datos,
denominados campos y a los que accedemos por nombre.
Al igual que cualquier otro dato, el tipo registro (Record)
antes de poder ser utilizado debe ser declarado en la
seccin de tipos.
La nica operacin (a parte de la lectura) que se puede
realizar con una variable registro como tal es la
asignacin, es decir, se pueden copiar todos los campos
de una variable registro a otra variable registro del
mismo tipo. Adems un registro puede ser pasado como
parmetro a una funcin o procedimiento.
Ejemplo
Type
Tiporegistro = record
Campo 1 :tipol;
.
.
Campo N : tipoN;
End;
Var
Registro1 : tiporegistro;
Ejemplo
Type
Empleado = record
NbrApell : string;
EstadoCivil: (casado, viudo, soltero,
divorciado);
Sexo: (M, F);
Antig: integer;
Salario: real;
End;
Var
emp1 : Empleado;
begin
NbrApell:= 'Eduardo Lopez';
emp1.EstadoCivil:= casado;
emp1.Salario:= 450.86
end
Procedimientos y Funciones
Pascal ofrece dos herramientas bsicas para realizar
programacin descendente:
los procedimientos (procedure)
las funciones (function),
a los que nos referiremos genricamente con el
trmino de subprogramas. Turbo pascal incorpora
adems el concepto de unidad (unit), que permite
aprovechar mdulos independientes ya compilados.
Los Parmetros
Los parmetros son canales de comunicacin para
pasar datos entre programas y subprogramas en
ambos sentidos.
Los parmetros van asociados a variables
constantes, expresiones, etc., y por tanto, se indican
mediante los correspondientes identificadores o
expresiones.
Los Parmetros
Los parmetros que se utilizan en la llamada o
invocacin al subprograma se denominan
parmetros actuales, reales o argumentos, y son los
que entregan la informacin al subprograma.
Los parmetros que la reciben en el subprograma se
denominan parmetros formales o ficticios y se
declaran en la cabecera del subprograma.
Los Parmetros
En una llamada a un subprograma tiene que verificarse que:
El nmero de parmetros formales debe ser igual al de
actuales.
Los parmetros que ocupen el mismo orden en cada una de
las Listas deben ser compatibles en tipo.
Declaracin de parmetros
formales
Se declaran encerrados entre parntesis, indicando el
identificador y el tipo correspondiente asociado a
cada uno, separados por ':', y terminando en ';'. La
palabra reservada VAR precediendo a un
identificador de parmetro formal indica al
compilador que el paso del parmetro es pro Variable.
Su ausencia u omisin indica que el paso de
parmetro se realiza por VALOR.
Declaracin de procedimiento
Cabecera
Declaraciones
Locales
const
Type...
Var...
Declaracin de otros procedimientos y funciones
Cuerpo
begin
...
end; (*obseiwar; final de procedimiento*)
Ejemplo: Procedimiento
Ejemplo.:
Procedure Identificador (PF1 :tipol ;PF2:tpo2; var PW:tipo3);
PFl y PF2 se pasan por valor.
PF3 se pasa por variable.
Declaracin de funcin
Cabecera
Declaraciones const
Locales
Type...
Var...
Declaracin de otros procedimientos y funciones
Cuerpo
begin
...
Nombrefunc:=valorderetorno;
end;
Ejemplo: Funcin
Ejemplo.:
function Identificadorf (PF1 :tipol ;PF2:tpo2):integer;
PFl y PF2 se pasan por valor.
Llamada a un procedimiento
Se realiza desde el programa principal indicando
el identificador del procedimiento seguido de la
lista de parmetros actuales encerrados entre
parntesis y separados por comas.
Ejemplo:
Identificador (PAl ,PA2,PA3)
Ejemplo - Declaracin
Ejemplo: Procedimiento para intercambiar los valores de
dos variables.
Procedure intercambio (var pfl ,p12:integer);
Var Aux:integer; {variable local uso exclusivo en
procedimiento}
Begin
Aux := pfl;
Pfl := pf2;
Pfl := aux
End;
Ejemplo - Invocacin
{La llamada a este procedimiento se hara ...}
{... por ejemplo desde el siguiente programa:}
Program Uno;
Uses crt;
Var Entero 1 ,entero2 : integer;
Procedure intercambio (var pfl ,p12:integer);
...
begin
clrscr; {*borrado de pantalla*}
Write ('introduzca 2 variables enteras: ');
Readln(entero1,entero2);
Writeln ('valores de las variables antes de la llamada');
Writeln ('Entero 1 = ',enterol,'entero 2 = ',entero2);
intercambio (enterol,entero2); {llamada al procedimiento}
Writeln ('Valor de las variables despus de la llamada');
Writeln ('entero 1 = ',enterol,'entero 2 = ',entero2);
end;
Ejemplo
Ejemplo: Funcin que, dados dos nmeros a y b, retorna
a*b si a<b, sino retorna a+b
Function suma_prod (a, b:integer): integer;
Begin
if a<b then suma_prod:=a*b
else suma_prod:=a+b;
End;
Funciones o procedimientos?
Deben utilizarse funciones cuando solo
tenga que devolverse un solo valor
simple al programa llamador. En todos
los
dems
casos
utilizaremos
procedimientos.
Archivos
Un archivo es una estructura homognea de datos
consistente en una secuencia de elementos llamados
registros, todos del mismo tipo, ya sea simple o
estructurado. Un archivo se almacena en un dispositivo
auxiliar (discos, cintas, etc), de forma que los datos
obtenidos antes, durante y despus del procesamiento de los
datos, no se pierden. Para declarar una variable archivo es
necesario definir previamente la naturaleza de sus registros.
Ejemplo
Type
Tiporegistro = record
Campo 1 :tipol;
.
.
Campo N : tipoN;
End;
Tipoarchivo = file of tiporegistro.
Var
Archivol : tipoarchivo;
Registro1 : tiporegistro;
Operacin
ASSIGN
Assign (Vararch,nomarch);
RESET
RESET (nomvararchivo);
Operacin
IORESULT
REWRITE
Operacin
Este procedimiento se utiliza para introducir el
contenido de un registro del archivo en una variable de
memoria definida del mismo tipo de dato que el
registro ledo.
READ (nomvararchivo,nomvarreg);
EOF
EOF (vararchivo)
Ejemplo
While not eof(pruebas) do
Begin
Read (pruebas,info);
Write (info);
End;
WRITE: El procedimiento write escribe en un registro del archivo
el contenido de una variable de memoria definida del
mismo tipo.
WRITE (nomvararchivo,nomvarreg);
Tratamiento de archivos
desde Turbo Pascal
Unidad = 0 unidad de arranque
Unidad = 1 A:
Unidad = 2 B:
Unidad = 3 C:
Camino contiene el directorio actual.
Getdir obtiene la unidad y el camino del directorio actual de
una unidad y lo almacena en las variables unidad, de tipo
byte y cambio de tipo String.