AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MONTE-CARLO-METHODE

Ein Thema von vicii · begonnen am 19. Jun 2003 · letzter Beitrag vom 24. Jun 2003
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11
  Alt 19. Jun 2003, 14:16
Delphi-Quellcode:
function FKT(a, b, n, x: real): real;
begin
  fkt := a * exp(-x);
end;

procedure TForm1.STARTClick(Sender: TObject);
var
  a, b, n, fi, x, y1, ymax: real;
  i, int: integer;

begin
  a := StrToFloat(Edit1.Text);
  if (a < 1) then
  begin
    messagedlg(
      'untere grenze a muss groesser 1 sein!',
      mtError, [mbOK], 0);
    Edit1.setfocus;
    exit;
  end;

  b := StrToFloat(Edit2.Text);
  if (b <= a) then
  begin
    messagedlg(
      'obere grenze b muss groesser untere grenze a sein!',
      mtError, [mbOK], 0);
    Edit2.setfocus;
    exit;
  end;

  for i := 0 to 100 do
  begin
    int := Random(100);
    if (int > a) and (int < b) then
    begin
      y1 := a * exp(int) - int;
    end;
  end;

  a := StrToInt(Edit1.Text);
  x := StrToInt(Edit5.Text);
  b := StrToInt(Edit2.Text);
  n := StrToInt(Edit3.Text);
  ymax := a * exp(b) - b;
  fi := (b - a) * ymax / n;
  Edit4.Text := FloatToStr(fi);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize();
end;
So läuft das Ding zu mindest schon mal. Ob es stimmt oder nicht, das sagt dir das Licht.

[edit=Daniel B]Doppel-Post gelöscht. MfG Daniel B.[/edit]
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
vicii

Registriert seit: 19. Jun 2003
Ort: magdeburg
13 Beiträge
 
Delphi 5 Enterprise
 
#12
  Alt 19. Jun 2003, 14:27
huhu daniel,
tjo es hapert ja schon daran, dass ich ncih ma weiß wo oncreate is....
hehe

oh mann bin ich dumm
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#13
  Alt 19. Jun 2003, 14:37
Hi,
du klickst an irgendeiner stelle auf das Formular oder wählst links im Objektinspektor (Fenster mit den Eigenschaften der Objekte) Form1 aus. Dann klickst du im Objektinspektor auf die Lasche Ereignisse. Jetzt muss du nur noch einen Doppelklick in die Combobox neben dem Ereigniss OnCreate machen. Schon bist du in der Ereignis-Procedure. Und dort tippst du jetzt zwischen Begin und End randomize; ein

MFG
Thomas
Sport ist mord...
  Mit Zitat antworten Zitat
vicii

Registriert seit: 19. Jun 2003
Ort: magdeburg
13 Beiträge
 
Delphi 5 Enterprise
 
#14
  Alt 19. Jun 2003, 14:43
ohh danke danke danke

danke herzlichen dank....


irgendwie rechnet er was....
obs stimmt weiß ich selber nicht
aba es is TOLL
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15
  Alt 19. Jun 2003, 14:44
Noch mal ein paar Dinge, die mir aufgefallen sind:
  • Ein Grundlagenbuch oder -tutorial könnte nicht schaden.
  • Formatier deinen Quelltext ordentlich mit Einrückungen usw., dann siehst du wo ein end oder so fehlt
  • Laß überflüssige begin-end-Blöcke weg.
  • Sollen Codeteile wiederholt werden brauchst du eine Schleife. Delphi bietet dir da mindestens drei Arten an: for, while und repeat-until. Kuck mal in der Hilfe.
  • Was ist das für ein Studium? Programmieren scheint nicht deine Stärke zu sein. Oder wie stellst du dir das vor:
    Delphi-Quellcode:
    if (a<1) then begin
      messagedlg(
        'untere grenze a muss groesser 1 sein!',
         mtError,[mbOK],0);
      Edit1.text:='a';
      Edit1.setfocus;
      exit;
      end;
    Du prüfst eine nicht initialisierte Variable und gibst den Programm keine Chance den Wert aus dem Edit einzulesen. Und weiter unten weißt du dann a und b Werte zu, die schon viel wieter oben gebraucht werden.
  • Desweitern berechnest du y1 und benutzt es dann nicht mehr. Was soll das? Achte mal auf die Warnungen die dir der Kompiler ausgibt.

Mehr kann ich dir im Moment auch nicht helfen. Der Rest ist nur die Umsetztung des Algorithmuses und das hat mehr mit Mathematik und Logik als mit Delphi zu tun.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
vicii

Registriert seit: 19. Jun 2003
Ort: magdeburg
13 Beiträge
 
Delphi 5 Enterprise
 
#16
  Alt 19. Jun 2003, 14:52
also programmiern is nich meine stärke
habe heute damit angefangen

neben mir leigt die aufgabe und ein lustiges delphi buch

mehr hab ich nich, kein grundwissen, nix

und trotzdem scheints zu funktioniern

hehe, ich bin mächtig stolz auf mich...und danke für die hilfe

momentan siehts so aus

