ST: ArrayVariable mit IF abfragen

Diskutiere ST: ArrayVariable mit IF abfragen im Programmierung Forum im Bereich Software Forum; Hallo. Programmiersprache: Structured Text Programmierumgebung: B&R Automation Studio Ich habe eine Variable V als Array definiert: BOOL, 4...
P

Primadonna

Threadstarter
Mitglied seit
22.05.2008
Beiträge
613
Hallo.


Programmiersprache: Structured Text
Programmierumgebung: B&R Automation Studio


Ich habe eine Variable V als Array definiert: BOOL, 4 Werte.
Also [x,x,x,x] (x ist 0 oder 1)

Wie kann ich nun eine IF Abfrage wie folgt machen, ohne dass ich die Einzelnen Zellen abfragen muss?

IF (V=[0,0,0,1] )THEN
do_something;
END_IF;


Wohlgemerkt, ich möchte nicht folgendes:
IF (V[1]=0 AND V[2]=0 AND V[3]=0 AND V[4]=0) THEN
....



Danke im Vorraus :)
 
Z

zille1976

Mitglied seit
26.11.2008
Beiträge
471
Warum ist die 2. Lösung nicht in deinem Sinne?

Mfg Zille
 
P

Primadonna

Threadstarter
Mitglied seit
22.05.2008
Beiträge
613
weil mehrere IF Abfragen nacheinander kommen, das wird dann unübersichtlich.
Außerdem gibts dasselbe nochmal mit größeren Arrays.
 
Z

zille1976

Mitglied seit
26.11.2008
Beiträge
471
Aufgrund des recht beschränkten Befehlsumfanges hab ich da wenig Hoffnung.

Um was geht es denn genau?

Möchtest du nur prüfen ob ein Wert im Array 1 ist oder geht es darum bestimmte Muster zu prüfen?

MfG Zille
 
Z

zille1976

Mitglied seit
26.11.2008
Beiträge
471
Alternativ wäre eine Umwandlung von Binär in Dezimal möglich nach folgendem Muster:

Du rechnest dieses Array um in eine Dezimalzahl:

dezimal:=v[1]*8+v[2]*4+v[3]*2+v[4]

oder:

if v[1] then dezimal:=8 else dezimal:=0
if v[2] then dezimal:=dezimal+4
if v[3] then dezimal:=dezimal+2
if v[4] then dezimal:=dezimal+1

Jetzt fragst du nur noch die dezimalwerte ab:

IF dezimal=1 THEN ... | [0,0,0,1]
IF dezimal=7 THEN ... | [0,1,1,1]
IF dezimal=15 THEN ... | [1,1,1,1]
IF dezimal=4 THEN ... | [0,1,0,0]
usw...

MfG Zille
 
A

AtariFan

Mitglied seit
02.08.2009
Beiträge
40
Standort
Rhein-Main
Hallo,

Also [x,x,x,x] (x ist 0 oder 1)
Wie kann ich nun eine IF Abfrage wie folgt machen, ohne dass ich die Einzelnen Zellen abfragen muss?

IF (V=[0,0,0,1] )THEN do_something; END_IF;
Wohlgemerkt, ich möchte nicht folgendes:
IF (V[1]=0 AND V[2]=0 AND V[3]=0 AND V[4]=0) THEN
StrucuredText - habe ich da was verpaßt?
In Pascal wäre o. g. Vergleich:
IF NOT(V[1]) AND NOT(V[2]) and NOT(V[3]) AND V[4] THEN doSomeThing
d. h. man kann die boolean-Werte einfacher abfragen

Eine allgemeine Lösung stelle ich mir so vor:
Du vergleichst den unbekannten Vektor V mit dem Zielvektor Z elementweise mit der Operation op und erhälst als Ergebnis E:

V op Z -> E
-------------------
0 op 0 -> 1
0 op 1 -> 0
1 op 0 -> 0
1 op 1 -> 1

Wenn v und z übereinstimmen, sind alle E(i) = 1.
Die gesuchte Operation ist wohl not(XOR) oder einfach nur '='. Die gesamte Funktion wäre:

