Ver Mensaje Individual
  #1  
Antiguo 17-02-2011
teto89 teto89 is offline
Registrado
NULL
 
Registrado: dic 2010
Posts: 3
Reputación: 0
teto89 Va por buen camino
Pasar de un Stringgrid a Shape

hola, hice mi programa en delphi 7 con un stringgrid pero quiero utilizar un Shape, que diferencias hay entre uno y el otro? que debo cambiar del codigo?

dejo parte de codigo, espero puedan orientarme un poco. gracias

Código:
form1.StringGrid1.Visible:=true;

//por ahi despues pongo el visible al final
form1.stringGrid1.Cells[1,0]:='Inicio';
form1.stringGrid1.cells[2,0]:='Fin';
form1.stringGrid1.Cells[3,0]:='fi';
form1.stringGrid1.Cells[4,0]:='frel';
form1.stringGrid1.cells[5,0]:='facum';
form1.stringGrid1.Cells[6,0]:='Xi';
form1.stringGrid1.cells[7,0]:='(Xi*Fi)';
form1.stringGrid1.Cells[8,0]:='(Xi-X)';
form1.stringGrid1.Cells[9,0]:='((Xi-X)*Fi';
form1.stringgrid1.Cells[10,0]:='((Xi-X)²';
form1.stringGrid1.Cells[11,0]:='((Xi-X)²*Fi';

//pongo en 0 todos los valores de los intervalos
for i:=1 to form1.stringGrid1.RowCount do
begin
form1.stringGrid1.Cells[1,i]:=inttostr(0);
form1.stringGrid1.Cells[2,i]:=inttostr(0);
end;

//stringGrid1.Cells[0,i]:=inttostr(0);
//cargo los valores correspondientes a la primer fila
form1.stringGrid1.Cells[1,1]:=inttostr(strtoint(form1.edit3.Text));
form1.stringGrid1.Cells[2,1]:=inttostr(strtoint(form1.stringGrid1.Cells[1,1])+ strtoint(form1.edit6.Text)-1);

//inicializa en 0 el campo correspondiente a la frecuencia absoluta
for i:=1 to form1.stringGrid1.RowCount -1 do
begin
form1.stringGrid1.Cells[3,i]:=inttostr(0);
end;

//dimensiono el arraycito
setlength(vectorcito,form6.listbox1.Items.Count);


//inicializo a 0 y despues cargo un vector con los datos correspondientes al listbox1
for i:=0 to form6.listbox1.Count -1 do
begin
vectorcito[i]:=0;
vectorcito[i]:=strtoint(form6.listbox1.Items[i]);
end;

//es un ciclo con 2 if anidados, lo que pretendemos aca es verificar que los datos del listbox(ahora en un vector) esten en el intervalo definido,
//y contar las coincidencias, que finalmente seran las frecuencias absolutas

for i:=0 to form6.listbox1.Count -1 do
begin
if vectorcito[i] >= strtoint(form1.stringGrid1.cells[1,1]) then
    if vectorcito[i] <= strtoint(form1.stringGrid1.cells[2,1]) then
      form1.stringGrid1.Cells[3,1]:=inttostr(strtoint(form1.stringGrid1.cells[3,1])+1);
end;

//pongo en 0 todas las celdas correspondientes a la frecuencia relativa
for i:=1 to form1.stringGrid1.RowCount -1 do
begin
form1.stringGrid1.Cells[4,i]:=inttostr(0);
end;

//calculo las frecuencias relativas
for i:=1 to form1.stringGrid1.RowCount -1 do
begin
form1.stringGrid1.Cells[4,i]:=floattostr(strtoint(form1.stringGrid1.Cells[3,i])/strtoint(form1.edit1.Text));
end;

//inicializa en 0 el campo correspondiente a la frecuencia acumulada
for i:=1 to form1.stringGrid1.RowCount -1 do
begin
form1.stringGrid1.Cells[5,i]:=inttostr(0);
end;

//calcula la frecuencia acumulada
for i:=1 to form1.stringGrid1.RowCount  -1 do
begin
form1.stringGrid1.Cells[5,i]:=inttostr(strtoint(form1.stringGrid1.Cells[5,i])+strtoint(form1.stringGrid1.Cells[3,i]));
end;

//inicializa en 0 el campo correspondiente a punto medio o Xi
for i:=1 to form1.stringGrid1.RowCount -1 do
begin
form1.stringGrid1.Cells[6,i]:=inttostr(0);
end;

//calcula el punto medio o Xi
for i:=1 to form1.stringGrid1.RowCount -1  do
begin
form1.stringGrid1.Cells[6,i]:=floattostr((strtoint(form1.stringGrid1.Cells[1,i])+strtoint(form1.stringGrid1.Cells[2,i]))/2);
end;

//inicializa en 0 el campo el intervalo de inicio
for i:=2 to form1.stringGrid1.RowCount  do
begin
form1.stringGrid1.Cells[1,i]:=inttostr(0);
form1.stringGrid1.Cells[2,i]:=inttostr(0);
end;

