Einzelnen Beitrag anzeigen

tankm26

Registriert seit: 18. Sep 2004
Ort: Wentorf
87 Beiträge
 
Delphi 7 Personal
 
#7

Re: Zerlegesortieren - Probleme (ungültige Zeigeroperation)

  Alt 8. Jan 2007, 22:03
Moin!

Inzwischen bin ich wieder ein ganzes Stück weiter, stoße jetzt aber auf ein erstaunliches Problem:

Die Zeitmessung, für die Ermittlung der Effektivität unerlässlixh, funktioniert nicht merh. Worann kann das liegen?

neu:
Delphi-Quellcode:
var
  a,b1,c,b2:int64;
  qq: single;



implementation
uses unit1;

procedure zeitmessung(w,s,o:integer);
begin
  if w=0 then begin
    QueryPerformanceFrequency(a); //Start
    QueryPerformanceCounter(b1);
  end;
  if w=1 then begin
    QueryPerformanceCounter(b2);
    qq:=qq+( (b2-b1) /a);
    if o=1 then begin
      if s=1 then unit1.Form1.lauswahl.Caption:=format('Zeit: %g s',[qq/anzahldurch]);
      if s=2 then unit1.Form1.laustausch.Caption:=format('Zeit: %g s',[qq/anzahldurch]);
      if s=3 then unit1.Form1.leinfuege.Caption:=format('Zeit: %g s',[qq/anzahldurch]);
      if s=4 then unit1.Form1.lzereinf.Caption:=format('Zeit: %g s',[qq/anzahldurch]);
      if s=5 then unit1.Form1.lzeraus.Caption:=format('Zeit: %g s',[qq/anzahldurch]);
      if s=6 then unit1.Form1.lquick.Caption:=format('Zeit: %g s',[qq/anzahldurch]);
    end;
  end;
end;

procedure auswahlsort;
var ws,i,q,a:integer;
begin
  zeitmessung(0,1,0); //starte zeitmessung
 //mausae(0);
 //Auswahlsort.
 //Hier wird, vom Anfang des arrays aus, das jeweils kleinste Element herausgesucht und der unsor-
 //tierten Teilliste hinzugefügt. Dieses wird für jedes Feld bis zum -2. vom Ende aus durchgeführt.
  for i:=0 to max-2 do begin
    q:=i;
    for ws:=i+1 to max-1 do
     if nummern[ws]<nummern[q] then
      q:=ws;
    a:=nummern[i];
    nummern[i]:=nummern[q];
    nummern[q]:=a;
  end;
  zeitmessung(1,1,0); //stope zeitmessung
end;
alt:
Delphi-Quellcode:
//unit1:
var
  Form1: TForm1;
  werte,mPunkt, hilfsliste, nummern,nummernsave: array of Integer;
  karten: array of TBitmap;
  max,anzahldurch, AnzahlTeillisten,ss,lt, // für zerlegesort (lt=Länge der Teillisten
  hi,lu,x :integer; //für squicksort
  a,b1,c,b2:int64;
  qq: extended;

implementation

{$R *.dfm}

procedure tForm1.wimageload;
var w:integer;
begin
  for w:=1 to 33 do begin
    karten[w-1]:=TBitmap.Create;
    karten[w-1].LoadFromFile(IntToStr(w)+'.bmp');
  end;
end;

procedure TForm1.zeitmessung(w,s,o:integer);
begin
  if w=0 then begin
    QueryPerformanceFrequency(a); //Start
    QueryPerformanceCounter(b1);
  end;
  if w=1 then begin
    QueryPerformanceCounter(b2);
    qq:=qq+( (b2-b1) /a);
    if o=1 then begin
      if s=1 then lauswahl.Caption:=format('Zeit: %g s',[qq/anzahldurch]);
      if s=2 then laustausch.Caption:=format('Zeit: %g s',[qq/anzahldurch]);
      if s=3 then leinfuege.Caption:=format('Zeit: %g s',[qq/anzahldurch]);
      if s=4 then lzereinf.Caption:=format('Zeit: %g s',[qq/anzahldurch]);
      if s=5 then lzeraus.Caption:=format('Zeit: %g s',[qq/anzahldurch]);
      if s=6 then lquick.Caption:=format('Zeit: %g s',[qq/anzahldurch]);
    end;
  end;
end;



//unit2:
procedure auswahlsort;
var ws,i,q,a:integer;
begin
  unit1.Form1.zeitmessung(0,1,0); //starte zeitmessung
 //mausae(0);
 //Auswahlsort.
 //Hier wird, vom Anfang des arrays aus, das jeweils kleinste Element herausgesucht und der unsor-
 //tierten Teilliste hinzugefügt. Dieses wird für jedes Feld bis zum -2. vom Ende aus durchgeführt.
  for i:=0 to max-2 do begin
    q:=i;
    for ws:=i+1 to max-1 do
     if nummern[ws]<nummern[q] then
      q:=ws;
    a:=nummern[i];
    nummern[i]:=nummern[q];
    nummern[q]:=a;
  end;
  unit1.Form1.zeitmessung(1,1,0); //stope zeitmessung
end;
Angehängte Dateien
Dateityp: rar sortierverfahren_mit_grafik_0.6_394.rar (353,3 KB, 2x aufgerufen)
Dateityp: rar sortierverfahren_mit_grafik_0.1_941.rar (336,2 KB, 1x aufgerufen)
Wieland S.
  Mit Zitat antworten Zitat