Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Überprüfen, ob Zahl in unregelmäßigen Bereichen (https://www.delphipraxis.net/76437-ueberpruefen-ob-zahl-unregelmaessigen-bereichen.html)

xZise 4. Sep 2006 15:54


Überprüfen, ob Zahl in unregelmäßigen Bereichen
 
Ich habe bestimmte Bereiche in einem Array gespeichert (Deren Länge).

Dann habe ich eine Zahl die in einem der Bereiche ist.
Wie kann ich am besten überprüfen in welchen Bereichen die Zahl ist?

Ich hatte zuerst an ein Case gedacht, aber das Problem ist, das es en dyn. Array ist...

PS: Ich will keinen Code snorren (:D) sondern ich würde gerne einen kleinen Denkanstoß haben :D

3_of_8 4. Sep 2006 16:10

Re: Überprüfen, ob Zahl in unregelmäßigen Bereichen
 
Ich verstehe nicht genau, was du machen willst. Was verstehst du unter einem "Bereich"?

JasonDX 4. Sep 2006 16:25

Re: Überprüfen, ob Zahl in unregelmäßigen Bereichen
 
Wie speicherst du diese Bereiche?
Das einfachste wird sein, wenn du Schritt fuer Schritt jeden durchgehst und ueberpruefst, ob die Zahl in dem Bereich liegt.
In Pseudocode:
Code:
foreach Bereich in Bereiche do
  if ((Zahl >= Bereich.UntereGrenze) and (Zahl <= Bereich.ObereGrenze)) then
    //Zahl ist in diesem Bereich
greetz
Mike

Sidorion 4. Sep 2006 16:50

Re: Überprüfen, ob Zahl in unregelmäßigen Bereichen
 
Delphi-Quellcode:
iLoop:=0;
iTest:=0;
Result:=-1;
While iLoop<Length(Bereiche)
Do Begin
  iTest:=iTest+Bereiche[iLoop];
  If _iZahl<=iTest
  Then Begin
    Result:=iLoop;
    Break;
  End;
End;

xZise 4. Sep 2006 17:01

Re: Überprüfen, ob Zahl in unregelmäßigen Bereichen
 
Also ich speichere eigentlich nur die Länge der "Bereiche"...
Und ein Bereich ist eine Spanne von zusammenhängenden Zahlen:
1, 2, 3, 4, 5, 6, 7, 8, 9

Das wären zum Beispiel 4 Bereiche.

Und nun habe ich eine Zahl zwischen 1 und 9 und möchte gucken, in welchen Bereich diese liegt.

Ich habe mal darüber nachgedacht und folgendes gedacht:
Delphi-Quellcode:
BereicheSum := 0;
for i := 0 to High(Bereiche) do begin
  if (Zahl >= BereicheSum) and (Zahl <= BereicheSum + Bereiche[i]) then
    Showmessage('Bereich gefunden: ' + IntToStr(i));
  BereicheSum := BereicheSum + Bereiche[i];
end;
Nur bekomme ich eine AV bei folgenden (?):
1 2
Zahl = 1

Ich kann mir schon irgendein dummen Fehler denken :D

bigg 4. Sep 2006 17:18

Re: Überprüfen, ob Zahl in unregelmäßigen Bereichen
 
moin,

Willst du nun wissen wie viele Stellen eine Zahl hat?
Dann denk mal an unser heutiges Zahlensystem. Wie lautet da die Basis? :shock:
Wer zwei gesunde Hände hat, dürfte wohl drauf kommen. :stupid:

x Basis
xx Basis^2
xxx Basis^3
xxxx

Ansonsten könntest du versuchen aus allen Zahlen einen Durschnittswert zu bilden +- einem Toleranzwert von sagen wir 1-5. %

xZise 4. Sep 2006 17:37

Re: Überprüfen, ob Zahl in unregelmäßigen Bereichen
 
Nein nix mit Stellen: Ich habe eben bestimmte Bereiche... Ich weiß eigentlich nicht wie ich's anders erklären soll!
Hier ist ein Versuch:

Du hast eine zufällige Zahl: x
Und wir haben ein array of bereiche. Diese Bereiche kennzeichenen eine Länge. Sagen wir: b(1), b(2), b(3), b(4), b(5)
Nun ergeben diese Bereiche zusammen eine Länge: l = b(1) + b(2) + b(3) + b(4) + b(5)

Jetzt wollen wir wissen, wo dieses "x" ist. Das heißt ob diese Zahl in einen bereiche-Item ist.
Also könnte man sagen:
Ist im Bereich Y, wenn x - b(1 bis y) <= 0!

negaH 4. Sep 2006 17:38

Re: Überprüfen, ob Zahl in unregelmäßigen Bereichen
 
Zitat:

1, 2, 3, 4, 5, 6, 7, 8, 9

Das wären zum Beispiel 4 Bereiche.

Und nun habe ich eine Zahl zwischen 1 und 9 und möchte gucken, in welchen Bereich diese liegt.
Ich gehe mal von diesen Angaben aus.

Delphi-Quellcode:
const
  Bereich: array[1..9] of Byte = (0,0,1,2,2,2,2,3,3);
begin
  assert(Zahl in [1...9], 'Zahl muß zwischen 1 bis 9 liegen');

  BereichIndex := Bereich[Zahl];
end;

in der Variablen BereichIndex findest du den Index des Bereiches

0 = 1,2
1 = 3
2 = 4,5,6,7
3 = 8,9

Gruß Hagen

oldmax 4. Sep 2006 18:05

Re: Überprüfen, ob Zahl in unregelmäßigen Bereichen
 
Hi
Und auch, wenn mir wieder so ein superschlauer sagt, Strings sind "Strohdumm", langsam und uneffizient...
Wie wär es mit einem Array von Strings..
etwa so
Delphi-Quellcode:
Zahlengruppe[1] :=';1;2;3;';
Zahlengruppe[2] :=';4;5;6;';
Zahlengruppe[3] :=';77;106;122;';
Zahlengruppe[4] :=';10;20;30;';
etc.

Delphi-Quellcode:
gefunden:=False;
GuppenNr:=1;
While (GruppenNummer<=MaxNr) and not Gefunden do
begin
  if Pos(';'+IntToStr(ReferenzZahl)+';',Zahlengruppe[GruppenNr])>0 then Gefunden:=True
  else GruppenNr:=GruppenNr+1;
end;

Damit hast du den Vorteil, auch Zahlen in beliebiger Reihenfolge zu gruppieren. Wichtig ist halt, das du das Semikolon am Anfanf und auch am Schluß setzt, damit er mehrstellige Zahlen findet.
Ist doch gar nicht so schwer......
Ach ja, ich sollte noch ergänzen
if Gefunden then ergebnis:=Zahlengeruppe[GuppenNr] else Ergebnis:= 'nicht geführt';

Was immer du zurückbekommst ist erst einmal ein String, den du bei positiven Ergebnis ja Zerlegen kannst, oder einfach nur sagst, "Ok, war nix".
Gruß oldmax

xZise 4. Sep 2006 18:13

Re: Überprüfen, ob Zahl in unregelmäßigen Bereichen
 
Okay dummerweise hätte ich noch das Const-Array belegen müssen (Es wäre dann ein Var-Array).... Aber so funktionierts:
Delphi-Quellcode:
  Weightings := 0;
  for i := 0 to High(Weighting) do begin
    if (Durchschnitt > Weightings) and (Durchschnitt <= Weightings + Weighting[i]) then begin
      lEntscheidung.Caption := getSelectedItem(i + 1, lwEntscheidungen).Caption;
      break;
    end;
    Weightings := Weightings + Weighting[i];
  end;
Und es tut seinen Dienst. :bounce2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz