| |
|
|
- Seite 1 - |
|
CB | Hi, iF! Wie wärs mit folgender Syntax für die nächste XPSE-Version: [box:d99e4290f2]2 < x% < 3[/box:d99e4290f2]statt[box:d99e4290f2](2 < x%) And (x% < 3)[/box:d99e4290f2] und analog mit Stringvariablen? [box:d99e4290f2]x$ = a$ <> b$[/box:d99e4290f2] 2 Bedingungen auf einen Streich abgefragt - das wär doch was!
Ciao, Christian |
|
|
| |
|
|
|
| |
|
- Seite 1 - |
|
CB | Da hast Du mich falsch verstanden: Ich will ja nicht x < y < z (dabei hättest Du natürlich recht), sondern 2 < x < 3, will also mit einer Abfrage eruieren, ob x kleiner als ein Fixwert und größer als ein anderer Fixwert ist.
Christian |
|
|
| |
|
|
|
| Ich müsste in XProfan jedoch als Fixwerte auch Konstanten zulassen - da diese jedoch nicht ausschließlich headermäßig deklariert werden müssen sind diese eigendlich Variablen lol.
Hierbei kann also in XProfan nicht zwischen Fix,- und Variabel-Werten unterschieden werden - oder man müsse Konstanten rauslassen.
hmpf - ich werde mir dazu später nochmals Gedanken machen - habs in die ToDo geschrieben.
Ich glaube aber eher es wäre interessant wenn man auch (x$=y$=z$=str$(h&)=5) schreiben könnte.
Salve. |
|
|
| |
|
|
|
Michael Wodrich | [quote:9cdc2c84d6] Da hast Du mich falsch verstanden: Ich will ja nicht x < y < z (dabei hättest Du natürlich recht), sondern 2 < x < 3, will also mit einer Abfrage eruieren, ob x kleiner als ein Fixwert und größer als ein anderer Fixwert ist.
Christian [/quote:9cdc2c84d6] ...und warum muß man dazu die Syntax verbiegen???? KompilierenMarkierenSeparierenDef InRange!(3) @If((@!(1)) >= (@!(2)),@If((@!(1)) <= (@!(3)),1,0),0)
Def InRange&(3) @If((@&(1)) >= (@&(2)),@If((@&(1)) <= (@&(3)),1,0),0)
Def InRangeEx!(3) @If((@!(1)) > (@!(2)),@If((@!(1)) < (@!(3)),1,0),0)
Def InRangeEx&(3) @If((@&(1)) > (@&(2)),@If((@&(1)) < (@&(3)),1,0),0)
InRange! - ... (Float)
InRange& - ... (Ganzzahl)
InRangeEx! - ... (Float) (ohne Grenzwerte)
InRangeEx& - ... (Ganzzahl) (ohne Grenzwerte)
- Prüft, ob Wert 1 innerhalb des Bereiches v. Wert 2 (Min) u. Wert 3 (Max) liegt.
Die InRange-Funktion erwartet als ersten Wert den zu prüfenden. Der 2.Wert ist der Minimum, der 3.Wert der Maximum-Wert.
MfG Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 29.04.2005 ▲ |
|
|
|
| |
|
- Seite 2 - |
|
|
CB | Hallo Michael! Danke für Deinen nützlichen Tip! Ist immer gut, wenn man einen Mathematiker in den eigenen Reihen hat! Bloß wird mir das in meinem Fall etwas zu kompliziert. Warum, zeige ich Dir mal an einem Beispiel. So muß ichs derzeit schreiben: [box:245bed8c4b] Case (60 < Alter_N%) AND (Alter_N% <= 65): A$ = I Case (55 < Alter_N%) AND (Alter_N% < 59) : A$ = H Case (50 < Alter_N%) AND (Alter_N% < 54) : A$ = G Case (45 < Alter_N%) AND (Alter_N% < 49) : A$ = F Case (40 < Alter_N%) AND (Alter_N% < 44) : A$ = E Case (35 < Alter_N%) AND (Alter_N% < 39) : A$ = D Case (30 < Alter_N%) AND (Alter_N% < 34) : A$ = C Case (25 < Alter_N%) AND (Alter_N% < 29) : A$ = B Case (20 <= Alter_N%) AND (Alter_N% < 24) : A$ = A[/box:245bed8c4b] Und so hätte ichs gerne: [box:245bed8c4b] Case 60 < Alter_N% <= 65: A$ = I Case 55 < Alter_N% < 59 : A$ = H Case 50 < Alter_N% < 54 : A$ = G Case 45 < Alter_N% < 49 : A$ = F Case 40 < Alter_N% < 44 : A$ = E Case 35 < Alter_N% < 39 : A$ = D Case 30 < Alter_N% < 34 : A$ = C Case 25 < Alter_N% < 29 : A$ = B Case 20 <= Alter_N% < 24 : A$ = A[/box:245bed8c4b] Wenn ichs derzeit nach Schema 2 machen würde, passiert folgendes: siehe Bild Sollwert falsch.jpg Richtig wäre Bild Sollwert richtig.jpg (Es geht dabei um die obere rechte Box) Das ist aber nur ein Bruchteil dessen, was in meinem Programm an Berechnungen stattfindet. Schau Dir auch mal Formel-Editor.jpg an. Das sind die Formeln, nach denen die auf den Patienten bezogenen Sollwerte für die einzelnen Parameter berechnet werden. Die gemessenen Werte werden dann in Prozent vom Sollwert umgerechnet und anhand der Tabelle in Grenzwerte für Kalkül.jpg in Stufen eingeteilt. Auf diese Weise erhalte ich von jedem Parameter, ob er leicht, mäßig, stark erhöht bzw. erniedrigt oder normal ist. Das wird dann zwecks Übersichtlichkeit in Form der kleinen Pfeile grafisch angezeigt. Bei meinen Berechnungen muß ich aber voll flexibel bleiben puncto <, <= bzw. > und >=. Das wäre bei den Hunderten Berechnungen mit Funktionen sicher machbar, ist mir aber zu anfällig auf (selbst produzierte) Programmfehler. |
|
|
| |
|
|
|
| [quote:2d1982439a]Case (60 < Alter_N%) AND (Alter_N% <= 65): A$ = I Case (55 < Alter_N%) AND (Alter_N% < 59) : A$ = H Case (50 < Alter_N%) AND (Alter_N% < 54) : A$ = G Case (45 < Alter_N%) AND (Alter_N% < 49) : A$ = F Case (40 < Alter_N%) AND (Alter_N% < 44) : A$ = E Case (35 < Alter_N%) AND (Alter_N% < 39) : A$ = D Case (30 < Alter_N%) AND (Alter_N% < 34) : A$ = C Case (25 < Alter_N%) AND (Alter_N% < 29) : A$ = B Case (20 <= Alter_N%) AND (Alter_N% < 24) : A$ = A[/quote:2d1982439a] Lol watn Block.
Für das was Du da machen möchtest braucht man doch eigendlich nur eine:[box:2d1982439a]a$=if(and((alter_n%>19),(alter_n%<66)),chr$(65+(abs((alter_n%-20)/5,0))),a$)[/box:2d1982439a] Ich weis jetzt aber nicht obs von Dir Absicht ist das wenn einer nach Deiner Formel 24,25,29,30,... ist - das da a$ nicht gesetzt wird.
Naja probiere mal meine Formel. - vielleicht sagte sie Dir ja zu...
Wenn Du aber auf Deine Blockisierung bestehen möchtest - dann machs doch besser so - ist schneller und genauer: KompilierenMarkierenSeparieren
if (Alter_N% < 1)
elseif (Alter_N% > 44) & (Alter_N% < 50) ; A$ = "F"
elseif (Alter_N% > 39) & (Alter_N% < 45) ; A$ = "E"
elseif (Alter_N% > 34) & (Alter_N% < 40) ; A$ = "D"
endif
//aber wie gesagt - ich würde diese schöne kleine Variante bevorzugen:
a$=if(and((alter_n%>19),(alter_n%<66)),chr$(65+(abs((alter_n%-20)/5,0))),a$)
Salve. |
|
|
| |
|
|
|
CB | Nee - Blöcke habe ich lieber in Papierform oder zum Essen - Leberkäse z.B. Da gefällt mir Deine Formel schon besser! [quote:98cb688a20]Ich weis jetzt aber nicht obs von Dir Absicht ist das wenn einer nach Deiner Formel 24,25,29,30,... ist - das da a$ nicht gesetzt wird[/quote:98cb688a20] War natürlich falsch, ist mir beim Schreiben hier nicht aufgefallen, (klassische Verschlimmbesserungsaktion), die rechte Kolonne war ursprünglich 60, 55, 50, .. und dann hab ich schlicht und ergreifend die = ausgelassen Ungefähr ists mir klar, aber jetzt muß ich mal analysieren, wie die Formel funktioniert. Danke jedenfalls!
Christian |
|
|
| |
|
|
|
Michael Wodrich | Hallo Christian,
ist ja wohl wirklich ein großes Projekt.
Bei Deinen Bildern ist mir aufgefallen, daß einmal unbedingt der Dezimalpunkt und einmal unbedingt das Komma verlangt wird.
Kann es sein, daß die Bilder aus unterschiedlichen Versions-Phasen stammen? Oder müssen in einem Programm tatsächlich Dezimale unterschiedlich eingegeben werden?
Immer dran denken: die komplizierten Dinge sollte der Programmierer vor dem Anwender verstecken. Notfalls könnte man z.B. den Inhalt des Zahlenfeldes nach der Eingabe untersuchen und eine korrigierte Zahl ins Feld zurückschreiben (Transform).
MfG Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 01.05.2005 ▲ |
|
|
|
|
Michael Wodrich | Die Formel: a$ = if( and(( alter_n% > 19), (alter_n% < 66)), chr$( 65 + ( abs( (alter_n% - 20) / 5, 0))), a$)
Liefert: alter_n% - Ergebnis 1..19 - alter Wert in a$ 20..24 - A 25..29 - B 30..34 - C ... 66..?? - alter Wert in a$
Also bei / 5 halt immer in 5er-Schritten.
Solche Formeln kenne ich in abgewandelter Form...
If (alter_n% > 19) and (alter_n% < 66) a$ = Mid$(ABCDEFGHI,(alter_n%-20)5+1,1) EndIf
WoTag$ = Mid$(SoMoDiMiDoFrSa,WoTag%*2+1,2) 0=So,1=Mo,...
MfG Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 01.05.2005 ▲ |
|
|
|
|
CB | [quote:cbc386e7a9=Michael Wodrich]Hallo Christian,
ist ja wohl wirklich ein großes Projekt.
Bei Deinen Bildern ist mir aufgefallen, daß einmal unbedingt der Dezimalpunkt und einmal unbedingt das Komma verlangt wird.
Kann es sein, daß die Bilder aus unterschiedlichen Versions-Phasen stammen? Oder müssen in einem Programm tatsächlich Dezimale unterschiedlich eingegeben werden?
Immer dran denken: die komplizierten Dinge sollte der Programmierer vor dem Anwender verstecken. Notfalls könnte man z.B. den Inhalt des Zahlenfeldes nach der Eingabe untersuchen und eine korrigierte Zahl ins Feld zurückschreiben (Transform).
MfG Michael Wodrich[/quote:cbc386e7a9] Hallo Michael! Ich muß Dir in allen Punkten recht geben! Für mich ist das ein Riesenprojekt. Die meiste Arbeit daran hatte ich aber vor ein paar Jahren, als ich das in WordBasic (Word 95) entwickelt habe. Der Programmkern war also schon vorhanden. Aus dieser Zeit stammt auch der Screenshot mit dem Komma. Jetzt bin ich gerade dabei, das nach Profan zu übersetzen, ergänzen, optisch aufzupeppen etc. Die Profan-Version von diesem Dialog habe ich erst gestern fertiggestellt. Ich werde aber Deine Anregung noch einbauen, obwohl dieses Dialogfenster nur meiner eigenen Bequemlichkeit dient. Ich könnte diese Parameter auch in der Registry ändern, aber so ists übersichtlicher. Der Anwender soll da besser gar nichts dran ändern.
Zu der Formel: Wie entwirft man so etwas in der Praxis? Mir ist zwar klar, wie die funktioniert (ein Schritt um 5 bei einem Parameter bewirkt einen Schritt um 1 beim anderen, limitiert von 20 bis 65) Ich wollte analog dazu einen ähnlichen Block in eine Formel verpacken, bloß habe ich das hier 10x schneller geschrieben:[box:cbc386e7a9]Case (2 <= OFL_F!) AND (OFL_F! < 2.1): O$ = 9 Case (1.9 <= OFL_F!) AND (OFL_F! < 2 ): O$ = 8 Case (1.8 <= OFL_F!) AND (OFL_F! < 1.9): O$ = 7 Case (1.7 <= OFL_F!) AND (OFL_F! < 1.8): O$ = 6 Case (1.6 <= OFL_F!) AND (OFL_F! < 1.7): O$ = 5 Case (1.5 <= OFL_F!) AND (OFL_F! < 1.6): O$ = 4 Case (1.4 <= OFL_F!) AND (OFL_F! < 1.5): O$ = 3 Case (1.3 <= OFL_F!) AND (OFL_F! < 1.4): O$ = 2 Case (1.2 <= OFL_F!) AND (OFL_F! < 1.3): O$ = 1[/box:cbc386e7a9]
Christian |
|
|
| |
|
|
|
CB | So, ich habs:[box:86965e22c5] If (OFL_F! >= 1.2) and (OFL_F! < 2.1) O$ = Mid$(123456789,((OFL_F!*10)-11),1) EndIf [/box:86965e22c5] und nach der iFschen Nomenklatur[box:86965e22c5]O$=If(And((OFL_F! >= 1.2),(OFL_F! < 2.1)),Chr$(48+(((OFL_F!*10)-11),1)),O$) [/box:86965e22c5] Einverstanden? Christian |
|
|
| |
|
|
|
Michael Wodrich | Wie ich sehe, verstehst Du meine Formel besser als die von iF, denn in der ist ein kleiner (Kopier-)Fehler.
??? andere Betonung ??? Wir sollten lernen, mit der Natur zu leben, bevor diese lernt, ohne uns zu leben! ??? |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 01.05.2005 ▲ |
|
|
|
|
CB | Hast recht, so klingts besser - und genauso wärs auch gemeint! Werds ändern. Zur Formel - das ist meine im Prog verwendete Lösung:[box:50e79ce735] If (OFL_F! >= 1.2) AND (OFL_F! < 2.1) O$ = Trim$(Chr$(48+(((OFL_F!*10)-11),1)),O$) Else O$ = EndIf[/box:50e79ce735] Inzwischen habe ich auch noch ein bißchen am Dialog herumgeschraubt. Jetzt wird ein Komma automatisch auf Punkt korrigiert und jeder kann schreiben, wie er will.
Christian |
|
|
| |
|
|