Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zahlen zwischen zwei Größen filtern (https://www.delphipraxis.net/185043-zahlen-zwischen-zwei-groessen-filtern.html)

JulianT 11. Mai 2015 07:49

Delphi-Version: XE4

Zahlen zwischen zwei Größen filtern
 
Hallo, mein Problem ist folgendes: Ich gebe einen Wert Größe ein. Sagen wir 145 (Angaben logischerweise in mm). Im StringGrid möchte ich nun nur Einträge anzeigen lassen, die zwischen der Min und der Max Zahl liegen. In dem Fall zwischen 160 und 200. Rein theoretisch sollte es natürlich in dem Fall nicht angezeigt werden, wird es aber.

Hier der Code der problematischen Zeile

Code:
for i:= 1 to 5 do
  if (größe>min) and (größe<max) then
Größe ist kleiner als min, aber auch kleiner als Max, deswegen läuft das Programm dann weiter mit dem Abarbeiten des Codes, richtig?

Wie kann man das umsetzen, dass er sozusagen so etwas wie in Mathe umsetzt (Geht ja leider nicht in Delphi): Min<=Größe<=Max

Danke für eure Antworten.

baumina 11. Mai 2015 07:56

AW: Zahlen zwischen zwei Größen filtern
 
Zitat:

Zitat von JulianT (Beitrag 1300957)
Wie kann man das umsetzen, dass er sozusagen so etwas wie in Mathe umsetzt (Geht ja leider nicht in Delphi): Min<=Größe<=Max

Delphi-Quellcode:
If ((Groesse >= Min) and (Groesse <= Max)) then ...

ringli 11. Mai 2015 07:59

AW: Zahlen zwischen zwei Größen filtern
 
Setz mal in den Projektoptionen unter Delphi-Compiler | Compilieren die Option Vollständige Boolsche Auswertung auf True.

bcvs 11. Mai 2015 08:04

AW: Zahlen zwischen zwei Größen filtern
 
Zitat:

Zitat von JulianT (Beitrag 1300957)
Wie kann man das umsetzen, dass er sozusagen so etwas wie in Mathe umsetzt (Geht ja leider nicht in Delphi): Min<=Größe<=Max

Dein Ansatz ist schon richtig (bis auf das >= und <=, falls so gefordert) und wenn deine Beispielzahlen stimmen (größe=145, min=160, max=200), wird der If-Teil nicht ausgeführt. Wenn doch, stimmt irgendwas mit der Zuweisung der Variablen nicht.

bernau 11. Mai 2015 08:06

AW: Zahlen zwischen zwei Größen filtern
 
Man kann auch
Delphi-Quellcode:
InRange
aus der unit math nehmen.

Delphi-Quellcode:
If InRange(groesse,min,max) then

bcvs 11. Mai 2015 08:07

AW: Zahlen zwischen zwei Größen filtern
 
Zitat:

Zitat von ringli (Beitrag 1300960)
Setz mal in den Projektoptionen unter Delphi-Compiler | Compilieren die Option Vollständige Boolsche Auswertung auf True.

Das bringt doch nichts. Wegen dem And wird dieser boolsche Ausdruck doch sowieso vollständig ausgewertet.

Perlsau 11. Mai 2015 08:08

AW: Zahlen zwischen zwei Größen filtern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Versteh ich nicht, warum das nicht gehen sollte ... vielleicht wegen der deutschen Sonderzeichen wie ö und ß ... Bei mir funktioniert der folgende Code einwandfrei, wie die angehänge Grafik belegt:
Delphi-Quellcode:
procedure TFrame_Test.Button1Click(Sender: TObject);
Const
  Zahlen : Array[1..5] Of Integer = (12,25,66,80,92);
  Min = 25;
  Max = 80;
Var
  i : Integer;
begin
  Lbl_Index.Caption := '';
  For i := 1 To 5 Do
  If (Zahlen[i] >= Min) And (Zahlen[i] <= Max) Then
     Lbl_Index.Caption := Lbl_Index.Caption + IntToStr(Zahlen[i]) + ' ';
end;
Vollständige Boolsche Auswertung steht bei mir auf False ...

Zitat:

Zitat von JulianT (Beitrag 1300957)
Größe ist kleiner als min, aber auch kleiner als Max, deswegen läuft das Programm dann weiter mit dem Abarbeiten des Codes, richtig?

Wenn Größe kleiner als Min ist, dann wird Größe aussortiert und nicht angezeigt. Angezeigt werden nur die Werte, die zwischen Min und Max liegen, so wie du das in deinem Eingangsposting dargestellt hast. Das = nach dem > bzw. nach dem < bedeutet, daß der Wert von Min bzw. Max mit einbezogen wird, also inklusive, ohne = wäre es exklusive.

JulianT 11. Mai 2015 08:10

AW: Zahlen zwischen zwei Größen filtern
 
Funktioniert, allerdings im Context nur bedingt. Aber das ist nicht auf meine Frage bezogen :=)

baumina 11. Mai 2015 08:17

AW: Zahlen zwischen zwei Größen filtern
 
Wie war die Frage noch gleich? :gruebel:

Perlsau 11. Mai 2015 08:37

AW: Zahlen zwischen zwei Größen filtern
 
Die Frage lautete:

Wie kann man das umsetzen, dass er sozusagen so etwas wie in Mathe umsetzt (Geht ja leider nicht in Delphi): Min<=Größe<=Max

Und genau das habe ich gemacht.

@JulianT

Was daran nicht auf deine Frage bezogen sein soll, erschließt sich mir nicht. Wenn du etwas anderes gemeint als geschrieben hast, könntest du noch einmal deine Frage oben betrachten und vielleicht neu stellen. Was also willst du als Ergebnis haben: Die Zahlen, die zwischen Min und Max liegen, oder die Zahlen, die außerhalb liegen, inklusive oder exklusive. Oder ging's vielleicht doch um's richtige Kaffeekochen und ich hab da was falsch verstanden? :lol:

Achso, fast vergessen: Welcher Kontext?

PMM 11. Mai 2015 10:55

AW: Zahlen zwischen zwei Größen filtern
 
Wie wäre es mit
(MIN <= WERT) AND (WERT <= MAX)
dann wären wir auch optisch nahe bei MIN<=WERT<=MAX...

Perlsau 11. Mai 2015 11:36

AW: Zahlen zwischen zwei Größen filtern
 
Das sind doch Kindereien! Geht's beim Programmieren jetzt etwa darum, irgend ein Formelbild aus der Mathematik im Quellcode optisch nachzubilden? Oder geht's um die Funktion, den Algorithmus, um das Ergebnis?

PMM 11. Mai 2015 11:52

AW: Zahlen zwischen zwei Größen filtern
 
Ich würde die Optik eines Programmes nicht als "Kinderei" abtun. Die Wartbarkeit eines Programmes hat sehr viel mit der Lesbarkeit desselben zu tun. Also wenn man das Formelbild leicht nachbilden kann - was spricht dagegen? Außerdem hatte der OP ja offenbar genau an der Stelle ein Problem.

JasonDX 11. Mai 2015 11:53

AW: Zahlen zwischen zwei Größen filtern
 
Lesbarkeit ist durchaus ein wichtiger Aspekt. Wenn man selbst eine bestimmte Schreibweise für leserlicher hält, und diese auch nicht gegen die Styleguides des Projektes verstößt, ist nichts dagegen einzuwenden, den persönlichen Präferenzen zu folgen.
Bloß als Beispiel: Auch wenn alle folgenden Bedingungen aufs selbe hinauslaufen, unterscheiden sie sich durchaus in Lesbarkeit.
Delphi-Quellcode:
if (min <= value) and (value <= max) then
if (value <= max) and (min <= value) then
if (value >= min) and (max <= value) then
if not ((max < value) or (value < min)) then
Das ist aber im Endeffekt ein subjektives Empfinden.


Was das Problem im Thread betrifft: Sofern die Vorschläge hier das Problem nicht lösen, bedarf es wahrscheinlich einer genaueren Erklärung des Problems, mit mehr Code. (Sind immer nur 5 Elemente im StringGrid? Wie werden Elemente ein/ausgeblendet?...)

p80286 11. Mai 2015 12:09

AW: Zahlen zwischen zwei Größen filtern
 
Zitat:

Zitat von bcvs (Beitrag 1300963)
Zitat:

Zitat von JulianT (Beitrag 1300957)
Wie kann man das umsetzen, dass er sozusagen so etwas wie in Mathe umsetzt (Geht ja leider nicht in Delphi): Min<=Größe<=Max