Delphi-Quellcode:
unit beleg;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    START: TButton;
    ENDE: TButton;
    x: TLabel;
    Edit5: TEdit;
    procedure ENDEClick(Sender: TObject);
    procedure STARTClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}



procedure TForm1.ENDEClick(Sender: TObject);
begin
     close
end;

 FUNCTION FKT(a,b,n,x:real):real;

   begin
fkt:=a*exp (- x); end;
procedure TForm1.STARTClick(Sender: TObject);
var a,b,n,fi,x,y1,ymax: real;
    fc,i,int: integer;


begin
a := StrToFloat(Edit1.Text);
b := StrToFloat(Edit2.Text);
if (a<1) then begin
  messagedlg(
    'untere grenze a muss groesser 1 sein!',
     mtError,[mbOK],0);
  Edit1.setfocus;
  exit;
  end;

  if (b<=a) then begin
  messagedlg(
    'obere grenze b muss groesser untere grenze a sein!',
     mtError,[mbOK],0);
  
  Edit2.setfocus;
  exit;
  end;

  for i := 0 to 100 do
  begin
    int := Random(100);
    if (int > a) and (int < b) then
    begin
      y1 := a * exp(int) - int;
    end;
  end;

  begin
    i :=Random(100);
    if (i>=0) and (i<ymax) and (i<=y1)then
    begin
   i:=1+random(100);

  end;

 a:= StrToInt(Edit1.Text);
 x:= StrToInt(Edit4.Text);
 b:= StrToInt(Edit2.Text);
 n:= StrToInt(Edit3.Text);
 ymax:=a*exp(b)-b;
 fi:=(b-a)*ymax/n;
 Edit5.Text := FloatToStr(fi);
 Edit5.Text:= Format('A= %10.3f FE',[fi]);
end;

 end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
end;

end.
mfg

[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]
[edit=Luckie]War kaputt. Und mIchael hat es wieder heile gemacht. Mfg, Luckie[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17
  Alt 19. Jun 2003, 15:06
Ich farge dich noch mal. Was soll das bitte sehr geben?
Delphi-Quellcode:
a:= StrToInt(Edit1.Text);
...;
b:= StrToInt(Edit2.Text);
Warum werden a und b noch mal die Werte aus den Edits zugewiesen? Nur diesmal nicht in ein Float, sondern in ein Integer kovertiert.

Und y1 wird immer noch nicht benutzt aber berechnet. Was soll das?

Kleiner Tipp: Schalt mal den Rechner aus, nimm dir Papier und Bleistift und schreib dir mal in Worten auf, was da passieren soll und zeichne dir das ganze mal grafisch mit einem Flußdiagramm oder so auf. Dann setzt du dich hin und programmierst das noch mal von vorne und laß erstmal alle Sicherheitsabfragen weg, das macht das ganze etwas übersichtlicher. Wenn du das dann hast, kannst du dich um die Feinheiten kümmern.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
vicii

Registriert seit: 19. Jun 2003
Ort: magdeburg
13 Beiträge
 
Delphi 5 Enterprise
 
#18
  Alt 24. Jun 2003, 13:03
tjo wie´s aussieht, gibtz keinerlei fehlermeldungen. aba irgendwie kommtz mir so vor, als ob immer die gleiche zufallszahl kommt und die anweisung nicht wiederholt wir für for i:=1 to n do. wobei n ne eingabegröße is....

Delphi-Quellcode:
unit montecarlo;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    START: TButton;
    ENDE: TButton;
    procedure ENDEClick(Sender: TObject);
    procedure STARTClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}


procedure TForm1.ENDEClick(Sender: TObject);
begin
     close
end;

procedure TForm1.STARTClick(Sender: TObject);
var a,b,d,fi,f,xz,yxz,yz,ymax: real;
    zaehler,i,n:integer;

begin


     a:=StrToFloat(Edit2.Text);
     b:=StrToFloat(Edit3.Text);
     n:=StrToInt(Edit4.Text);
     d:=b-a;
     ymax:=a*exp(b)-b;
     zaehler:=0;
     xz:= Random;
     yxz:=a*exp(xz)-xz;
     for i:=1 to n do
     begin
     zaehler:=0;
     randomize;
     xz:=Random;
     if (xz>a) and (xz<b) then
     yxz:=a*exp(xz)-xz;
     randomize;
     yz:=Random;
     if (yz<=yxz) then
     zaehler:=zaehler+1;
     end;
     f:=zaehler/n;
     fi:=(ymax*f*d)/n;
     Edit5.Text := FloatToStr(fi);
     Edit5.Text:= Format('= %10.2f FE',[fi]);

  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;

end;
end.
[Edit=Sakura]DELPHI-Tags eingefügt. BITTE IN ZUKUNFT SELBST MACHEN! MfG.[/Edit]
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#19
  Alt 24. Jun 2003, 16:02
Randomize darfst du nur einmal auf rufen und schon gar nicht innerhalb einer Schleife kurz vor Random.
Zitat von Delphi Hilfe:
Randomize initializes the built-in random number generator with a random value (obtained from the system clock). The random number generator should be initialized by making a call to Randomize, or by assigning a value to RandSeed.

Do not combine the call to Randomize in a loop with calls to the Random function. Typically, Randomize is called only once, before all calls to Random.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz