Zahlen/Optionen zusammenfassen und wieder trennen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Sicro
Beiträge: 966
Registriert: 11.08.2005 19:08
Kontaktdaten:

Zahlen/Optionen zusammenfassen und wieder trennen

Beitrag von Sicro »

Zahlen zusammenfassen und wieder trennen:

Code: Alles auswählen

; ## Vier Zahlen zu einer Zahl packen ##
; ======================================

; Maximaler Wert der einzelnen Zahlen
MaxValue = 90

; Zuweisung der einzelnen Zahlen
Value_A = 50
Value_B = 30
Value_C = 9
Value_D = 38

; Packen der einzelnen Zahlen
RetVal.q = (Value_A * Int(Pow(MaxValue + 1, 3)))
RetVal   + (Value_B * Int(Pow(MaxValue + 1, 2)))
RetVal   + (Value_C * (MaxValue + 1))
RetVal   + Value_D

; Alle Zahlen sind nun in RetVal
Debug RetVal ; = 37927837



; ## Eine Zahl zu vier Zahlen entpacken ##
; ========================================

; Entpacken der einzelnen Zahlen
Value_A = RetVal / Int(Pow(MaxValue + 1, 3))
RetVal % Int(Pow(MaxValue + 1, 3))

Value_B = RetVal / Int(Pow(MaxValue + 1, 2))
RetVal % Int(Pow(MaxValue + 1, 2))

Value_C = RetVal / (MaxValue + 1)
RetVal % (MaxValue + 1)

Value_D = RetVal

; Alle Zahlen sind wieder vorhanden
Debug Value_A ; = 50
Debug Value_B ; = 30
Debug Value_C ; = 9
Debug Value_D ; = 38
Optionen zusammenfassen und einzeln abfragen:

Code: Alles auswählen

; Hier legen wir fest, was alles zur Verfügung steht
Enumeration 
  #Pommes    = 1
  #Hamburger = 2
  #Cola      = 4
  #Fanta     = 8
  #Alles     = 16
EndEnumeration

Define Kunde_Bestellung.l

; Der Kunde sucht aus ...
Kunde_Bestellung | #Hamburger | #Cola

; Wir fragen die Bestellung ab
If Kunde_Bestellung & #Pommes
  Debug "Kunde möchte Pommes."
EndIf

If Kunde_Bestellung & #Hamburger
  Debug "Kunde möchte ein Hamburger."
EndIf

If Kunde_Bestellung & #Cola
  Debug "Kunde möchte eine Cola."
EndIf

If Kunde_Bestellung & #Fanta
  Debug "Kunde möchte eine Fanta."
EndIf

If Kunde_Bestellung & #Alles
  Debug "Kunde möchte Pommes, einen Hamburger, eine Cola und eine Fanta."
EndIf
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Zahlen/Optionen zusammenfassen und wieder trennen

Beitrag von STARGÅTE »

Hm, problem für das Beispiel 1 ist jedoch, dass du um an Value_D zu kommen, immer erst alle andere zahlen ermitteln musst.

Hier wäre ein echter Bit-Shift besser, wenn man zum Beispiel eine Quad in ein Array aus 8 Bytes spaltet:

Code: Alles auswählen

Structure ByteArray
	b.b[0]
EndStructure

Procedure GetByte(*Quad.ByteArray, Index.i)
	ProcedureReturn *Quad\b[Index]
EndProcedure

Procedure SetByte(*Quad.ByteArray, Index.i, Value.b)
	*Quad\b[Index] = Value
EndProcedure

Define Quad.q

SetByte(@Quad, 0, 50)
SetByte(@Quad, 1, 50)
SetByte(@Quad, 4, 9)
SetByte(@Quad, 6, 38)

Debug Quad

Debug GetByte(@Quad, 0)
Debug GetByte(@Quad, 1)
Debug GetByte(@Quad, 4)
Debug GetByte(@Quad, 6)
Ähnliches kann man mit auch Long, Word usw. machen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten