Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda Con Este Error :s (https://www.clubdelphi.com/foros/showthread.php?t=69103)

darnnezt 26-07-2010 22:54:14

Ayuda Con Este Error :s
 
procedure TForm1.Button1Click(Sender: TObject);
var
pt,a,p,ah,prome1,prome2:real;
s:string;
hombre,c1,n:integer;

begin
a:=0;
p:=0;
prome1:=1;
prome2:=1;
pt:=0;
hombre:=0;
n:=0;
n:=strtoint(inputbox('IGRESE EL NUMERO DE PERSONAS',' N:',''));


for c1:=1 to n do

a:= strtofloat(inputbox('IGRESE LA ALTURA DE LA PERSONA M',' A:',''));
p:=strtofloat(inputbox('INGRESE EL PESO DE LA PERSONA KG ',' P:',''));
s:=string(inputbox('INGRSE EL SEXO DE LA PERSONA',' S:',''));



begin
if (s :=m) then
begin
hombre:=hombre+1;
ah:=ah+a;
end;

pt:=pt+p;
end;
prome1:= pt/n;
prome2:=ah/hombre;

El error se encunetra enmarcado en la zona roja, dice:
[Error] Unit1.pas(52): ')' expected but ':=' found
si alguien puede ayudar mil gracias.

FGarcia 26-07-2010 23:00:33

Te recomiendo que uses etiquetas para encerrar el codigo delphi y sea mas legible.

Código Delphi [-]
if (s :=m) then
  //lo que sigue

If efectuara una comparacion NO una asignacion. Lo correcto seria :

Código Delphi [-]
if (s = m) then

roman 26-07-2010 23:01:13

El operador := se usa para asignar valores, no para comparaciones. Lo correcto sería:

Código Delphi [-]
if (s = m) then

Por cierto, bienvenido a ClubDelphi. Recuerda leer la guía de estilo y utilzar las etiquetas adecuadas para poner codigo fuente.

// Saludos

darnnezt 26-07-2010 23:30:33

Muchasgracias por la bienvenida, pero el error aun se mantiene no tengo idea de q puede ser

paranedaf 27-07-2010 00:20:35

Cita:

Empezado por darnnezt (Mensaje 371673)
Muchasgracias por la bienvenida, pero el error aun se mantiene no tengo idea de q puede ser

Está bien lo que mencionaron acerca del error al asignar en vez de comparar.

Ahora, estás comparando la variable "m" y veo que no está declarada. Quizá deseas comparar con la variable "n". Cuidado que s y n son de distinto tipo.

darnnezt 27-07-2010 00:46:56

GRACIAS YA EL PROGRAMA CORRE, pERO ME DI CUENTA Q SE HA CONVERTIDO EN UN BUCLE INFINITO OSEA SE KEDA PIDIENDO RESULTADO HASTA Q DA ERROR Y NUNKA DA LAS RESPUESTAS,INTENTAE

Código Delphi [-]

procedure TForm1.Button1Click(Sender: TObject);
var
pt,a,p,ah,prome1,prome2:real;
f,m,s:string;
hombre,c1,N:integer;

begin
a:=0;
p:=0;


pt:=0;
hombre:=0;
N:=0;

N:=strtoint(inputbox('IGRESE EL NUMERO DE PERSONAS',' N:',''));

a:= strtofloat(inputbox('IGRESE LA ALTURA DE LA PERSONA M',' A:',''));
p:=strtofloat(inputbox('INGRESE EL PESO DE LA PERSONA KG ',' P:',''));

for c1:=1 to n do
  begin

s:=string(inputbox('INGRSE EL SEXO DE LA PERSONA',' S:',''));


if (s = m) then
begin
hombre:=hombre+1;
ah:=ah+a;
end;

end;


pt:=pt+p;
prome1:= pt/n;
prome2:=ah/hombre;

Showmessage(' EL PESO DE LA POBLACION TOTAL '+FLOATTOSTR(prome1));
showmessage('EL PROMEDIO DE LA ALTURA DE LOS HOMBRE ES '+FLOATTOSTR(prome2));
De esta manerael programa funciona solo q no da respuestas :)

Jac fcc 27-07-2010 01:47:34

intenta asi
 
Cita:

