lunes, 21 de septiembre de 2009

PASCAL ORIENTACIONES

1 Pascal y Turbo Pascal
1.1 Características
El PASCAL es un lenguaje relativamente moderno, desarrollado por Niklaus Wirth y su grupo de Zurich en 1971. Se trata de un lenguaje de propósito general, esto quiere decir que se puede emplear para construir todo tipo de aplicaciones. En la práctica también quiere decir que se trata de un lenguaje no diseñado para desarrollar ningún tipo específico de aplicaciones. Pero el PASCAL es especialmente útil para algo: para la enseñanza de buenos modos de programación. El PASCAL es hoy en día el lenguaje más usado para la enseñanza de la programación por varios motivos:
• Posee unas reglas sencillas de sintaxis.
• Es un lenguaje muy estructurado.
• Realiza una comprobación exhaustiva de tipos de datos.
El hecho de que tenga una estructuración muy marcada permite que los pro¬gramas sean fáciles de leer e interpretar, y facilita la escritura de programas del modo que hoy en día se estima correcto.
El compilador de PASCAL es relativamente sencillo de realizar, por lo que se ha extendido a muchos tipos de plataformas, desde los ordenadores personales a los grandes ordenadores corporativos. Cuando una aplicación se escribe en PASCAL estandard puede compilarse en cualquier máquina en la que exista compilador de PASCAL, que son la mayoría.
Existen varios dialectos locales del PASCAL, entre los que se encuentra el TURBO PASCAL, que admiten todas las instrucciones del PASCAL estan¬dard más un subconjunto específico de instrucciones normalmente pensadas para aumentar las capacidades del lenguaje en un ordenador particular.
El TURBO PASCAL, de la compañía Borland (Scotts Valley, Califor¬nia) es un dialecto del PASCAL que incluye además de las instrucciones del PASCAL estandard una serie de instrucciones que permiten desarrollar apli¬caciones específicas para ordenadores IBM PC o IBM PS y compatibles. N o es la única de las versiones de PASCAL existente para estos ordenadores, pero sin duda la más extendida y probada. En la actualidad la versión 6.0 de este lenguaje incluye además del compilador un entorno integrado de desa¬rrollo (IDE) que permite compilar, visualizar errores y depurar los programas desde un mismo entorno.
1.2 El programa Pascal
Un programa PASCAL es un conjunto de instrucciones que siguen la sintaxis y la estructura del PASCAL. La estructura genérica es:
Program nombre (ficheros);
declaraciones
Begin
sentencias
End.
Todo programa Pascal empieza con la palabra Program seguida de un nombre que elige el programador para identificar el programa. A continuación entre paréntesis se pueden indicar los ficheros que contienen los datos de entrada y salida respectivamente. Estos ficheros son el input y el output para indicar entrada desde el teclado y salida al terminal. Si se quieren especificar estos ficheros la primera línea de un programa será:
Program nombre (Input , Output );

y es equivalente a:
Program nombre ;
La primera línea del programa es una instrucción PASCAL y como todas ellas termina con el signo de puntuación ";".
Después de la identificación del programa se han de situar las instrucciones declarativas del programa que sirven para especificar sin ambigüedad el significado de los términos que se utilizarán en el programa. A continuación han de aparecer las instrucciones correspondientes al procedimiento que se quiere realizar. Estas instrucciones están encabezadas por Begin y terminan con End y un punto. El programa más pequeño y más inútil que cumple las reglas de estructuración del PASCAL es:
Program nulo;
{ Programa ejemplo de la estructura más simple de un programa PASCAL}
Begin
(* N o hace falta ninguna instrucción para no hacer nada *)
End.
En la parte reservada a declaraciones no se incluye nada pues nada se necesita declarar. Todos los símbolos que se encuentren entre los paréntesis { } son comentarios que sirven para hacer más legible el programa. También los símbolos compuestos (* y *) sirven para delimitar el principio y fin de un comentario. Al existir dos tipos de delimitadores de comentarios, es posible realizar anidación de comentarios. Por ejemplo,
{ Este es un comentario (* sintácticamente *) correcto en PASCAL}

