Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
b) Selección Doble:
If expresión then
sentencias1
else
sentencias2
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.
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.
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:
Programa ejecutándose:
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:
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
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;
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
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:
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:
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:
12
Declaremos dos variables enteras globales en la sección
Var
Azar, intentos: integer;
Funcion Random
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.
Macro RGB
Sintaxis: RGB(CRojo,cVerde,cAzul);
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
Caption $Salir
15
Aspecto de la interfaz de usuario:
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.
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,
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
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.
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:
r1 = )/(2a) y r2 = )/(2a)
r = - b/(2a)
r1 = )/(2a) y r2 = )/(2a)
Alt + 253 = ²
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:
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;
29
6. Haga doble clic en el botón OK. En el control Image1 aparece la imagen
seleccionada.
Modifique las propiedades de los controles:
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)