EDIT 2:
Die Nachricht war zu lang für den vorherigen Post..
Also ich hab das jetzt für 3 Eingänge gelöst, indem ich erst eine Abfrage auf mindestens 2 unverbrauchte 'Einsen' mache und danach auf mindestens eine.
Schön ist es nicht, aber es funktioniert.
Ich wäre trotzdem sehr dankbar für weitere Vorschläge, wie ich das mit 4 Eingängen komfortabler lösen könnte
Hier der Code dazu, habe diesen nochmal etwas verändert.
Spoiler anzeigen
Func CompareE3()
For $i = 0 To 1
For $j = 0 To 3
if $Av[$i][$j] = "x" Then
$Avc[$i][$j] = 1
EndIf
Next
Next
if Av(0,0) = 1 Then ;Abfrage auf 0,0
if Av(0,1) = 1 Then ;Abfrage auf 0,1
if (Av(0,2) = 1 and Av(0,3) = 1) Then ;Abfrage auf 0,2 und 0,3
if (Av(1,0) = 1 and Av(1,1) = 1 and Av(1,2) = 1 and Av(1,3) = 1) Then ;Abfrage auf 1,0 bis 1,3
$TermAv = $TermAv &"1"
For $i = 0 To 1
For $j = 0 To 3
$Avc[$i][$j] = 1
Next
Next
EndIf
if Avc(0,0) = 0 or Avc(0,1) = 0 or Avc(0,2) = 0 or Avc(0,3) = 0 Then ;Abfrage ob 0,0 oder 0,1 oder 0,2 oder 0,3 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"x2"
For $i = 0 To 0
For $j = 0 To 3
$Avc[$i][$j] = 1
Next
Next
EndIf
EndIf
if Av(1,0) = 1 and Av(1,1) = 1 Then ;Abfrage auf 1,0 und 1,1
if Avc(0,0) = 0 or Avc(0,1) = 0 or Avc(1,0) = 0 or Avc(1,1) = 0 Then ;Abfrage ob 0,0 oder 0,1 oder 1,0 oder 1,1 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"x1"
For $i = 0 To 1
For $j = 0 To 1
$Avc[$i][$j] = 1
Next
Next
EndIf
EndIf
EndIf
if Av(0,3) = 1 and Av(1,0) = 1 and Av(1,3) = 1 Then ;Abfrage auf 0,3 und 1,0 und 1,3
if Avc(0,0) = 0 or Avc(0,3) = 0 or Avc(1,0) = 0 or Avc(1,3) = 0 Then ;Abfrage ob 0,0 oder 0,3 oder 1,0 oder 1,3 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"x3 ¯"
$Avc[0][0] = 1
$Avc[0][3] = 1
$Avc[1][0] = 1
$Avc[1][3] = 1
EndIf
EndIf
EndIf
if Av(1,0) = 1 and Av(1,1) = 1 and Av(1,2) = 1 and Av(1,3) = 1 Then ;Abfrage auf 1,0 bis 1,3
if Avc(1,0) = 0 or Avc(1,1) = 0 or Avc(1,2) = 0 or Avc(1,3) = 0 Then ;Abfrage ob 1,0 oder 1,1 oder 1,2 oder 1,3 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"x2 ¯"
For $i = 1 To 1
For $j = 0 To 3
$Avc[$i][$j] = 1
Next
Next
EndIf
EndIf
if Av(0,1) = 1 and Av(0,2) = 1 and Av(1,1) = 1 and Av(1,2) = 1 Then ;Abfrage auf 0,1 und 0,2 und 1,1 und 1,2
if Avc(0,1) = 0 or Avc(0,2) = 0 or Avc(1,1) = 0 or Avc(1,2) = 0 Then ;Abfrage ob 0,1 oder 0,2 oder 1,1 oder 1,2 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"x3"
For $i = 0 To 1
For $j = 1 To 2
$Avc[$i][$j] = 1
Next
Next
EndIf
EndIf
if Av(0,2) = 1 and Av(0,3) = 1 and Av(1,2) = 1 and Av(1,3) = 1 Then ;Abfrage auf 0,2 und 0,3 und 1,2 und 1,3
if Avc(0,2) = 0 or Avc(0,3) = 0 or Avc(1,2) = 0 or Avc(1,3) = 0 Then ;Abfrage ob 0,2 oder 0,3 oder 1,2 oder 1,3 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"x1 ¯"
For $i = 0 To 1
For $j = 2 To 3
$Avc[$i][$j] = 1
Next
Next
EndIf
EndIf
if Av(0,0) = 1 Then ;Abfrage auf 0,0
if Av(0,1) = 1 Then ;Abfrage auf 0,1
if Avc(0,0) = 0 and Avc(0,1) = 0 Then ;Abfrage ob 0,0 und 0,1 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ∧ x2)"
$Avc[0][0] = 1
$Avc[0][1] = 1
EndIf
EndIf
if Av(1,0) = 1 Then ;Abfrage auf 1,0
if Avc(0,0) = 0 and Avc(1,0) = 0 Then ;Abfrage ob 0,0 und 1,0 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ∧ x3 ¯ )"
$Avc[0][0] = 1
$Avc[1][0] = 1
EndIf
EndIf
EndIf
if Av(0,1) = 1 Then ;Abfrage auf 0,1
if Av(0,2) = 1 Then ;Abfrage auf 0,2
if Avc(0,1) = 0 and Avc(0,2) = 0 Then ;Abfrage ob 0,1 und 0,2 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x2 ∧ x3)"
$Avc[0][1] = 1
$Avc[0][2] = 1
EndIf
EndIf
if Av(1,1) = 1 Then ;Abfrage auf 1,1
if Avc(0,1) = 0 and Avc(1,1) = 0 Then ;Abfrage ob 0,1 und 1,1 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ∧ x3)"
$Avc[0][1] = 1
$Avc[1][1] = 1
EndIf
EndIf
EndIf
if Av(0,2) = 1 Then ;Abfrage auf 0,2
if Av(0,3) = 1 Then ;Abfrage auf 0,3
if Avc(0,2) = 0 and Avc(0,3) = 0 Then ;Abfrage ob 0,2 und 0,3 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x2)"
$Avc[0][2] = 1
$Avc[0][3] = 1
EndIf
EndIf
if Av(1,2) = 1 Then ;Abfrage auf 1,2
if Avc(0,2) = 0 and Avc(1,2) = 0 Then ;Abfrage ob 0,2 und 1,2 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x3)"
$Avc[0][2] = 1
$Avc[1][2] = 1
EndIf
EndIf
EndIf
if Av(0,3) = 1 Then ;Abfrage auf 0,3
if Av(0,1) = 1 Then ;Abfrage auf 0,1
if Avc(0,3) = 0 and Avc(0,1) = 0 Then ;Abfrage ob 0,3 und 0,1 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x2 ∧ x3 ¯ )"
$Avc[0][3] = 1
$Avc[0][1] = 1
EndIf
EndIf
if Av(1,3) = 1 Then ;Abfrage auf 1,3
if Avc(0,3) = 0 and Avc(1,3) = 0 Then ;Abfrage ob 0,3 und 1,3 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x3 ¯ )"
$Avc[0][2] = 1
$Avc[1][2] = 1
EndIf
EndIf
EndIf
if Av(1,0) = 1 and Av(1,1) = 1 Then ;Abfrage auf 1,0 und 1,1
if Avc(1,0) = 0 and Avc(1,1) = 0 Then ;Abfrage ob 1,0 und 1,1 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ∧ x2 ¯ )"
$Avc[1][0] = 1
$Avc[1][1] = 1
EndIf
EndIf
if Av(1,1) = 1 and Av(1,2) = 1 Then ;Abfrage auf 1,1 und 1,2
if Avc(1,1) = 0 and Avc(1,2) = 0 Then ;Abfrage ob 1,1 und 1,2 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ∧ x3)"
$Avc[1][1] = 1
$Avc[1][2] = 1
EndIf
EndIf
if Av(1,2) = 1 and Av(1,3) = 1 Then ;Abfrage auf 1,2 und 1,3
if Avc(1,2) = 0 and Avc(1,3) = 0 Then ;Abfrage ob 1,2 und 1,3 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x2 ¯ )"
$Avc[1][2] = 1
$Avc[1][3] = 1
EndIf
EndIf
if Av(1,3) = 1 and Av(1,0) = 1 Then ;Abfrage auf 1,3 und 1,0
if Avc(1,3) = 0 and Avc(1,0) = 0 Then ;Abfrage ob 1,3 und 1,0 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x3 ¯ )"
$Avc[1][3] = 1
$Avc[1][0] = 1
EndIf
EndIf
if Av(0,0) = 1 Then ;Abfrage auf 0,0
if Av(0,1) = 1 Then ;Abfrage auf 0,1
if Avc(0,0) = 0 or Avc(0,1) = 0 Then ;Abfrage ob 0,0 oder 0,1 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ∧ x2)"
$Avc[0][0] = 1
$Avc[0][1] = 1
EndIf
EndIf
if Av(1,0) = 1 Then ;Abfrage auf 1,0
if Avc(0,0) = 0 or Avc(1,0) = 0 Then ;Abfrage ob 0,0 oder 1,0 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ∧ x3 ¯)"
$Avc[0][0] = 1
$Avc[1][0] = 1
EndIf
EndIf
EndIf
if Av(0,1) = 1 Then ;Abfrage auf 0,1
if Av(0,2) = 1 Then ;Abfrage auf 0,2
if Avc(0,1) = 0 or Avc(0,2) = 0 Then ;Abfrage ob 0,1 oder 0,2 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x2 ∧ x3)"
$Avc[0][1] = 1
$Avc[0][2] = 1
EndIf
EndIf
if Av(1,1) = 1 Then ;Abfrage auf 1,1
if Avc(0,1) = 0 or Avc(1,1) = 0 Then ;Abfrage ob 0,1 oder 1,1 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ∧ x3)"
$Avc[0][1] = 1
$Avc[1][1] = 1
EndIf
EndIf
EndIf
if Av(0,2) = 1 Then ;Abfrage auf 0,2
if Av(0,3) = 1 Then ;Abfrage auf 0,3
if Avc(0,2) = 0 or Avc(0,3) = 0 Then ;Abfrage ob 0,2 oder 0,3 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x2)"
$Avc[0][2] = 1
$Avc[0][3] = 1
EndIf
EndIf
if Av(1,2) = 1 Then ;Abfrage auf 1,2
if Avc(0,2) = 0 or Avc(1,2) = 0 Then ;Abfrage ob 0,2 oder 1,2 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x3)"
$Avc[0][2] = 1
$Avc[1][2] = 1
EndIf
EndIf
EndIf
if Av(0,3) = 1 Then ;Abfrage auf 0,3
if Av(0,1) = 1 Then ;Abfrage auf 0,1
if Avc(0,3) = 0 or Avc(0,1) = 0 Then ;Abfrage ob 0,3 oder 0,1 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x2 ∧ x3 ¯)"
$Avc[0][3] = 1
$Avc[0][1] = 1
EndIf
EndIf
if Av(1,3) = 1 Then ;Abfrage auf 1,3
if Avc(0,3) = 0 or Avc(1,3) = 0 Then ;Abfrage ob 0,3 oder 1,3 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x3 ¯)"
$Avc[0][2] = 1
$Avc[1][2] = 1
EndIf
EndIf
EndIf
if Av(1,0) = 1 and Av(1,1) = 1 Then ;Abfrage auf 1,0 und 1,1
if Avc(1,0) = 0 or Avc(1,1) = 0 Then ;Abfrage ob 1,0 oder 1,1 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ∧ x2 ¯ )"
$Avc[1][0] = 1
$Avc[1][1] = 1
EndIf
EndIf
if Av(1,1) = 1 and Av(1,2) = 1 Then ;Abfrage auf 1,1 und 1,2
if Avc(1,1) = 0 or Avc(1,2) = 0 Then ;Abfrage ob 1,1 oder 1,2 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ∧ x3)"
$Avc[1][1] = 1
$Avc[1][2] = 1
EndIf
EndIf
if Av(1,2) = 1 and Av(1,3) = 1 Then ;Abfrage auf 1,2 und 1,3
if Avc(1,2) = 0 or Avc(1,3) = 0 Then ;Abfrage ob 1,2 oder 1,3 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x2 ¯ )"
$Avc[1][2] = 1
$Avc[1][3] = 1
EndIf
EndIf
if Av(1,3) = 1 and Av(1,0) = 1 Then ;Abfrage auf 1,3 und 1,0
if Avc(1,3) = 0 or Avc(1,0) = 0 Then ;Abfrage ob 1,3 oder 1,0 schon verbraucht sind
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x3 ¯ )"
$Avc[1][3] = 1
$Avc[1][0] = 1
EndIf
EndIf
if Av(0,0) = 1 and Avc(0,0) = 0 Then ;Abfrage auf 0,0 und ob schon verbraucht
TermExt()
$TermAv = $TermAv &"(x1 ∧ x2 ∧ x3 ¯)"
$Avc[0][0] = 1
while 1
ToolTip("Avc(0,0) = " & Avc(0,0), 0, 0)
WEnd
EndIf
if Av(0,1) = 1 and Avc(0,1) = 0 Then ;Abfrage auf 0,1 und ob schon verbraucht
TermExt()
$TermAv = $TermAv &"(x1 ∧ x2 ∧ x3)"
$Avc[0][1] = 1
EndIf
if Av(0,2) = 1 and Avc(0,2) = 0 Then ;Abfrage auf 0,2 und ob schon verbraucht
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x2 ∧ x3)"
$Avc[0][2] = 1
EndIf
if Av(0,3) = 1 and Avc(0,3) = 0 Then ;Abfrage auf 0,3 und ob schon verbraucht
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x2 ∧ x3 ¯)"
$Avc[0][3] = 1
EndIf
if Av(1,0) = 1 and Avc(1,0) = 0 Then ;Abfrage auf 1,0 und ob schon verbraucht
TermExt()
$TermAv = $TermAv &"(x1 ∧ x2 ¯ ∧ x3 ¯)"
$Avc[1][0] = 1
EndIf
if Av(1,1) = 1 and Avc(1,1) = 0 Then ;Abfrage auf 1,1 und ob schon verbraucht
TermExt()
$TermAv = $TermAv &"(x1 ∧ x2 ¯ ∧ x3)"
$Avc[1][1] = 1
EndIf
if Av(1,2) = 1 and Avc(1,2) = 0 Then ;Abfrage auf 1,2 und ob schon verbraucht
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x2 ¯ ∧ x3)"
$Avc[1][2] = 1
EndIf
if Av(1,3) = 1 and Avc(1,3) = 0 Then ;Abfrage auf 1,3 und ob schon verbraucht
TermExt()
$TermAv = $TermAv &"(x1 ¯ ∧ x2 ¯ ∧ x3 ¯)"
$Avc[1][3] = 1
EndIf
EndFunc
Func TermExt()
if $TermAv <> "A"&$TermChar &" = " Then
$TermAv = $TermAv &" ∨ "
EndIf
EndFunc
Func Av($Var1, $Var2)
if ($Av[$Var1][$Var2] = 1 or $Av[$Var1][$Var2] = "x") Then
Return 1
Else
Return 0
EndIf
EndFunc
Func Avc($Var1, $Var2)
if $Avc[$Var1][$Var2] = 0 Then
Return 0
Else
Return 1
EndIf
EndFunc
Alles anzeigen
EDIT 3:
Achja, nach langem hin und her überlegen und rum probieren, glaube ich gibt es keine bessere Möglichkeit
Die Abfragen einfacher zu realisieren würde noch gehen, aber ich glaube, die Ausgabe der unterschiedlichen Gleichungen kann ich nicht vereinfachen..
Meine letzte Idee ist leider schon an der Funktion gescheitert, hier mal der Code dazu:
Spoiler anzeigen
Func CompareE4()
For $iI = 0 To 4
For $jJ = 0 To 4
If Av($iI, $jJ) = 1 Then
If Av($i, $j + 1) = 1 Then
If Av($i, $j + 2) = 1 Then
If Av($i, $j + 3) = 1 Then
If Av($i + 1, $j) = 1 And Av($i + 1, $j + 1) = 1 And Av($i + 1, $j + 2) = 1 And Av($i + 1, $j + 3) = 1 Then
For $a = 0 To 4
For $b = 0 To 4
If Avc($a, $b) = 0 Then
$Avuc = 1
EndIf
Next
Next
If $Avuc = 1 Then
TermExt()
$TermAv = $TermAv & "("
If Av($i, 0) = 0 And Av($i, 1) = 0 Then
$TermAv = $TermAv & "∧ x1 ¯ "
EndIf
If Av($i, 2) = 0 And Av($i, 3) = 0 Then
$TermAv = $TermAv & "∧ x1 "
EndIf
If Av(0, $j) = 0 And Av(1, $j) = 0 Then
$TermAv = $TermAv & "∧ x2 ¯ "
EndIf
If Av(2, $j) = 0 And Av(3, $j) = 0 Then
$TermAv = $TermAv & "∧ x2 "
EndIf
If Av($i, 0) = 0 And Av($i, 3) = 0 Then
$TermAv = $TermAv & "∧ x3 "
EndIf
If Av($i, 1) = 0 And Av($i, 2) = 0 Then
$TermAv = $TermAv & "∧ x3 ¯ "
EndIf
$TermAv = $TermAv & ")"
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
Next
Next
EndFunc ;==>CompareE4
Alles anzeigen
So würde das auch noch nicht richtig funktionieren, da er einen Term mehrmals hinzufügen würde, aber das eigentliche Problem scheint hier zu sein, dass ich in "If Av($iI, $jJ) = 1 Then" nicht die $iI und $jJ Variablen packen kann, weil das schon in der Funktion selbst Variablen sind? Oder woran genau liegt das und wie kann ich das umgehen?
Dann hab ich noch eine weitere Frage, ich würde gerne die einzelnen Päckchen in der Tabelle umkreisen, da hab ich leider gar keine Idee, für die GUI benutze ich den Koda von SciTE und da sind die Möglichkeiten begrenzt.
Und es wäre gut, wenn ich die einzelnen Päckchen nochmal irgendwie hervorheben kann, wenn ich einen Term anklicke oder die Maus darüber fahre. Gibt es dafür auch noch eine Lösung?
ich hoffe ihr habt noch ein paar Tipps und Ideen für mich, danke im Voraus.