La cabecera
Independientemente de lo largo o pequeño que sea, todo programa debe comenzar con una cabecera de programa. Esta cabecera es la primera línea, comienza con la palabra clave Program seguida del nombre y terminada por ;.
Definiciones y declaraciones
Lo normal es que un programa necesite datos. Un dato es cualquier información que sea manipulada por un programa y necesite un espacio de almacenamiento en el ordenador al ejecutarse el programa. Los datos que no cambian nunca se denominan constantes, mientras que los que cambian se conocen como variables. Para reservar espacio en la memoria se han de declarar mediante una declaración de variables. Los identificadores deben comenzar con un carácter alfabético o el símbolo de subrayado. El primer carácter puede estar seguido de hasta 126 adicionales, alfabéticos, numéricos o de subrayado.
Tipos
En Pascal además de dar identificadores para las variables se debe de indicar el tipo de los datos que se usará para esa variable. El tipo de un dato tiene dos propósitos, una asignar cuánta memoria se va a asignar a un dato de tipo particular. El otro es prevenir un mal emparejamiento de tipos.
En Pascal, los tipos pueden categorizarse en predefinidos y definidos por el usuario.
Los tipos predefinidos son:
- Boolean, admite los valores FALSE y TRUE
- Char, son caracteres del conjunto de códigos ASCII
- Integer, son números en el rango -32768 a 32767
- Byte, es un subrango del tipo Integer, de 0 a 255
- Real, son números reales en el rango 1E-38 a 1E+38
Constantes
Se usan para asociar un valor fijo a un identificador. Este puede estar definido por el usuario o puede ser literal que describe un valor. Por otra parte las constantes definidas por el usuario, llamadas constantes con nombre deben definirse en la parte de definición de constante, como por ejemplo,
const PUERTO = 98. Cons es la palabra reservada correspondiente. A su vez la constante se puede definir con tipo, como por ejemplo, Const PUERTO: Integer 98;
Variables
Cuando se declara una variable, se le asigna memoria, suministrándole un lugar para poner un tipo de dato. Una declaración también suministra un nombre para ese lugar. La palabra clave es
Var, pudiendo aparecer a continuación uno o más identificadores de variables, separados por comas y los tipos se separan con dos puntos (:), a continuación se muestran ejemplos,
Var tipo_interes
cant_nominal
principal : Real;
año : Integer;
mes : Byte;
inchr : Char;
salida : Boolean;
Var tipo_interes, cant_nomina, principal: Real;
Constantes con tipo
Pueden usarse para ahorrar memoria y como variables inicializadas. A continuación se da un ejemplo:
Const TEXTO="T";
MAYUSCULA="U";
peso : Byte = 80;
tipo_entrada : Char = MAYUSCULA;
Las constantes son una forma eficiente y clara de indicar al compilador que un valor no debería modificarse. Se usa como las variables, con la única diferencia que solo se puede escribir en la constante la primera vez que se declara.
Declaración de constantes
program leccion5;
const
PI = 3.14156;
var
radio : Integer;
begin
write('Escribe el radio: '); readln(radio);
writeln(2*PI*radio);
end.
Como ves, declarar una constante y usarla es muy fácil.
Las constantes pueden contener cualquier tipo de dato, incluso strings o tipos de datos más avanzados como veremos más adelante.
No es posible asignar a una constante el valor de una variable, pues no es posible saber que valor tendrá hasta que el programa se ejecute. Sin embargo, una característica curiosa de las constantes, es que pueden contener un valor consecuencia de hacer operaciones sencillas con otras constantes. Por ejemplo:
const
PI = 3.14156;
PI2 = 2 * PI;
Eficiencia de las constantes
Las constantes son sustituidas en tiempo de compilación por su valor declarado, cada vez donde se encuentren usadas. Esto repercute en que el procesador del ordenador no tiene que leer una dirección de memoria, sino que el valor se encuentra directamente empotrado en el código. Gracias a esto, el acceso a constantes es más rápido que el acceso a memoria.
Es una buena idea usar
Operadores
Gran parte de la manipulación de datos en un programa se ejecuta mediante operadores. Los operadores se clasifican en tres categorías, aritméticos, lógicos y relacionales.
El término expresión se refiere a una combinación de una o más constantes literales o con nombre o identificadores de variables, con uno o más operadores.
Cuando aparece más de un operador hay un orden de precedencia, y si es al mismo nivel la evaluación se efectúa de izquierda a derecha. Las precedencias son:
1 - (menos unario)
2 not
3 *, /,div,mod,and,shl,shr
4 *,-,or,xor
5 =,<,<,,<=,=,in
Sentencias
La parte de sentencias es en donde se define la lógica de un programa, es donde se manipulan los datos para obtener el resultado deseado por el usuario del programa. Las sentencias se pueden clasificar en los tipos:
- Sentencias de asignación
- Sentencias compuestas
- Sentencias de control de la lógica
Una sentencia de asignación consta de un identificador de variable (o función) seguido del operador de la asignación (:=) seguido de una expresión. A continuación se indican ejemplos,
salida:=FALSE
interes:=10
pago:=principal/periodo
Una sentencia compuesta se ha de identificar en el principio con Begin y al final con end;. Una sentencia de este tipo puede estar formada por todos los tipos de sentencias incluyendo otras sentencias compuestas.
Sentencias de control de lógica
- Bucle while. Ejecuta una sentencia repetidamente hasta que la condición del bucle da FALSE. La forma es,
While condicion Do sentencia
While condicion Do
Begin
sentencia 1
sentencia 2
......
End;
-
Bucle Repeat-Until. Se usa cuando es necesario que el bucle se ejecute al menos una vez. En este caso la verificaciónde la condición ofrece esa posibilidad. La forma del bucle es,
Repeat
sentencia 1
sentencia 2
......
Until condicion
- Bucle For-Do. Es ideal para los casos en que está predeterminado el número de veces que se ejecutará una sentencia. La forma es,
For contador:= exp1 To exp2 Do sentencia
For contador:=exp1 To exp2 do
Begin
sentencia1
sentencia2
.......
End;- If-Then-Else. Esta sentencia ejecuta una, muchas o ninguna sentencia dependiendo de la evaluación de la condición establecida. La forma general es,
If condicion Then sentencia1 [Else sentencia2]
- Sentencia
Case. La forma de esta sentencia es,
Case selector Of
Constante1 : sentencia1;
Constante2 : sentencia2;
Constanten : sentencian;
Else
sentencia;
Cuando se ejecuta una sentencia Case, el valor del selector, que es una variable y puede ser cualquier tipo escalar excepto Real, se usa para determinar cuál, si la hubiera de las, sentencias del Case se ejcuta. Las constantes asociadas con la sentencia deben de ser del mismo tipo que la variable selector.
Declaración de variables
Una variable no es más que un símbolo, que representa un valor en la memoria que puede cambiar. En programación, las variables son imprescindibles, pues almacenan los datos de las operaciones que se realizan.
Todas las variables tienen un tipo
En Pascal hay que escribir un punto y coma (;) después de la declaración de una o más variables. Así pues, la sintaxis para declarar una variable es:
<nombre_de_la_variable> : <nombre_del_tipo_de_dato>; |
Y para más de una variable del mismo tipo se utiliza la sintaxis:
<variable_1>, <variable_2>, ..., <variable_n> : <tipo_de_dato>; |
Nota: recomiendo que, para todos los ejemplos que veas en este curso, abras un nuevo proyecto y le pongas el nombre de la lección, tal y como aprendiste en la lección anterior. Además, recomiendo que copies el código a mano, para que vayas familiarizándote con escribir código Pascal. Sobre la forma de escribir el código, ten en cuenta que el espaciado interior generalmente no importa, así por ejemplo es lo mismo
numero1:=5; que
numero1 := 5. Tampoco importa dejar o no espacios al principio de la línea, pero, como puede comprobarse de un primer vistazo, ello facilita ENORMEMENTE la lectura, así que es altamente recomendable respetar este estilo. Tampoco hay distinción entre mayúsculas y minúsculas, significa lo mismo
Integer que
integer o
inTeger.
Lo primero que llama la atención de este ejemplo es la palabra clave
var. Ello significa que, lo que venga a partir de ahora y hasta que no se indique lo contrario, es para declarar variables.
Declaración de las variables
Las variables se declaran poniendo el nombre que se desee, dos puntos (no importa si hay espacios o no entre medias), y el tipo de variable. Se termina con un punto y coma (obligatorio). El nombre que se desee puede ser, efectivamente, lo que se quiera, con dos normas básicas: debe empezar por una letra, y no contener símbolos. Estos son nombres válidos de variables:
a b c pericoEldeLosPalotes mi_variable a9988 variable2g
Y estas son variables NO válidas:
Concretamente, la primera,
78s empieza por un número, por lo tanto producirá un error, y
mi-variable contiene el símbolo
-, que significa resta, y entonces, como es de esperar, el compilador se confunde y piensa que quieres restar a la variable
mi la variable
variable.
Lo siguiente interesante es el tipo. Efectivamente, estas variables tienen el tipo
Integer. Esto significa, en inglés,
entero. Si recuerdas cuando aprendiste matemáticas, el tipo de número enteros es aquel que no tiene decimales, por ejemplo -6, 89, 7878787, etc. Pues esto es lo que significa, aunque con algunas limitaciones. Este tipo de datos no admite decimales. Así que asignar a estas variables un número real, por ejemplo, 6.78, producirá un error en tiempo de compilación.
Aprenderás muchos más tipos de datos más adelante.
Expresiones básicas
El programa empieza con
begin, ya lo sabemos.
A continuación vienen tres asignaciones. Las asignaciones en Pascal se realizan con el símbolo
:= . Es fácil comprender que esta expresión:
asigna el valor 6 a la variable
numero1.
Y la expresión:
resultado := numero1 + numero2;
asigna a la variable resultado la suma de las variables
numero1 y
numero2.
La siguiente instrucción es la ya usada
writeln, que como recordarás lo que hace es imprimir en la consola algo. Si te fijas, en este caso no tiene comillas. Es debido a que en vez de imprimir una cadena de caracteres, ahora lo que se imprime es directamente una variable. Más sobre esto más tarde.
Puedes ejecutar el programa y verás como produce en la salida un bonito número 11, consecuencia de imprimir la variable
resultado.
Unas notas sobre los puntos y comas
Seguramente te preguntarás que utilidad tienen esos puntos y comas. ¿Porqué están ahí y porque si no los pongo el compilador me devuelve errores raros? Muy sencillo, los puntos y comas sirven para separar instrucciones. Así, por ejemplo, es posible meter varias instrucciones en una sola linea:
numero1 := 5; numero2 := 6;
significa lo mismo que:
numero1 := 5;
numero2 := 6;
y además, curiosamente también significa lo mismo que:
numero1 :=
5;
numero2
:= 6;
Es lo bueno del punto y coma, que se pueden poner todas las instrucciones que se quieran en una sola linea, o dividirlas en tantas lineas como se quiera si la expresión es muy larga (algo que te será de mucha utilidad cuando programes seriamente).
Hay algunas excepciones. Como ves, no se deben poner detrás de
begin o de
var. El último
end. debe tener un punto, que como estarás pensando significa punto y final.
Instrucciones matemáticas permitidas en pascal
~Operador | ~Operación | ~Válido entre |
+ | adición | enteros y reales |
- | resta | enteros y reales |
* | multiplicación | enteros y reales |
/ | división | enteros y reales |
div | división entera | enteros |
mod | resto | enteros |
Por ejemplo:
program leccion3;
var
PI : Single;
r : Single;
begin
PI := 3.14156;
r := 6.7;
write ('La circunferencia es:');
writeln (2 * PI * r);
end.
Obtenemos:
La circunferencia es: 4.209690396E+01
Nota como hemos puesto el resultado directamente en la llamada a la función
writeln. También nota como hay otra nueva función:
write. Es igual que
writeln pero no escribe un retorno de carro. De esa manera, lo siguiente que se escriba saldrá a continuación.
Los tipos char y string
Hasta ahora, hemos estado usando caracteres y cadenas de caracteres (strings) directamente, sin asignarlos a variables, para la función
writeln. Pero se pueden usar en variables, y hacer algunas operaciones con ellos:
program leccion3;
var
nombre : string;
resultado : string;
begin
write('Dime tu nombre: ');
readln(nombre);
resultado := 'Hola ' + nombre + ', ¿qué tal estás?';
writeln (resultado);
end.
Al ejecutarlo, el programa espera que introduzcas un nombre y pulses
intro. Ofrece lo siguiente:
Dime tu nombre: Javier
Hola Javier, ¿qué tal estás?
readln es por lo tanto una función que sirve para que el usuario del programa introduzca datos, estos se guardan en la variable especificada, y con esa variable se hacen las operaciones oportunas, en este caso, concatenar (sumar) cadenas de caracteres.
El tipo
char es simplemente un carácter solo. El tipo
string es una cadena (array) de caracteres. Más adelante aprenderemos a manejar cadenas.
Quizá te estés preguntando: ¿puedo introducir números con
readln? Prueba:
program leccion3;
var
r : Single;
resultado : Single;
begin
write('Dime el radio del círculo: ');
readln(r);
resultado := 2 * 3.14 * r;
writeln (resultado);
end.
Si lo ejecutas te pide el radio del círculo e imprime el resultado. Desgraciadamente también si lo que escribes no es un número te premiará con una bonita excepción. Aprenderás un poco más adelante a hacer las conversiones de forma más segura.
¿Y qué sucede si sumas un string y un número? Prueba:
program leccion3;
var
r : Single;
resultado : string;
begin
write('Dime el radio del círculo: ');
readln(r);
resultado := 'El resultado es: ' + 2 * 3.14 * r;
writeln (resultado);
end.