Está en la página 1de 5

ProgramacionU#117.

qxd 4/28/01 6:06 PM Page 76

EXPERTOS PROGRAMACIN

CREANDO NUESTRA PROPIA CALCULADORA

Delphi: el hijo de Pascal


Generalmente, los PRIMEROS PASOS en el rea de la
programacin se realizan con Pascal, debido a que sus
sentencias no son complicadas ni difciles de entender.
Alex VALENCIA La empresa BORLAND nos ofrece esta alternativa en
seiya@anime.com.ar
Estudiante de Ciencias de la Computacin y
LENGUAJES VISUALES que nos permitirn hacer
experto en programacin. nuestras propias aplicaciones con base en Pascal.

D elphi es un lenguaje de programacin muy flexible y fcil


de usar, sobre todo para aquellas personas que dominan
Procedimientos y funciones
A diferencia de Visual Basic, el lenguaje Delphi usa proce-
el conocido lenguaje Pascal. Si bien en estos ltimos aos los dimientos y funciones para ejecutar el cdigo que utiliza
lenguajes como Visual Basic o JAVA han tenido una gran reper- nuestro programa. La diferencia principal entre ambos es que
cusin dentro del mundo de la programacin visual, Delphi no las funciones reciben parmetros y devuelven el resultado en
se queda atrs, y presenta las caractersticas tpicas de los len- el nombre de la funcin (como en VB). En cambio, los proce-
guajes visuales, lo que lo vuelve fcil de aprender para cual- dimientos se encargan de ejecutar un cdigo prescrito que se
quiera que sepa usar este tipo de herramientas, o bien para basar en parmetros que se califican de entrada, salida
quien quiera comenzar a usarlas. La interfase del programa re- y de entrada/salida, a travs de los cuales enviaremos da-
sulta muy familiar para los programadores de Visual Basic. Con- tos y recibiremos resultados. La forma de declararlos est en
tiene objetos muy similares y la mayora de sus propiedades son la Tabla 1.
las mismas (en la Figura 1 se muestra la pantalla de un pro-
yecto en blanco). Variables y constantes
Sin embargo, existen ciertas diferencias entre este lenguaje A diferencia de otros lenguajes y al igual que C, Delphi usa
y Visual Basic, desde del punto de vista del manejo de ciertas referencias en las declaraciones de variable, lo que significa
estructuras y, obviamente, sintctico. El objetivo de esta nota que utiliza punteros a una direccin donde se almacena el da-
es cubrir algunos aspectos bsicos que nos resultarn tiles to que queremos escribir o leer.
para nuestra calculadora de ejemplo y para guiarnos por los Esto lo vuelve mas til en algunas cosas; tal vez una de las
primeros pasos en Delphi. ms importantes sea el tipo de dato string, que es manejado

Figura 1. sta es la pantalla principal Figura 2. Aqu est nuestro primer Figura 3. Aqu vemos cmo quedara la
de Delphi. Como se ve, no es muy programa. En una de esas, Bill nos interfase grfica de la calculadora.
diferente de otros programas de compra los derechos para incluirlo en su Obviamente, podemos hacerla como ms
lenguaje visual, por lo cual no nos prximo Windows. nos guste.
resultar difcil familiarizarnos con l.

76 u s e r s . t e c t i m e s . c o m
ProgramacionU#117.qxd 4/28/01 6:07 PM Page 77

Si no tenemos Delphi,
podemos bajarlo de la
pgina oficial,
www.borland.com/downloads, donde
hay una versin trial de
30 das de duracin.

