AGB  ·  Datenschutz  ·  Impressum  







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

programmfehler bei selectionsort

Ein Thema von ichtyp · begonnen am 12. Nov 2007 · letzter Beitrag vom 12. Nov 2007
Antwort Antwort
ichtyp

Registriert seit: 12. Nov 2007
3 Beiträge
 
#1

programmfehler bei selectionsort

  Alt 12. Nov 2007, 16:36
hiho
ich soll ein programm schreiben welches die geschwindigkeit von sortieralgorythmen vergleicht.
bis jetzt bin ich am teil von selection sort.
das programm bringt, wenn ichs so starte, immer den folgenden fehler :

Code:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project2.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 004529AA in Modul 'Project2.exe'. Lesen von Adresse 00D88000'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK  Hilfe  
---------------------------
glaube das liegt daran, das man das selectionsort mehrmals hinterinander laufen lässt. aber warum genau ?


wenn ich was vergesssen hab zu erwähnen dann sagt bitte bescheid, wollte nicht 3 seiten text posten

danke schonmal ! lg ichtyp



Delphi-Quellcode:
var
  Form1: TForm1;
  schritte, anzahl:integer; // die editfelder variablen
  c,t1,t2:tLargeInteger; // für die zeitmessung
  time: extended;
  x: array of integer;
  a,b,tmp:integer; // tausch procedur variablen

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
randomize; // "würfeln"
queryperformancefrequency(c); // aktuelle zeit holen
memo1.Lines.clear; // memofelder leeren
memo2.Lines.clear;
memo3.Lines.clear;
memo4.Lines.clear;
memo5.Lines.clear;
memo6.lines.Clear;

end;



// ------ Selection sort ----------------------------//
procedure TForm1.Button1Click(Sender: TObject);
var h,i,j,k,t :integer;
begin
  memo5.Lines.clear;
  memo6.lines.Clear;
  anzahl:=strtoint(edit1.text); // variablen einlesen
  schritte:=strtoint(edit2.text);
  setlength (x, anzahl); // array länge zuweisen
  for i:=1 to anzahl do begin x[i]:=random(anzahl)+1 end;// das array befüllen mit zufallswerten
if checkbox1.Checked then // wenn checkbox an , dann zahlen ausgeben
    begin
     for i:=1 to anzahl do memo5.lines.add(inttostr(x[i]))
    end;



for h:=1 to schritte do
begin anzahl:=anzahl*i;
       queryperformancecounter(t1); // Zeitmessung start !

 for k:=1 to anzahl do
  begin
   for j:= k+1 to anzahl do begin
    if x[j] < x[k] then begin
    t:=x[j]; x[j]:=x[k]; x[k]:=t; end
    end
   end ;

 if checkbox1.Checked then // wenn checkbox an , dann zahlen ausgeben (sortiert, im feld daneben)
    begin
     for i:=1 to anzahl do memo6.lines.add(inttostr(x[i]))
    end;



queryperformancecounter(t2); // Zeitmessung stop !
 time:=(t2-t1)/c ;
memo1.lines.add(floattostr(time));

end;




end;
// ===================================================== //
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: programmfehler bei selectionsort

  Alt 12. Nov 2007, 16:55
Mach doch mal einen Breakpoint auf procedure TForm1.FormCreate.
Wird dieser Breakpoint erreicht oder kommt die Exception schon vorher ?
Was wird angezeigt, wenn du Strg+Alt+S drückst ? (=Ansicht -> Debugfenster->Aufrufstack)
Andreas
  Mit Zitat antworten Zitat
ichtyp

Registriert seit: 12. Nov 2007
3 Beiträge
 
#3

Re: programmfehler bei selectionsort

  Alt 12. Nov 2007, 17:00
der fehler tritt erst beim click auf den button auf, falls du das meinst.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: programmfehler bei selectionsort

  Alt 12. Nov 2007, 17:05
Delphi-Quellcode:
if checkbox1.Checked then // wenn checkbox an , dann zahlen ausgeben
  begin
     for i:=1 to anzahl do memo5.lines.add(inttostr(x[i]))
  end;
x ist eine dynamisches Array und startet bei 0 und endet bei anzahl -1.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: programmfehler bei selectionsort

  Alt 12. Nov 2007, 17:07
Na dann einen Breakpoint auf die 1. Anweisung in procedure TForm1.Button1Click() setzen, Programm starten und den Button drücken.
Dann mit F8 im Einzelschritt weiter, bis die Exception kommt.
Du kannst auch einen 2. Breakpoint in die Mitte der Procedure setzen und das Programm mit F9 weiterrennen lassen.
Mit dieser Methode kannst du den Befehl einkreisen, der die Exception auslöst.
Andreas
  Mit Zitat antworten Zitat
ichtyp

Registriert seit: 12. Nov 2007
3 Beiträge
 
#6

Re: programmfehler bei selectionsort

  Alt 12. Nov 2007, 17:17
den breakpoint erstell ich mit f5 , oder ?

oh, ich denke ich habs hinbekommen
hab die länge des arrays jetzt in der ersten schleife nochmal definiert, sonst kam das nicht hin ..

danke für die antworten !
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:27 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