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;