como cadena, donde podremos indexar un carcter especfico, Nuestra propia calculadora
lo que hace mucho ms flexible el trabajo sobre este tipo de Ahora comenzaremos a programar una aplicacin un poco
datos. ms til y, de esta forma, podremos adentrarnos un poco ms
Tambin encontraremos otros tipos de datos, que podremos en el lenguaje Delphi. Haremos una calculadora con las fun-
utilizar en nuestras aplicaciones y que desarrollaremos a me- ciones bsicas, para lo cual la interfase grfica quedar como
dida que avancemos en nuestra aplicacin de ejemplo (se de- nos muestra la Figura 3, con 16 botones y un objeto memo
tallan en la Tabla 2). En esta ocasin, construiremos una (debido a que nos permite alinear a la derecha), alinendolo
sencilla calculadora. con la propiedad Align.
El manejo de las constantes es similar que en los dems len- Debemos tener en cuenta un par de cosas antes de empezar,
guajes, pero adems, podremos usar constantes del tipo ty- como que hay que mantener el primer operando en el display
ped, que nos permitirn utilizar estructuras de datos (vecto- hasta ingresar el otro, no perder el ltimo operando para ha-
res, registros, punteros, etc.) como constantes. cer que la tecla <=> funcione consecutivamente, etc., pero
iremos viendo todo esto a medida que creemos las funciones.
El clsico mensaje Debido a que necesitaremos muchas comprobaciones (posi-
Para familiarizarnos y perderle el miedo a Delphi, empezare- bles acciones por parte del usuario), deberemos definir algu-
mos con el tpico ejemplo del mensaje. En este caso, usamos nos flags o banderas que nos sirvan de gua. La Tabla 3 mues-
el clsico Hello World u Hola mundo, que aparecer cuan- tra las variables que usaremos y definiremos como globales,
do presionemos un botn. o sea que se declaran fuera de los procedimientos (como en
1) Creemos, dentro de un form vaco, slo un botn, con el VB, pero sin la palabra Public) y debajo de la palabra reser-
nombre botn y el caption El clsico mensaje. El caption se- vada VAR.
r el texto que aparecer en l. Como toda buena calculadora, debe inicializarse con el 0,
2) Ahora hacemos doble clic para dirigirnos al cdigo del por lo cual en el evento formcreate de nuestra form escribi-
evento clic. remos:
3) Escribimos el siguiente cdigo: display.Text := 0; {asignamos la cadena 0 al
begin {El Begin y End estan escritos por de-
fault} Tabla 1: Parmetros

application.messagebox(hello World, mensaje de


En esta tabla se indica la forma de declarar parmetros de
prueba,MB_OK)
entrada, salida y entrada/salida.
end;
Tipo de parmetro Declaracin
Una vez terminado, podremos hacer correr el programa con Entrada (por valor) Procedure calc (X:integer)
<F9> y ejecutar esta til aplicacin. Esto debera quedar Salida Procedure calc (out num:integer)
como se ve en la Figura 2. Delphi es ms estricto que VB, ya Entrada/salida Procedure calc(var X, Y:
(por referencia) Integer);
que las funciones deben incluir todos sus parmetros; en ca-
so contrario, mostrar un error.

u s e r s . t e c t i m e s . c o m 77
ProgramacionU#117.qxd 4/28/01 6:07 PM Page 78

EXPERTOS PROGRAMACIN

display} rificar la existencia del punto.


{inicializacin de flag} var
aux:string;
Bien, ahora debemos hacer que los nmeros nos respondan, flagpun:boolean;
as que creamos un procedimiento: j,i:integer;
Procedure numero (display: TMemo; num:char; var begin
flag:boolean); aux:=display.text; {copiamos la cadena a una
{ojo!!, hay que pasar al display por parmetro tam- variable auxiliar}
bin, otra cosa diferente a VB} i:=length(aux); {contamos sus caracteres con la
Begin funcin length}
if (display.Text = 0) then {primero verificamos el for j:=1 to i do {recorremos la cadena}
0} begin
display.text:= num if aux[j] = . then {verificamos el punto}
else flagpun:=true
begin end;
if flag = true then {Este flag indica si esta- if flagpun= false then {si no haba, lo agrega-
mos en una operacin} mos}
begin display.text:=display.text+.
display.text:= num ; end;
flag:=false
end Cambio de tipo de datos
else Aqu se nos presenta un importante problema, que ser co-
display.text:= display.text + num ; mn a la mayora de las aplicaciones que creemos en lengua-
end jes visuales. ste es el cambio de tipo de dato. Como se sabe,
end; un objeto memo devuelve, en su propiedad .text, una cadena
de caracteres y no un nmero real; por esta razn, si sumamos
1 + 2, el resultado ser 12, ya que concatenamos texto.
Como muestra el cdigo, debemos crear un flag (variable
Debemos cambiar el tipo de dato a real para que los sume co-
boolean) que pasar por parmetro y nos ser til para man-
mo nmeros reales.
tener el nmero del primer operador en el display cuando ha-
En VB existe la funcin Val, con la que pasamos por parme-
ya una operacin activada.
tro la cadena y nos devuelve el nmero; pero en Delphi no te-
Slo basta colocar este procedimiento en el evento Clic de
nemos tanta suerte, y deberemos acudir a las variables de ti-
los botones de los nmeros y el punto con los parmetros co-
po variant, que nos permitirn cambiar el tipo de dato. Para
rrectos, y listo:
esto, creamos dos funciones, Textoreal y Realtotex, que usa-
numero (display,1, flagop); {ejemplo para el botn
remos para este problema. Como son funciones, se trata de c-
de la tecla 1}
digo transportable y reutilizable, y podremos usarlas en cual-
quier otra aplicacin que creemos con slo incluirla, o crear
Para el punto (.) es diferente, ya que, si usamos el mismo
una Unit con nuestras propias funciones. El cdigo sera el si-
procedimiento que utilizamos para los nmeros, nos dar la
guiente:
opcin de repetir ms de una vez el carcter del punto
function textoreal (tex:string): real;
(2.45.6? No es un nmero muy bonito). Por eso desarrolla-
var
mos otro procedimiento para ste, que ir incluido directa-
aux: variant;
mente en el evento Clic, como se muestra a continuacin, y
begin
donde usaremos la posibilidad de indexar un caracter para ve-
aux:= tex; {del texto al variant}
textoreal:= aux; {del variant
Tabla 2: Tipos de datos al real}

