ST Programmierung

Tobias_h

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

Ich bin neu auf dem Gebiet der programmierung neu und muss für die Uni eine Bedingung in ST umsetzen. Dafür reichen jedoch meine programmierkenntnisse nicht aus.

Die Bedingung lautet:
....0, u1=0&u2=1
y=1, u1=1&u2=0
....2, sonst

Ich möchte von euch keine Lösung jedoch wäre eine erklärung und eventuell eine kleine einstiegshilfe sehr nett :)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich würde das so verstehen:
y soll 0 sein, wenn u1 = 0 und u2 = 1
y soll 1 sein, wenn u1 = 1 und u2 = 0
y soll 2 sein, für alle anderen Kombinationen

@Tobias_h
kannst du das so bestätigen

Als Programmiertipp:
Code:
IF ... THEN
...
ELSIF .... THEN
...
ELSE
...
END_IF
Bitte selber füllen;)
 
Zuletzt bearbeitet:
entschuldigt ich dachte die leerzeichen werden beibehalten. Da wir erst eine vorlesung hatten und ich es bis Montag brauche, kann ich auch nicht genau sagen worum es geht aber ich würde es auch so verstehen, dass y 0 sein soll wenn...
Ich versuche es mal mit der If bedingung und würde sagen
IF u1=0 Then
IF u2=1 Then
y=0;
End_IF
ELSIF u1=1 THEN
IF u2=0 THEN
y=1;
END_IF
ELSE
y=2
END_IF oder END_ELSE (weiß nicht ob es END_ELSE gibt)

Bin mir auch nicht sicher ob ich 2 IF´s untereinander schreiben kann oder ob ich IF u1=0 & u2=1 Then y=0 schreiben müsste
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ein END-ELSE gibt es nicht nur ein END_IF.
Du machst es Dir zu kompliziert, eine If-Abfrage kann aus mehreren Bedingungen bestehen die dann mit z.B. AND oder OR verknüpft werden. Du musst das Beispiel von Marlob nur mit Leben füllen, dann hast Du die Lösung.
Ein Tipp noch, wenn Du Code-Schnipsel posten willst nutz den Button # und füg Dein Programm da dann ein, dann passt das mit der Optik auch besser.
 
Zuletzt bearbeitet:
Hallo Tobias
Dein Code ist allerdings anders als im Post #1 formuliert
z.B. u1 = 0 und u2 =0
Code:
IF u1=0 Then    -- Bediengung erfüllt
   IF u2=1 Then -- Bedingung nicht erfüllt
     y=0;
  End_IF
ELSIF u1=1 THEN -- der Zweig wird nicht mehr betrachtet, da die erste Bedingung bereits erfüllt war
   IF u2=0 THEN
     y=1;
   END_IF
ELSE                    -- der Zweig wird nicht mehr betrachtet, da die erste Bedingung bereits erfüllt war
  y=2
END_IF
Somit bleibt y unverändert
Holger
 
Danke für den Tip :)

Code:
IF u1=0 And u2=1 THEN
   y=0;
ELSIF u1=1 AND u2=0 THEN
   y=1;
ELSE
   y=2;
END_IF

Dann müsste es so richtig sein ?
 
Nachdem jetzt Klarheit herrscht, hier noch ein Spass für die Jäger der verlorenen Mikrosekunde:
Code:
IF (u1 XOR u2)=1 THEN
   y:=u1;
ELSE
   y:=2;
END_IF
Geht natürlich nur, wenn u1, u2 keine anderen Werte als 0 und 1 annehmen können.
 
Nachdem jetzt Klarheit herrscht, hier noch ein Spass für die Jäger der verlorenen Mikrosekunde:
Code:
[FONT=courier new]IF (u1 XOR u2)=1 THEN
   y:=u1;
ELSE
   y:=2;
END_IF
[/FONT]
Geht natürlich nur, wenn u1, u2 keine anderen Werte als 0 und 1 annehmen können.

