![]() |
Ü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 |
Re: Überprüfen, ob Zahl in unregelmäßigen Bereichen
Ich verstehe nicht genau, was du machen willst. Was verstehst du unter einem "Bereich"?
|
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:
greetz
foreach Bereich in Bereiche do
if ((Zahl >= Bereich.UntereGrenze) and (Zahl <= Bereich.ObereGrenze)) then //Zahl ist in diesem Bereich Mike |
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; |
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:
Nur bekomme ich eine AV bei folgenden (?):
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; 1 2 Zahl = 1 Ich kann mir schon irgendein dummen Fehler denken :D |
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. % |
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! |
Re: Überprüfen, ob Zahl in unregelmäßigen Bereichen
Zitat:
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 |
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:
etc.
Zahlengruppe[1] :=';1;2;3;';
Zahlengruppe[2] :=';4;5;6;'; Zahlengruppe[3] :=';77;106;122;'; Zahlengruppe[4] :=';10;20;30;';
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 |
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:
Und es tut seinen Dienst. :bounce2:
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 Uhr. |
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