Documentos de Académico
Documentos de Profesional
Documentos de Cultura
8
ESTRUCTURAS REPETITIVAS – MISCELANEA
1) Generador de temperaturas
Simular una proyección del estado del tiempo (temperatura) para los próximos “D” días
generando temperaturas mínimas y máximas aleatorias mostrando como temperatura
del día el promedio de la mínima y la máxima. Estadísticamente el rango de las
temperaturas esta entre 10 y 36 grados; además asumir que las temperaturas no
siempre son enteras. El programa deberá mostrar el siguiente encabezado, acompañada
de sus respectivos valores:
Día T. Mínima T. Máxima T. Promedio
Siga estos pasos:
1. Crear una nueva aplicación con formulario
2. En el formulario colocar los siguientes componentes: 1 Etiqueta, 2 Cuadro de
Edición, 2 Botones de figura y 1 Control StringGrid.
3. Modificar las propiedades de los componentes:
1
Declaremos 5 variables globales reales en la sección
var
a, b, c, tmin, tmax,:real;
implementation
{$R *.DFM}
procedure LimpiarRejilla(Rejilla:TStringGrid);
var i,j:byte;
begin
for i:=1 to Rejilla.RowCount do
for j:=1 to Rejilla.ColCount do
Rejilla.Cells[j,i]:=''
end;
Haga doble clic en botón de figura BitBtn1 ( se abre el controlador de evento OnClick)
Este evento obtendrá dos valores en el rango establecido determinando a continuación
la temperatura máxima y mínima almacenándola en tmax y tmin respectivamente.
Programa ejecutándose:
2) Divisores y Dígitos
Elaborar un programa para obtener los divisores de un numero, cifra mayor, cifra menor
y suma de cifras.
Ejemplo:
Número: 714
5
ListBox2.Clear;
n:=StrToInt(edit1.Text);
// Cálculo de primos
for i:=1 to n-1 do
if n mod i=0 then
begin
r:=0;
for j:=2 to i-1 do
if (i mod j=0) then
r:=1;
if r=0 then ListBox1.Items.Add(inttostr(i))
end;
num:=n;
// Cálculo de divisores
for i:=1 to n do
if n mod i=0 then
ListBox2.Items.Add(inttostr(i));
// Cálculo de cifra menor y mayor y suma de cifras
min:=9;
max:=0;
suma:=0;
repeat
dig:=num mod 10;
suma:=suma+dig;
if dig<=min then
min:=dig;
if dig>=max then
max:=dig;
num:=num div 10
until num=0;
edit2.text:=IntToStr(max);
edit3.text:=IntToStr(min);
edit4.text:=IntToStr(suma)
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If key=#13 then button1.SetFocus;
If not (key in ['0'..'9',#8]) Then key:=#0
end;
El programa ejecutándose:
6
3) Lotería
Desarrollar una aplicación para simular una lotería. Se deben escoger 6 números
distintos de 1 a max (Ejemplo: max=15 ). Luego el programa generara los números del
boleto ganador. Una salida típica podría ser:
7
Fijemos las constantes total, que indica la cantidad de números a adivinar y max que
indica el mayor número que se puede escoger. Si desea ampliar el rango bastara con
modificar los valores en la sección.
const
Total=6;
Max=15;
type
TLoteria= array[1..total] of byte;
Declaremos dos array del tipo TLoteria, dos conjuntos y contador como variables
globales en la sección
var
k:byte;
Num, Lot: TLotería;
Conj1, Conj2: Set of Byte;
implementation
{$R *.DFM}
procedure LimpiarRejilla(Rejilla:TStringGrid);
var i,j:byte;
begin
8
for i:=1 to Rejilla.RowCount do
for j:=1 to Rejilla.ColCount do
Rejilla.Cells[j,i]:=''
end;
Haga doble clic en el control ButBtn2. En esta sección se generara el boleto ganador y
se enviara un mensaje indicando el total de números adivinados. En el controlador de
evento que se abre en el Editor de Código, digite las siguientes instrucciones:
Programa ejecutándose:
4) Números Perfectos
11
Desarrollar una aplicación que busque números perfectos en el rango de 1 hasta un
número dado. Siga los siguientes pasos
Desarrollar un programa que convierta una serie de números en base diez a números de
base 2 al 20.
Siga los siguientes pasos:
1. Crear una nueva aplicación con formulario.
2. Guardar la ficha con el nombre uConvBase.pas y la aplicación con el nombre
pConvBase.dpr
3. Colocar un control StringGrid en el formulario. Este control se encuentra en la
pestaña Additional de la Paleta de Componentes.
4. En el formulario, ajuste el tamaño del control StringGrid.
5. Con el control StringGrid seleccionado, presiones la tecla F11 para visualizar el
Inspector de Objetos.
6. Asigne las siguientes propiedades al Control StringGrid.
Propiedad Valor
Name sgdConv
ColCount 30
FixedCols 1
14
FixedRow 1
s
RowCount 25
ScrollBars ssBoth
Seguidamente, añada un control Label y tres controles Button en el formulario. Luego, asígneles las
siguientes propiedades:
15
Observe que la propiedad Position en poDesktopCenter ubica el formulario en el centro
del Escritorio. Diseñada la interfaz de usuario, asociemos un procedimiento al formulario.
Cuando el usuario inicie el programa, este procedimiento se ejecutará automáticamente ,
ajustara las anchuras de las columnas del control StrinGrid y seleccionará la celda 0,1:
procedure TForm1.FormCreate(Sender: TObject);
var K:Integer;
begin
//Ajusta las anchuras de las columnas en el control StringGrid
sgdConv.ColWidths[0]:=30;
For k:=1 To 29 Do
sgdConv.ColWidths[k]:=80;
xfil:=0;
xcol:=1
end;
Asociemos un procedimiento al cuadro de edición Edit1 accionado por el suceso
OnKeyPress. Este procedimiento solo debe permitir el ingreso de los dígitos 0,….,9 en
el cuadro Edit1 y, cuando el usuario pulse Enter, el número introducido en la caja Edit1
debe aparecer en la celda activa. Además, debe seleccionar la celda contigua a la
derecha de la celda activa y limpiar el cuadro de edición Edit1.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If (Key=#13) and (Edit1.Text<>'') Then
begin
//Muestra en la celda activa el número ingresado en el control Edit1
sgdConv.Cells[xcol,xfil]:=Edit1.Text;
xcol:=sgdConv.Col+1;
//Selecciona la celda contigua a la derecha de la celda activa
sgdConv.Col:=sgdConv.Col+1;
sgdConv.Row:=sgdConv.Row;
//Limpia el cuadro de edición Edit1
Edit1.Clear
end;
//Sólo permite el ingreso de los dígitos 0,..,9 en la caja Edit1
If not (Key in ['0'..'9',#8]) Then
begin
Beep;
Key:=#0
end;
If xcol>1 Then
button1.Enabled:=true
end;
Asociemos un procedimiento al botón Calcular accionado por el suceso OnClick.
Cuando el usuario haga clic en el botón calcular, este procedimiento debe convertir los
números ingresados en las celdas del control StringGrid a números de base 2 al 20.
procedure TForm1.Button1Click(Sender: TObject);
var
16
i,base,n:integer;
NuevoSist:String;
begin
i:=1;
Repeat
For base:=2 To 20 Do
begin
If i=1 Then
sgdConv.Cells[0,base-1]:=IntToStr(base);
n:=StrToInt(sgdConv.Cells[i,0]);
NuevoSist:='';
Repeat
If n Mod base>=10 Then
NuevoSist:=chr((n Mod base)+55)+NuevoSist
Else
NuevoSist:=chr((n Mod base)+48)+NuevoSist;
n:=n Div base
Until n<1;
sgdConv.Cells[i,base-1]:=NuevoSist
end;
i:=i+1
Until (i>=xcol)
end;
Asociemos un procedimiento al botón Repetir accionado por el suceso OnClick.
Cuando el usuario haga clic en el botón Repetir, este procedimiento debe seleccionar
todas las celdas del control StringGrid y borrar los datos de estas celdas.
procedure TForm1.Button2Click(Sender: TObject);
begin
with sgdConv Do
begin
//Limpia todas las celdas de la rejilla
LimpiarRejilla(sgdConv);
xfil:=0;
xcol:=1;
row:=0;col:=1;//seleccion de la celda 0,1
//Enfoca el cuadro de edición Edit1
Edit1.SetFocus
end;
Button1.Enabled:=false
end;
//Limpia las celdas del control StringGrid1.
procedure LimpiarRejilla(Rejilla:TStringGrid);
var
i,j:integer;
begin
for i:=0 to Rejilla.RowCount do
for j:=0 to Rejilla.ColCount do
17
Rejilla.Cells[j,i]:=''
end;
Luego de introducir todos los números, haga clic en el botón Calcular:
18