Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Höchster Wert aus Registry (https://www.delphipraxis.net/94160-hoechster-wert-aus-registry.html)

Neutral General 17. Jun 2007 12:56

Re: Höchster Wert aus Registry
 
Hi,

Ich würde aber für den Anfang Bubblesort empfehlen. Ist natürlich um einiges langsamer aber fürn anfang um einiges verständlicher und einfacher... Und wenn du nicht sooo viele Werte hast dann reicht das eigentlich auch aus...

Gruß
Neutral General

kaschte 17. Jun 2007 13:03

Re: Höchster Wert aus Registry
 
Zitat:

Zitat von Luckie
Delphi-Quellcode:
var
  MyIntArray: array of Integer
  i: Integer;
begin
  SetLength(MyIntArray, sl.Count);
  for i := 0 to sl.Count - 1 do
  begin
    MyIntArray[i] := StrToInt(sl.Strings[i]);
  end;

Meine Stringlist heisst reglist, wo kommt jetzt also der Name reglist rein?


@Neutral General

Ok, also Bubblesort versteh ich glaubs, wie kann ich jetzt da es sortiert ist den höchsten Wert auslesen und diesen dann öffnen?

Luckie 17. Jun 2007 13:08

Re: Höchster Wert aus Registry
 
Und meine StringList heißt sl.

kaschte 17. Jun 2007 13:22

Re: Höchster Wert aus Registry
 
Ok, jetzt funktionieren beide varianten mit Quicksort und Bubblesort (werde wahrscheinlich Quicksort nehmen da schneller). Wie kann ich jetzt den höchsten Wert aus dem sortierten Array auslesen?

mkinzler 17. Jun 2007 13:30

Re: Höchster Wert aus Registry
 
Zitat:

Wie kann ich jetzt den höchsten Wert aus dem sortierten Array auslesen?
Je nach Sortierungsreihenfolge. Entweder den 1. oder den letzten

arnold mueller 17. Jun 2007 13:33

Re: Höchster Wert aus Registry
 
Wie meinst Du das? Wie man auf ein Element des Arrays zugreift, oder wie man den größten Wert im Array ermittelt?

Wie man auf ein Element des Array zugreift weißt Du ja bereits, da Du ja auch schon Daten in das Array geschrieben hast. Also einfach anders herum. Für den zweiten Fall stell Dir einfach vor, das Array wären Uno Karten in Deiner Hand, und Du hast Dir viel Mühe gegeben sie nach dem Wert zu sortieren. Wo würdest Du nun die Karte mit dem höchsten Wert suchen. Wahrscheinlich ganz links oder ganz rechts, oder?

-
arno

kaschte 17. Jun 2007 13:35

Re: Höchster Wert aus Registry
 
Delphi-Quellcode:
procedure Quick_Sort(var A: array of Integer);

 procedure QuickSort(var A: array of Integer; iLo, iHi: Integer);
 var
   Lo, Hi, Mid, T: Integer;
 begin
   Lo := iLo;
   Hi := iHi;
   Mid := A[(Lo + Hi) div 2];
   repeat
     while A[Lo] < Mid do Inc(Lo);
     while A[Hi] > Mid do Dec(Hi);
     if Lo <= Hi then
     begin
       T := A[Lo];
       A[Lo] := A[Hi];
       A[Hi] := T;
       Inc(Lo);
       Dec(Hi);
     end;
   until Lo > Hi;
   if Hi > iLo then QuickSort(A, iLo, Hi);
   if Lo < iHi then QuickSort(A, Lo, iHi);
 end;

begin
 QuickSort(A, Low(A), High(A));
end;
Das ist der Sortierungscode und mit dem hier ruf ich ihn auf. Arrayname ist MyIntArray:

Delphi-Quellcode:
   for I:=Low(MyIntArray) to High(MyIntArray) do
   MyIntArray[I]:=Random(High(Integer));

 Quick_Sort(MyIntArray);
Welche Reihenfolge wird hier gemacht und wie lese ich den Wert jetzt aus?

Neutral General 17. Jun 2007 13:41

Re: Höchster Wert aus Registry
 
Hi,

Im Notfall lässt du dir einfach mal Array[0] und Array[High(Array)] anzeigen und dann siehst du ja spätestens wie rum sortiert wurde ;)

Gruß
Neutral General

kaschte 17. Jun 2007 13:48

Re: Höchster Wert aus Registry
 
Delphi-Quellcode:
procedure TForm1.Deaktivieren1Click(Sender: TObject);
var regist: TRegistry;
reglist : Tstringlist;
status, i : integer;
  MyIntArray: array of Integer;
   arr: array[0..100] of integer;
begin
  regist:=TRegistry.Create;
  regist.RootKey:=HKEY_CURRENT_USER;
  regist.OpenKey('Software\***\*\*', true);
  reglist := TStringList.Create;
  status := 1;
  regist.GetKeyNames(reglist);
    SetLength(MyIntArray, reglist.Count);
  for i := 0 to reglist.Count - 1 do
  begin
    MyIntArray[i] := StrToInt(reglist.Strings[i]);
  end;
   for I:=Low(MyIntArray) to High(MyIntArray) do
   MyIntArray[I]:=Random(High(Integer));

 Quick_Sort(MyIntArray);

regist.free;
label3.caption := IntToStr(MyIntArray[0]);
Bei diesem Code kommt die Fehlermeldung:
Project *.exe raised exception class EConvertError with message "4226805319' is not a valid integer value'. Process stopped.

4226805319 ist übrigens der höchste Wert neben ihm gibt es allerdings nur noch 0 werds aber noch auf nem anderen PC probieren dort hat es mehrere.

EDIT2: Die Fehlermeldung auf dem anderen PC gab den mittleren Wert als is not a valid iteger value an.

Ralf Kaiser 17. Jun 2007 14:28

Re: Höchster Wert aus Registry
 
Zitat:

Zitat von Luckie
Er wird da schon einen Sortieralgorithmus benutzen müssen.

Nö.

Um den höchsten Wert aus einem Array rauszusuchen muss amn es nicht sortieren. Eine Variable mit 0, -1 oder leeren String initialisieren und dann mit allen Werten im Array vergleichen, ist ein Wert höher diesen Wert merken. So kommt man auch ohne sortieren aus.

Also:

Delphi-Quellcode:
maxWert := -1
for i := 0 to obereArraygrenze do begin

  if aArray[i] > maxWert then maxWert := aArray[i]

end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:49 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz