Deutsch
Forum

Vorschlag zur Syntaxerweiterung

 
- 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
 
XProfan 8/9.1, Win XP, AMD 64/3200
28.04.2005  
 



 
- 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
 
XProfan 8/9.1, Win XP, AMD 64/3200
28.04.2005  
 



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.
 
28.04.2005  
 




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????
KompilierenMarkierenSeparieren
Def 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.

137 kB
Hochgeladen:29.04.2005
Ladeanzahl228
Herunterladen
155 kB
Hochgeladen:29.04.2005
Ladeanzahl179
Herunterladen
191 kB
Hochgeladen:29.04.2005
Ladeanzahl174
Herunterladen
103 kB
Hochgeladen:29.04.2005
Ladeanzahl610
Herunterladen
 
XProfan 8/9.1, Win XP, AMD 64/3200
29.04.2005  
 



[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.
 
29.04.2005  
 




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
 
XProfan 8/9.1, Win XP, AMD 64/3200
29.04.2005  
 




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

129 kB
Hochgeladen:01.05.2005
Ladeanzahl183
Herunterladen
 
XProfan 8/9.1, Win XP, AMD 64/3200
01.05.2005  
 




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
 
XProfan 8/9.1, Win XP, AMD 64/3200
01.05.2005  
 




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

138 kB
Hochgeladen:01.05.2005
Ladeanzahl184
Herunterladen
 
XProfan 8/9.1, Win XP, AMD 64/3200
01.05.2005  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

12.920 Betrachtungen

Unbenanntvor 0 min.

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

CB (11x)
iF (6x)
Michael Wodrich (4x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie