Está en la página 1de 32

Capt.

3
ESTRUCTURAS SELECTIVAS
Los programas secuenciales son los mas simples. El cuerpo principal de ellos esta
constituido por una serie de enunciados que la computadora ejecuta en un orden dado.
Sin embargo, el compilador tiene capacidad para tomar decisiones, es decir, de realizar
pruebas y seleccionar el curso de acción apropiado dependiendo del resultado de esta
prueba. A esta capacidad se le conoce como Selección. El compilador efectúa estas
selecciones evaluando expresiones booleanas, esto es, expresiones que tienen valores
de verdadero o falso.

La sentencia IF
La sentencia if presenta dos formas:
a) Selección simple:
If expresión then
sentencias

En el que expresión retorna un valor lógico. Solo si la expresión es cierta la sentencias


son ejecutadas.

b) Selección Doble:

If expresión then
sentencias1
else
sentencias2

si la expresión retorna un valor verdadero sentencias1 es ejecutada de otro modo se


ejecuta sentencias2.

Nunca hay un punto y coma entre la clausula then y la palabra else.

Reglas de precedencia

Precedencia
Máxima menos unitario not
Segunda *, /, div, mod and
Tercera +, - or, xor
Mínima <, >, >=, <=, <>, =
Cuando se encuentran dos operadores con la misma precedencia, la evaluación se
lleva a cabo de izquierda a derecha.

1) Aplicación Menor de cuatro números

Desarrollar una aplicación que determine el menor de cuatro números.


1
Siga estos pasos:
1. Proceda crear una nueva aplicación.
2. En el formulario coloque 5 etiquetas, 5 cuadros de edición, 2 controles BitBtn y 1
caja agrupadora.
3. Modifique las propiedades de los componentes así:

Control Propiedad Valor


Form1 Caption Menor de cuatro números
Label1 Caption poScreenCenter
Label2 Caption a=
Label3 Caption b=
Label4 Caption c=
Label5 Caption d=
Edit1 Text ‘’
Edit2 Text ‘’
Edit3 Text ‘’
Edit4 Text ‘’
Edit5 ReadOnly True
Text ‘’
GroupBox1 Caption Ingrese Números
BitBtn1 Kind bkIgnore
Caption &Calcular
Enabled False
BitBtn2 Kind bkClose
Caption &Salir

Aspecto de la interfaz de usuario:

Asociemos un procedimiento al control Edit1 para el evento OnKeyPress.

1. En el formulario, seleccione el control Edit1


2. Sitúese en la ficha Events del Inspector de objetos y, en el evento
OnKeyPress haga doble clic.
2
3. Digite el siguiente código:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);


begin
if key=#13 then Edit2.SetFocus;
if not (key in ['0'..'9',#8]) then key:=#0
end;
Análogamente el código para el evento OnKeyPress del control Edit2 sera:

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);


begin
if key=#13 then Edit3.SetFocus;
if not (key in ['0'..'9',#8]) then key:=#0
end;

Igualmente el código para el evento OnKeyPress del control Edit3 será:

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);


begin
if key=#13 then Edit4.SetFocus;
if not (key in ['0'..'9',#8]) then key:=#0
end;

Copie el mismo código para el evento OnKeyPress del control Edit4 añadiéndole
una instrucción para habilitar y enfocar el control BitBtn1.

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);


begin
if key=#13 then
begin
BitBtn1.Enabled:=true;
BitBtn1.SetFocus;
if not (key in ['0'..'9',#8]) then key:=#0
end;

Haga doble clic en el control BitBtn1. Aquí suponemos que el mínimo es el primer
número y luego pasamos a compararlo con los restantes. Luego de esta serie de
comparaciones el menor valor se almacena en la variable min. En el controlador de
evento que se abre en el Editor de Código, digite el siguiente segmento:

procedure TForm1.BitBtn1Click(Sender: TObject);


var
a,b,c,d,min:integer;
begin
try
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);
3
c:=StrToInt(Edit3.Text);
d:=StrToInt(Edit4.Text);
min:=a;
if b<min then
min:=b;
if c<min then
min:=c;
if d<min then
min:=d;
Edit5.Text:=IntToStr(min);
Edit1.SetFocus;
Edit1.SelStart:=0;
Edit1.SelLength:=Length(Edit1.Text)
except
on EConvertError do ShowMessage('Uno de los números es muy grande')
end
end;

Programa ejecutándose:

2) Aplicación Mayor de Tres Números

Diseñe una aplicación que calcule el valor del máximo de una serie de tres números
enteros. Se supone que los tres valores son diferentes:

Siga estos pasos:

1. Proceda a crear una nueva aplicación


2. En el formulario coloque 4 etiquetas, 4 cuadros de edición, 2 controles BtBtn y
una caja Agrupadora.
3. Modifique las propiedades de los componentes:

4
Control Propiedad Valor
Form1 Caption Mayor de tres números
Label1 Caption poScreenCenter
Label2 Caption a=
Label3 Caption b=
Label4 Caption Mayor
Edit1 Text ‘’
Edit2 Text ‘’
Edit3 Text ‘’
Edit4 Text ‘’
ReadOnly True
GroupBox1 Caption Ingrese Números
BitBtn1 Kind bkIgnore
Caption &Calcular
Enabled False
BitBtn2 Kind bkClose
Caption &Salir

Aspecto de la interfaz de usuario:

unit uMayorde3;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;

type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;

5
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
BitBtn1: TBitBtn;
Label4: TLabel;
Edit4: TEdit;
BitBtn2: TBitBtn;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then Edit2.SetFocus;
if not (key in ['0'..'9',#8]) then key:=#0
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);


begin
if key=#13 then Edit3.SetFocus;
if not (key in ['0'..'9',#8]) then key:=#0
end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);


begin
if key=#13 then BitBtn2.SetFocus;
if not (key in ['0'..'9',#8]) then key:=#0
end;

procedure TForm1.BitBtn2Click(Sender: TObject);


var
a,b,max,c:integer;
begin
try
6
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);
c:=StrToInt(Edit3.Text);
if a>b then
if a>c then
max:=a
else
max:=c
else
if b>c then
max:=b
else
max:=c;
Edit4.Text:=IntToStr(max)
except
on EConvertError do ShowMessage('Uno de los números es muy
grande')
end
end;

end.
Programa ejecutándose:

Recordar que la instrucción doble if-else no admite un punto y coma (;) en la línea
anterior a la clausula else. Así mismo si es que hubieran dos o mas desigualdades en la
condición de if use los paréntesis para encerrar cada desigualdad y un paréntesis
global

3) Aplicación Suma de Mayores y Resta de Menores

7
Elaborar una aplicación que lea tres números diferentes: a, b y c para luego mostrar la
suma de los dos mayores y la resta de los dos menores.
Propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Suma de Mayores y Resta de Menores
Label1 Caption a=
Label2 Caption b=
Label3 Caption c=
Label4 Caption Suma
Label5 Caption Resta
Edit1 Text ‘’
Edit2 Text ‘’
Edit3 Text ‘’
Edit4 Text ‘’
ReadOnly True
Edit5 ReadOnly True
Text ‘’
GroupBox1 Caption Ingrese Números
BitBtn1 Kind bkIgnore
Caption &Calcular
Enabled False
BitBtn2 Kind bkClose
Caption &Salir

En el control BitBtn2 usaremos un algoritmo para determinar los valores máximo,


intermedio y mínimo que serán almacenados en las variables max, inter y min
respectivamente. Luego se mostrara la suma (max + inter) y la diferencia (inter – min).
procedure TForm1.BitBtn2Click(Sender: TObject);
var
a,b,c,int,max,min:integer;
begin
try
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);
c:=StrToInt(Edit3.Text);
if a>b then
if b>c then
begin
max:=a;
int:=b;
min:=c
end
else
if a>c then
8
begin
max:=a;
int:=c;
min:=b
end
else
begin
max:=c;
int:=a;
min:=b
end
else
if a>c then
begin
max:=b;
int:=a;
min:=c
end
else
if b>c then
begin
max:=b;
int:=c;
min:=a
end
else
begin
max:=c;
int:=b;
min:=a
end;
Edit4.Text:=IntToStr(max+int);
Edit5.Text:=IntToStr(int-min);
Edit1.SetFocus;
Edit1.SelStart:=0;
Edit1.SelLength:=Length(Edit1.Text)
except
on EConvertError do ShowMessage('Uno de los números es muy grande')
end
end;

9
4) Bonificación según nota
Un profesor desea utilizar una aplicación que le permita bonificar equitativamente a
todos sus alumnos de acuerdo a la nota conseguida en un examen, de la siguiente
forma:
Si la nota fuera menor que 5 se bonifica con 3 puntos; si la nota fuera mayor o igual que
5 pero menor que 10 se bonifica con 2 puntos y si la nota fuera mayor o igual que 10
pero menor que 15 se bonifica con 1 punto; y si la nota fuera mayor o igual que 15 pero
menor o igual que 20 se le descuenta el residuo de la nota entre 5. Determinar la nota
bonificad de cualquier alumno.
1. En el formulario colocar 3 etiquetas, 3 cuadros de edición, un control BitBtn y 1
Caja Agrupadora.
2. Modificar las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Bonificación según nota
Position poScreenCenter
Label1 Caption Nota
Label2 Caption Bonificación
Label3 Caption Nota Bonificada
Edit1 Text ‘’
Edit2 Text ‘’
ReadOnly True
Edit3 ReadOnly True
Text ‘’
GroupBox1 Caption Resultados
BitBtn Kind bkClose
Caption $Salir

Aspecto de la interfaz de usuario:

10
Los procedimientos en lenguaje Delphi:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
nota,bonif,nBonif:integer;
begin
if key=#13 then
begin
try
nota:=StrToInt(Edit1.Text);
bonif:=0;
if (nota>=0) and (nota<5) then
bonif:=3
else
if nota<10 then
bonif:=2
else
if nota<15 then
bonif:=1
else
if nota<=20 then
bonif:=- nota mod 5;
nBonif:=nota+bonif;
if nota<=20 then
begin
Edit2.Text:=IntToStr(bonif);
Edit3.Text:=IntToStr(nBonif)
end;
Edit1.SetFocus;
Edit1.SelStart:=0;
Edit1.SelLength:=Length(Edit1.Text)
except
on EConvertError do
ShowMessage('El número es muy grande')
end
end;
if not (key in ['0'..'9',#8]) then key:=#0
end;

11
end.

Programa ejecutándose:

5) Adivinar Número
Desarrollar una aplicación que permita determinar el momento en que se logra adivinar
el valor de un numero generado al azar que esta comprendido entre 0 y 100. Orientar el
siguiente intento mostrando un mensaje de MUY ALTO o MUY BAJO según
corresponda.
Siga estos pasos:
1. Crear una nueva aplicación.
2. Colocar en el formulario 3 etiquetas, 1 cuadro de edición, 1 control BitBtn y una
caja agrupadora.
3. Modificar las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Adivinar Numero Aleatorio
Position PoScreenCenter
Label1 Caption Ingrese Numero
Label2 Caption ?
Label3 Caption ‘’
Edit1 Text ‘’
GroupBox1 Caption Información
BitBtn Kind bkClose
Caption %Salir

Aspecto de la interfaz de usuario:

12
Declaremos dos variables enteras globales en la sección
Var
Azar, intentos: integer;

Diseñada la interfaz de usuario, asociemos un procedimiento al formulario accionado


por el evento OnCreate. Cuando el usuario inicie la aplicación, se generará un número
natural aleatorio menor o igual a 100. Este es el numero por adivinar y se almacenará
en al variable azar.
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
azar:=Trunc(100*Random)
end;

Funcion Random

Genera números aleatorios en un rango específico.


Sintaxis: Random [(Rango)];

Random retorna un numero aleatorio en el intervalo 0 <= X < Rango. Si rango no es


especificado el resultado es un número aleatorio real en el intervalo: 0 <= X < 1.

Para inicializar el generador de números aleatorios (obtenido desde el reloj del sistema)
añada una llamada Randomize. Tipicamente, Randomize es llamado una sola vez
antes de todas las llamadas a Random.

Asociemos un procedimiento al control Edit1 para el evento OnKeyPress.

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);


Var
n,r,g,b:integer;
begin
if Key=#13 then
begin
13
try
n:=StrToInt(Edit1.Text);
inc(intentos);
if n<azar then
Label2.Caption:='Muy Bajo!'
else
if n=azar then
begin
Label2.Caption:='Acertó en '+IntToStr(intentos)+' intentos';
Edit1.ReadOnly:=true
end
else
Label2.Caption:='Muy Alto!';
r:=random(255);
g:=random(255);
b:=random(255);
Label3.Font.Color:=rgb(r,g,b);
Label3.Caption:='('+IntToStr(intentos)+')';
Edit1.SetFocus;
Edit1.SelStart:=0;
Edit1.SelLength:=Length(Edit1.Text)
except
on EConvertError do
ShowMessage('El número es muy grande')
end
end;
if not (key in ['0'..'9',#8]) then key:=#0
end;

Macro RGB

La macro RGB genera un color de acuerdo a los argumentos suministrados:

Sintaxis: RGB(CRojo,cVerde,cAzul);

cRojo: Especifica la intensidad del color Rojo


cVerde: Especifica la intensidad del color Verde
cAzul: Especifica la intensidad del color Azul.

La intensidad para cada argumento esta en el rango 0 a 255. Si las tres intensidades
son cero, el resultado es negó. Si las tres intensidades son 255 el resultado es blanco.

El Programa ejecutándose:

14
6) Salario Neto Semanal

Desarrollar una aplicación que calcule el salario neto semanal de un trabajador en


función del número de horas trabajadas y la tasa de impuestos.

i. Las primeras 35 horas se pagan a tarifa normal.


ii. Las horas que pasen de 35 se pagan a 1.5 veces la tarifa normal.
iii. Las tasas de impuestos son:
a) Los primeros Bs. 600.- son libres de impuestos
b) Los siguientes Bs. 400.- tienen un 25% de impuesto
c) Los restantes un 45% de impuesto.

Siga los siguientes pasos:

1. Crear una nueva aplicación.


2. En el formulario colocar 3 etiquetas, 3 cuadros de edición, 1 caja agrupadora y 2
controles BitBtn.
3. Modifique las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Salario neto semanal
Position poScreenCenter
Label1 Caption Tarifa
Label2 Caption Numero de Horas
Label3 Caption El Salario es:
Edit1 Text ‘’
Edit2 Text ‘’
Edit3 ReadOnly True
Text ‘’
GroupBox1 Caption Ingrese datos
BitBtn Kind bkIgnore
Caption &Calcular
Enabled False

BitBtn2 Kind bkClose

Caption $Salir
15
Aspecto de la interfaz de usuario:

Asociemos un procedimiento al control Edit1 para el evento OnKeyPress.

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);


begin
if key=#13 then Edit2.SetFocus;
if not (key in ['0'..'9',#8]) then key:=#0
end;

Copiar el mismo código para el evento OnKeyPress del control Edit2 añadiéndole una
instrucción para habilitar y enfocar el control BitBtn.

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);


begin
if key=#13 then
begin
BitBtn1.Enabled:=True;
BitBtn1.SetFocus
end;
if not (key in ['0'..'9',#8]) then key:=#0
end;

Asociemos un procedimiento al control BitBtn2 accionado por el evento OnClick. Este


procedimiento calculara el Sueldo Bruto de acuerdo al Número de horas trabajadas y a
continuación determinara el sueldo Neto que esta supeditado al monto obtenido en el
Sueldo Bruto.

procedure TForm1.BitBtn2Click(Sender: TObject);


var
nHoras,dif:integer;
difSb,sb1,sb2,sb,tarifa,sNeto:Real;
begin
try
tarifa:=StrToInt(Edit1.Text);
nHoras:=StrToInt(Edit2.Text);
16
if nHoras>35 then
begin
dif:=nHoras-35;
sb1:=35*tarifa;
sb2:=dif*tarifa*1.5;
sb:=sb1+sb2
end
else
sb:=nHoras*tarifa;
if sb>600 then
begin
difSb:=sb-600;
if difSb>400 then
sNeto:=400*0.75+(difSb-400)*0.55+600
else
sNeto:=difSb*0.75+600
end
else
sNeto:=sb;
Edit3.Text:=FloatToStr(sNeto);
Edit1.SetFocus;
Edit1.SelStart:=0;
Edit1.SelLength:=Length(Edit1.Text)
except
on EConvertError do ShowMessage('Uno de los números es muy grande')
end

7) Ventana de identificación

Desarrollar una ventana de seguridad que solicite el ingreso del Nombre de Usuario
así como su Clave. La aplicación dará tres oportunidades como máximo para el
acceso al sistema, en caso contrario mostrará un mensaje. Asimismo el usuario
tendrá un tiempo limitado para el acceso al mismo,

Siga los siguientes pasos:


1. Crear una nueva aplicación
2. Colocar en el formulario los siguientes componentes: 4 etiquetas, 2 cuadros
de edición, 2 botones, 1 control Image y control Timer.
3. Modificar las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Identifíquese para ingresar a la Aplicación
Position poScreenCenter
Tag 1

17
BorderIcons biMaximize=false/biMinimize=false
BorderStyle bsSingle
Icon D:\Imagenes\Acceso.bmp
Label1 Caption Digite Nombre y clave de acceso
Label2 Caption &Usuario
Label3 Caption &Clave
Label4 Caption ‘’
Edit1 Text ‘’
Hint Digite su nombre
ShowHint True
Edit2 Text ‘’
Hint Digite su contraseña
ShowHint True
MaxLength 6
PasswordCha º
r
Button1 Caption &Aceptar
Enabled False
Button2 Caption Ca&ncelar
Timer Enabled True
Interval 1000
Tag 30
Image Picture D:\Imagenes\Acceso.bmp
Stretch True

Para el formulario, la propiedad Tag contabilizara el número de oportunidades que lleva


el usuario. Fíjese que BorderStyle ha tomado la constante bsSingle para evitar
modificar la dimensión de la ficha usando el mouse.
Para el temporizador, la propiedad Tag indicara el tiempo en segundo que dispone el
usuario para acceder al sistema. Asimismo, se establece Enabled en True para poder
reconocer el evento OnTimer y la propiedad interval se fija en 1000 milisegundos que
es la frecuencia con la que se disparará el evento OnTimer.
Aspecto de la interfaz de usuario:

18
En el control Edit1 y para el evento OnKeyPress, se enviara el enfoque al cuadro de
edición Edit2. Digite el siguiente código.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then Edit2.SetFocus
end;

El control Button1 solo se habiliara al ingresar información en las dos cajas de edición.
Si se borra la información de uno de estos cuadros el botón se volverá a inhabilitar.
Para revisar el contenido usemos la función Lentgh que retorna el total de caracteres
de una cadena.

procedure TForm1.Edit1Change(Sender: TObject);


begin
if (Length(Edit1.Text)>0 )and (Length(Edit2.Text)>0 )then
Button1.Enabled:=true
else
Button1.Enabled:=false
end;

Copie el mismo código para el evento OnChange del control Edit2.

procedure TForm1.Edit2Change(Sender: TObject);


begin
if (Length(Edit1.Text)>0) and (Length(Edit2.Text)>0) then
Button1.Enabled:=true
else
Button1.Enabled:=false
end;

Asociemos un procedimiento al control Button1 accionado por el evento OnClick. Aquí


se averiguará si el nombre y la clave proporcionada son correctas presentándole una
ventana de bienvenida si así fuera, en caso contrario limpiara los Cuadros de Edición
dándole una nueva oportunidad y permitiéndole un nuevo ingreso. Si fallara por tercera
vez se cerrara el sistema.

procedure TForm1.Button1Click(Sender: TObject);


begin
if ((LowerCase(Edit1.Text)='victor') and (LowerCase(Edit2.Text)='delphi')) then
begin
// si los datos son correctos
Timer1.Enabled:=false;
MessageDlg('Bienvenido al Sistema',mtInformation,
[mbOk], 1);
// aqui puede mostrar otra ventana con el metodo Show
Close
end
else if Form1.Tag<3 then
19
ShowMessage('Contraseña incorrecta');
if Form1.Tag>=3 then
begin
Timer1.Enabled:=false;
Label4.Caption:='';
// todas las oportunidades se han agotado
MessageDlg('Usuario no Autorizado',mtWarning,
[MbOk], 1);
Close
end
else
begin
// Si el total de oportunidades no es 3 se le brinda una nueva
Form1.Tag:=Form1.Tag+1;
Edit1.SelStart:=0;
Edit1.SelLength:=Length(Edit1.Text);
Edit2.Clear;
Edit1.SetFocus
end
end;

En el evento OnTimer reduciremos el numero de segundos del que dispone el usuario


enviándole un mensaje de alerta en una etiqueta. Si el tiempo ha expirado se mostrará
una ventana y a continuación se cerrará la aplicación.

procedure TForm1.Timer1Timer(Sender: TObject);


begin
Label4.Caption:='Le queda '+IntToStr(Timer1.Tag)+' segundo(s)';
Timer1.Tag:=Timer1.Tag-1;
if Timer1.Tag=0 then
begin
Timer1.Enabled:=false;
Label4.Caption:='';
Application.MessageBox('Se cerrará el sistema',
'Tiempo Agotado',MB_OK);
Close
end
end;

Programa ejecutándose:

20
8) Ecuación de Segundo Grado

La ecuación cuadrática tiene tres casos posibles respecto a sus raíces, dependiendo
del valor del discriminante d, donde:

Si d > 0, la ecuación tiene dos raíces reales:

r1 = )/(2a) y r2 = )/(2a)

Si d = 0, la ecuación tiene una raíz real:

r = - b/(2a)

Si d < 0, la ecuación tiene dos raíces complejas:

r1 = )/(2a) y r2 = )/(2a)

Desarrollar una aplicación que lea los valores de los coeficientes a , b y c de la


ecuación de segundo grado, y a continuación, encuentre las raíces de la ecuación
cuadrática.

Siga los siguientes pasos:


1. Crear una nueva aplicación con formulario
2. En el formulario colocar 5 etiquetas, 3 cuadros de edición, 2 controles BitBtn y
una caja agrupadora
3. Modificar las propiedades de los componentes:

Control Propiedad Valor


21
Form1 Caption Ecuación de segundo grado
Label1 Caption x2 +
Label2 Caption x+
Label3 Caption =0
Label4 Caption ‘’
Label5 Caption ‘’
Edit1 Text ‘’
Edit2 Text ‘’
Edit3 Text ‘’
GroupBox1 Caption Raices
BitBtn1 Kind bkIgnore
Enabled False
Caption &Calcular
BitBtn2 Kind bkClose
Caption &Salir

Aspecto de la interfaz de usuario:

El carácter ² se obtiene usando la tabla de códigos ASCII mediante la siguiente


combinación:

Alt + 253 = ²

Para el control Edit1 en el evento OnKeyPress, digitar el siguiente código:


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then Edit2.SetFocus;
if not (key in ['0'..'9','-',#8]) then key:=#0
end;
El mismo código para el control Edit2
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

22
begin
if key=#13 then Edit3.SetFocus;
if not (key in ['0'..'9','-',#8]) then key:=#0
end;
Copie el mismo código para el evento OnKeyPress del control Edit3 añadiéndole una
instrucción para habilitar y enfocar el control BitBtn1.
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then BitBtn1.SetFocus;
if not (key in ['0'..'9','-',#8]) then key:=#0
end;
En el control BitBtn1 se determinaran las raíces usando el criterio del determinante. Si
d > 0 las variables r1 y r2 almacenaran las raíces de la ecuación. Si d = 0 la variable r1
almacenara la única raíz de la ecuación:
procedure TForm1.BitBtn1Click(Sender: TObject);
var a,b,c,d,r1,r2:real;
begin
try
a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
c:=StrToFloat(Edit3.Text);
d:=b*b-4*a*c;
if d>0 then
begin
r1:=(-b+sqrt(d))/(2*a);
r2:=(-b-sqrt(d))/(2*a);
Label4.Caption:='r1 = '+FloatToStr(r1);
Label5.Caption:='r2 = '+FloatToStr(r2);
GroupBox1.Caption:='Raíces Reales y Distintas'
end
else
if d=0 then
begin
r1:=(-b)/(2*a);
Label4.Caption:='r= '+FloatToStr(r1);
Label5.Caption:='';
GroupBox1.Caption:='Raíces Reales e Iguales'
end
else
begin
r1:=(-b)/(2*a);
r2:=sqrt(-d)/(2*a);
Label4.Caption:='r1= '+FloatToStr(r1)+' + i* '+FloatToStr(r2);
Label5.Caption:='r2= '+FloatToStr(r1)+' - i* '+FloatToStr(r2);
GroupBox1.Caption:='Raíces Complejas'

23
end;
Edit1.SetFocus;
Edit1.SelStart:=0;
Edit1.SelLength:=Length(Edit1.Text)
except
on EConvertError do ShowMessage('Uno de los números es muy grande');
on EDivByZero do ShowMessage('No se puede dividir un número por cero');
on EInvalidOp do ShowMessage('Operacion Inválida')
end
end;
Observe que si d < 0 la variable r 1 contendrá la parte real (Re) y r 2 almacenara el valor
absoluto de la parte imaginaria (Im) de las raíces complejas. Note también que para
cada caso el título de la Caja Agrupadora cambia.
Finalmente, se envía el enfoque al control Edit1 y se selecciona el último valor para a
en esperas de un nuevo ingreso.
Programa ejecutándose:

24
9) Reservaciones de Vuelos
Elaborar una aplicación que permita registrar las reservas de vuelo para pasajeros a
nivel nacional. Se ingresa el código, apellidos y nombres del pasajero titular. Se debe
elegir el número de cupos (número de asientos) que puede ser desde a1 hasta 10, el
tipo de reserva, la línea aérea (líneas nacionales) así como escoger una de las dos
únicas rutas de vuelo propuestas y posteriormente la clase.
Luego el usuario podrá calcular la tarifa individual a partir de los importes por ruta y por
clase. Finalmente al hacer clic en: “Calcular Total a Pagar” se mostrará el valor real de
la reserva.
Observaciones:

 La ruta Cochabamba-La Paz tiene un valor de S/. 120 mientras que la segunda
S/.150.
 El importe de clase se calcula a partir del importe por ruta y es 5% de este importe si
es primera clase o 10% si es segunda.
 El valor de la tarifa es la suma del importe por ruta mas el importe por clase.
 El total bruto es igual al valor de tarifa por el número de cupos.
 El descuento será 5% del total bruto si la casilla de verificación esta activada.
Siga los siguientes pasos:
1. Crear una nueva aplicación con formulario.
2. Colocar los siguientes componentes: 10 etiquetas, 8 cuadros de edición, 1 casilla
de verificación, 4 botones, 2 controles BitBtn, 6 botones de Radio, 2 cuadros
combinados y 5 cajas agruapadoras.
3. Modifique las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Reservaciones de vuelos nacionales
Label1 Caption Código de reserva
Label2 Caption Apellidos y Nombres del titular
Label3 Caption #Cupos
25
Label4 Caption Línea Aérea
Label5 Caption Importe por Ruta
Label6 Caption Importe por Clase
Label7 Caption Valor de Tarifa
Label8 Caption Total Bruto
Label9 Caption Descuento
Label10 Caption Total a Pagar
GroupBox1 Caption Ingrese Números
Edit1 Text ‘’
Edit2 Text ‘’
Edit3 Text ‘’
ReadOnly True
Edit4 Text ‘’
ReadOnly True
Edit5 Text ‘’
ReadOnly True
Edit6 Text ‘’
ReadOnly True
Edit7 Text ‘’
ReadOnly True
Edit8 Text ‘’
ReadOnly True
ComboBox1 Text 1
ComboBox2 Text AeroContinente
Items TANS
AeroContinente
GroupBox1 Caption Tipo de Reserva
RadioButton1 Caption En espera
Checked True
RadioButton2 Caption Confirmada
GroupBox2 Caption Ruta
RadioButton3 Caption Cochabamba-La Paz
RadioButton4 Caption Cochabamba-Santa Cruz
Checked True
GropuBox3 Caption Clase
RadioButton5 Caption Primera
Checked True
RadioButton6 Caption Segunda
GroupBox4 Caption Valores Individuales
GroupBox5 Caption Valores Totales
Button1 Caption Calc. Importe por ruta
Button2 Caption Calc. Importe por Clase
Enabled False
Button3 Caption Calc. Importe por tarifa
Enabled False
Button4 Caption Calcular total a Pagar
Enabled False
26
BitBtn1 Caption %Nueva Reserva
Enabled False
BitBtn2 Kind D:\Imagenes\New.bmp
Caption bkClose
CheckBox1 Caption Aplicar 5% de Descuento

Diseñada la interfaz de usuario, asociemos un procedimiento al formulario accionado


por el evento OnCreate. Cuando el usuario inicie la aplicación, el cuadro combinado
almacenará 10 elementos.
procedure TForm1.FormCreate(Sender: TObject);
var i:byte;
begin
for i:=1 to 10 do
ComboBox1.Items.Add(IntToStr(i))
end;
Haga doble clic en el control Button1. Aquí se establecerá el importe por ruta y se
enviará el enfoque al control Button2.
procedure TForm1.Button1Click(Sender: TObject);
begin
if radiobutton3.Checked then
ruta:=120
else if radiobutton4.Checked then
ruta:=150;
Edit3.Text:=IntToStr(ruta);
button2.Enabled:=true;
button2.SetFocus
end;

Haga doble clic en el Button2. En esta parte se establecerá el importe por clase que se
calculará en función del porcentaje acordado. En seguida se enviará el enfoque al
Button3.
procedure TForm1.Button2Click(Sender: TObject);
var porc:real;
begin
if radiobutton5.Checked then
porc:=0.05
else if radiobutton6.Checked then
porc:=0.1;
Edit4.Text:=FloatToStr(porc*StrToInt(Edit3.Text));
button3.Enabled:=true;
button3.SetFocus
end;

Haga doble clic en el Button3. Aquí calcularemos el Valor de Tarifa y el Total Bruto que
dependerá directamente del Número de Cupos. En el controlador de evento que se
abre en el Editor de código, digite el siguiente segmento:
27
procedure TForm1.Button3Click(Sender: TObject);
begin
Edit5.Text:=FloatToStr(StrToFloat(Edit3.Text)+StrToFloat(Edit4.Text));
Edit6.Text:=FloatToStr(StrToFloat(Edit5.Text)*StrToFloat(ComboBox1.Text));
Button4.Enabled:=true;
CheckBox1.SetFocus
end;

Haga doble clic en el control Button4. Aquí finalmente se obtendrá el Descuento y el


Total a Pagar. Para esto debemos averiguar si la Casilla de verificación se encuentra
activada (True). Digite el siguiente procedimiento en el Editor de Código:

procedure TForm1.Button4Click(Sender: TObject);


var descu:real;
begin
if CheckBox1.Checked then
descu:=0.05
else
descu:=0.0;
Edit7.Text:=FloatToStr(descu*StrToFloat(Edit6.Text));
Edit8.Text:=FloatToStr(StrToFloat(Edit6.Text)-StrToFloat(Edit7.Text));
BitBtn1.Enabled:=true;
BitBtn1.SetFocus
end;
Haga doble clic en el control BitBtn1. En esta sección limpiaremos los Cuadros de
Edición, fijaremos valores predeterminados en los cuadros combinados y enviaremos el
enfoque al control Edit1. En el controlador de evento que se abre en el Editor de
Código, digite el siguiente segmento:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
Edit5.Clear;
Edit6.Clear;
Edit7.Clear;
Edit8.Clear;
ComboBox1.Text:='1';
ComboBox2.Text:='AeroContinente';
CheckBox1.Checked:=False;
Button2.Enabled:=False;
Button3.Enabled:=False;
Button4.Enabled:=False;
BitBtn1.Enabled:=False;
Edit1.SetFocus
28
end;
Al poner a prueba la aplicación la salida debe ser similar al modelo siguiente:

10) Conversión de grados Centígrados a Fahrenheit y viceversa


Desarrollar una aplicación que convierta grados centígrados a Fahrenheit y viceversa.

Siga estos pasos para diseñar la interfaz:


1. Crear una nueva aplicación con formulario:
2. Seguidamente, añada un control Image, dos controles Labe, dos controles
Edit, y un control BitBtn en el formulario:

3. Seleccione el control Image del formulario y en el Inspector de Objetos, haga


doble clic en la columna derecha de la propiedad Picture. Delphi visualiza el
cuadro de dialogo Load Picture
4. Sitúese en la carpeta Imágenes del CD y seleccione la Imagen Einstein.jpg.
5. Haga doble clic en el botón Abrir. Delphi regresa al cuadro de dialogo Picture
Editor que muestra la imagen seleccionada en el cuadro de dialogo Load
Picture.

29
6. Haga doble clic en el botón OK. En el control Image1 aparece la imagen
seleccionada.
Modifique las propiedades de los controles:

Control Propiedad Valor


Form1 Caption Conversión de Temperaturas
Image1 Height 257
Left 0
Top 0
Width 465
Label1 Caption Grados &centígrados
Label2 Caption Grados &fahrenheit
Edt1 Text ‘‘
Edit2 Text ‘‘
BitBtn1 Kind bkAbort
Caption &Salir

Luego de establecer las propiedades de los controles, la interfaz de usuario debe tener
el siguiente aspecto.

30
Diseñada la interfaz de usuario, el paso siguiente consiste en unir código a los controles
del formulario. El código debe realizarse de manera tal que cuando ingresemos una
temperatura (grados centígrados) en el control Edit1 y pulsemos Enter, el control Edit2
debe mostrar de manera automática el valor resultante de la conversión en grados
Fahrenheit: De igual modo, si ingresamos una temperatura (grados fahrenheit) en el
control Edit2 y pulsamos Enter, el control Edit1 debe mostrar el valor resultante de la
conversión en grados centígrados.
Para la conversión de una temperatura a otra utilizaremos las formulas:

(F – 32)

Vinculemos un procedimiento común a los controles Edit1 y Edit2:


1) Elija el control Edit1
2) En el Object Inspector haga doble clic en el evento OnKeyPress
3) Digite el siguiente código:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);


var GradosCentigrados, GradosFahrenheit : double;
begin
if Key=#13 then
begin
GradosCentigrados:=StrToFloat(Edit1.text);
GradosFahrenheit:=GradosCentigrados*9/5 + 32;
Edit2.text:=FloatToStr(GradosFahrenheit);
end;
if not(key in['0'..'9',#8]) then key:=#0
end;

4) Elija el control Edit2.


5) En la ficha events del Object Inspector y, en el evento OnKeyPress, seleccione
Edit1KeyPress.

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);


var GradosCentigrados, GradosFahrenheit : double;
begin
if Key=#13 then
begin
GradosFahrenheit:=StrToFloat(Edit2.text);
GradosCentigrados:=(GradosFahrenheit - 32)*5/9;
Edit1.text:=FloatToStr(GradosCentigrados);
end;
if not(key in['0'..'9',#8]) then key:=#0
end;
Programa ejecutándose:
31
32

También podría gustarte