//calcula los intervalos inicio del resto de las filas
for i:=2 to form1.stringGrid1.RowCount  do
begin
form1.stringGrid1.Cells[1,i]:=inttostr(strtoint(form1.stringGrid1.Cells[1,i-1])+strtoint(form1.edit6.Text));
end;

//calculo de los intervalos fin del resto de las filas
for i:=2 to form1.stringGrid1.RowCount  do
begin
form1.stringGrid1.Cells[2,i]:=inttostr(strtoint(form1.stringGrid1.Cells[1,i])+strtoint(form1.edit6.Text)-1);
end;

//calculo de la frecuencia absoluta
for i:=0 to form6.listbox1.Count -1 do
begin
vectorcito[i]:=0;
vectorcito[i]:=strtoint(form6.listbox1.Items[i]);
end;

//inicializa en 0 el campo correspondiente a la frecuencia absoluta
for i:=2 to form1.stringGrid1.RowCount   do
begin
form1.stringGrid1.Cells[3,i]:=inttostr(0);
end;
//es un ciclo con 2 if anidados, lo que pretendemos aca es verificar que los datos del listbox(ahora en un vector) esten en el intervalo definido,
//y contar las coincidencias, que finalmente seran las frecuencias absolutas

for i:=2 to form1.stringGrid1.RowCount   do
begin
  for j:=0 to form6.listbox1.Count -1 do
    begin
      if vectorcito[j] >= strtoint(form1.stringGrid1.cells[1,i]) then
        if vectorcito[j] <= strtoint(form1.stringGrid1.cells[2,i]) then
          form1.stringGrid1.Cells[3,i]:=inttostr(strtoint(form1.stringGrid1.Cells[3,i])+1);
    end;
end;

//calculo de la frecuencia relativa
for i:=2 to form1.stringGrid1.RowCount   do
begin
form1.stringGrid1.Cells[4,i]:=floattostr(strtoint(form1.stringGrid1.Cells[3,i])/strtoint(form1.edit1.Text));
end;

//calculo de la frecuencia acumulada

for i:=2 to form1.stringGrid1.RowCount do
begin
form1.stringGrid1.Cells[5,i]:=inttostr(0);
end;

for i:=2 to form1.stringGrid1.RowCount   do
begin
form1.stringGrid1.Cells[5,i]:=inttostr(strtoint(form1.stringGrid1.Cells[5,i-1])+strtoint(form1.stringGrid1.Cells[3,i]));
end;

//calculo de los puntos medios o xi´s
for i:=2 to form1.stringGrid1.RowCount do
begin
form1.stringGrid1.Cells[6,i]:=floattostr((strtofloat(form1.stringGrid1.Cells[1,i])+strtofloat(form1.stringGrid1.Cells[2,i]))/2);
end;

//calculo de xi * fi
for i:=1 to form1.stringGrid1.RowCount do
begin
form1.stringGrid1.Cells[7,i]:=inttostr(0);
form1.stringGrid1.Cells[7,i]:=floattostr((strtofloat(form1.stringGrid1.Cells[6,i])*strtofloat(form1.stringGrid1.Cells[3,i])));
end;

//calculo de la media aritmetica
acumulador:=0;
for i:=1 to form1.stringGrid1.RowCount -1 do
begin
acumulador:=acumulador+strtofloat(form1.stringGrid1.Cells[7,i]);
end;
form1.edit7.Text:=floattostr((acumulador)/(strtofloat(form1.edit1.Text)));

//calculo del desvio medio
acumulador:=0;
for i:=1 to form1.stringGrid1.RowCount do
begin
form1.stringgrid1.cells[8,i]:=floattostr(abs((strtofloat(form1.stringGrid1.cells[6,i])-strtofloat(form1.edit7.text))));
form1.stringgrid1.cells[9,i]:=floattostr(abs((strtofloat(form1.stringGrid1.cells[8,i])*strtofloat(form1.stringGrid1.cells[3,i]))));
acumulador:=acumulador+strtofloat(form1.stringGrid1.Cells[9,i]);
end;
form1.edit12.Text:=floattostr(acumulador / strtofloat(form1.edit1.Text));

//calculo del desvio standar
acumulador:=0;
for i:=1 to form1.stringGrid1.RowCount do
begin
form1.stringGrid1.cells[10,i]:=inttostr(0);
form1.stringGrid1.cells[11,i]:=inttostr(0);
end;

for i:=1 to form1.stringGrid1.RowCount do
begin
form1.stringGrid1.cells[10,i]:=floattostr(power(strtofloat(form1.stringGrid1.Cells[8,i]),2));
form1.stringGrid1.Cells[11,i]:=floattostr(strtofloat(form1.stringGrid1.cells[10,i])*strtofloat(form1.stringgrid1.cells[3,i]));
acumulador:=acumulador+strtofloat(form1.stringGrid1.Cells[11,i]);
end;
form1.edit11.Text:=floattostr(power(acumulador/strtofloat(form1.edit1.text),1/2));

//CALCULO VARIANZA
//Potencia := Exp(Exponente * Ln(Base));
form1.edit13.text:=floattostr(power(strtofloat(form1.edit11.text),2));


