AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Überprüfen, ob Zahl in unregelmäßigen Bereichen
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von xZise · begonnen am 4. Sep 2006 · letzter Beitrag vom 5. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

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

  Alt 4. Sep 2006, 15:54
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 () sondern ich würde gerne einen kleinen Denkanstoß haben
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

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

  Alt 4. Sep 2006, 16:10
Ich verstehe nicht genau, was du machen willst. Was verstehst du unter einem "Bereich"?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#3

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

  Alt 4. Sep 2006, 16:25
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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#4

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

  Alt 4. Sep 2006, 16:50
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;
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#5

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

  Alt 4. Sep 2006, 17:01
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
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#6

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

  Alt 4. Sep 2006, 17:18
moin,

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

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. %
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#7

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

  Alt 4. Sep 2006, 17:37
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!
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

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

  Alt 4. Sep 2006, 17:38
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
  Mit Zitat antworten Zitat
oldmax

Registriert seit: 27. Apr 2006
Ort: Gieboldehausen
167 Beiträge
 
#9

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

  Alt 4. Sep 2006, 18:05
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
Noch ist mein Rechner mir zu Diensten.... ansonsten habe ich die Macht ihn zu vernichten !
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#10

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

  Alt 4. Sep 2006, 18:13
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.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz