Ver Mensaje Individual
  #12  
Antiguo 03-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Estuve jugando un poco con el codigo que dejaste y solo queria comentarte un par de cositas.

No utilices el randomize dos veces en cada ciclo, porque los numeros no saldran tan aleatorios como cabria esperar, lo mejor es llamar a randomize una sola vez. Ya lo dice la ayuda de delphi:

Cita:
Do not combine the call to Randomize in a loop with calls to the Random function
Por ultimo, para acelerar un poco la cosa, podrias hacer dos loop uno dentro del otro, en el de dentro colocarias puntos y en el de fuera actualizarias el TImage, visualmente apenas notaras la diferencia pero sera mucho menos trabajo para la aplicacion.

Aqui te dejo el codigo tal como yo lo veo:
Código Delphi [-]
const
  radio = 200;
  Vueltas = 1000;
  PuntosPorVuelta = 100;
var
  x,y: Integer;
  i, j, k: Integer;
begin
  Randomize;
  k:= 0;
  Image1.Picture.Assign(nil);
  Image1.Width:= 2*radio;
  Image1.Height:= 2*radio;
  Image1.Canvas.Ellipse(0,0,2*radio,2*radio);
  for j:= 1 to Vueltas do
  begin
    for i := 1 to PuntosPorVuelta do
    begin
      x := Random(2*radio);
      y := Random(2*radio);
      if  (sqr(x-radio)+sqr(y-radio))< sqr(radio) then
      begin
        inc(k);
        Image1.Canvas.Pixels[x, y]:= clRed;
      end
      else
        Image1.Canvas.Pixels[x, y]:= clBlue;
      Label2.Caption := Format('Tirs: %d || Encerts: %d', [i*j, k]);
    end;
    Label2.Repaint;
    Image1.Repaint;
  end;
  ShowMessage(FloatToStr((k/(Vueltas*PuntosPorVuelta))*4));
end;

Lo dicho, solo es una opinion, no te molestes porque retoque un poco tu codigo
Responder Con Cita