Autor Beitrag
wacker
Hält's aus hier
Beiträge: 14

win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 14

win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
BeitragVerfasst: Mo 06.10.08 22:27 
du hast also die uses gelöscht...
okay :) aber durch welche neue funktion muss ich gettime ersetzen?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 14

win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 06.10.08 22:52 
GetTickCount befindet sich in der Unit Windows.
wacker Threadstarter
Hält's aus hier
Beiträge: 14

win XP, win vista Ultimate, ubuntu
CodeGear 2007 Enterprise (testversion), delphi 5
BeitragVerfasst: Mo 06.10.08 23:04 
edit: hat nicht geklappt
es werden immer 0 sekunden angezeigt

ausblenden volle Höhe 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; {vertauschen}
          inc(vert);
          inc(i);
          dec(j);
        end;
  until i>j;
  h:=a[i];
  a[i]:=x; { letztes Element an richtige Stelle}
  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);
    {write(a[i],' ');}
  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 user profile iconNarses: Delphi-Tags hinzugefügt
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Di 07.10.08 12:42 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
kann man "at" einfach so benutzen, obwohl es ein reserviertes Wort is?

Seit wann ist at ein reserviertes Wort?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Mi 08.10.08 10:10 
Hallo,

eigentlich fehlt jetzt eine Aussage von wacker.

Gruß Horst