1.3 Palabras reservadas y estructuras
Las palabras Program, Begin, End, Input, y Output, y otras que veremos más adelante, son identificadores que permiten al compilador PASCAL interpretar el programa y no se pueden utilizar con otros fines. Estas palabras se suelen referir con el término Palabras reservadas. El compilador interpreta igual mayúsculas o minúsculas, y por tanto se pueden usar indistintamente. Esta libertad de elección debe utilizarse para aumentar la legibilidad de los programas. Por ejemplo, podemos empezar siempre con mayúscula las pa¬labras reservadas y así será más fácil detectar las estructuras del programa. También suele escribirse todo con mayúsculas el nombre de las constantes cuyo valor no puede alterarse durante el programa. La elección de un estilo u otro de escritura suele variar pero lo importante es que sea uniforme a lo largo del programa.
En la parte del programa reservada para declaraciones se incluyen diversos tipos de declaración:
{1} Program nombre ;
{2} (* Este es un ejemplo de la estructura de la
{3} parte declarativa de un programa PASCAL *)
{ 4 } Uses nombre_unidedes ;
{5} Const
{6} nombre.consiente = valor;
{7} Type
{8} nombre_tipo = deLtipo ;
{9} Var
{10} nombre: variable : tipo_dato :
{11} Begin
La palabra reservada Uses de la instrucción {4} se utiliza para especificar el nombre las unidades donde se almacenan otros trozos de código PASCAL que son necesarias para completar el código especificado en este programa. Normalmente se trata de porciones de código que forman parte de una librería de programas. En la instrucción {5} la palabra reservada Const indica que se ha acabado la parte iniciada por Uses y se empieza la parte de declaración de las constantes que aparecen en el programa. Con Type se inicia la declaración de tipos de datos definidos por el programador, y con Var la especificación del tipo de dato que corresponde a las variables que se utilizan en el programa. Finalizada esta parte declarativa, empezarían las instrucciones del procedimiento que se está programando ({11}). Las líneas de código {1} , {4} , {6} , {8} Y {10} corresponden a sentencias PASCAL y por tanto acaban con el signo de puntuación ":". Aparte de estos tipos de declaración también existen las de etiquetas, procedimientos y funciones.
1.4 Instrucciones sencillas y compuestas
El cuerpo de instrucciones del procedimiento está formado por sentencias que pueden ser sencillas o compuestas. Las sentencias sencillas acaban con ";" y las compuestas empiezan por Begin y acaban con End. Por ejemplo,
{1} If Ca > O) Then
{2} b := a * a * a ;
la sentencia {2} es sencilla y está delimitada por la palabra reservada Then de la construcción condicional iniciada por If, y por el punto y coma. Esta sentencia sencilla es completamente equivalente a la compuesta especificada entre {4} Y {7}:
{3} If (a > 0) Then
{4} Begin
{5} b := a * a;
{6} b := b * a
{7} End;
El principio de la sentencia es el Begin de {4}, y el final el End de {7}. La sentencia compuesta consta de dos sencillas. La especificada en {5} se termina con la puntuación ";" mientras que la de {6} no necesita otra finalización que el End. Así mismo, la sentencia compuesta ha de finalizarse con el ; situado después del End en {7}. En cualquier lugar de un programa PASCAL donde puede incluirse una sentencia sencilla también puede incluirse una compuesta.
1.5 Diagramas de sintaxis
La forma más escueta de representar las construcciones sintácticamente válidas del PASCAL es utilizar los diagramas de sintaxis. La especificación de las dos opciones que existen, sentencias sencillas o compuestas, sería así con un diagrama de sintaxis:












Este diagrama ha de leerse siguiendo las fechas de izquierda a derecha y siendo válido cualquier camino en toda bifurcación. Una construcción estará representada por un diagrama de sintaxis cuando empezando por la izquierda se puede salir por la derecha y cada una de las partes de la construcción co¬rresponde a las especificaciones que se encuentran en el camino. Por ejemplo, las sentencias presentadas en los ejemplos anteriores son correctas, mientras que la siguiente:
{4} Begin
{5} b := a * a;
{6} b := b * a;
{7} End;
es incorrecta. Si seguimos el diagrama nos encontramos que después del punto y coma, al final de {6}, debería haber otra sentencia sencilla mientras que existe un End.