FUNCTION bitMusterEqual(V, Z: ARRAY OF BOOLEAN): BOOLEAN;
VAR i, laenge: INTEGER; okay: BOOLEAN
BEGIN
okay:= true,
i:= 1;
laenge:= length(V) (* ob das schon in Turbo Pascal 7 geht? *)
WHILE okay AND i <= laenge DO
BEGIN
okay := okay AND (V= Z); (*raus bei der ersten Null*)
i:= i + 1
END;
bitMusterEqual := okay (* Ergebnis*)
END

Man muß natürlich auch testen, ob die Längen beider arrays übereinstimmen

HTH, Ludwig
 
Zuletzt bearbeitet:
Z

zille1976

Mitglied seit
26.11.2008
Beiträge
471
A

AlienJoker

Gast
Du kannst die Werte in einen String hintereinanderschreiben und dann mit "0001" vergleichen.

i as string = 0
s as string=""

Do while i < ubound(v)
s=s & v(i)
i+=1
loop
 
Thema:

ST: ArrayVariable mit IF abfragen

Sucheingaben

b&amp;r structured text

,

b&amp;r Variablen

ST: ArrayVariable mit IF abfragen - Ähnliche Themen

  • Nach Installation Windows 10 kann ich meine Produktdaten nicht abfragen

    Nach Installation Windows 10 kann ich meine Produktdaten nicht abfragen: Hallo, das Produkt hatte ich als Retail gekauft (Pro-64-Bit Version). installiert über mitgelieferten USB-Stick. Da ich keine Lizenz Daten...
  • Lange Pfade - Bug - Keine Abfrage vorm Überschreiben

    Lange Pfade - Bug - Keine Abfrage vorm Überschreiben: Ein Kollege von mir speichert Emails nicht in einer *.pst-Datei ab, sondern als msg-Dateien in seinen Dateipfaden. Da er schon mehrmals an die...
  • Pin Abfrage ohne Sim

    Pin Abfrage ohne Sim: Hallo, habe mein Nokia 635 mal wieder herausgekramt aber es verlangt eine Pin auch ohne Sim. Wie kann man das umgehen. Gruß Carsten
  • Sim-Pin Abfrage Lumia 735

    Sim-Pin Abfrage Lumia 735: Hallo, ich besitze ein Lumia 735 und habe jetzt den Anbieter gewechselt. Jetzt werde ich jedes Mal nach dem Sim-Pin gefragt nach dem Einschalten...
  • Startbildschirm Windows 10 Passwort- Pin Abfrage abstellen

    Startbildschirm Windows 10 Passwort- Pin Abfrage abstellen: Liebe Windows 10 Gemeinde, seit heute muss ich mich auf einmal per passwort oder pin anmelden. Alle Möglichkeiten im Netz das wieder...
  • Ähnliche Themen

    • Nach Installation Windows 10 kann ich meine Produktdaten nicht abfragen

      Nach Installation Windows 10 kann ich meine Produktdaten nicht abfragen: Hallo, das Produkt hatte ich als Retail gekauft (Pro-64-Bit Version). installiert über mitgelieferten USB-Stick. Da ich keine Lizenz Daten...
    • Lange Pfade - Bug - Keine Abfrage vorm Überschreiben

      Lange Pfade - Bug - Keine Abfrage vorm Überschreiben: Ein Kollege von mir speichert Emails nicht in einer *.pst-Datei ab, sondern als msg-Dateien in seinen Dateipfaden. Da er schon mehrmals an die...
    • Pin Abfrage ohne Sim

      Pin Abfrage ohne Sim: Hallo, habe mein Nokia 635 mal wieder herausgekramt aber es verlangt eine Pin auch ohne Sim. Wie kann man das umgehen. Gruß Carsten
    • Sim-Pin Abfrage Lumia 735

      Sim-Pin Abfrage Lumia 735: Hallo, ich besitze ein Lumia 735 und habe jetzt den Anbieter gewechselt. Jetzt werde ich jedes Mal nach dem Sim-Pin gefragt nach dem Einschalten...
    • Startbildschirm Windows 10 Passwort- Pin Abfrage abstellen

      Startbildschirm Windows 10 Passwort- Pin Abfrage abstellen: Liebe Windows 10 Gemeinde, seit heute muss ich mich auf einmal per passwort oder pin anmelden. Alle Möglichkeiten im Netz das wieder...
    Oben