Step 7 Vorzeichen fest vorgeben

Aboden

Level-2
Beiträge
121
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Spezialisten
habe folgendes Problem bzw. suche folgende AWL Lösung:

Ich habe 2 Real Zahlen. Diese beiden möchte ich auf ihre Vorzeichen vergleichen.
Haben beide das gleiche Vorzeichen, also + und + oder - und - ,dann soll die 2. Zahl transferiert auf eine 3. Zahl immer mit Vorzeichen +
Sind sie unterschiedlich, dann soll die 2. Zahl transferiert auf die 3. Zahl immer mit Vorzeichen -

Beispiel:

1.Zahl 2.Zahl 3.Zahl
+123____+4______+4
-123_____-4_______+4
+123____-4_______-4
-123_____+4______-4

Hat einer eine Idee für den AWL Code?
 
Zuletzt bearbeitet:
Ohne genauen Code könntest du die beiden Zahlen multiplizieren und falls das Ergebnis nicht kleiner 0 ist verwenden. Andernfalls das Ergebnis mit -1.0 multiplizieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier 2 Versionen, die in KOP erstellt wurden, als AWL

Version 1
Code:
 U(  
      U(  
      L     #Zahl1
      L     0
      <R  
      )    
      U(  
      L     #Zahl2
      L     0
      <R  
      )    
      O    
      U(  
      L     #Zahl1
      L     0
      >=R  
      )    
      U(  
      L     #Zahl2
      L     0
      >=R  
      )    
      )    
      SPBNB _001
      L     #Zahl2
      T     #Zahl3
_001: NOP   0

Version 2
Code:
      U(  
      L     #Zahl1
      L     #Zahl2
      *R  
      T     #rTemp
      UN    OV
      SAVE
      CLR  
      U     BIE
      )    
      U(  
      L     #rTemp
      L     0
      >=R  
      )    
      SPBNB _002
      L     #Zahl2
      T     #Zahl3
_002: NOP   0

Version 3 (AWL only, nicht übersetzbar)
Code:
   L     #Zahl1
      L     #Zahl2
      *R   
      L     0.000000e+000
      <R   
      SPB   END                         // Wenn kleiner 0, dann nicht transferieren
      L     #Zahl2
      T     #Zahl3
END:  NOP   0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ohne genauen Code könntest du die beiden Zahlen multiplizieren und falls das Ergebnis nicht kleiner 0 ist verwenden. Andernfalls das Ergebnis mit -1.0 multiplizieren.
Super Idee, so bekomm ich raus ob ich die 3. Zahl mit Vorzeichen + oder - versehen muss. Aber das Ergebnis darf nicht aus Zahl 1 und 2 mit -1.0 multip. werden, da nur der Wert von Zahl 2 in Zahl 3 angezeigt werden muss.
Wie könnte das in AWL aussehen?
 
Das + oder - Ergebnis erkennst du, ich möchte aber dann, wenn das Ergebnis + ist, die 3. Zahl auch + wird auch wenn Zahl 2 - war.
Ebenso bei Ergebnis - , hier soll die 3. Zahl auch - werden, auch wenn Zahl 2 + war
Kurz gesagt:
- bei Ergebnis - soll das Vorzeichen bei der 3. Zahl immer - sein (und Wert von 2. Zahl)
- bei Ergebnis + soll das Vorzeichen bei der 3. Zahl immer + sein (und Wert von 2. Zahl)

1.Zahl 2.Zahl 3.Zahl
+123____+4______+4 (Ergebnis +)
-123_____-4_______+4 (Ergebnis +)
+123____-4_______-4 (Ergebnis -)
-123_____+4______-4 (Ergebnis -)
 
Ich verstehe jetzt nicht so wirklich das Problem... Du hast 2 Zahlen mit 2 möglichen Zuständen (kleiner 0 / grösser 0). Das macht 4 Möglichkeiten. Wie du in #7 schon erkannt hast. Das solltest du doch schnell mit ein paar Vergleichern, Verknüpfungen und Move-Befehlen hinbekommen.
 
Ich verstehe jetzt nicht so wirklich das Problem... Du hast 2 Zahlen mit 2 möglichen Zuständen (kleiner 0 / grösser 0). Das macht 4 Möglichkeiten. Wie du in #7 schon erkannt hast. Das solltest du doch schnell mit ein paar Vergleichern, Verknüpfungen und Move-Befehlen hinbekommen.
Bin halt nicht so fit in AWL, nicht dass es unmöglich aussieht und viel einfacher geht:)
 
Bin halt nicht so fit in AWL, nicht dass es unmöglich aussieht und viel einfacher geht:)
Also soll dir einer den Code schreiben ? Gut. wird sich schon einer finden. Ich fange mal an

L Zahl_1
L 0
>0
= M 1.0 // Zahl 1 kleiner 0 > also Minus

Wie wäre es wenn du mal anfängst und wir zeigen dir hier evtl. Verbesserungen/Korrekturen auf.
 
L #Zahl1
L #Zahl2
*R
L 0.000000e+000
<R
SPB END // Wenn kleiner 0, dann nicht transferieren
L #Zahl2
T #Zahl3
END: NOP 0

Dieses Beispiel von Maagic7 find ich als Ausgangsbasis gut. Jetzt muss ich nur noch die Vorzeichen in der 3. Zahl anpassen.
d.h. vor SPB END muss man die 2. Zahl in 3. Zahl transferieren und das Vorzeichen von 3.Zahl dann immer auf - setzen
und nach SPB END muss man das Vorzeichen von 3.Zahl immer auf + setzen

Wie macht man das, wenn man ein Vorzeichen in einer Zahl festlegen möchte?

L #Zahl1
L #Zahl2
*R
L 0.000000e+000
<R
L #Zahl 2
Vorzeichen - setzen
T #Zahl3

SPB END // Wenn kleiner 0, dann nicht transferieren
L #Zahl2
Vorzeichen + setzen
T #Zahl3
END: NOP 0
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie macht man das, wenn man ein Vorzeichen in einer Zahl festlegen möchte?
Code:
L #zahl
ABS  //Bilde den Absolutwert, speichere das Ergebnis in AKKU 1.
NEGI //Bilde das Zweierkomplement (16 Bit). (für *-1)

in Deinem Fall:

Code:
L #Zahl1
L #Zahl2
*R
L 0.000000e+000
<R
L #Zahl 1
ABS
NEGI
T #Zahl3
SPB END // Wenn kleiner 0, dann nicht transferieren
L #Zahl2
ABS
T #Zahl3
END: NOP 0
 
*-1 macht aus einer positiven eine negative Zahl und umgekehrt
Dann muss ich wahrscheinlich noch dort wo ich die Vorzeichen setzen will eine Bedingung vorsehen


L #Zahl1
L #Zahl2
*R
L 0.000000e+000
<R
L #Zahl 2
Vorzeichen - setzen
T #Zahl3

SPB END // Wenn kleiner 0, dann nicht transferieren
L #Zahl2
Vorzeichen + setzen
T #Zahl3
END: NOP 0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
L #zahl
ABS  //Bilde den Absolutwert, speichere das Ergebnis in AKKU 1.
NEGI //Bilde das Zweierkomplement (16 Bit). (für *-1)

in Deinem Fall:

Code:
L #Zahl1
L #Zahl2
*R
L 0.000000e+000
<R
L #Zahl 1
ABS
NEGI
T #Zahl3
SPB END // Wenn kleiner 0, dann nicht transferieren
L #Zahl2
ABS
T #Zahl3
END: NOP 0
#Zahl1
L #Zahl2
*R
L 0.000000e+000
<R
L #Zahl 2
ABS
NEGI
T #Zahl3 -> Zahl 3 muss immer - sein, wenn Zahl 2 - oder + ist!
SPB END // Wenn kleiner 0, dann nicht transferieren
L #Zahl2
ABS
T #Zahl3 -> Zahl 3 muss immer + sein, wenn Zahl 2 - oder + ist!
END: NOP 0

Und ich habe REAL Zahlen mit Kommastellen
 
Zuletzt bearbeitet:
#Zahl1
L #Zahl2
*R
L 0.000000e+000
<R
L #Zahl 2
ABS
NEGI
T #Zahl3 -> Zahl 3 muss immer - sein, wenn Zahl 2 - oder + ist!
SPB END // Wenn kleiner 0, dann nicht transferieren
L #Zahl2
ABS
T #Zahl3 -> Zahl 3 muss immer + sein, wenn Zahl 2 - oder + ist!
END: NOP 0

Und ich habe REAL Zahlen mit Kommastellen

ok, aber ABS sollte auch bei REAL-Zahlen funktionieren.
https://www.sps-forum.de/threads/real-als-betrag.47305/

Dann statt NEGI halt

Code:
L -1.0
*R
 
Zurück
Oben