C Felder: Unterschied zwischen den Versionen
Lutz (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Lutz (Diskussion | Beiträge) |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Grundlagen == | == Grundlagen == | ||
prog template urs:1 | prog template urs:1 | ||
kopf Felder | kopf Felder | ||
!*!Label Feld 1 - ein Feld mit 10 Einträger | !*!Label Feld 1 - ein Feld mit 10 Einträger | ||
let#f_1 1,2,3,4,5,6,7,8,9,10 | let#f_1 1,2,3,4,5,6,7,8,9,10 | ||
loop#anz def(f_1) $ Anzahl der Feldelemente in der Variable anz speichern | loop#anz def(f_1) $ Anzahl der Feldelemente in der Variable anz speichern | ||
endloop | endloop | ||
txa | txa | ||
txa Das Feld f_1 hat #(#anz,5.0) Einträge. | txa Das Feld f_1 hat #(#anz,5.0) Einträge. | ||
txa | txa | ||
loop#1 #anz $ Ausgabe des Feldes | loop#1 #anz $ Ausgabe des Feldes | ||
txa index = #(#1,2.0) f_1 = #(#f_1(#1),6.3) | txa index = #(#1,2.0) f_1 = #(#f_1(#1),6.3) | ||
endloop | endloop | ||
!*!Label Feld 2 | !*!Label Feld 2 | ||
let#f_2 #f_1(:) $ Feld 2 wird komplett aus dem Feld 1 erzeugt | let#f_2 #f_1(:) $ Feld 2 wird komplett aus dem Feld 1 erzeugt | ||
let#f_2(0) #f_2(0)*100 $ der 1. Eintrag wird mit 100 multipliziert | let#f_2(0) #f_2(0)*100 $ der 1. Eintrag wird mit 100 multipliziert | ||
let#f_2(5) #f_2(5)*100 $ der mit dem Index 5 (das ist das 6. Element) ebenfalls | let#f_2(5) #f_2(5)*100 $ der mit dem Index 5 (das ist das 6. Element) ebenfalls | ||
txa Feld 2 | txa Feld 2 | ||
txa | txa | ||
loop#2 #anz | loop#2 #anz | ||
txa index = #(#2,2.0) f_2 = #(#f_2(#2),8.3) | txa index = #(#2,2.0) f_2 = #(#f_2(#2),8.3) | ||
endloop | endloop | ||
!*!Label Feld 3 | !*!Label Feld 3 | ||
txa Feld 3 | txa Feld 3 | ||
txa | txa | ||
txa statt dem Komma geht auch ein Leerzeichen | txa statt dem Komma geht auch ein Leerzeichen | ||
txa | txa | ||
let#f_3 10 11 12 13 14 15 16 17 18 19 20 21 22 | let#f_3 10 11 12 13 14 15 16 17 18 19 20 21 22 | ||
loop#anz def(f_3) $ Anzahl der Feldelemente in der Variable anz speichern | loop#anz def(f_3) $ Anzahl der Feldelemente in der Variable anz speichern | ||
endloop | endloop | ||
txa | txa | ||
txa Das Feld f_3 hat #(#anz,5.0) Einträge. | txa Das Feld f_3 hat #(#anz,5.0) Einträge. | ||
txa | txa | ||
loop#1 #anz | loop#1 #anz | ||
txa index = #(#1,2.0) f_3 = #(#f_3(#1),6.3) | txa index = #(#1,2.0) f_3 = #(#f_3(#1),6.3) | ||
endloop | endloop | ||
!*!Label Feld 4 | !*!Label Feld 4 | ||
txa | txa | ||
txa Das Feld f_4 wird über eine Funktion gefüllt | txa Das Feld f_4 wird über eine Funktion gefüllt | ||
txa | txa | ||
sto#fun_1 '=FUN(i,sqr(5*#i))' $ FUN muß groß geschrieben werden | sto#fun_1 '=FUN(i,sqr(5*#i))' $ FUN muß groß geschrieben werden | ||
loop#1 5 | loop#1 5 | ||
let#i #1+1 | let#i #1+1 | ||
Zeile 45: | Zeile 73: | ||
txa index = #(#i,2.0) f_4 = #(#f_4(#i),6.3) | txa index = #(#i,2.0) f_4 = #(#f_4(#i),6.3) | ||
endloop | endloop | ||
ende | ende | ||
ende | ende | ||
Aktuelle Version vom 5. Juli 2020, 11:07 Uhr
Grundlagen
prog template urs:1
kopf Felder
!*!Label Feld 1 - ein Feld mit 10 Einträger
let#f_1 1,2,3,4,5,6,7,8,9,10
loop#anz def(f_1) $ Anzahl der Feldelemente in der Variable anz speichern endloop
txa
txa Das Feld f_1 hat #(#anz,5.0) Einträge.
txa
loop#1 #anz $ Ausgabe des Feldes
txa index = #(#1,2.0) f_1 = #(#f_1(#1),6.3)
endloop
!*!Label Feld 2
let#f_2 #f_1(:) $ Feld 2 wird komplett aus dem Feld 1 erzeugt
let#f_2(0) #f_2(0)*100 $ der 1. Eintrag wird mit 100 multipliziert
let#f_2(5) #f_2(5)*100 $ der mit dem Index 5 (das ist das 6. Element) ebenfalls
txa Feld 2
txa
loop#2 #anz
txa index = #(#2,2.0) f_2 = #(#f_2(#2),8.3)
endloop
!*!Label Feld 3
txa Feld 3
txa
txa statt dem Komma geht auch ein Leerzeichen
txa
let#f_3 10 11 12 13 14 15 16 17 18 19 20 21 22
loop#anz def(f_3) $ Anzahl der Feldelemente in der Variable anz speichern endloop
txa
txa Das Feld f_3 hat #(#anz,5.0) Einträge.
txa
loop#1 #anz
txa index = #(#1,2.0) f_3 = #(#f_3(#1),6.3)
endloop
!*!Label Feld 4
txa
txa Das Feld f_4 wird über eine Funktion gefüllt
txa
sto#fun_1 '=FUN(i,sqr(5*#i))' $ FUN muß groß geschrieben werden
loop#1 5
let#i #1+1 let#f_4(#i) #fun_1(#i) txa index = #(#i,2.0) f_4 = #(#f_4(#i),6.3)
endloop
ende
ende
mächtiges Werkzeug
Loop über ein Feld ist ein sehr mächtiges Werkzeug. Es gibt viele sinnvolle Anwendungen.
Wesentlich ist die Definition des Feldes und der anschließende Aufruf des Feldnames (ohne #) im LOOP - Befehl. Die Schleife wird sooft durchlaufen, wie das Feld Elemente hat.
Falls das Feld "unregelmäßig" ist, kann man das Feld über Schleifen belegen.
Man sollte sich hüten, ein einmal definiertes Feld erneut zu verwenden. Denn die maximale Feldlänge (und diese bestimmt die Anzahl der Schleifenläufe) wird intern gespeichert. Bei einer erneuten Feldbelegung mit einer kleineren Elementanzahl kommt es dann zu Fehlern.
Beispiel 1 - Pfetten einer Stahlhalle
In den Feldern ya und yb stecken die Y-Werte der einzelnen Hallenrahmen.
Die nachstehende Schleife generiert über alle 14 Felder die Pfetten. Mit der if-Bedingung wird noch der entsprechende Querschnitt ausgewählt.
!*!Label Längspfetten auf dem Dach
let#ya #y1,#y2,#y3,#y4,#y5,#y6,#y7,#y8,#y9,#y10,#y11,#y12,#y13,#y14
let#yb #y2,#y3,#y4,#y5,#y6,#y7,#y8,#y9,#y10,#y11,#y12,#y13,#y14,#y15
loop#i ya
let#l #ya(#i)-#yb(#i) let#y11 #yb(#i)+((#l/2)+(#ylb/2)) let#y12 #y11-#ylb
let#grp 410+(#i*10)
let#knr #grp*#gdiv $ neue Knoten spt nr x y z #knr+11+100 #x31 #y11 #z31 #knr+12+100 #x31 #y12 #z31 #knr+11+200 #x32 #y11 #z32 #knr+12+200 #x32 #y12 #z32 #knr+11+300 #x33 #y11 #z33 #knr+12+300 #x33 #y12 #z33
$ Pfetten let#grpa 10+(#i)*10 let#grpb #grpa+10 $ Gruppe des hinteren Rahmen
if #i==6 let#qnr 27 else let#qnr 26 endif
sln nr npa npe qnr=#qnr grp=#grp styp='B' - #gdiv*#grpa+31 #knr+11+100 $fixa mymz - #knr+11+100 #knr+12+100 - #knr+12+100 #gdiv*#grpb+31 $fixe mymz - #gdiv*#grpa+32 #knr+11+200 $fixa mymz - #knr+11+200 #knr+12+200 - #knr+12+200 #gdiv*#grpb+32 $fixe mymz - #gdiv*#grpa+33 #knr+11+300 $fixa mymz - #knr+11+300 #knr+12+300 - #knr+12+300 #gdiv*#grpb+33 $fixe mymz
endloop
Beispiel 2 - vier verschiedene Laststellungen
Im Feld pos werden die vier unterschiedlichen X-Werte der Laststellungen gespeichert. Der includierte Block area2 beinhaltet die Definition der kleinen Flächenlasten.
Die Schleife erzeugt die einzelnen Lastfälle FAT:
let#pos 0,1.5,2.7,7.15-(4.2),7.15-(4.2/2)
let#lf 101
loop#i pos
lf nr #lf typ FAT bez 'FAT - #lf'
$Startpunkt 1 let#xs #pos(#i) let#ys 3.500 let#zs 0.000 #include area2
$Startpunkt 2 let#xs #pos(#i) let#ys 3.500-3 let#zs 0.000 #include area2
let#lf #lf+1
endloop
Anzahl der Elemente
Es gibt eine spezielle "Schleife", mit welcher man die Anzahl der Elemente eines Feldes ermitteln und in einer Variablen ablegen kann.
let#grp 4
let#nr #grpdiv*#grp
$ QT 1. Feld
let#nrwv 2,3,6,8,9,10,11,12,13,16
loop#anz def(nrwv) $ Anzahl der Feldelemente des Feldes nrwv in der Variable anz speichern
endloop
loop#3 #anz-1
sln nr npa npe grp=#grp styp='B' qnr=3 #nr+(#3*10+1) #nrwv(#3)*100+12 #nrwv(#3+1)*100+51 #nr+(#3*10+2) #nrwv(#3+1)*100+51 #nrwv(#3)*100+62
endloop