Hier noch 2 WeiterEntwicklungen für diejenigen, die schon beim Eintippen die eine oder andere µs einsparen möchten:
Code:
[LEFT][FONT=courier new][COLOR=#222222]IF u1 <> u2 THEN[/COLOR]
[COLOR=#222222]   y := u1;[/COLOR]
[COLOR=#222222]ELSE[/COLOR]
[COLOR=#222222]   y := 2;[/COLOR]
[COLOR=#222222]END_IF[/COLOR][/FONT][/LEFT]

Code:
[FONT=courier new][COLOR=#222222]IF u1 = u2 THEN[/COLOR]
[COLOR=#222222]   y := 2;[/COLOR]
[COLOR=#222222]ELSE[/COLOR]
[COLOR=#222222]   y := u1;[/COLOR]
[COLOR=#222222]END_IF[/COLOR]
[/FONT]
 
Nachdem jetzt Klarheit herrscht, hier noch ein Spass für die Jäger der verlorenen Mikrosekunde:
Code:
IF (u1 XOR u2)=1 THEN
   y:=u1;
ELSE
   y:=2;
END_IF
Geht natürlich nur, wenn u1, u2 keine anderen Werte als 0 und 1 annehmen können.

Dazu hätte ich noch eine Frage
Wenn ich die XOR Wahrheitstabelle google, hätte ich ja
Code:
u1    u2    y
0       0     0
0       1     1
1       0     1
1       1     0

In meinem Falle wäre es ja
Code:
u1   u2    y
0     0      2
0     1      0
1     0      1
1     1      2

Wenn ich das nun vergleiche würde es doch theoretisch nicht funktionieren da es ja einmal bei zeile 2: 1 und einmal 0 ist und in zeile 3: 1 und 1 ist
Also würde doch Zeile 2 sich wiedersprechen oder habe ich einen logikfehler ?
 
Dort steht aber nicht:
Code:
[LEFT][COLOR=#333333][FONT=Courier][I]IF (u1 XOR u2)=1 THEN
   y:=1;
ELSE
   y:=0;
END_IF[/I][/FONT][/COLOR][/LEFT]
und auch nicht:
Code:
[LEFT][COLOR=#333333][FONT=Courier][LEFT][COLOR=#333333][FONT=Courier][I]   y:=[/I][/FONT][/COLOR][I](u1 XOR u2)=1
[/I][/LEFT]
[/FONT][/COLOR][/LEFT]
und auch nicht:
Code:
[COLOR=#222222][FONT=Tahoma][COLOR=#333333][FONT=Courier][LEFT][COLOR=#333333][FONT=Courier][I]   y:=[/I][/FONT][/COLOR][I]u1 XOR u2
[/I][/LEFT]
[/FONT][/COLOR][/FONT][/COLOR]
so dass als Ergebnis nicht die XOR-WahrheitsTabelle herauskommt.
Dort steht, dass in Zeilen 2 und 3 der Wert von u1 übernommen wird und in Zeile 1 und 4 die Konstante 2.

PS:
Wenn TRUE intern als -1 kodiert ist, müsste bei den Beispielen 2 und 3 noch die ABS-Funktion spendiert werden, um bei TRUE +1 zu liefern:
y:=ABS((u1 XOR u2)=1)
y:=ABS(u1 XOR u2)
Alternativ könnte man so das Vorzeichen umdrehen:
y:=-((u1 XOR u2)=1)
y:=-(u1 XOR u2)
 
Zuletzt bearbeitet:
Sooo, zum WE für alle, denen weder XOR-Verknüpfungen noch IF-Abfragen geheuer sind, noch einzeilige Versionen:

y := 2 - 2*(u2-u1)*u2 - (u1-u2)*u1

Und ohne Klammern:

y := 2 - u1 - 2*u2 + 3*u1*u2

Gruss, Heinileini
 
Zurück
Oben