2 Datos
2.1 Variables, datos y direcciones
En este tema vamos a ver las instrucciones necesarias en un programa PAS¬CAL para especificar los tipos de datos que se van a manejar. Los datos se almacenarán en la memoria del ordenador en una determinada posición, pero para referirnos a ellos se utilizan nombres que el programador elige libremen¬te. El lenguaje PASCAL permite utilizar cómodamente una gran variedad de tipos de datos, pero en este tema solo vamos a ver los más sencillos.






Las primeras instrucciones de un programa han de ser las que indican los tipos de datos que se van a utilizar. Cuando un nombre se utiliza para un dato que no va a modificarse se trata de un a constante. Si por el contrario se permite que el contenido de las posiciones de memoria referidas por un determinado nombre varíen durante la ejecución del programa, se trata de una variable.
Program Uno;

Const
PI = 3.14159;
UNIDADES = 'radianes ';
Var
N, M : Integer;
Z : Real;
Begin

Este es un comienzo válido de programa en el que se especifican datos y variables que se van a utilizar. La sección donde se agrupan las definiciones de constantes se encabeza con el indicativo Const, la sección de variables con Var, y ambas han de preceder el indicativo Begin que anuncia el comienzo de las instrucciones del programa que van a manipular los datos. En el apartado de constantes para asignar el valor se utiliza el operador = , en lugar del operador normal de asignación := .
2.2 Identificadores
Los nombres que se pueden utilizar para referirse tanto a las variables como a las constantes son todos aquellos que no establezcan conflicto con las pala¬bras reservadas en PASCAL para especificar datos o acciones. NO pueden utilizarse:
• Palabras reservadas
Begin, 1.23E2, 123, While, Cos
• Palabras que empiecen por números
1YA, 2ABC
• Palabras en las que se encuentre alguno de los indicadores de operadores PASCAL
x+y precio/calidad signo*valor
• Palabras separadas por blancos.

Se pueden utilizar indistintamente mayúsculas o minúsculas pero el compilador de PASCAL no las distinguirá.
Son válidos nombres como
a364b46 coco xxx2
pero se deben utilizar nombre que tengan relación con el dato que van a contener. Por ejemplo,
angula lado vertice CaraOpuesta
Algunos compiladores de PASCAL solo admiten números y letras en la composición del nombre de datos y variables. El TURBO PASCAL también admite otros caracteres. Por ejemplo, permite
Cara_Opuesta Nombre_Compuesto
En el ejemplo Uno podemos ver que el tipo de datos que van a contener las constantes se especifica por los valores que se asignan.
Program Uno;
Const
PI = 3.14159;
UNIDADES = 'radianes ';
Var
N, M : Integer;
Z : Real;
Begin
Sin embargo, el tipo de las variables ha de indicarse explícitamente con indi¬cadores PASCAL tales como Integer, o Real. Estos se refieren a dos tipos de datos numéricos entre los posibles en PASCAL.
2.3 Tipos de datos
Los tipos de datos sencillos son:
• Numéricos .
Ø Números enteros:
o Integer
o Byte
o Shortlnt
o Word
o LongInt
Ø Números reales:
o Real
o Double
o Single
o Extended
• Caracteres y alfanuméricos.
Ø Char
Ø String
• Valores de la lógica de Boole
Ø Boolean
Números Enteros
Integer
Es el tipo de variable que se usa para números enteros ( sin parte decimal ) con signo. Para una variable Integer se reservan dos bytes (16 bits) en memoria y puede almacenar números enteros en el rango entre
-32, 768( _215) y + 32, 767(215 - 1)
Es el tipo de variable utilizado normalmente para las operaciones aritméticas entre enteros .
LongInt
Para aquellos casos en los que es necesario utilizar enteros que exceden el límite aceptado por el tipo Integer, existe el tipo LongInt para el que se reservan 4 bytes en memoria. Con una variable de tipo LongInt se pueden referenciar números enteros con signo en el rango entre
-2,147,483, 648( _231) y + 2,147,483,647(231 - 1)