Dein Ansatz ist schon richtig (bis auf das >= und <=, falls so gefordert) und wenn deine Beispielzahlen stimmen (größe=145, min=160, max=200), wird der If-Teil nicht ausgeführt. Wenn doch, stimmt irgendwas mit der Zuweisung der Variablen nicht.

Der Aussage schließe ich mich mal an!

Gruß
K-H

frankyboy1974 11. Mai 2015 12:10

AW: Zahlen zwischen zwei Größen filtern
 
Hallo an Alle,

ich bin immer wieder überrascht, welch Resonanz ein solch banales Problem hervorruft.

Daher möchte ich hier mal eins meiner Probleme schildern:

Ich habe immer wieder das Problem, dass beim Gehen die Schnürsenkel meiner Schuhe aufgehen, vielleicht kann mir einer von euch eine Lösung anbieten.

mfg

Frank :oops:

himitsu 11. Mai 2015 12:16

AW: Zahlen zwischen zwei Größen filtern
 
Lösung: Slipper oder Sekundenkleber

Nja, eigentlich wurde ja schon alles (mehrfach) gesagt und sollte es dennoch Probleme geben, so möge sich der TE einfach nochmal melden.


Und bezüglich "Kontext", also Umlaute sind egal und wenn "größe" ein String ist, dann ist der Typ das Problem, aber das läßt sich ja leicht lösen.

Perlsau 11. Mai 2015 12:27

AW: Zahlen zwischen zwei Größen filtern
 
Zitat:

Zitat von PMM (Beitrag 1301002)
Ich würde die Optik eines Programmes nicht als "Kinderei" abtun. Die Wartbarkeit eines Programmes hat sehr viel mit der Lesbarkeit desselben zu tun. Also wenn man das Formelbild leicht nachbilden kann - was spricht dagegen? Außerdem hatte der OP ja offenbar genau an der Stelle ein Problem.

Es geht mir bei meinem Statement doch nicht darum, die Formatierung eines Codes als optische Spielerei oder Kinderei abzutun, sondern den Versuch, um jeden Preis ein mathematisches Formelbild optisch im Code nachzubilden. Ob ich jetzt schreibe If Wert >= Min oder If Min <= Max bleibt sich im Resultat gleich. Zudem halte ich meine Darstellung für leichter erkennbar hinsichtlich der Funktionalität: Es geht doch darum, den Wert mit den zwei Konstanten Min und Max zu vergleichen. Oder glaubst du jetzt im Ernst, das war das Problem des TE bzw. die eigentliche Frage: Wie stelle ich im Code ein Formelbild aus der Mathematik optisch nach? Allzu viele Möglichkeiten gibt's da jetzt nicht wirklich, dafür mußte der TE sicher nicht nachfragen. Oder war die Frage die nach der schönsten Formatierung des Codes? Ich hatte die Frage bereits in Fettschrift wiederholt und tue da gerne noch einmal, damit keine weitere Mißverständnisse aufkommen, obwohl es ja eigentlich zwei Fragen waren:

Zitat:

Zitat von JulianT (Beitrag 1300957)
Größe ist kleiner als min, aber auch kleiner als Max, deswegen läuft das Programm dann weiter mit dem Abarbeiten des Codes, richtig?

Hier wollte der TE in Erfahrung bringen, ob folgender Code nach dem THEN weiterarbeitet, wenn die Variable, die mit Min und Max verglichen werden soll, kleiner als Min ist:
Delphi-Quellcode:
for i:= 1 to 5 do
  if (größe>min) and (größe<max) then
Der Code ist irgendwie seltsam, nicht nur wegen der Umlaute und dem ß, sondern auch wegen der irgendwie sinnlos erscheinenden For-Schleife. Der TE hatte sich ja vor allem zuvor beklagt, daß etwas nicht so tut, wie er wollte: " Im StringGrid möchte ich nun nur Einträge anzeigen lassen, die zwischen der Min und der Max Zahl liegen. In dem Fall zwischen 160 und 200. Rein theoretisch sollte es natürlich in dem Fall nicht angezeigt werden, wird es aber."

Im Zusamnmenhang mit dieser Problemstellung macht der Code keinen Sinn: Man sieht weder irgend eine Zuweisung auf größe noch kennen wir die Werte von Min und Max, ebenso wenig wie die Erwartung, was nach dem Then geschehen soll: Sollen nach dem Then in einem Begin-End-Block Werte in ein Stringgrid geschrieben werden? Oder sollen die Werte, die zwischen Min und Max liegen, nicht ins Stringgrid eingetragen werden? Wie gesagt, alles sehr nebulös, daher lautet die Antwort: 42.

Zitat:

Zitat von JulianT (Beitrag 1300957)
Wie kann man das umsetzen, dass er sozusagen so etwas wie in Mathe umsetzt (Geht ja leider nicht in Delphi): Min<=Größe<=Max

Einzig hier könnte man, wenn man die Frage aus dem Zusammenhang mit dem eben noch einmal aufgedröselten Eingangsposting reißt, die weit hergeholte Vermutung äußern, der TE wünsche, eine rein optische Entsprechung des Codes zu seiner gewohnten mathematischen Darstellung. Das glaube ich jedoch nicht wirklich, denn wie eben erläutert sucht der TE nach einer Möglichkeit, Zahlen aus einer uns unbekannten Menge zwischen Min und Max zu selektieren.

So lange sich der TE aber nicht wieder meldet und auf gestellte Fragen antwortet, bleibt alles weitere reinste Spekulation und könnte ohne weiteres mit der altbekannten Antwort auf alles "abgefertigt" werden. Ich habe doch ganz sachlich ganz vernünftig nachgefragt, da muß man doch jetzt nich gleich wieder in Nebenschauplätze ausforken und Mißverständnisse produzieren ...

@frankyboy1974
Die Lösung besteht darin, den durch das gewöhnliche Zuschnüren der Schuhe enstandenen Schlaufen nochmal einen einfachen Knoten obendrauf zu verpassen.

Ich klinke mich hier aus, wird mir langsam etwas zu ... äh, ja, genau ...

p80286 11. Mai 2015 12:30

AW: Zahlen zwischen zwei Größen filtern
 
Zitat:

Zitat von frankyboy1974 (Beitrag 1301011)
Hallo an Alle,

ich bin immer wieder überrascht, welch Resonanz ein solch banales Problem hervorruft.

Daher möchte ich hier mal eins meiner Probleme schildern:

Ich habe immer wieder das Problem, dass beim Gehen die Schnürsenkel meiner Schuhe aufgehen, vielleicht kann mir einer von euch eine Lösung anbieten.

mfg

Frank :oops:

Naja es ist ja nicht ganz banal, da sein Source nicht das macht, was er sollte, (sofern das stimmt was wir hier lesen können).

Was Dein Problem angeht: barfuß, Sicherheitsnadel, knoten machen lernen, auf die nötige innere Reibung achten.....

Gruß
K-H

Sherlock 11. Mai 2015 12:37

AW: Zahlen zwischen zwei Größen filtern
 
Zitat:

Zitat von p80286 (Beitrag 1301017)
Was Dein Problem angeht: barfuß, Sicherheitsnadel, ...

Barfuß und Sicherheitsnadel passen nciht in einen satz, das macht zu viel Aua!

Sherlock

frankyboy1974 11. Mai 2015 13:01

AW: Zahlen zwischen zwei Größen filtern
 
die meisten vorgebrachten Lösungen, würden mein Problem ja nicht wirklich lösen. Barfuss zu laufen, hilft mir nicht wirklich weiter, wenn ich Schuhe tragen muss, die mit einer Schleife (Kopf, -Fuss oder Zählschleife??) zu binden sind (Slipper leider auch ein no go).

mfg

Frank

PS: Weitere Lösungen dürft Ihr mir als PN schicken.:lol:

JulianT 8. Jun 2015 08:12

AW: Zahlen zwischen zwei Größen filtern
 
Zitat:

Zitat von Perlsau (Beitrag 1300976)

@JulianT

Was daran nicht auf deine Frage bezogen sein soll, erschließt sich mir nicht. Wenn du etwas anderes gemeint als geschrieben hast, könntest du noch einmal deine Frage oben betrachten und vielleicht neu stellen. Was also willst du als Ergebnis haben: Die Zahlen, die zwischen Min und Max liegen, oder die Zahlen, die außerhalb liegen, inklusive oder exklusive. Oder ging's vielleicht doch um's richtige Kaffeekochen und ich hab da was falsch verstanden? :lol:

Achso, fast vergessen: Welcher Kontext?

Nein, nein. Das hat schon so geklappt wie es sollte, allerdings hat sich dann im Programm irgendwie noch ein weiterer Fehler ergeben, habs gerade nicht hier und schreibe vlt. heute Abend nochmal was dazu. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 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