Delphi - Problemas con StrToInt y IntToStr

 
Vista:

Problemas con StrToInt y IntToStr

Publicado por NotSoBadBoy (3 intervenciones) el 11/04/2005 16:54:57
Hola amigos, soy nuevo en Delphi, y tengo el siguiente problema:

Quiero hacer una aplicacion que haga esto:

Se entren 10 notas, nunca mas aunque si menos, entonces despues sacar el promedio, yo no tengo problemas con la estructura y logica pero me ocurre que es primera vez que me encuentro con eso de IntToStr y me confundo a veces, miren la maqueta inicial que es lo mas rustica que pude hacerla para ir cogiendola poco a poco y sin complicarme con arreglos ni nada y díganme que debo modificar..

procedure TForm1.Button1Click(Sender: TObject);
var txt1, txt2, txt3, txt4, txt5, txt6, txt7, txt8, txt9, txt10: integer;
var limite: integer;

begin
limite:=10;
txt1:= StrtoInt(Edit1.Text);
txt2:= StrtoInt(Edit2.Text);
txt3:= StrtoInt(Edit3.Text);
txt4:= StrtoInt(Edit4.Text);
txt5:= StrtoInt(Edit5.Text);
txt6:= StrtoInt(Edit6.Text);
txt7:= StrtoInt(Edit7.Text);
txt8:= StrtoInt(Edit8.Text);
txt9:= StrtoInt(Edit9.Text);
txt10:= StrtoInt(Edit10.Text);

Edit11.Text := IntToStr(txt1 + txt2 + txt3 + txt4 + txt5 + txt6 + txt7 + txt8 + txt9 + txt10);

Hasta aqui esta bien y funciona aunque cuando no escribo nada en los texts me da un error de excepcion si me dicen como arreglarlo tambien seria bueno, pero cuando implemento la division de alguna manera se arma un lio.

end;

end.

Este es el codigo del boton que hace el trabajo..pero la cosa es que cuando quiero dividirlo para sacarle el promedio me enredo, una ayuda sería de mucho bien,

Gracias, desde Cuba,

NotSoBadBoy
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con StrToInt y IntToStr

Publicado por Dr Juzam (821 intervenciones) el 11/04/2005 18:30:34
Bueno, lo del fallo cuando no se escribe nada podría resolverse con unos if:

if Edit1.Text='' then //Si no hay algo
Edit1.Text:='0'; //Es 0
{El resto igual}
Txt1:=StrtoInt(Edit1.Text);

Lo que sucede con la división es probablemente que haces una división de la que salen decimales. Con lo cual IntToStr da un fallo (sólo pasa enteros a texto). Para eso puedes o bien
1) Si quieres una división sin decimales, usa div. P. ej: 89 div 5 da como resultado 17.
2) Si quieres una división con decimales, usa /, pero al convertir, en lugar de IntToStr puedes usar FloatToStr.

Espero haberte ayudado. Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con StrToInt y IntToStr

Publicado por Virum (484 intervenciones) el 11/04/2005 20:26:04
Hola:

El error de transformar edits en enteros cuando se dejan vacíos se arregla con un pequeño truco, añadiendo un cero delante:

StrToInt('0'+Edit1.Text);

El problema que hay es que debes saber la cantidad de notas entradas para hacer la media dividiendo entre ese número, por lo que yo lo haría mejor con un array, por ejemplo así:

procedure TForm1.Button1Click(Sender: TObject);
var
sNota: array[1..10] of string;
iEval, iTotal, i: integer;
begin
sNota[1]:= Edit1.Text;
sNota[2]:= Edit2.Text;
sNota[3]:= Edit3.Text;
sNota[4]:= Edit4.Text;
sNota[5]:= Edit5.Text;
sNota[6]:= Edit6.Text;
sNota[7]:= Edit7.Text;
sNota[8]:= Edit8.Text;
sNota[9]:= Edit9.Text;
sNota[10]:= Edit10.Text;
iEval := 0;
iTotal := 0;
for i := 1 to 10 do
begin
if Trim(sNota[i]) <> '' then
begin
Inc(iEval);
iTotal := iTotal + StrToInt('0'+sNota[i]);
end;
end;
if iEval=0 then
Edit11.Text := 'SC' //sin calificar
else
Edit11.Text := FormatFloat('0.00',iTotal/iEval);
end;

Debes controlar que en los edits solo se puedan entrar números, para ello pon en el evento OnKeyPress de cada uno de ellos esto;

if ( StrScan('0123456789'+chr(7)+chr(8), Key) = nil ) then
begin
Key := #0;
end;

Suerte. Virum.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

GRACIAS A LOS 2 amigos.....

Publicado por NotSoBadBoy (3 intervenciones) el 11/04/2005 21:21:59
Gracias MIL..

NotSoBadBoy
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar