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; {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 - 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

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?


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