Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Sumar en Delphi Con ListBox (https://www.clubdelphi.com/foros/showthread.php?t=70498)

Ray16 25-10-2010 06:35:33

Sumar en Delphi Con ListBox
 
Saludos, soy nuevo aqui y estoy estudiando delphi en la universidad, y ya me empezaron a poner algunos ejercicios, espero poder contar con su ayuda, al igual yo poder ayudarlo en temas que domino, con algunas preguntas que hagna.

lo que quiero es una suma que cuando seleccione un items del list box me haga la suma, resta, multiplicacion , división, y me muestre el resultado en un text.

Este es mi diseño, solo falta aplicarle los codigo, me gustaria solo el ejemplo de la suma , de ahi haria los demas, ya tengo el codigo de salir y de limpiar

h t t p : / / content.screencast.com/users/Raniel/folders/Jing/media/8b9f4356-66ac-40bd-abe4-52b09a14f35e/2010-10-25_0008.png

pegar despues del h t t p : / /
sorry es que no me permitia poner la imagen ni enlace debe ser porq soy nuevo...
Un millon de Gracias

ecfisa 25-10-2010 07:58:18

Hola Ray16.

Primero la ayuda que pediste:
Código Delphi [-]
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  if (Edit1.Text > '') and (Edit2.Text > '') then // si los edits no estan vacíos
  case ListBox1.ItemIndex of
    0: Panel1.Caption:= FloatToStr(StrToFloat(Edit1.Text) + StrToFloat(Edit2.Text));
    1:; // Restar
    2:; // Multiplicar
    3:; // Dividir    Ojo con la division por cero !!
  end;
end;

Segundo este código no hace ninguna comprobación de conversión. O sea que si pones '15' en el primer edit
y 'abc' en el segundo, cuando realize la operación te dará error.
También podrias agregar un else poniendo un mensaje de advertencia si algún edit esta vacío... queda en tus manos. ;)

Nota: Si alterás el orden del ListBox (suma,resta, multiplicación, división) respetá el nuevo órden en la evaluación del case/of,
si no podría suceder que 2 x 1 sea igual a 3... :)

Saludos. :)

Ray16 25-10-2010 08:30:00

Un millon de gracias, lo he hecho con numeros reales en vez de entero

lo tengo de esta forma y funcionan todas las operaciones...

if (Edit1.Text > '') and (Edit2.Text > '') then // Esto me limpiara los edit
case ListBox1.ItemIndex of
0: edit3.Text:= FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text));
1: edit3.Text:= FloatToStr(StrToFloat(Edit1.Text)-StrToFloat(Edit2.Text));
2: edit3.Text:= floattostr(StrToFloat(Edit1.Text)*StrToFloat(Edit2.Text));
3: ;


solo me falta la división cuando la pongo me da error, me lo marca en rojo
si lo ponga de esta forma : incluyendo la division...

if (Edit1.Text > '') and (Edit2.Text > '') then // Esto me limpiara los edit
case ListBox1.ItemIndex of
0: edit3.Text:= FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text));
1: edit3.Text:= FloatToStr(StrToFloat(Edit1.Text)-StrToFloat(Edit2.Text));
2: edit3.Text:= floattostr(StrToFloat(Edit1.Text)*StrToFloat(Edit2.Text));
3: edit3.Text:= floattostr(StrToFloat(Edit1.Text)/StrToFloat(Edit2.Text));

me marca esta ultima linea en rojo, y para la division por cero quiero validarlo de esta forma.

if (numero2=0) then
begin
ShowMessage('Error Al Dividir entre cero');

end
else
begin
hacer la division.

Gracias por la ayuda Ecfisa, pude hacer las operaciones, ahora solo falta la division...

Gracias!,

Ray16 25-10-2010 09:14:09

Cita:

Empezado por Ray16 (Mensaje 380306)
Un millon de gracias, lo he hecho con numeros reales en vez de entero

lo tengo de esta forma y funcionan todas las operaciones...