Word
En este tipo de datos se pueden almacenar enteros sin signo. Al igual que para el tipo Integer, para el tipo Word se reservan 2 bytes en memoria y puede admitir números enteros entre 0 y 65,535.
Byte
En PASCAL es posible utilizar un tipo de dato llamado Byte, para el que , como su nombre indica, sólo se reserva 1 byte de memoria. En las variables tipo Byte se pueden almacenar números enteros sin signo y por tanto tendrán que estar limitados entre 0 y 255 (28 - 1).
Números Reales
Real.
Para almacenar números reales ( con parte decimal ) o enteros que excedan el límite permitido por LongInt , se ha de utilizar el tipo de variable Real. A este tipo de datos también se le conoce con el nombre de coma flotante por el uso que se hace de los 6 bytes que se reservan en memoria para este tipo de datos. Con los 6 bytes y una forma de representar el número algo rebuscada que estudiaremos con los erro¬res numéricos, se pueden almacenar números entre 2,910-39 y 1, 71038 tanto positivos como negativos. Debido a la representación interna utilizada, se almacenan con igual precisión (7 u 8 cifras significativas) todos los números reales en el rango permitido.
Las operaciones con números en la representación en coma flotante son mucho más lentas que entre números enteros representados directamente con su valor en base 2. Un coprocesador matemático (como los 80X87) se dedica específicamente a estas operaciones. El TURBO PASCAL permite una colección de datos para tratar eficientemente con números reales cuando se dispone del coprocesador matemático. Cuan¬do no se dispone de él, las operaciones se pueden emular por software aunque son más lentas. Esta colección de tipos de datos son:
Single
El tipo de datos Single es un Real más corto (4 bytes) con el mismo rango de variación que el Real , pero con menos cifras significativas.
Double
Se trata de un Real largo (8 bytes) que acepta números reales entre 10-308 y 10308 y opera con 15 o 16 cifras significativas.
Extended
Esta es la elección si el tiempo de cálculo no es problema y prima la precisión. Se trata de un tipo de dato para el que se reservan 10 bytes en memoria y puede almacenar números reales desde 3.410-4932 y 1.1104932. Se pueden distinguir números que tienen 19 O 20 dígitos iguales.

Boolean
Los valores que puede tomar una variable lógica, dentro de la lógica Booleana (George Boole, Inglaterra 1815 - 1864), son Verdadero o Fal¬so. En PASCAL se suelen utilizar este tipo de variables para almacenar el resultado comparaciones o el establecimiento de condiciones. Su dos valores posibles son True y False.

Var
mayor , menor : Boolean;
{ }
begin
{ }
mayor := True;
menor := False;
{ }

Char
Para un dato del tipo Char se reserva un solo byte de memoria. En ese byte se puede almacenar información de un carácter alfanumérico. Si bien en la memoria del ordenador se está almacenando un número entero entre 0 y 255, este número no puede entrar a formar parte de operaciones aritméticas con números enteros pues se entiende que se trata de un carácter ASCII. El número almacenado es el ordinal del carácter en la tabla ASCII.
String
Cuando se quieren manipular grupos de caracteres ordenados, como por ejemplo en texto, se dispone del tipo de datos String. En una variable del tipo String se pueden almacenar entre 1 y 255 caracteres de los que se almacenan en una variable var . Por tanto el número de bytes que se reservan para este tipo de datos dependerá de caso y el programador tendrá que especificarlo.
En este ejemplo se puede ver como se realiza la especificación:
Program Dos;
Const
Lugar = 'modulo';
Var
Facultad : Char;
Modulo, clase : String[6];
Begin
{ }
Facultad := 'C';
Modulo := '-XVI';
Clase := facultad + modulo;
writeln(' Sera en el ',Lugar,' ',clase);
{ }
End;

El lugar que ocupa en memoria una variable String[N], no son N bytes, sino N + 1. Esto es debido a que en el primer byte se almacena el número actual de componentes. En el ejemplo anterior, el espacio reservado para modulo se distribuye:



