Publicado el 19/Ene/2002
Fecha: 18/Oct/2001
Autor: David Osornio Fernández" <david_osornio@yahoo.com>
![]()
Delphi 5.0
¿QUÉ ES UN PROGRAMA?
Es una secuencia ordenada y estructurada de pasos y sentencias. Este se divide en “Subprogramas” llamados unidades, y estas a su vez de dividen en módulos los cuales se llaman procedimientos que se componen de bloques de programa, los cuales son una serie de instrucciones que realizan una tarea muy concreta.
Todos los bloques de programa comienzan por la palabra Begin y terminan con la palabra end. Un ejemplo es:
a := b + c;
Insertar(a);
end;
En el ejemplo, después de cada instrucción (excepto begin), se coloca un punto y coma. En Pascal es obligatorio poner punto y coma, pues identifica el fin de una instrucción.
Es posible incluir en el código texto aclarativo que ayude a entender lo que la instrucción esta realizando. A ese texto se le denomina comentario.
En Delphi hay 3 formas distintas de poner comentarios:
1. Encerrando el texto aclarativo entre llaves ({ }).
2. Encerrando el texto aclarativo entre paréntesis y asterisco (* *).
3. Anteponiendo al texto dos símbolos de diagonal (//). Unicamente una línea de texto.
Ejemplo:
(*
Todo este trozo es un comentario
*)
begin {esto también es un comentario}
a := b + c; // aquí se esta haciendo una suma
Insertar(a);
end;
Los comentarios no son considerados por Delphi como parte del código. Su única función es la de aclarar el código.
Cuando se realiza un programa, constantemente se tiene que almacenar valores dentro del código, valores que pueden ser resultado de una operación. Una variable puede cambiar su valor en cualquier momento del programa, una constante siempre mantendrá el mismo valor durante el programa. Sin embargo se deben seguir unos consejos:
No tiene que haber sido utilizada para identificar otra variable.
No puede tener el nombre de una orden de Pascal.
No puede empezar con un número, ni tener espacios en blanco.
No puede contener caracteres “raros”, como comillas, acentos, símbolos de puntuación ni la letra ñ. Sin embargo puede tener letras, números(siempre que no sea al principio) y el símbolo “_”.
Las constantes se declaran del siguiente modo: en primer lugar se pone la palabra reservada const seguida de la contante, el signo igual y el valor de la constante (Sin olvidar el punto y coma reglamentario).
Ejemplos:
Const pi = 3.141592;
Const B = 18;
Const anio = 2001;
Const tamano = 12;
Las variables se declaran de modo distinto a como lo hacen las constantes. Antes de utilizarla hay que declarar qué es lo que contendrá, para que reserve el espacio en memoria para ella. Antes de empezar a definir variables debes de poner la palabra var y deberá ser antes de la palabra de inicio begin, abajo el nombre de la variable, seguido de 2 puntos y el tipo de valor que contendrá. Ejemplo:
Var
Nombrevariable1 : tipo;
Nombrevariable2 : tipo;
...
|
Nombre (Tipo) |
La variable almacenará |
|
Boolean |
Un valor lógico: Verdadero (TRUE) o Falso (FALSE). |
|
Char |
Una sola letra. |
|
Byte |
Un número pequeño de 0 a 255. |
|
Smallinit |
Un número entero de –32768 a 32767. |
|
Word |
Un número entero de 0 a 65535. |
|
Integer o Longinit |
Un número entero de –2,147’483,648 a 2,147’483,647 |
|
Cardinal |
Un número entero de 0 a 2,147’483,647 |
|
Real |
Un número entero y decimal. |
|
Double |
Un número entero y decimal mas preciso que Real. |
|
String |
Cadena de caracteres. |
Ejemplos:
Var
Edad : byte;
Nombre : string;
DNI : cardinal;
Curso : byte;
Puntuación : real;
Varon : boolean;
Cada variable va acorde con lo que almacenara, pues edad tiene un tipo byte, pues no almacenara un valor grande. Varon es de tipo boolean para que TRUE indique “SI” y FALSE indique “NO”.
ASIGNACIÓN
Una vez definida la variable, hay que darle un valor. Esto se hace siguiendo la sintaxis siguiente:
Variable := valor;
Esto es la Asignación, únicamente se debe anteponer el nombre de la variable, seguido de 2 puntos y un signo igual y finalmente el valor que almacenará. Ejemplo:
Edad := 24;
Nombre := ‘David Osornio’;
También es posible realizar operaciones aritméticas en una asignación como por ejemplo:
A := 1+2;
Res := 7+2;
Tan sólo se tiene que saber como indicar las operaciones aritméticas. Las operaciones aritméticas se describen en la siguiente tabla:
|
Operación |
Descripción |
Ejemplo |
|
+ |
Suma |
a := 1 + 4; |
|
- |
Resta |
a := 8 – 2; |
|
* |
Multiplicación |
a := 2 * 17; |
|
/ |
División de números reales |
a := 14 / 3; |
|
Div |
División de números enteros |
a := 14 div 3; |
|
Mod |
Resto de la división |
a := 14 mod 3; |
En algunas ocasiones, necesitamos construir variables que se compongan a su vez de otras variables. Por ejemplo, si se desea construir una variable de los datos de una persona y que esta a su vez este construida de otras variables mas limitadas como nombre, teléfono, edad. Los registros se declaran del siguiente modo:
Variable: record
Subvariable: tipo;
Subvariable: tipo;
...
end;
Donde variable es el nombre de la variable “contenedora”( llamada registro) y las subvariables, son los nombres de las variables contenidas, las que se denominan “Campos del registro”.
Var
Fichapersona : record
Nombre: string;
Edad: byte;
Telefono: longint;
End;
De este modo se declara una variable de registro llamada Fichapersona que se compone de 3 variables: Nombre, Edad y Telefono. Para acceder a los datos de este registro, se deberán colocar los valores del siguiente modo.
Fichapersona.Nombre := ‘David Osornio Fernández’;
Fichapersona.Edad := 22;
Fichapersona.Telefono := 7550164;
MATRICES
En Pascal, podemos definir matrices del mismo tipo que las variables, las cuales son variables divididas en secciones independientes que pueden almacenar distintos valores. Las matrices se declararán del siguiente modo.
Nombre_matriz : array[1..elementos1,1..elementos2,1..elementos3, ...] of tipo;
Donde el Nombre_matriz, es el nombre que recibirá la matriz de datos, array es para definir que se tratará de una matriz de datos. Y los elementos serán el numero de celdas que tendrá dicha dimensión. Ejemplos:
a : array[1..10] of byte;
b : array[1..100, 1..20] of word;
c : array[1..10, 1..10, 1..10] of float;
OPERACIONES CON CADENAS
Las cadenas de tipo string, utilizan operadores especiales para trabajar con ellas:
Unión.- Podemos unir dos cadenas en una sola utilizando el signo +. Por ejemplo:
Nombre := ‘David’;
Apellido := ‘Osornio’;
NombreCompleto := nombre + ‘ ‘ + apellido;
Recorte.- Podemos eliminar letras de una cadena utilizando la función delete, que se utiliza del siguiente modo:
Delete (cadena, inicio, cantidad);
Donde cadena es la variable con la que estamos trabajando, inicio es la posición en la que vamos a iniciar el recorte y cantidad es el número de caracteres que quitaremos.
a := ‘Hola a todo el mundo!’;
delete (a, 6, 10);
En este código estamos eliminando de la variable a los 10 caracteres que están a partir de la posición 6, por lo que después de esta instrucción la variable a tendrá el valor ‘Hola mundo!’.
CONVERSIÓN DE TIPOS
Object Pascal es lo que se denomina un lenguaje fuertemente tipado. Esto quiere decir que no permite asignar valores entre variables de distinto tipo. Esto es que si tenemos una variable a de tipo byte y una variable c de tipo string, y ésta ultima contiene el valor ‘3’, no podremos hacer algo como:
a := c;
Ya que con esto no le damos a la variable a el valor 3, sino que se le da el valor ‘3’, se le esta dando una cadena de texto, no un número.
Para permitir asignaciones entre variables de distinto tipo, e utilizan las siguientes funciones:
Trunc.- esta función permite asignar un número real a una variable de tipo byte, word o integer. Recibe como parámetro un número real y retorna dicho número sin parte decimal. No hace redondeo, solo elimina la parte que está después del punto decimal. Ejemplo:
a : byte;
f : real;
f : 1.8934;
a := trunc (f); // a = 1
StrToInt.- Permite asignar un texto que contiene en su interior un número a una variable de tipo entero. Si la cadena no contiene un número, sino letras, se produce un error. Ejemplo:
a : string;
b : integer;
a := ‘123’;
b .= StrToInt (a); // b=123
IntToStr.- Es la contraria de la función anterior. Permite convertir un número entero a cadena. Ejemplo:
a : integer;
b : string;
a := 12;
b := ‘el valor de a es ‘ + IntToStr (a); // b= ‘el valor de a es 12’
ESTRUCTURAS DE DECISIÓN
Son aquellas instrucciones que permiten al usuario obtener distintas respuestas en base al valor introducido o al resultado de alguna operación. Se seguirá la siguiente sintaxis:
if condición then instrucción1
else instrucción2;
Después del if(“si”) debe ir la condición que ha de evaluarse. A continuación de ésta , se coloca la palabra then(“entonces”) seguida de la instrucción1, que se ejecutará si la condición es cierta o se cumple. En caso contrario, se ejecutara la instrucción2, que esta precedida por la palabra else(“si no”). Ejemplo:
If a = b Then c := 1
Else c := 2;
En caso de que se deseen poner mas instrucciones en un solo bloque, se deberá realizar del siguiente modo:
If a = b then
Begin
c := 1;
d := 2;
e := 3;
end
Else
Begin
c := 5;
d := 3;
e := 0;
end;
La parte del Else no es obligatoria, y puede ser omitida, con lo cual la instrucción quedara reducida, sin embargo, si la parte else se omite, se deberá poner punto y coma al final de la instrucción. Ejemplo:
If a = b Then
Begin
c := 1;
d := 2;
e := 3;
end;
En este ejemplo, si las variables a y b son iguales se darán valores a las variables c, d y e, en caso contrario seguirán con sus valores iniciales.
EXPRESIONES BOOLEANAS
En Pascal se llaman expresiones booleanas a las expresiones que indican una condición y que producen un resultado de verdadero o falso.
Una expresión booleana se puede colocar de dos modos distintos:
1. Una variable o constante seguida de un operador de comparación y seguida de otra variable.
2. Una expresión booleana seguida de un operador booleano y de otra operación booleana.
Los operadores que se utilizan en Delphi son:
|
Operador |
Descripción |
Ejemplo |
|
> |
mayor que |
> b |
|
< |
menor que |
< 4 |
|
>= |
mayor o igual |
a >= 3 |
|
<= |
menor o igual |
c <= 7 |
|
<> |
distinto |
a <> 0 |
|
= |
igual |
a = 4 |
Las operaciones booleanas sirven para unir expresiones y son las que a continuación se presentan.
|
Operación |
Descripción |
Ejemplo |
|
and |
y |
(a > b) and (c < 3) |
|
or |
o |
(a > b) or (c < 3) |
|
not |
no |
not (a = b) |
Un ejemplo de una estructura de decisión con una expresión booleana es el siguiente:
If ((a > b) and (c < 3)) or not (a > 7) Then c:= 0;
ANIDAMIENTOS
Es sabido que después de la palabra reservada Then se pueden ejecutar secuencias de instrucciones las cuales pueden ser de cualquier tipo, ahora bien, ¿Es posible colocar un if dentro del bloque then de otro?. La respuesta es si, a estas sentencias de “If´s” encadenados se le denomina anidamiento.
El punto clave es tomar en cuenta que cuando se coloquen anidamientos es recomendable colocar las instrucciones Begin y End entre Then y Else de este modo sabremos exactamente a que if pertenece cada Else. Ejemplo:
If a = 7 then
Begin
If b = 2 then
c := 3
Else
c := 2
End
Else
c := 1;
Cuando se realiza un programa, es frecuente encontrarse con alguna variable que según su valor realizara alguna acción. Esto se podría realizar con muchos If´s anidados, pero resultaria algo enredado, por ejemplo: Si se desea que cuando a tenga el valor 1, c tome el valor 10, cuando a tenga el valor 2, c tome el valor 15, cuando a tenga el valor 3, c tome el valor 20 y cuando no sea alguno de los 3 valores, entonces que c tome el valor 0:
If a = 1 then c := 10 Else
If a = 2 then c := 15 Else
If a = 3 then c := 20 Else
c := 0;
Esta forma de tomar decisiones resulta muy poco ortodoxa. El lenguaje Pascal nos ofrece para dicho propósito otra forma mas fácil de hacerlo. Mediante la palabra reservada case of. La sintaxis de dicha instrucción es la siguiente.
case variable of
valor1: acción1;
valor2: acción2;
....
Else acción N;
End;
Donde variable es el identificador de la variable que será comprobada y valor1, valor2... son los diferentes valores que puede tomar dicha variable. Si tomamos el problema anteriormente planteado, tendremos que la solución sería de este modo:
case a of
1: c := 10;
2: c := 15;
3: c := 20;
Else c:= 0;
End;
En algunos programas, es necesario repetir la misma acción un número determinado de veces, hasta que se cumpla una acción determinada.
En Delphi existen 3 tipos distintos de Blucles:
1. Bucle “Para”.- Se utiliza para efectuar un número concreto de ocasiones la misma secuencia de acciones. Su sintaxis es:
For variable := inicio to fin do
Begin
<código a repetir>
End;
Para repetir una suma 10 veces, se utilizará la siguiente instrucción:
a := 1
For i := to 10 do
Begin
a := a + 1;
End;
2. Bucle “Mientras”.- Se utiliza para repetir las acciones mientras se cumpla una condición. Su sintaxis es:
While condición do
Begin
<código a repetir>
End;
En el momento que la condición deje de cumplirse, el bucle terminará y seguirá con la siguiente instrucción del código. Ejemplo:
a := 1;
j := 1;
While (j <=10) do
Begin
a := a +j;
j := j +1;
End;
3. Bucle “Repetir”.- Se utiliza para repetir las mismas acciones hasta que se cumpla una condición determinada.
Repeat
<Código a repetir>
Until condición;
En el momento en que se cumpla la condición, terminará el bucle. Ejemplo:
a := 1;
j := 1;
Repeat
a := a * j;
j := j+1;
Until j=10;
En este ejemplo, se obtendrá el factorial de 10.
La diferencia entre el Bloque While y el Bloque Repeat es que en el primero, se evalúa la condición antes de ejecutar las acciones, por lo que es posible que no se ejecute ni una sola vez. Mientras que Repeat, evalúa la condición después de ejecutarla una vez.
PROCEDIMIENTOS Y FUNCIONES
Delphi, es un lenguaje estructurado, lo cual indica que los programas escritos en este lenguaje, pueden descomponerse en pequeños módulos que pueden ser llamados cuando los necesitemos. Estos módulos en Pascal se llaman funciones y se identifican mediante un nombre. Se declaran del siguiente modo:
function nombre (argumento1: tipo; argumento2: tipo;...) : tipo;
Begin
<Acciones a realizar>
End;
Donde nombre es el nombre que se asignará a la función, argumento1 y argumento2 son valores que pasan a la función y tipo es el tipo de valor que retornará como resultado. Por ejemplo, si queremos implementar en Pascal la función matemática: f(x, y) = (x * x + y) / x siendo x e y números enteros, se realizaría de este modo:
Function f (x: integer; y: integer) : integer;
Begin
F = (x * x + y) / x;
End;
Dicha función, se definirá una sola ocasión durante el programa, y únicamente será necesario hacer llamada a esta función mediante su nombre y sus valores dados entre paréntesis.
a := f(1, 2); {llamada a f con x=1 e y=2}
b := f(a, 3); {llamada a f con x=a e y=3}
c := f(a, b) + f(1, 4);
Los valores colocados entre paréntesis de la función, reciben el nombre de argumentos. Estos se comportan dentro de la función, como si se tratase de variables.
PROCEDIMIENTOS
Toda función que no retorna valores ningún valor, o que no realiza operaciones matemáticas o genera resultados numéricos, recibe el nombre de procedimiento. La programación estructurada, se basa en dividirse en pequeñas partes autosuficientes que realizan una tarea muy concreta, y que pueden ser invocados cuando se desee. Se puede realizar alguna función o tarea especifica que arroje información de modo no numérico, o sin realizar operaciones, es entonces cuando se utilizan los procedimientos.
Un procedimiento se declara del mismo modo que una función, a diferencia que la palabra reservada Function cambia por Procedure y al final de la lista de argumentos no se pone ningún tipo de valor de respuesta, pues no arroja ningún resultado. Ejemplo:
Program Ejemplo2;
Procedure Di (mensaje: String);
Begin
Showmessage(mensaje);
End;
Begin
Di (‘Mi nombre es: ’);
Di (‘David Osornio Fernández’);
End;
También es posible construir funciones o procedimientos que no tengas argumentos, pues pueden realizar una tarea concreta, no importando alguna otra cosa. Ejemplo:
Program Ejemplo3;
Procedure Saluda;
Begin
Showmessage(‘Hola a todos’);
End;
Procedure