end;
stos son otros tipos de datos tiles que podemos utilizar en nuestras aplicacio-
nes. function realtotex (num:real):
string;
Tipo de dato Descripcin Ejemplo var
Enumerado Dato de definicin de valores Type colores = (blue,
green, red) aux: variant;
Puntero Dato de direccin de memoria Type pchar=^char begin
Subrango Dato definido en un rango I := 0..99 aux:= num; {del real al
ordinal de un tipo de dato. I := A..Z variant}
realtotex:= aux; {del variant

78 u s e r s . t e c t i m e s . c o m
ProgramacionU#117.qxd 4/28/01 6:07 PM Page 79

LISTADO*: flagcons:=false;
flagop:=true
procedure opera (var operador:char; end;
operacion_actual:char ; display:TMemo; var end;
flagop,flagcons:boolean; var res:real);
begin /:
{operador: ltimo operador utilizado} begin
{operacin_actual: el nuevo operador} if flagcons =false then
begin
case operador of nume1:= textoreal(display.text);
+: res:= suma(res,nume1);
begin display.text:= realtotex (res);
if flagcons =false then flagop:=true
begin end
nume1:= textoreal(display.text); else
{cambiamos de tipo de dato} flagcons:=false;
res:= suma(res,nume1); {acumulamos el resultado} flagop:=true
display.text:= realtotex (res); {mostramos el end;
acumulador}
flagop:=true else {si no haba ningn operador presionado...}
end begin
else if flagcons =false then
begin begin
flagcons:=false; flagcons:=false;
flagop:=true operador :=operacion_actual;
end; if flagpor=true then
end; begin
res:= textoreal(display.text);
-: flagpor:=false;
begin flagop:= true
if flagcons =false then end
begin else
nume1:= textoreal(display.text); begin
res:= resta(res,nume1); case operacion_actual of
display.text:= realtotex (res); {verificamos cul es la operacin actual}
flagop:=true *:
end begin
else nume1:= textoreal(display.text);
begin res:= producto(res,nume1);
flagcons:=false; display.text:= realtotex (res);
flagop:=true flagop:=true
end; end;
end; /:
begin
*: nume1:= textoreal(display.text);
begin res:= cociente(res,nume1);
if flagcons =false then display.text:= realtotex (res);
begin flagop:=true
nume1:= textoreal(display.text); end;
res:= producto(res,nume1); +:
display.text:= realtotex (res); begin
flagop:=true nume1:= textoreal(display.text);
end res:= suma(res,nume1);
else display.text:= realtotex (res);
begin sigue en pgina 80

u s e r s . t e c t i m e s . c o m 79
ProgramacionU#117.qxd 4/28/01 6:08 PM Page 80

EXPERTOS PROGRAMACIN

viene de pgina 79 nes con los parmetros correctos, y asunto terminado. Reco-
mendamos hacer la prueba de escritorio (seguimiento de la
flagop:=true
funcin de las variables con papel y lpiz) para que sea ms
end;
comprensible, ya que explicar cada declaracin nos llevara
-:
unas cuatro o cinco revistas, porque el procedimiento contem-
begin
pla todas las posibles acciones por parte del usuario.
nume1:= textoreal(display.text);
res:= cociente(res,nume1);
Con este procedimiento resolvemos el ncleo del programa.
display.text:= realtotex (res);
Lo agregamos a cada operacin, y misin cumplida.
flagop:=true
begin
end;
opera(operador,+,display, flagop, flagcons, res);
end;
end;
end;
end;
Ahora nos falta asociar el cdigo del botn [CE], que slo
end;
inicializa los flags y resetea el display.
end;
procedure Tcalcu.resetClick(Sender: TObject);
operador:= operacion_actual; {actualizamos el
begin
operador}
operador:= ; {no hay operaciones asocia-
end;
das}
res:=0; {el resto se resetea}
display.Text := 0; {reseteamos el display}
al texto} flagpor:= true;
end; flagcons:=false;
El procedimiento general end;
Como buenos programadores, debemos encontrar la generali-
dad en los procedimientos de suma, resta, multiplicacin y Una vez terminado todo, estamos listos para compilar. Para
divisin. No es muy difcil, porque todos actan de la misma ello utilizamos [Project/Compile], y automticamente se
manera. Despus de ingresar dos operandos, devuelven un re- crear el archivo EXE de nuestra aplicacin.
sultado y listo. Lo nico que debemos tener en cuenta son las Antes de esto, podemos ponerle algn fondo o personalizar-
posibles combinaciones de teclas que el usuario puede presio- la de la manera que queramos. Ya estamos preparados para
nar. A continuacin mostramos el cdigo de este procedimien- usar nuestra propia calculadora hecha en Delphi.
to; bastar con incluirlo en cada evento Clic de las operacio-
La proyeccin Delphi
Si bien Delphi no ha sido un lenguaje muy difundido o utili-
Tabla 3: Variables del ejemplo zado bajo entorno Windows como lo fue el famoso y popular

Visual Basic, Linux lo vio con otros ojos. Su nueva versin del
stas son las variables que usaremos como globales para clsico sistema operativo, llamada Kirix, incluye gran parte de
la aplicacin. cdigo de Delphi para las tareas de administracin de proce-
sos y de memoria. Los programadores y expertos en Linux ase-
Nombre Tipo Uso guran que un buen programador debe saber programar en
Nume1 Real Operando auxiliar para los
clculos. Delphi.
Operador Char Indica de qu operacin se Entre otras cosas, Delphi se est orientando a la programa-
trata, +, -,* o /. cin de sitios web dinmicos, lo que le abre el paso para com-
EFlagcons Boolean Indica si se presion el = ms petir con los lenguajes que estn dominando esta rea, como
de una vez. PHP, Pearl o ASP.
Resultado Variant Variable utilizada para cambios
de tipo de datos. Por lo visto, ahora es muy necesario comenzar a entender
ERes Real Acumulador de resultados. Delphi, ya que parece ser un lenguaje prometedor que, en
Flagpor Boolean Indica que se ha presionado el
igual (=) y que se espera el primer
operando.
En el CD
EFlagpunto Boolean Indica que se ha ingresado un
. para no repetirlo.
P ara que no tengas que copiar todo el cdigo de los
ejemplos, y para no tener problemas de errores,
Flagop Boolean Indica si se ingres el primer ste fue incluido en la carpeta PROGRAMACIN del
operando para mantenerlo en
el display hasta que se ingrese CD que acompaa la revista.
el otro. Adems, tambin encontrars la calculadora fun-
cionando!

80 u s e r s . t e c t i m e s . c o m

También podría gustarte