Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - brauche hilfe bei alten delphi programm
wacker - Mo 06.10.08 21:41
Titel: brauche hilfe bei alten delphi programm
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
http://www.th.schule.de/th/lfk-informatik/alteSeite/material/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 - Mo 06.10.08 22:06
Das kann ich leider nicht reproduzieren, die lassen sich bei mir wunderbar herunterladen. :nixweiss:
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? :nixweiss:
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 - Mo 06.10.08 22:27
du hast also die uses gelöscht...
okay :) aber durch welche neue funktion muss ich gettime ersetzen?
jaenicke - 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 - 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 - Mo 06.10.08 22:52
GetTickCount befindet sich in der Unit Windows.
wacker - Mo 06.10.08 23:04
edit: hat nicht geklappt
es werden immer 0 sekunden angezeigt
Delphi-Quelltext
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 - 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 - Di 07.10.08 12:26
kann man "at" einfach so benutzen, obwohl es ein reserviertes Wort is?
Marc. - 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 - Mi 08.10.08 09:16
sorry, hab da was verwechselt und mich von dem Fettdruck (at) irre machen lassen...
Horst_H - Mi 08.10.08 10:10
Hallo,
eigentlich fehlt jetzt eine Aussage von wacker.
Gruß Horst
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!