//calculo de la mediana
val_intervalo:=0;
frec_acum_menor:=0;
frec_acum_mayor:=0;
x:=0;
orden_mediana:=((strtofloat(form1.edit1.Text)+1)/2);
form1.edit10.Text:=floattostr(orden_mediana);
val_intervalo:=strtofloat(form1.edit6.Text);
intervalo_mayor:=0;

//busqueda de frecuencias mayores y menores
//copio todo en un vector
//dimensiono el array
tamanio:=form1.stringGrid1.RowCount;
setlength(vec_frec_acumulada,tamanio);

for i:=1 to form1.stringGrid1.RowCount  do
begin
vec_frec_acumulada[i]:=0;
end;

for i:=1 to form1.stringGrid1.RowCount  do
begin
vec_frec_acumulada[i]:=strtoint(form1.stringGrid1.cells[5,i]);
end;

for i:=1 to form1.stringGrid1.RowCount -1 do
begin
if vec_frec_acumulada[i] >= orden_mediana then
begin
frec_acum_mayor:=vec_frec_acumulada[i];
frec_acum_menor:=vec_frec_acumulada[i-1];

break;
end
end;

//busco el intervalo mayor en el cuadro
for i:=1 to form1.stringGrid1.RowCount do
begin
if frec_acum_mayor=strtoint(form1.stringGrid1.Cells[5,i]) then
begin
intervalo_mayor:=strtoint(form1.stringGrid1.Cells[1,i]);
break;
end
end;

if((frec_acum_mayor-frec_acum_menor)>0) then
begin
x:=((val_intervalo/(frec_acum_mayor-frec_acum_menor))*(orden_mediana-frec_acum_menor));
mediana:=x+intervalo_mayor;
end
else
begin
//showmessage('Los valores Ingresados son muy dispares por lo que no se puede calcular la mediana');
muestra:=form6.listbox1.Items.Count;
muestra_dividido_dos:=muestra div 2;
//showmessage(inttostr(muestra_dividido_dos));
form6.listbox1.Sorted:=true;
mediana:=strtoint(form6.listbox1.Items.Strings[muestra_dividido_dos]);
end;
form1.edit9.Text := floattostr(round(mediana));



//------------------//
//CALCULO DE LA MODA//
//------------------//

{frecmay:=strtoint(form1.stringgrid1.Cells[2,1]);
for f:=1 to strtoint(form1.edit3.text) do
if frecmay<=strtoint(form1.stringgrid1.Cells[2,f]) then
begin
frecmay:=strtoint(form1.stringgrid1.Cells[2,f]);
intermay:=strtoint(form1.stringgrid1.Cells[0,f]);
//ff:=0;
ff:=f;
end;

if ff<>1 then
interpolar3:=strtoint(form1.stringgrid1.Cells[3,ff])/(strtoint(form1.stringgrid1.Cells[3,ff])+strtoint(form1.stringgrid1.Cells[3,ff-1]))
else
interpolar3:=strtoint(form1.stringgrid1.Cells[3,ff])/(strtoint(form1.stringgrid1.Cells[3,ff]));
interpolar4:=interpolar3*strtoint(form1.edit2.text);

//edit8 =resultado de la moda
form1.edit8.text:=formatfloat('0.00',intermay+interpolar4);

//Guardo:=False;
end
else
begin
application.MessageBox('Casillero Intervalos o Números por intervalo, vacio','Error', mb_iconerror);

end;  }

form6.ListBox1.Sorted:=true;
flag:=false;
i:=0;
    while not(flag) do begin
        val:=form6.ListBox1.Items[i];
        inc(i);
        j:=1;

while (i<form6.ListBox1.Items.Count) and (val = form6.ListBox1.Items[i]) do begin
inc(i);
inc(j);
end;

flag := i=form6.ListBox1.Items.Count;

if length(moda)>0 then begin
if moda[0,2]=j then begin
SetLength(moda, length(moda)+1);
moda[length(moda)-1,1]:=strtoint(val);
moda[length(moda)-1,2]:=j;
end
else
if moda[0,2]<j then begin
SetLength(moda, 1);
moda[length(moda)-1,1]:=strtoint(val);
moda[length(moda)-1,2]:=j;
end;
end
else
begin
SetLength(moda, length(moda)+1);
moda[length(moda)-1,1]:=strtoint(val);
moda[length(moda)-1,2]:=j;
end;
end;
val:='';
for i:=0 to length(moda)-1 do
val:= val + inttostr(moda[i,1])+', ';

//ShowMessage('Moda: '+val+' con '+inttostr(moda[0,2])+' incidencias');
//edit8.text:='Moda: '+val+' con '+inttostr(moda[0,2])+' repeticiones';
form1.edit8.text:=val;
form1.label15.Caption :=' Con '+inttostr(moda[0,2])+' repeticiones';

for i:=1 to form1.stringGrid1.RowCount -1 do
begin
if strtoint(form1.stringGrid1.Cells[3,i])=0 then
  begin
  showmessage('Existen frecuencias absolutas iguales a 0, esto puede deberse a que haya valores fuera de rango o que la muestra no es demasiado significativa');
  break;
  end;
end;

form1.Show;
Form6.Hide;
end;
end;
Responder Con Cita