Documentos de Académico
Documentos de Profesional
Documentos de Cultura
6
ESTRUCTURAS REPETITIVAS – While
La sentencia WHILE
La sintaxis de una sentencia WHILE es:
while expresión do
sentencias
En esta estructura la condición es evaluada antes de la primera ejecución de la
secuencia de sentencias. De este modo, si la condición es falsa la secuencia de
sentencias nunca es ejecutada.
La ejecución del bucle continua tantas veces como expresión retorne True. La expresión
se evalúa antes de cada iteración.
Inicialización
Cualquier variable que aparezca en la condición de WHILE debe haber recibido un valor
inicial antes de entrar en el ciclo, porque la variable ya debe tener un valor la primera vez
que se pruebe la condición del ciclo.
Break termina la instrucción en la cual esta ocurre, esto es, causa que el control
de flujo salga de un lazo for, while o repeat y continúe en la siguiente instrucción,
luego del lazo. Una llamada a Break debe estar contenida en una sentencia for,
while, o repeat o el compilador reportara un error.
Continúe dirige el flujo a la siguiente iteración de la secuencia. El compilador
reporta un error si una llamada a Continúe se hace fuera de un lazo.
Exit sale del procedimiento actual. Si el procedimiento actual es el programa
principal, Exit causa que el programa termine.
Halt produce una terminación anormal de un programa y retorna al sistema
operativo.
1
¾ - 7/8 + 15/16 – 31/32 + 63/64 – 127/128
Siga estos pasos:
1. Crear una nueva aplicación con formulario.
2. En el formulario colocar los siguientes componentes: 3 etiquetas, 3 cuadros de
edición y 2 controles BitBtn.
3. Modificar las propiedades de los componentes:
2
If key=#13 Then BitBtn1.SetFocus;
If not (key in ['0'..'9',#8]) Then key:=#0
end;
Veamos otro procedimiento vinculado al Cuadro de Edición y accionado por el evento
OnChange. El botón Calcular recién se habilitara al ingresa un valor para N.
procedure TForm1.Edit1Change(Sender: TObject);
begin
if length(edit1.Text)>0 then
BitBtn1.Enabled:=true
else
BitBtn1.Enabled:=false
end;
Asociemos un procedimiento al control BitBtn1 accionado por el evento OnClick. Este
procedimiento calculara por separado la Suma de Términos Pares y la Suma de
Términos Impares guardando los valores en las variables sTPares y StImpares
respectivamente.
procedure TForm1.BitBtn1Click(Sender: TObject);
var n:Word;
num,den,sTPares,sTImpares:Real;
i:byte;
begin
n:=StrToInt(Edit1.Text);
i:=2;sTPares:=0;sTImpares:=0;
while (n>=exp(i*ln(2))) do
begin
den:=exp(i*ln(2));
num:=den-1;
If i mod 2 = 0 Then
sTPares:=sTPares+num/den
Else
sTImpares:=sTImpares-num/den;
inc(i)
end;
Edit2.Text:=FloatToStr(sTPares);
Edit3.Text:=FloatToStr(sTImpares)
end;
Programa ejecutándose:
3
2) Primos Gemelos
Si a y b son primos y b = a + 2, la pareja (a, b) se llama Primos Gemelos. Por ejemplo
3 y 5 son primos gemelos. Desarrolle una aplicación en la que el usuario decida la
cantidad de pares de primos gemelos a listar.
Siga los siguientes pasos:
1. Crear una nueva aplicación con formulario.
2. En el formulario coloque los siguientes componentes: 1 etiqueta, 1 Cuadro de
edición, 1 control BitBtn y 1 control StrigGrid
3. Modifique las propiedades de los componentes:
4
Diseñada la interfaz de usuario, asociemos un procedimiento al formulario accionado por
el evento OnCreate.
procedure TForm1.FormCreate(Sender: TObject);
var f,c:byte;
begin
Form1.WindowState:=WsMaximized;
Rejilla.ColWidths[0]:=25;
for f:=1 to Rejilla.RowCount do Rejilla.Cells[0,f]:=IntToStr(f);
for c:=1 to Rejilla.ColCount do Rejilla.Cells[c,0]:=Chr(64+c)
end;
Asociemos un procedimiento al control Edit1 para el evento OnKeyPress.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
ant,sig,contador,j,k:integer;
total:byte;
begin
if key=#13 then
begin
try
LimpiarRejilla(Rejilla);
total:=StrToInt(Edit1.Text);
k:=2;contador:=1;
ant:=2;
while(contador<=total) do
begin
j:=2;
while(k mod j <>0) do
inc(j);
if (k=j)then
begin
5
sig:=k;
if (sig=ant+2)then
begin
Rejilla.Cells[2,contador]:=IntToStr(ant);
Rejilla.Cells[3,contador]:=IntToStr(sig);
inc(contador)
end;
ant:=sig
end;
inc(k)
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;
Coloquemos el código de LimpiarRejilla en la sección Implementation:
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;
Programa ejecutándose:
6
3) Multiplicación Mediante Sumas
Desarrollemos un programa que multiplique dos números enteros sin utilizar el operador
“ * “. Resolveremos este problema mediante sumas sucesivas. Por Ejemplo, para hallar
el producto de 4 x 6, el programa debe realizar las siguientes sumas:
0 + 4 = 4
4 + 4 = 8
8 + 4 = 12
12 + 4 = 16
16 + 4 = 20
20 + 4 = 24
Obsérvese que las sumas se realizan tantas veces como indica el segundo factor, de
modo que el producto es la ultima suma.
7
Edit1 Text ‘‘
Edit2 Text ‘‘
Edit3 Text ‘‘
BitBtn1 Kind bkRetry
Caption &Calcular
BitBtn2 Caption &Salir
Kind bkAbort
Asociemos un procedimiento común para los controles Eit1 y Edit2. Este procedimiento
debe impedir el ingreso de caracteres no numéricos en los controles Edit1 y Edit2.
Además, si se presiona la tecla Enter estando el cursor en el control Edit1, el enfoque
debe pasar al control Edit2. Si el cursor está en el control Edit2 y se pulsa Enter, el
enfoque debe pasar al control BitBtn1.
Después de digitar el código que antecede en el evento OnKeyPress del control Edit1,
siga los siguientes pasos:
8
1. En el formulario seleccione el control Edit2.
2. Sitúese en la ficha Events del Inspector de Objetos
3. Haga clic en la flecha de bajada que aparece en la columna derecha del evento
que se va a compartir (OnKeyPress) y seleccione el evento de la lista desplegable
(Edit1KeyPress)
9
Programa ejecutándose:
10
BitBtn2 Caption &Salir
Kind bkAbort
Luego de asignar propiedades a cada uno de los controles, la interfaz debe tener el
siguiente aspecto:
Asociemos un procedimiento común a los controles Edit1 y Edit2 que impida el ingreso
de caracteres no numéricos en estos controles. Para ello, siga los dictados en el
programa anterior.
Asociemos un procedimiento al control BitBtn1. Cuando el usuario haga clic en este
botón, el procedimiento debe calcular, mediante restas, la división de los números.
11
//Error de conversión
on EConvertError do
ShowMessage('Uno de los valores es demasiado grande!.');
end
end;
Programa ejecutándose:
12
Haga doble clic en el control BitBtn. En el controlador de evento que se abre en el
Editor de Código, digite el siguiente código:
13
if length(Edit1.Text)=0 then
BitBtn1.Enabled:=False
else
BitBtn1.Enabled:=True;
end;
En Delphi la función logaritmo neperiano se expresa como Ln; por eso el logaritmo en
base diez de un número N lo expresamos como:
Ln(n)/Ln(10)
Programa ejecutándose:
14