if (s = m) then
en comparación de cadenas puedes usar
function AnsiCompareStr( const S1, S2: string ): Integer;
function AnsiCompareText( const S1, S2: string ): Integer; o
supongo que hay maneras mnas optimas de hacer lo mismo pero esta
funciona (y como no tengo mucho tiempo:D)
aqui coloqué a m el valor de 'm' pensando en que la opcion para ingresar es 'masculino'.
tambien coloqué dentro del ciclo las opciones donde pedías la altura y peso,
pues si al final estabas mostrando el promedio, tenias que pedir cada uno de estos datos por persona.
:rolleyes:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
pt,a,p,ah,prome1,prome2:real;
m,s:string;
hombre,c1,N:integer;

begin

ah:=0;
pt:=0;
hombre:=0;
m:='m';//suponiendo que es m=masculino
N:=strtoint(inputbox('IGRESE EL NUMERO DE PERSONAS',' N:',''));
for c1:=1 to n do begin
  a:= strtofloat(inputbox('IGRESE LA ALTURA DE LA PERSONA M',' A:',''));
  p:=strtofloat(inputbox('INGRESE EL PESO DE LA PERSONA KG ',' P:',''));
  s:=string(inputbox('INGRSE EL SEXO DE LA PERSONA',' S:',''));
  if AnsiCompareStr(s,m)=0 then begin
    hombre:=hombre+1;
    ah:=ah+a;
  end;
  pt:=pt+p;
end;

try

  if n>0 then  prome1:= pt/n
  else begin
    MessageDlg('Error al promediar el peso con divisor cero. ',mtError,[mbOk], 0);
    exit;
  end;
  if hombre>0 then  prome2:=ah/hombre
  else begin
    MessageDlg('Error al promediar la altura con divisor cero. ',mtError,[mbOk], 0);
    exit;
  end;
  Showmessage('EL promedio del PESO DE LA POBLACION TOTAL '+FLOATTOSTR(prome1));
  showmessage('EL PROMEDIO DE LA ALTURA DE LOS HOMBRE ES '+FLOATTOSTR(prome2));

except
    on e:Exception do
    MessageDlg('Error al promediar. '+char(13)+e.Message, mtError,[mbOk], 0);
end;
saludos! :cool:
y me cuentas si funciona.

darnnezt 27-07-2010 03:10:16

Funciona A La Perfeccion Muchisimas Gracias, solo tuve q agregarle al mio que m:='m' muchas gracias :D

darnnezt 27-07-2010 03:23:02

De esta Manera queda muy corto :)

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
pt,a,p,ah,prome1,prome2:real;
f,m,s:string;
hombre,c1,N:integer;

begin
a:=0;
p:=0;
m:='m';

pt:=0;
hombre:=0;
N:=0;

N:=strtoint(inputbox('IGRESE EL NUMERO DE PERSONAS',' N:',''));


for c1:=1 to n do
  begin
a:= strtofloat(inputbox('IGRESE LA ALTURA DE LA PERSONA M',' A:',''));
p:=strtofloat(inputbox('INGRESE EL PESO DE LA PERSONA KG ',' P:',''));

s:=string(inputbox('INGRSE EL SEXO DE LA PERSONA',' S:',''));


if (s = m) then
begin
hombre:=hombre+1;
ah:=ah+a;
end;

end;


pt:=pt+p;
prome1:= pt/n;
prome2:=ah/hombre;

Showmessage(' EL PESO DE LA POBLACION TOTAL '+FLOATTOSTR(prome1));
showmessage('EL PROMEDIO DE LA ALTURA DE LOS HOMBRE ES '+FLOATTOSTR(prome2));

Gracias a todos :)

Jac fcc 27-07-2010 15:43:45

tomalo en cuenta
 
claro que es mas corto,

pero siempre toma en cuenta que un usuario puede ingresar valores donde todas las personas sean mujeres. entonces tendrias una division con cero y eso genera una excepcion.

tal vez esta es una practica y no se ve que afecte tanto, pero hay que acostumbrarse a ese tipo de cosas pues uno no controla lo que el usuario ingresa.:(

en resumen, piensa hasta el minimo detalle en cuanto a manejo de errores (incluso puede que en el codigo me falte o este fuera de lugar algun manejo), con el tiempo y a medida que aumentan tus exigencias de programacion (o en el trabajo) te daras cuenta del porque tiene importancia verificar esos errores o las excepciones. :)


La franja horaria es GMT +2. Ahora son las 21:09:12.

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