Autor |
Beitrag |
wacker
Hält's aus hier
Beiträge: 14
win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
|
Verfasst: Mo 06.10.08 21:41
hallo leute
ich bearbeite grad ein projekt in info (P vs NP)
da gibts auch ne seite mit passenden algorithmen, dummerweise kann ich die nicht runterladen oder kompilieren
www.th.schule.de/th/...aterial/akweb/ak.htm
bei den beispiel .pas dateien handelt es sich scheinbar um console anwendungen
wie krieg ich die unter delphi 2009 zum laufen?
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.10.08 22:06
Das kann ich leider nicht reproduzieren, die lassen sich bei mir wunderbar herunterladen.
Die Algorithmen sollten auch funktionieren, das einzige, was Fehler verursacht hat sind im ersten Beispiel die Units, die ich einfach aus der uses gelöscht habe, und danach die Funktion gettime, die zur Zeitmessung dienen sollte. Die muss eben durch die neueren ersetzt werden. Der Algorithmus lief jedenfalls ohne Änderungen problemlos, insofern stellt sich mir die Frage, ob du jetzt einfach ohne irgendetwas zu tun lauffähige Programme willst? Oder wo lag denn das Problem?
Jedenfalls musst du die als Konsolenprogramme kompilieren, also {$APPTYPE CONSOLE} oben reinschreiben, wie du es beim Erstellen eines neuen Konsolenprogramms im Quelltext siehst, und die angezeigten Fehler beheben...
|
|
wacker 
Hält's aus hier
Beiträge: 14
win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
|
Verfasst: Mo 06.10.08 22:27
du hast also die uses gelöscht...
okay  aber durch welche neue funktion muss ich gettime ersetzen?
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.10.08 22:42
Zur Zeitmessung in Millisekunden eignet sich wohl am besten GetTickCount, die ist zwar nicht besonders genau, dafür aber einfach zu benutzen. Diese gibt die Anzahl der Millisekunden seit Systemstart an, d.h. du bekommst durch die Differenz zweier Werte die Zeit dazwischen in Millisekunden.
|
|
wacker 
Hält's aus hier
Beiträge: 14
win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
|
Verfasst: Mo 06.10.08 22:47
hm ich habs mal probiert aber es geht nicht (kennt anscheinend den bezeichner nicht)
kannst du mir bitte die programme compilieren und hochladen?
|
|
jaenicke
      
Beiträge: 19321
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.10.08 22:52
GetTickCount befindet sich in der Unit Windows.
|
|
wacker 
Hält's aus hier
Beiträge: 14
win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
|
Verfasst: Mo 06.10.08 23:04
edit: hat nicht geklappt
es werden immer 0 sekunden angezeigt
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73:
| {$APPTYPE CONSOLE}
PROGRAM quicksortzeit; USES Windows;
TYPE Index = 1..30000; Feld = ARRAY[Index] OF Integer; VAR a:Feld; max,z:word; i,j,k,vert:longint; dauer,et,at:extended;
PROCEDURE sortieren(links,rechts:index); VAR i,j:index; x,h:index; Begin i:=links; j:=rechts; if j>i then begin x:=a[rechts]; repeat while a[i]<x do inc(i); while a[j]>=x do dec(j); if i<j then begin h:=a[i]; a[i]:=a[j]; a[j]:=h; inc(vert); inc(i); dec(j); end; until i>j; h:=a[i]; a[i]:=x; a[rechts]:=h; sortieren(links,j); sortieren(i+1,rechts); end; end; PROCEDURE Zufallsbelegung(VAR a: Feld); VAR i: Index; BEGIN Randomize; FOR i := 1 TO max DO begin a[i]:=random(max); end; writeln; END; PROCEDURE Ausgabe(VAR a: Feld); VAR i: Index; BEGIN writeLn('Die sortierten Zahlen:'); FOR z := 1 TO max DO write(a[z],' '); END;
BEGIN vert:=0; Write ('Wieviele Zahlen sollen sortiert werden (max. 30000)? '); Readln(max); writeLn('Sortieren von ', max, ' ganzen Zahlen.'); Zufallsbelegung(a);
at:=gettickcount; Sortieren(1,max);
et:=gettickcount; dauer:=et-at; writeln('Dauer des Sortiervorganges: ',dauer:10:8,' Sekunden'); writeln('Anzahl der Vertauschungen: ',vert); Readln; Ausgabe(a); readln; END. |
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Horst_H
      
Beiträge: 1654
Erhaltene Danke: 244
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Di 07.10.08 08:34
Hallo,
manche Dinge sind eben in weniger als einer Millisekunde fertig....
Lass Dir doch at und et auch ausgeben, wenn die auch null sind stimmt was nicht.
Gruß Horst
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 07.10.08 12:26
kann man "at" einfach so benutzen, obwohl es ein reserviertes Wort is?
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Di 07.10.08 12:42
Bergmann89 hat folgendes geschrieben : | kann man "at" einfach so benutzen, obwohl es ein reserviertes Wort is? |
Seit wann ist at ein reserviertes Wort?
Delphi-Quelltext 1: 2: 3: 4:
| dauer := gettickcount; Sortieren(1,max); dauer := (gettickcount - dauer) / 1000; writeln('Dauer des Sortiervorganges: ',dauer:10:8,' Sekunden'); |
GetTickCount ermittelt die Millisekunden, die seit dem Systemstart vergangen sind, daher ist musst du noch durch 1000 rechnen, um auf Sekunden zu gelangen.
Bei mir funktioniert es wunderbar, 30.000 Zahlen in etwa 0.015 Sekunden.
Grüße,
Marc
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mi 08.10.08 09:16
sorry, hab da was verwechselt und mich von dem Fettdruck (at) irre machen lassen...
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Horst_H
      
Beiträge: 1654
Erhaltene Danke: 244
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Mi 08.10.08 10:10
Hallo,
eigentlich fehlt jetzt eine Aussage von wacker.
Gruß Horst
|
|
|