if (Edit1.Text > '') and (Edit2.Text > '') then // Esto me limpiara los edit
case ListBox1.ItemIndex of
0: edit3.Text:= FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text));
1: edit3.Text:= FloatToStr(StrToFloat(Edit1.Text)-StrToFloat(Edit2.Text));
2: edit3.Text:= floattostr(StrToFloat(Edit1.Text)*StrToFloat(Edit2.Text));
3: ;


solo me falta la división cuando la pongo me da error, me lo marca en rojo
si lo ponga de esta forma : incluyendo la division...

if (Edit1.Text > '') and (Edit2.Text > '') then // Esto me limpiara los edit
case ListBox1.ItemIndex of
0: edit3.Text:= FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text));
1: edit3.Text:= FloatToStr(StrToFloat(Edit1.Text)-StrToFloat(Edit2.Text));
2: edit3.Text:= floattostr(StrToFloat(Edit1.Text)*StrToFloat(Edit2.Text));
3: edit3.Text:= floattostr(StrToFloat(Edit1.Text)/StrToFloat(Edit2.Text));

me marca esta ultima linea en rojo, y para la division por cero quiero validarlo de esta forma.

if (numero2=0) then
begin
ShowMessage('Error Al Dividir entre cero');

end
else
begin
hacer la division.

Gracias por la ayuda Ecfisa, pude hacer las operaciones, ahora solo falta la division...

Gracias!,



Otra cosa lo hice con un ComboBox y me funciona, como aplicaria la validacion al dividir entre cero

procedure TForm1.ComboBox1Change(Sender: TObject);
begin


if (Edit1.Text > '') and (Edit2.Text > '') then // Esto me limpiara los edit
case ComboBox1.ItemIndex of
0: edit3.Text:= FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text));
1: edit3.Text:= FloatToStr(StrToFloat(Edit1.Text)-StrToFloat(Edit2.Text));
2: edit3.Text:= floattostr(StrToFloat(Edit1.Text)*StrToFloat(Edit2.Text));
3: edit3.Text:= floattostr(StrToFloat(Edit1.Text)/StrToFloat(Edit2.Text));


como adjuntaria ete codigo
if (numero2=0) then
begin
ShowMessage('Error Al Dividir entre cero');

end
else
begin
hacer division


Mil gracias

ecfisa 25-10-2010 17:11:26

Cita:

Empezado por Ray16 (Mensaje 380307)
Otra cosa lo hice con un ComboBox y me funciona, como aplicaria la validacion al dividir entre cero

como adjuntaria ete codigo
if (numero2=0) then
begin
ShowMessage('Error Al Dividir entre cero');

end
else
begin
hacer division


Mil gracias

Hola Ray.

Exacto, vos mismo te diste la respuesta, una forma de hacerlo podría ser:
Código Delphi [-]
3: if StrToFloat(Edit2.Text) > 0 then
      edit3.Text:= floattostr(StrToFloat(Edit1.Text)/StrToFloat(Edit2.Text))
    else
    begin
       ShowMessage('Error. División por cero');
       Edit2.SetFocus;
    end;

Es igual hacerlo con la comprobación inversa tál como lo pusiste en el pseudocódigo: if StrToFloat(Edit2.Text) = 0 then,
solamente cambia el órden de las acciones.


Saludos. :)

ecfisa 26-10-2010 02:27:05

Hola nuevamente Ray16.

Errata:

En el post anterior, donde dice:
Código Delphi [-]
  if StrToFloat(Edit2.Text) > 0 then
Debe decir:
Código Delphi [-]
   if StrToFloat(Edit2.Text) <> 0 then

Saludos. :)

Ray16 26-10-2010 04:56:45

Un millon de Gracias, Los pude hacer y validar la división entre cero.
el profe solo pidio eso lo de validar en cero, lo de las letras no, pero ya lo
haré para conocimiento.

Gracias!

Éxitos, seguimos en contactos...


La franja horaria es GMT +2. Ahora son las 19:12:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi