C Überprüfung von Variablen und logische Abfragen: Unterschied zwischen den Versionen
Lutz (Diskussion | Beiträge) |
Lutz (Diskussion | Beiträge) |
||
Zeile 59: | Zeile 59: | ||
== Schleifen mit logischen Abfragen testen == | == Schleifen mit logischen Abfragen testen == | ||
=== Allgemeines === | |||
& - UND | |||
| - ODER | |||
Bei logischen Abfragen ist es sehr wichtig, ganz streng zu "klammern"!!! | Bei logischen Abfragen ist es sehr wichtig, ganz streng zu "klammern"!!! | ||
Zeile 64: | Zeile 68: | ||
Das Programm liefert keine brauchbaren Fehlermeldungen, sonder macht irgendetwas. | Das Programm liefert keine brauchbaren Fehlermeldungen, sonder macht irgendetwas. | ||
Es kann recht hilfreich sein, sich die Grenzwerte "i" | Es kann recht hilfreich sein, sich die Grenzwerte "i" in Variablen zu speichern. z. Bsp.: | ||
* #i1: #a | * #i1: #a | ||
* #i2: #a+#c | * #i2: #a+#c | ||
Zeile 77: | Zeile 81: | ||
txa x #(#x,7.3) | txa x #(#x,7.3) | ||
den jeweiligen Status ausgeben lässt, so kommt man recht fix zu einer guten Kontrolle.😂 | den jeweiligen Status ausgeben lässt, so kommt man recht fix zu einer guten Kontrolle.😂 | ||
=== Klammersetzung === | |||
Hier ein weiteres Beispiel für die Notwendigkeit zu '''klammer'''! | |||
Ohne diese Klammersetzung passiert nix, und es kommt auch keine Fehlermeldung. | |||
Wenn #1=0 ODER #1=8 ODER #1=9...dann: | |||
if (((#1==0)|(#1==8))|(#1==9)) | |||
== Fehlermöglichkeiten == | == Fehlermöglichkeiten == |
Version vom 2. Juli 2020, 06:54 Uhr
der Befehl txa
Für die Kontrollausgabe benutze ich gern:
txa Kontrollausgabe txa Linien Knickpunkt Gradiente let#lnnr #sln1+#i let#np_1 #f3(#i) let#np_2 #f3(#i+1) txa Linie Nr. = #(#lnnr,10.0) txa Knoten Nr. 1 = #(#np_1,10.0) txa Knoten Nr. 2 = #(#np_2,10.0)
10.0 bedeutet: insgesamt 10 Stellen, davon 0 nach dem Komma.
In Schleifen mit Abfragen von Bedingungen kann man so eine Zwischenkontrolle durchführen:
let#knr 3000
let#knrref 1000
let#y 1.3
let#dx0 0
let#dx1 -0.191
loop#i 37
if (#i==0) let#dx #dx1 elseif (#i==19-1) let#dx #dx1 elseif (#i==37-1) let#dx #dx1 else let#dx #dx0 endif txa dx = #(#dx,6.3) spt nr #knr+1+#i x #x_a_n(#i+1)+#dx y #y z 0 sptp typ kf ref #knrref+1+#i grp 99
endloop
Man kann mit txa auch auf Felder zugreifen.
Protokollieren mit prt
Bei der Variante mit TXA erfolgt die Kontrollausgabe in den Report Browser.
Alternativ dazu kann man auch die Variante mit PRT nutzen:
prt#qnr_st(1)
Hierbei erfolgt die Ausgabe unter "Echo der Eingabe" und es werden evtl. unerwünschte Nachkommastellen angezeigt. Falls eine Variable eine ganzzahlige Zahl sein muss, so gibt man diese mit z.Bps. zwischen zwei Hochkomma ein:
sto#qnr_nt '0' '301' '201' '201' '101' '101' $ Querschnittsnummer
Alternativ kann man auch den ganzzahligen Anteile mit let#variable_neu div(#variable_alt,1) ermitteln.
Schleifen mit logischen Abfragen testen
Allgemeines
& - UND | - ODER
Bei logischen Abfragen ist es sehr wichtig, ganz streng zu "klammern"!!!
elseif ((#x<#l) & (#x>=(2*#a+#c)))
Das Programm liefert keine brauchbaren Fehlermeldungen, sonder macht irgendetwas. Es kann recht hilfreich sein, sich die Grenzwerte "i" in Variablen zu speichern. z. Bsp.:
- #i1: #a
- #i2: #a+#c
- #i3: 2*#a+#c
- #i4: #l
- #i5: #l+#a
- #i6: #l+#a+#c
- #i7: #l+2*#a+#c
Wenn man sich in der jeweiligen Abfrage mit: txa Fall 4: x>=l+2a+c & x<l txa lf #(#lf,4.0) txa x #(#x,7.3) den jeweiligen Status ausgeben lässt, so kommt man recht fix zu einer guten Kontrolle.😂
Klammersetzung
Hier ein weiteres Beispiel für die Notwendigkeit zu klammer! Ohne diese Klammersetzung passiert nix, und es kommt auch keine Fehlermeldung. Wenn #1=0 ODER #1=8 ODER #1=9...dann:
if (((#1==0)|(#1==8))|(#1==9))
Fehlermöglichkeiten
Das mit den Variablen hat so seine Tücken.
aktueller Fall:
Ich definiere im Template die globalen Variablen
sto#yl -1,07/2 $y_links
sto#yr -#yl.
Im Zuge der Projektbearbeitung möchte ich eine LAR definieren. Also gehe ich in einen entsprechenden älteren Datensatz und hole mir von dort mal fix die entsprechenden Eingabezeilen in's SOFiLOAD:
let#yr 1.85 😆
let#yl -#yr
lar nr 1 grp1 1 grp2 2 grp3 - m #hmin n #hmin t 1 x1 #x1 #yl 0 x2 #x8 #yl 0 x3 #x8 #yr 0 x4 #x1 #yr 0
Da die erneute lokale Definition (let) der Variablen die globale (sto) überschreibt...ist die LAR viel zu breit. 🙄 KONTROLLE, KONTROLLE, KONTROLLE