Está en la página 1de 13

Capt.

5
ESTRUCTURAS REPETITIVAS – Repeat
LAZOS DE CONTROL
Los lazos nos permiten ejecutar una secuencia de instrucciones repetidamente usando
una condición de control o variable para determinar cuando debe detenerse la
ejecución. Object Pascal tiene tres tipos de lazos de control: Las Sentencias repeat,
while y for,

La Sentencia REPEAT
El formato de la sentencia Repeat es:
repeat
sentencia1;
……
sentencian;
until expresión;
La primera vez se ejecuta todo el cuerpo del ciclo. Luego se prueba la condición until. Si
la condición es falsa, se vuelve a ejecutar todo el ciclo y a probar la condición. Este
proceso se repite hasta que la condición resulta verdadera. La primera vez que la
condición es True, el flujo sale del ciclo. Al llegar en un programa a un ciclo repeat-until,
el cuerpo del ciclo se ejecutara al menos una vez, porque la condición de salida se
prueba ala final del ciclo.
El ultimo punto y coma de la palabra until es opcional.
La clausula begin después del repeat y end antes de until son innecesarias porque las
palabras reservadas repeat y until marcan el inicio y el final del cuerpo del ciclo.

Ciclos Anidados
Cuando un ciclo esta completamente contenido en el cuerpo del otro, se dice que los
ciclos están anidados.

1) Seno aproximado
Diseñe una aplicación que calcule el valor de la siguiente serie:

1
Hasta que el termino enésimo cumpla con

Siga los siguientes pasos:

Control Propiedad Valor


Form1 Caption Serie del Seno
Position poScreenCenter
Label1 Caption Angulo en Sexagecimales
Label2 Caption Angulo en radianes
Label3 Caption Seno Aproximado
Edit1 Text ‘‘
Edit2 Text ‘‘
ReadOnly True
Edit2 Text ‘’
ReadOnly True
Edit3 Text ‘’
ReadOnly True
BitBtn1 Caption &Calcular
Kind bkRetry
BitBtn2 Caption &Salir
Kind bkClose

Aspecto de la interfaz de usuario:

Asociemos un procedimiento al control Edit1 para el evento OnKeyPress. Aquí


permitiremos solo el acceso solo de dígitos. Al pulsar Enter el enfoque se irá al botón de
figura BitBtn1.
1. En el formulario seleccione Edit1.
2. En el Evento OnKeyPress haga doble clic y digite el siguiente código;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin

2
If key=#13 Then BitBtn1.SetFocus;
If not (key in ['0'..'9',#8]) Then key:=#0
end;
Asociemos un procedimiento al control BitBtn1 accionado por el evento OnClick.
Aquí se convertirá previamente el ángulo a radianes, se calculara el K-ésimo término
añadiéndolo finalmente al acumulador S hasta que supere a la cota.
procedure TForm1.BitBtn1Click(Sender: TObject);
var
s,xSex,xRad,term:real;
k:integer;
begin
xSex:=StrToFloat(Edit1.Text);
xRad:=(xSex*Pi)/180;
s:=0;term:=xRad;k:=1;
Repeat
s:=s+term;
term:=(-1)*term*(xRad*xRad)/((k+2)*(k+1));
k:=k+1
Until (Abs(term)<1E-12);
Edit2.Text:=FloatToStr(xRad);
Edit3.Text:=FloatToStr(s)
end;

El Programa ejecutándose:

2) Raíz cuadrada aproximada

Un método para hallar es el siguiente:

3
Empezar con R0 = x/2 como aproximación, luego calcular las aproximaciones R1, R2,
….., como sigue:
Ri = ( Ri-1 + x/Ri-1)/2 donde i = 1, 2, 3, ….

Desarrolle una aplicación que muestre el término correspondiente de lla sucesión


generada para un número x entre 1 y 1000 de modo que esta termine cuando se cumpla
que:
|x – aproximación2| < 1 E -06

Siga estos pasos:


1. Crear una nueva aplicación con formulario
2. En el formulario colocar los siguientes componentes: 2 etiquetas, 1 cuadro de
edición, 1 control BitBtn y 1 Caja Agrupadora.
3. Modificar las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Raíz Cuadrada Aproximada
Label1 Caption Ingrese Numero
Label2 Caption R=?
Edit1 Text ‘‘
GroupBox1 Caption Valor Aproximado
BitBtn1 Kind bkClose
Caption &Salir

Declaremos el identificador cota en la sección de constantes.

Const
Cota = 1 E -02

Asociemos un procedimiento al control Edit1 para el evento OnKeyPress.

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


var

4
ant,dif,x,R:real;
begin
if key=#13 then
begin
try
x:=StrToFloat(Edit1.Text);
R:=x/2;
Repeat
ant:=R;
R:=(ant+x/ant)/2;
dif:=Abs(x-R*R)
Until dif<cota;
Label2.Caption:='R= '+FloatToStrF(R,ffFixed,10,12);
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;

Programa ejecutándose:

Manejo de Excepciones en Delphi


En Delphi una condición de error es indicada por excepciones. Una excepción es un
objeto que contiene información acerca del error ocurrido y donde sucedió. Esto quiere
decir que una excepción nos indica el porque sucedió el error y además cual recurso se
esta accesando cuando esto sucedió. Delphi tiene dos tipos de manejadores de
excepciones.

El primero es para liberar recursos y se puede representar así:


......
//Solicitud del recurso
5
try
// Código de uso del recurso
finally
// Código para liberar el recurso solicitado
end;

El segundo es para el manejo de errores, su representación es la siguiente:

….
Try
// Código de acceso al recurso
Except
// Código para manejar el recurso
on Tipo de excepción do begin
// Codigo para manejar este tipo de error
end;

….
on Tipo de excepción do begin
// En caso de que la excepción no sea soportada
raise;
end;
end.

Función FloatToStrF
Convierte un valor de punto flotante a una cadena, usando un formato especifico,
Precisión y Dígitos

Formato
FloatToStrF(Valor, formato, Precisión, Dígitos)

Donde: Valor: Es el valor a convertir


Precisión: Especifica la precisión del valor dado, de acuerdo a la
siguiente tabla:

Tipo Precisión
Single <= 7
Double =< 15
Extended <= 18

Los parámetros Dígitos y Formato juntos controlan como el valor formateado en una
cadena.
El tipo TFloatFormat define una lista enumerada de códigos formateados para las
funciones reales.

6
type
TFloatFormat= (ffGeneral, ffExponent, ffFixed, ffNumber, ffCurrency);

3) Exponencial por Sumatorias


El valor de ex se puede aproximar por la suma:

Hasta que n sea tal que ( = 10-12)

Diseñar una aplicación que tome un valor de x como entrada y calcule el valor
aproximado de ex con el error especificado.

Siga estos pasos:


1. Crear una aplicación con formulario
2. En el formulario colocar los siguientes componentes: 2 etiquetas, 1 cuadro de
edición, 1 control BitBtn y 1 Caja Agrupadora.
3. Modificar las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Exponencial por Sumatorias
Label1 Caption Ingrese x
Label2 Caption exp(x) = ?
Edit1 Text ‘‘
GroupBox1 Caption Valor Aproximado
BitBtn1 Kind bkClose
Caption &Salir

Aspecto de la interfaz de usuario:

7
Declaremos el identificador cota en la sección de constantes:
Const
Cota = 1 E -02

Asociemos un procedimiento al control Edit1 para el evento OnKeyPress


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
term,S,x:real;
j:byte;
begin
if key=#13 then
begin
try
x:=StrToFloat(Edit1.Text);
S:=1;j:=0;term:=1;
Repeat
j:=j+1;
term:=term*x/j;
S:=S+term;
Until abs(term)<1E-12;
Label2.Caption:='exp(x)= '+FloatToStrF(S,ffFixed,7,8);
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;
Programa ejecutándose:

4) Total de Dígitos de un Número Entero

8
Desarrollar un programa que determine el total de dígitos de un número entero:

Siga estos pasos:


1. Crear una aplicación con formulario.
2. En el formulario colocar los siguientes componentes: 1 etiqueta, 1 cuadro de
edición y 2 controles BitBtn.
3. Modificar las propiedades de los componentes, según la siguiente ilustración:

Asociemos un procedimiento al control Edit1 accionado por el evento OnKeyPress. Este


procedimiento solo debe permitir el ingreso de los dígitos 0, 1, … ,9 en el control Edit1.
Además, cuando el usuario pulse Enter, el enfoque debe pasar al botón de Órdenes
Determinar.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then BitBtn1.setfocus;
if not(key in['0'..'9',#8]) then key := #0
end;
Asociemos un procedimiento al botón ordenes Determinar accionado por el evento
OnClick. Este procedimiento debe determinar el total de dígitos del ingresado en el
control Edit1.
procedure TForm1.BitBtn1Click(Sender: TObject);
var c : integer;
n : double;
begin
try
n:=StrToFloat(Edit1.text);
c:=0;
repeat
n:=trunc(n/10);
c:=c + 1;
until n = 0;
ShowMessage(Edit1.text + ' tiene ' + IntToStr(c) + ' dígitos.')
except

9
on EConvertError do //Error de conversión
ShowMessage('Uno de los valores es demasiado grande!.');
end;
end;

El total de dígitos de un número también se puede calcular mediante su logaritmo


decimal. Dado que Delphi no dispone de logaritmo decimal (log) y sí de logaritmo
neperiano (ln), se puede utilizar la formula:

d:= int(ln(n)/ln(10)) + 1

modifique el procedimiento OnClick del BitBtn1, así:


procedure TForm1.BitBtn1Click(Sender: TObject);
var
d : single;
n : double;
begin
try
n:=StrToFloat(Edit1.text);
d:= int(ln(n)/ln(10)) + 1;
ShowMessage(Edit1.text + ' tiene ' + FloaToStr(d) + ' dígitos.')
except
on EConvertError do //Error de conversión
ShowMessage('Uno de los valores es demasiado grande!.');
end;
end;

10
5) Conversión de un Número en Base 10 al Sistema Binario

La conversión de un número entero en base 10 al sistema binario es bastante sencilla.


Por ejemplo, la conversión de 2610 (que se lee 26 en base 10) se realiza así:

Cociente Resto

El ultimo resto puede leerse como el dígito mas significativo y el primero como el dígito
menos significativo: 11010. La respuesta es:

2610 = 110102

La siguiente aplicación se basa en el procedimiento anterior para convertir un número


entero en base 10 al sistema binario.

11
Siga estos pasos:
1. Proceda a crear una nueva aplicación
2. A continuación, diseñe una interfaz que sea similar a la siguiente ilustración:

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


por el evento OnKeyPress. Este procedimiento solo debe permitir el ingreso de los
dígitos 0,1, …… , 9 en el control Edit1. Además, cuando el usuario pulse Enter, debe
pasar el enfoque al control Button1.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then Button1.SetFocus;
if not(key in['0'..'9']) then key:=#0
end;

A continuación, asociemos un procedimiento al control Button1 accionado por el evento


OnClick. Cuando el usuario haga clic en este botón, el procedimiento debe convertir al
sistema binario al número ingresado en el control Edit1.

procedure TForm1.Button1Click(Sender: TObject);


var binario : string;
n : longint;
begin
try
n:=StrToInt(Edit1.Text);
binario:='';
repeat
binario:=IntToStr(n Mod 2) + binario;
n:=n div 2;
until n < 1;
Edit2.Text:=binario;

//En caso de que se produzca una excepción se entra a este bloque

12
except
on x : exception do ShowMessage('" ' + x.Message+'" ');
end;
end;

El programa ejecutándose:

13

También podría gustarte