Los compiladores PASCAL no inicializan las variables al principio de la ejecución del programa, por lo que en los espacios de memoria reservados y no rellenados se puede encontrar cualquier tipo de información.
Si bien se necesita un byte de almacenamiento extra por String, el procesamiento de estas cadenas de caracteres puede ser muy eficiente.
2.4 Constates con tipo
Cuando se quiere utilizar en un programa una variable pero su valor se quiere asignar antes de cualquier operación, se puede hacer uso de las Constates con tipo. Se trata más que de verdaderas constantes, de variables con asignación inicial de valor. El contenido en memoria de una constante con tipo puede modificarse con las instrucciones del programa. Su sintaxis es una mezcla de la asignación de tipo de las variables y de la definición de constantes. El programa Tres produce el mismo resultado que Dos.
Program Tres;
Const
lugar : String[13] = 'modulo' ;
begin
{ }
lugar := lugar + ´ C' + '-XVI';
writeln(' Sera en el ',lugar);
{ }
end
2.5 Inicialización de los datos
Dado que en PASCAL no se inicializan a cero, falso, o caracteres blancos, las variables cuando se define su tipo, hay que tener precaución de no utilizar el contenido de posiciones de memoria reservadas y no asignadas. Una medida tajante es inicializar todas las variables.
2.6 Asignación de las constantes
Cuando se asigna el valor a una constante no se identifica explícitamente el tipo de dato del que se trata. Esta identificación se realiza por el contenido del término a la derecha del operador =. Tanto en la asignación de constantes, como en la de variables en el cuerpo del programa, el compilador decide el espacio de memoria que ha de reservar para cada valor por el modo en que está escrito.
Const
Lugar = 'modulo';
En este caso, lugar es una constante del tipo String por que le asigna un valor que es un conjunto de caracteres separados por comas.
Const
facultad = 'C';
Cuando entre comas se sitúa un sólo carácter, se trata del valor de una constante Char . También es sencillo reconocer los datos Boolean porque se les asigna el indicador True o False . En el caso de los números, la distinción se realiza entre enteros y reales. Para las constantes asignadas con números reales, el compilador elige el tipo Real, y para los enteros el Integer. La distinción entre números enteros y reales se hace por existencia de punto decimal en el valor. Para los números reales existe también la posibilidad de notación científica.
Const
Pi = 3.14159;
PiMedios = 1570.8e-3;
PiGrados = 180 ;
El compilador PASCAL interpreta que PiGrados es una constante Integer, y las otras dos constantes del tipo Real.
2.7 Asignación de los distintos tipos de variables
En el cuerpo del programa se suelen asignar valores a variables. En este caso, a partir de las instrucciones de la sección destinada a la identificación del tipo de variables, se reserva el espacio adecuado de memoria para cada variable. Por tanto, es importante que en el lado derecho del operador de asignación (: =) se encuentre un valor correspondiente al tipo de variable de lado izquierdo.
Program Cuatro;
const
Calle = ´ Paloma Blanca ';
Direccion = 11;
Puerta 'B';
var
nombre : String[40];
numero ; Integer;
letra : Char;
begin
{ Asignaciones incorrectas }
(* Asignaciones ilegales
{1} nombre := Direccion;
{2} numero := Calle;
{3} numero := Puerta;
{4} letra := Calle;
{5} letra := Direccion
{6} nombre := 98;
{7} numero := 'Paloma Negra ';
{8} numero := 'A';
{9} letra := ' Paloma Negra ';
{10} letra := 97 ;
*)
(* Asignaciones legales *)
{11} nombre := Puerta;
{12} nombre := 'C';
{ Asignaciones correctas }
{13} nombre := Calle;
{14} nombre := ´ Paloma Negra ' ;
{15} numero := Direccion;
{16} numero := 97;
{17} letra := Puerta;
{18} letra := 'A' ;
end.
Las instrucciones {11} y {12} son incorrectas porque asignan a una variable del tipo String una constante del tipo Char. No obstante, estas instrucciones no dan lugar a error en PASCAL porque el compilador interpreta las variables Char como un subconjunto de las String (El espacio reservado en memoria para un String acomoda perfectamente un Char ).
En el caso de valores numéricos,
Program Cinco;
const
Doce = 12.0;
Once = 11;
var
i : Integer;
z : Real;
begin
{ Asignaciones incorrectas } (* Asignaciones ilegales
{1} i := Doce
{2} i := 24
*)
(* Asignaciones legales *)
{3} z := Once
{4} z := 22
{ Asignaciones correctas }
{5} I := Once;
{6} i := 24;
{7} z := Doce;
{8} z := 22;
End.

el compilador interpreta los Integer como un subconjunto de los Real.
Para los efectos sintácticos, cualquier valor numérico ( o dato alfanumérico) en el cuerpo del programa se considera igual que situado en el lado derecho en una asignación de constante del tipo correspondiente.
CONTINUARA LA PUBLICACION

No hay comentarios:

Publicar un comentario