1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. MrShady187

Beiträge von MrShady187

  • Schaltungen mittels KV-Tabelle automatisch lösen (Benötige Hilfe)

    • MrShady187
    • 23. Mai 2018 um 04:22

    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 :D

    Hier der Code dazu, habe diesen nochmal etwas verändert.

    Spoiler anzeigen
    Code
    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 :D

    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
    Code
    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? :D

    ich hoffe ihr habt noch ein paar Tipps und Ideen für mich, danke im Voraus.

  • Schaltungen mittels KV-Tabelle automatisch lösen (Benötige Hilfe)

    • MrShady187
    • 21. Mai 2018 um 19:48

    So sorry, konnte mich die letzten Tage nicht motivieren weiter zu machen hehe

    Also ich hab jetzt folgendes geschrieben, ist glaub ich zwar etwas besser als das was ich bei 2 Eingängen gemacht habe, aber ich glaube wirklich kurz wird das mit der Methode auch nicht. Könnt ihr mir vielleicht sagen, ob ich auf dem richtigen Weg bin? Das ist jetzt nur die Abfrage für alle Möglichkeiten bei der ersten 'Eins' oben links, aber die nächsten Abfragen werden auf jeden Fall kürzer, da es weniger Möglichkeiten gibt.

    Spoiler anzeigen
    Code
    Func CompareE3()
        if ($Av[0][0] = 1 Or $Av[0][0] = "x") Then        ;Abfrage auf 0,0
            if ($Av[0][1] = 1 Or $Av[0][1] = "x") Then        ;Abfrage auf 0,1
                if (($Av[0][2] = 1 Or $Av[0][2] = "x") And ($Av[0][3] = 1 Or $Av[0][3] = "x")) Then        ;Abfrage auf 0,2 - 0,3
                    if (($Av[1][0] = 1 Or $Av[1][0] = "x") And ($Av[1][1] = 1 Or $Av[1][1] = "x") And ($Av[1][2] = 1 Or $Av[1][2] = "x") And ($Av[1][3] = 1 Or $Av[1][3] = "x")) Then        ;Abfrage auf 1,0 bis 1,3
                        $TermAv = $TermAv &"1"
                        $ComboA1_8 = 1
                        For $i = 0 To 1
                            For $j = 0 To 3
                                $Avc[$i][$j] = 1
                            Next
                        Next
                    EndIf
                    If $ComboA1_8 = 0 Then
                        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 Or $Av[1][0] = "x") And ($Av[1][1] = 1 Or $Av[1][1] = "x")) Then        ;Abfrage auf 1,0 - 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 - 0,1 - 1,0 - 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
                if $Avc[0][0] = 0 Or $Avc[0][1] = 0 Then        ;Abfrage ob 0,0 - 0,1 schon verbraucht sind
                    TermExt()
                    $TermAv = $TermAv &"(x1 ∧ x2)"
                    For $i = 0 To 0
                        For $j = 0 To 1
                            $Avc[$i][$j] = 1
                        Next
                    Next
                EndIf
            EndIf
            if (($Av[0][3] = 1 Or $Av[0][3] = "x") And $ComboA1_8 = 0) Then        ;Abfrage auf 0,3
                if (($Av[1][0] = 1 Or $Av[1][0] = "x") And ($Av[1][3] = 1 Or $Av[1][3] = "x")) Then        ;Abfrage auf 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 - 0,3 - 1,0 - 1,3 schon verbraucht sind
                        TermExt()
                        $TermAv = $TermAv &"x3 ̅"
                        For $i = 0 To 1
                            For $j = 0 To 0
                                $Avc[$i][$j] = 1
                            Next
                        Next
                        For $i = 0 To 1
                            For $j = 3 To 3
                                $Avc[$i][$j] = 1
                            Next
                        Next
                    EndIf
                EndIf
                if $Avc[0][0] = 0 Or $Avc[0][3] = 0 Then        ;Abfrage ob 0,0 - 0,3 schon verbraucht sind
                    TermExt()
                    $TermAv = $TermAv &"(x2 ∧ x3 ̅ )"
                    $Avc[0][0] = 1
                    $Avc[0][3] = 1
                EndIf
            EndIf
            if ($Av[1][0] = 1 Or $Av[1][0] = "x") Then        ;Abfrage auf 1,0
                if $Avc[0][0] = 0 Or $Avc[1][0] = 0 Then        ;Abfrage ob 0,0 - 1,0 schon verbraucht sind
                    TermExt()
                    $TermAv = $TermAv &"(x1 ∧ x3 ̅ )"
                    $Avc[0][0] = 1
                    $Avc[1][0] = 1
                EndIf
            EndIf
            if ($Av[0][0] = 1) And $Avc[0][0] = 0 Then        ;Abfrage auf 0,0 ob 1 und verbraucht
                TermExt()
                $TermAv = $TermAv &"(x1 ∧ x2 ∧ x3 ̅ )"
                $Avc[0][0] = 1
            EndIf
        EndIf
    
    
    EndFunc
    
    Func TermExt()
        if $TermAv <> "A"&$TermChar &" = " Then
            $TermAv = $TermAv &" ∨ "
        EndIf
    EndFunc
    Alles anzeigen

    EDIT:

    Und da bin ich schon beim nächsten Problem...

    Spoiler anzeigen
    Code
    Func CompareE3()
        if ($Av[0][0] = 1 Or $Av[0][0] = "x") Then        ;Abfrage auf 0,0
            if ($Av[0][1] = 1 Or $Av[0][1] = "x") Then        ;Abfrage auf 0,1
                if (($Av[0][2] = 1 Or $Av[0][2] = "x") And ($Av[0][3] = 1 Or $Av[0][3] = "x")) Then        ;Abfrage auf 0,2 - 0,3
                    if (($Av[1][0] = 1 Or $Av[1][0] = "x") And ($Av[1][1] = 1 Or $Av[1][1] = "x") And ($Av[1][2] = 1 Or $Av[1][2] = "x") And ($Av[1][3] = 1 Or $Av[1][3] = "x")) Then        ;Abfrage auf 1,0 bis 1,3
                        $TermAv = $TermAv &"1"
                        $ComboA1_8 = 1
                        For $i = 0 To 1
                            For $j = 0 To 3
                                $Avc[$i][$j] = 1
                            Next
                        Next
                    EndIf
                    If $ComboA1_8 = 0 Then
                        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 Or $Av[1][0] = "x") And ($Av[1][1] = 1 Or $Av[1][1] = "x")) Then        ;Abfrage auf 1,0 - 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 - 0,1 - 1,0 - 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
                if $Avc[0][0] = 0 Or $Avc[0][1] = 0 Then        ;Abfrage ob 0,0 - 0,1 schon verbraucht sind
                    TermExt()
                    $TermAv = $TermAv &"(x1 ∧ x2)"
                    For $i = 0 To 0
                        For $j = 0 To 1
                            $Avc[$i][$j] = 1
                        Next
                    Next
                EndIf
            EndIf
            if (($Av[0][3] = 1 Or $Av[0][3] = "x") And $ComboA1_8 = 0) Then        ;Abfrage auf 0,3
                if (($Av[1][0] = 1 Or $Av[1][0] = "x") And ($Av[1][3] = 1 Or $Av[1][3] = "x")) Then        ;Abfrage auf 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 - 0,3 - 1,0 - 1,3 schon verbraucht sind
                        TermExt()
                        $TermAv = $TermAv &"x3 ̅"
                        For $i = 0 To 1
                            For $j = 0 To 0
                                $Avc[$i][$j] = 1
                            Next
                        Next
                        For $i = 0 To 1
                            For $j = 3 To 3
                                $Avc[$i][$j] = 1
                            Next
                        Next
                    EndIf
                EndIf
                if $Avc[0][0] = 0 Or $Avc[0][3] = 0 Then        ;Abfrage ob 0,0 - 0,3 schon verbraucht sind
                    TermExt()
                    $TermAv = $TermAv &"(x2 ∧ x3 ̅ )"
                    $Avc[0][0] = 1
                    $Avc[0][3] = 1
                EndIf
            EndIf
            if ($Av[1][0] = 1 Or $Av[1][0] = "x") Then        ;Abfrage auf 1,0
                if $Avc[0][0] = 0 Or $Avc[1][0] = 0 Then        ;Abfrage ob 0,0 - 1,0 schon verbraucht sind
                    TermExt()
                    $TermAv = $TermAv &"(x1 ∧ x3 ̅ )"
                    $Avc[0][0] = 1
                    $Avc[1][0] = 1
                EndIf
            EndIf
            if ($Av[0][0] = 1) And $Avc[0][0] = 0 Then        ;Abfrage auf 0,0 ob 1 und verbraucht
                TermExt()
                $TermAv = $TermAv &"(x1 ∧ x2 ∧ x3 ̅ )"
                $Avc[0][0] = 1
            EndIf
        EndIf
    
        if ($Av[0][1] = 1 Or $Av[0][1] = "x") Then        ;Abfrage auf 0,1
            if ($Av[0][2] = 1 Or $Av[0][2] = "x") Then        ;Abfrage auf 0,2
                if (($Av[1][1] = 1 Or $Av[1][1] = "x") And ($Av[1][2] = 1 Or $Av[1][2] = "x")) Then        ;Abfrage auf 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 und 0,2 und 1,1 und 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 $Avc[0][1] = 0 Or $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 Or $Av[1][1] = "x") Then        ;Abfrage auf 1,1
                if $Avc[0][1] = 0 Or $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
            if $Avc[0][1] = 0 Then        ;Abfrage ob 0,1 schon verbraucht ist
                TermExt()
                $TermAv = $TermAv &"(x1 ∧ x2 ∧ x3)"
                $Avc[0][1] = 1
            EndIf
        EndIf
    
        if ($Av[0][2] = 1 Or $Av[0][2] = "x") Then        ;Abfrage auf 0,2
            if ($Av[0][3] = 1 Or $Av[0][3] = "x") Then        ;Abfrage auf 0,3
                if (($Av[1][2] = 1 Or $Av[1][2] = "x") And ($Av[1][3] = 1 Or $Av[1][3] = "x")) Then        ;Abfrage auf 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 und 0,3 und 1,2 und 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 $Avc[0][2] = 0 Or $Avc[0][3] = 0 Then        ;Abfrage ob 0,2 und 0,3 schon verbraucht sind
                    TermExt()
                    $TermAv = $TermAv &"(x2 ∧ x1 ̅ )"
                    $Avc[0][2] = 1
                    $Avc[0][3] = 1
                EndIf
            EndIf
            if ($Av[1][2] = 1 Or $Av[1][2] = "x") Then        ;Abfrage auf 1,2
                if $Avc[0][2] = 0 Or $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
            if $Avc[0][2] = 0 Then        ;Abfrage ob 0,2 schon verbraucht ist
                TermExt()
                $TermAv = $TermAv &"(x1 ̅ ∧ x2 ∧ x3)"
                $Avc[0][2] = 1
            EndIf
        EndIf
    
    
    EndFunc
    
    Func TermExt()
        if $TermAv <> "A"&$TermChar &" = " Then
            $TermAv = $TermAv &" ∨ "
        EndIf
    EndFunc
    Alles anzeigen

    KVC_06.jpg

    Theoretisch macht er ja alles richtig, aber die (x2 ∧ x3) ist hier überflüssig, da ich mit dem danach folgenden Term (x1 ̅ ∧ x3) alle 'Einsen' auch verbrauchen würde..

    Ich könnte in diesem speziellen Fall die Reihenfolge der Abfrage ändern, aber ich vermute spätestens bei 4 Eingängen wird das nicht mehr reichen.

    Vorschläge? Ich hätte jetzt spontan die Idee, dass er erst die Abfragen machen soll, wo mehr 'Einsen' unverbraucht sind, aber wie ich das umsetze weiß ich auch noch nicht.

  • Schaltungen mittels KV-Tabelle automatisch lösen (Benötige Hilfe)

    • MrShady187
    • 10. Mai 2018 um 17:12

    Hey, erstmal vielen Dank für die Antworten..

    @Kanashius

    Okay also, ich glaube den Ansatz hatte ich auch schon, aber genau da hab ich ja das Problem, dass ich nicht weiß, wann ich eine 'Eins/dontcare' nochmal verwenden muss oder nicht.

    Ich versuchs mal an nem Bsp:

    Spoiler anzeigen

    KVC_04.jpg

    Ich prüfe von oben links nach rechts, Reihe für Reihe, dann von oben links nach unten Spalte für Spalte.

    Erste Feld = 1

    Dann prüfe ich dieses Feld nach rechts auf vielfaches von 2 = wahr

    Dann prüfe ich diese beiden Felder nach unten auf vielfaches von 2 = wahr

    Weitere vielfache von 2 nach rechts und unten = falsch

    Erstes 4er Päckchen fertig.

    Dann mache ich das selbe mit der zweiten 'Eins' von oben links?! Selbe Spiel, er bildet wieder ein 4er Päckchen, allerdings kann ich hier doch schon nur nach rechts/unten prüfen, sonst würde er das erste 4er Päckchen ja nochmal bilden. So und nun würde ich aber nochmal die dritte 'Eins' prüfen und das würde ein 2er Päckchen nach unten ergeben, welches ich aber nicht mehr haben will, weil alle 'Einsen' in diesem Päckchen bereits verbraucht sind. Da fällt mir gerade auf, wahrscheinlich kann ich das irgendwie mit Hilfsvariablen lösen, dass wenn alle 'Einsen' eines Päckchen verbraucht sind, die nicht nochmal verwendet werden müssen.

    Und nach links/hoch muss ich auch gar nicht überprüfen, wenn ich von oben links anfange... Okay, vielleicht hatte ich vorher irgendwo einen Denkfehler, ich werde das jedenfalls so nochmal probieren, ob das klappt und melde mich dann wieder.

    Übrigens JS kann ich leider nicht, dachte zwar würde daraus trotzdem wenigstens den Sinn verstehen, hab ich aber leider nicht :D

    @chesstiger

    Mit deiner Antwort bin ich leider überfordert haha

    Also ich weiß, was du meinst mit dem Abgleich von dem Array der Tabelle mit einem vordefiniertem Array mit den möglichen Päckchen, allerdings wüsste ich nicht genau, wie ich diese Abfrage realisieren sollte, weil ich eben theoretisch viele Päckchen haben kann, die auch ineinander greifen.. Ich werde versuchen, das irgendwie zu testen und melde mich dann.

    BitAND kenne ich leider auch noch nicht, aber ich lese mich schlau.

    EDIT:

    Achja und ja es muss KV sein, ich mache gerade ein Techniker Studium und habe mir das als Abschlussarbeit ausgesucht, hab mir das Anfangs aber doch etwas leichter vorgestellt hehe

  • Schaltungen mittels KV-Tabelle automatisch lösen (Benötige Hilfe)

    • MrShady187
    • 9. Mai 2018 um 22:57

    Hi, ich versuche ein Programm zu erstellen, dass KV-Tabellen automatisch befüllt und mir die möglichst kürzeste Kombination aus Gattern wiedergibt.

    Kurz zur Erklärung wie das geht, ich hab z.B. eine Tabelle mit 2 Eingängen:

    KVC_01

    KVC_01.jpg

    Bei A1 gib ich die Zahlen selbst ein und das Programm überführt sie rechts in die Tabelle, dann überprüft er, ob vertikal oder horizontal mehrere 'Einsen' liegen.

    Es können immer nur 2-er, 4-er, 8-er oder eben 1-er Päckchen gebildet werden. Es können z.B. 4 'Einsen' untereinander oder nebeneinander ein 4-er Päckchen ergeben oder auch 2 neben- und untereinander.

    Das geht auch über den Rand hinaus, so können z.B. 4 'Einsen' in den äußersten 4 Ecken, ein 4-er Päckchen ergeben.

    Das ist bei dem Bsp. mit 2 Eingängen noch nicht relevant aber bei 3 oder 4 Eingängen.

    Man kann auch 'Einsen' die man für ein Päckchen schon verbraucht hat, auch nochmal benutzen um ein weiteres Päckchen zu bilden, allerdings nur, wenn es auch Sinn macht.

    Als Bsp.:

    KVC_02

    KVC_02.jpg

    Hier sollen z.B. alle 4 'Einsen' auf der linken Seite zu einem 4-er Päckchen gebildet werden und die dritte 'Eins' in oberen Reihe soll mit der zweiten 'Eins' in dieser Reihe zu einem 2-er Päckchen gebildet werden.

    Wäre ganz oben rechts noch eine 'Eins', so sollten aber 2x 4-er Päckchen gebildet werden.

    Weiterhin besteht die Möglichkeit, dass ein Ausgang nicht relevant ist und mit 'x' belegt wird. Das 'x' kann auch dazu genutzt werden ein Päckchen mit 'Einsen' zu bilden, soll aber nur in Betracht gezogen werden, wenn es dabei hilft, ein Päckchen zu bilden.

    Am Ende müssen alle 'Einsen' in der Tabelle verbraucht sein und dann sieht man sich die Päckchen an. Für die Bildung der Gleichung muss man sich jetzt das Päckchen ansehen, in welchen Eingängen es sich befindet.

    Befindet sich ein Päckchen z.B. in x1, aber nicht in x1¯, so ist x1 die Gleichung. Befindet sich das Päckchen in beiden Eingängen (x1 und x1¯), so ist weder x1, noch x1¯ Teil der Gleichung.

    An dem Bsp. KVC_02 wäre die Gleichung A1 = x1 ∨ (x2 ∧ x3). Beim 4-er Päckchen wird x2 und x2¯ eingeschlossen, sowie x3 und x3¯, deswegen werden die beiden Eingänge ausgeschlossen und es bleibt x1 als Gleichung über, weil x1¯ nicht eingeschlossen ist. Beim 2-er Päckchen ist x1 und x1¯ eingeschlossen, aber x2¯ und x3¯ nicht, deswegen bleibt x2 ∧(und) x3 über.

    Ich hoffe ich hab nichts vergessen und es halbwegs vernünftig erklärt.

    So nun hab ich das mit 2 Eingängen hin bekommen, der Code dazu:

    KVC_2E_Code
    Code
    Func CompareE2()
        if ($Av[0][0] = 1 Or $Av[0][0] = "x") And ($Av[0][1] = 1 Or $Av[0][1] = "x") And ($Av[1][0] = 1 Or $Av[1][0] = "x") And ($Av[1][1] = 1 Or $Av[1][1] = "x") Then
            $TermAv = $TermAv &"Plus"
            $ComboA1_4 = 1
        EndIf
    
        if ($Av[0][0] = 1 Or $Av[0][0] = "x") And ($Av[0][1] = 1 Or $Av[0][1] = "x") And $ComboA1_4 = 0 Then
            if $TermAv <> "A"&$TermChar &" = " Then
                $TermAv = $TermAv &" ∨ "
            EndIf
            $TermAv = $TermAv &"x2"
            $ComboA1_2 = 1
        EndIf
    
        if ($Av[1][0] = 1 Or $Av[1][0] = "x") And ($Av[1][1] = 1 Or $Av[1][1] = "x") And $ComboA1_4 = 0 Then
            if $TermAv <> "A"&$TermChar &" = " Then
                $TermAv = $TermAv &" ∨ "
            EndIf
            $TermAv = $TermAv &"x2 ̅"
            $ComboA1_2 = 1
        EndIf
    
        if ($Av[0][0] = 1 Or $Av[0][0] = "x") And ($Av[1][0] = 1 Or $Av[1][0] = "x") And $ComboA1_4 = 0 Then
            if $TermAv <> "A"&$TermChar &" = " Then
                $TermAv = $TermAv &" ∨ "
            EndIf
            $TermAv = $TermAv &"x1"
            $ComboA1_2 = 1
        EndIf
    
        if ($Av[0][1] = 1 Or $Av[0][1] = "x") And ($Av[1][1] = 1 Or $Av[1][1] = "x") And $ComboA1_4 = 0 Then
            if $TermAv <> "A"&$TermChar &" = " Then
                $TermAv = $TermAv &" ∨ "
            EndIf
            $TermAv = $TermAv &"x1 ̅"
            $ComboA1_2 = 1
        EndIf
    
        if $ComboA1_2 = 0 And $ComboA1_4 = 0 Then
            if $Av[0][0] = 1 Then
                if $TermAv <> "A"&$TermChar &" = " Then
                    $TermAv = $TermAv &" ∨ "
                EndIf
                $TermAv = $TermAv &"(x1 ∧ x2)"
            EndIf
            if $Av[0][1] = 1 Then
                if $TermAv <> "A"&$TermChar &" = " Then
                    $TermAv = $TermAv &" ∨ "
                EndIf
                $TermAv = $TermAv &"(x1 ̅ ∧ x2)"
            EndIf
            if $Av[1][0] = 1 Then
                if $TermAv <> "A"&$TermChar &" = " Then
                    $TermAv = $TermAv &" ∨ "
                EndIf
                $TermAv = $TermAv &"(x1 ∧ x2 ̅ )"
            EndIf
            if $Av[1][1] = 1 Then
                if $TermAv <> "A"&$TermChar &" = " Then
                    $TermAv = $TermAv &" ∨ "
                EndIf
                $TermAv = $TermAv &"(x1 ̅ ∧ x2 ̅ )"
            EndIf
        EndIf
    EndFunc
    Alles anzeigen

    Kurze Erläuterung:

    $Av ist die Tabelle als Array (ohne die Bezeichnungen wie x1, x1̅ usw.)

    $TermAv benutze ich um die Gleichung aus zu geben. Die Abfrage "if $TermAv <> "A"&$TermChar &" = " Then" dient dazu um zu gucken ob ich schon ein Teil der Gleichung habe, falls ja, soll er diese mit " ∨ " erweitern, bevor die Gleichung um die Eingänge erweitert wird.

    $ComboA1_4/2 hab ich hier als Hilfsvariable benutzt, weil ich keine weiteren 2-er bzw. 1-er Päckchen bilden muss, das funktioniert aber auch nur bei der Tabelle mit 2 Eingängen.

    Allerdings bin ich maßlos überfordert, das für eine Tabelle mit 3 oder 4 Eingängen zu erstellen und ich glaube auch auf diese Art und Weise würde da an die eine Million Zeilen Code entstehen und meine eigentliche Frage ist, hat jemand eine Idee, wie ich das anders abfragen kann bzw. gibt es irgendwelche Funktionen in AutoIT mit denen ich sowas viel einfacher machen kann?

    Ich bin leider noch kein Profi in AutoIT.

    Das Hauptproblem was ich sehe, ist, dass ich manche 'Einsen' manchmal, doppelt verwenden muss, aber manchmal eben nicht.

    Das selbe auch mit dem 'x', welches ich ja nur verwenden möchte, wenn es mir dabei hilft, mit anderen 'Einsen' ein Päckchen zu bilden.

    Hier nochmal ein Screen, wie die Tabelle mit 4 Eingängen bei mir aussieht:

    KVC_03

    KVC_03.jpg

    Ich hoffe wirklich jemand kann mir hierbei irgendwie helfen und ich bin für jede Idee dankbar.

    Mit freundlichem Gruß

    Eugen

    Dateien

    KVC_01.jpg 36,75 kB – 0 Downloads KVC_02.jpg 43,4 kB – 0 Downloads KVC_02.jpg 43,4 kB – 0 Downloads
  • Error: Subscript used on non-accessible variable

    • MrShady187
    • 2. Januar 2015 um 17:16

    Hi, ja wie der Titel sagt, bekomme ich diese Fehlermeldung, wenn ich einen Hotkey meines Scripts benutze.
    Hier im Forum gibts den Error scheinbar nicht, durch Google habe ich was gefunden, allerdings hatten diejenigen tatsächlich irgendwelche Scriptfehler, bei mir ist es aber der Fall, dass das Script einwandfrei funktionierte, bis ich meinen PC formatiert habe.
    Nun kann ich mich erinnern, dass ich eine ImageSearch.dll hatte und jetzt auch wieder habe und versucht habe die sonst wohin zu kopieren, es aber trotzdem nicht funktioniert.
    Wo genau muss die hin? Oder hat jemand noch eine Idee woran das liegen könnte? Am Script selbst ja nicht, also muss was fehlen...
    AutoIt hab ich bereits neu drüber installiert, das Script neu kompiliert, auch hab ich ein neues kurzes Test-Script geschrieben, was auch nicht funktioniert, allerdings ein weiteres ohne ImageSearch funktioniert.

  • GUI Variable Positionen von z.B. Labeln?

    • MrShady187
    • 23. Oktober 2014 um 21:46

    OMG, genauso meinte ich das ja :D Super vielen Dank!!
    Dann werd ich mich mal daran machen das in mein Script ein zu passen, Allen vielen Dank für die Hilfe ;)

    EDIT:
    Also, ich hab noch das eine Problem, dass wenn alle Zahlen 0 sind bzw. nicht da, stürzt das Programm ab.
    Die Zahlen der Arrays sind Variablen, die aus einer Ini geladen werden.

  • GUI Variable Positionen von z.B. Labeln?

    • MrShady187
    • 23. Oktober 2014 um 20:43

    Also mich würde mal interessieren, wieso bei diesem Code die "-1" steht

    [autoit]

    While $array[UBound($array) - 1][1] = 0 ;solange letzte zahl im array null ist
    _ArrayDelete($array, UBound($array) - 1);dieses element löschen
    WEnd

    [/autoit][autoit]

    For $i = 0 To UBound($array) - 1 ;array durchlaufen
    If $array[$i][1] <> 0 Then ;wenn zahl<>0 dann
    $text &= $array[$i][0] & "," & $array[$i][1] & @CRLF ;auflisten
    EndIf
    Next

    [/autoit]


    Bei dem Bsp. heißt es ja eigentlich von 0 bis "5-1" denk ich mal oder? Weil da die "0" auch mit gezählt wird, aber bei dem anderen, sieht das für mich so aus, als würde er "5-1" Zeilen berücksichtigen.

    Und ich steh jetzt vor dem Problem, dass wenn in der ListView so und so viel Zeilen sind, schreibe weiter in Spalte 3 und 4.
    Aber ich will nicht die Namen grundsätzlich in Spalte 1,2 und Spalte 3,4 teilen, sondern es sollen alle Namen und zahlen in Spalte 1,2 rein bis nicht eine bestimmte länge erreicht ist.

    Hier mein bisheriger Code:

    [autoit]

    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <ListViewConstants.au3>
    #include <GuiListView.au3>

    [/autoit][autoit][/autoit][autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 620, 622, 645, 90)
    $ListView1 = GUICtrlCreateListView("", 0, 0, 620, 590)
    $Button1 = GUICtrlCreateButton("Button1", 272, 590, 75, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit]

    $AdCol = False

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    AdArray()

    [/autoit][autoit][/autoit][autoit]

    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func AdArray()
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView1))
    Dim $array[43][4] = [["Name1", 500],["Name2", 7],["Name3", 800],["Name4", 5],["Name5", 300],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3],["Name",3]]
    _ArraySort($array, 1, 0, 0, 1)
    While $array[UBound($array) - 1][1] = 0
    _ArrayDelete($array, UBound($array) - 1)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    If $AdCol = False Then
    _GUICtrlListView_AddColumn($ListView1, "Name", 100)
    _GUICtrlListView_AddColumn($ListView1, "Zahl", 100)
    $AdCol = True
    EndIf
    _GUICtrlListView_AddArray($ListView1, $array)

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit]
  • GUI Variable Positionen von z.B. Labeln?

    • MrShady187
    • 23. Oktober 2014 um 19:18

    Naja wie gesagt ich lerne noch und hab meine erfolglosen Versuche wieder gelöscht :D
    Aber auf jeden Fall danke für das Angebot, ich werd mich noch mal ran hängen und gucken wo es hängt.
    Wenn ich dann soweit bin, dass ich was posten kann, werd ich das mal tun :)

  • GUI Variable Positionen von z.B. Labeln?

    • MrShady187
    • 23. Oktober 2014 um 17:32

    Super vielen dank, allerdings hab ichs noch nicht hin bekommen, 2D-Arrays in eine ListView rein zu stecken, da ich das in meiner GUI angezeigt haben will und nicht in einem extra Fenster, aber ich lese und probiere noch weiter aus, dabei lernt man ja am besten.

  • GUI Variable Positionen von z.B. Labeln?

    • MrShady187
    • 22. Oktober 2014 um 20:52

    Okay danke, leider hab ich noch keine Zeit gefunden mich mit Arrays zu beschäftigen.
    Ist das dann so, dass ich mit Array1(Name1, Zahl1), Name und Zahl verknüpfen kann?
    Und mit ArraySort dann mehrere Arrays nach dem 2. Wert der einzelnen Arrays sortieren kann?
    Sicherlich geht das nicht mit Labeln oder? Würde sich dort ein Listenfeld besser eignen?
    Kann ich dann auch mit einer Array-Funktion, Arrays ausblenden oder ganz einfach If Array1(Wert2) = "0" Then "hide"Array1?
    Wie könnte denn so eine "hide"Array1 Funktion aussehen?

  • GUI Variable Positionen von z.B. Labeln?

    • MrShady187
    • 22. Oktober 2014 um 20:13

    Hi, ich habe ne Idee aber leider kein blassen Schimmer wie ich sie umsetzen soll.
    Ich habe z.B.:
    Name1, Name2, Name3, Zahl1, Zahl2, Zahl3, wobei Name1 und Zahl1 immer zusammen gehören und neben einander stehen sollen.
    Die Zahlen werden durch Funktionen verändert, z.B. Name1: Zahl1(500) soll dann an Pos1 stehen.
    An Pos2 soll dann der Name und die Zahl stehen, die höher als 0 ist, wobei alle Zahlen mit 0 anfangen.
    Wenn Zahl2 also 0 ist und Zahl3 z.B. 100, dann soll Name3 und Zahl3(100) an Pos2 stehen, sobald Zahl2 höher als 0 ist, soll dann Name2 und Zahl2 and Pos2 stehen und Name3 und Zahl3 an Pos3.
    Hoffentlich ist das verständlich hehe.
    So das wäre die erste Idee, die zweite wäre, dass die Anordnung nicht von Name1, Name2, Name3, usw. abhängt, sondern von der Höhe der Zahlen, z.B.:
    Name1 und Zahl1(500) an Pos1
    Name3 und Zahl3(100) an Pos2
    Name2 und Zahl2(0) soll nicht angezeigt werden solange nicht höher als 0
    Und wenn dann Zahl2 z.B. einen Wert von 1000 hat, soll Name2 und Zahl2 an Pos1 stehen und die anderen nach unten verschoben.

    Ist das so mit Labeln überhaupt möglich? Man könnte ja Name und Zahl mit einander verknüpfen und mit irgendeiner Funktion, die höchste Zahl mit dem verknüpften Namen in Label1 schreiben, mit einer anderen Funktion, die vorherigen Daten aus Label1 in Label2 übertragen.
    Oder würde sich da etwas anderes effektiver als Label erweisen?
    Ich habs noch nicht getestet, aber kann man mittels Funktionen, die Strings in einem Listenfeld ausblenden und verändern und Name und Zahl verknüpfen? Und wenn man dann z.B. Name2 und Zahl2 ausblendet, schiebt sich dann Name3 und Zahl3 automatisch an Pos2, solange bis Zahl2 nicht höher als 0 ist, oder für die zweite Idee, eben höher als Zahl3.

    Ich hoffe es ist verständlich genug was ich meine und hoffe auch jemand hat ne super Lösung parat :D

  • ComboBox auslesen und als Deklaration verwenden

    • MrShady187
    • 19. Oktober 2014 um 22:31

    Alles klar danke, mit Arrays hab ich mich noch garnicht beschäftigt, ich werd mich mal darüber informieren.

  • ComboBox auslesen und als Deklaration verwenden

    • MrShady187
    • 19. Oktober 2014 um 19:34

    Wieso denkst du, dass das ein Bot o.ä. sein soll? Ich hätte auch ein anderes Bsp. nehmen können, es geht doch lediglich um ein Problem, nicht um ein Programm, Bot oder ein Script mit solchen Funktionen...

  • ComboBox auslesen und als Deklaration verwenden

    • MrShady187
    • 19. Oktober 2014 um 16:53

    Hi, ich hab folgendes Problem, eine ComboBox wo z.B. Karotten drin steht.
    Ich habe Karotten deklariert als:

    [autoit]

    $Dir=@ScriptDir&"\Pics\"
    $Typ=".bmp"
    $Img2="Karotten"
    $Karotten=$Dir&$Img2&$Typ

    [/autoit]


    Jetzt lese ich die ComboBox aus, wo z.B. Karotten drin steht.

    [autoit]

    $Produkt_Acker = GUICtrlRead($Combo2)

    [/autoit]


    Jetzt möchte ich das ausgelesene Wort "Karotten" in einer _ImageSearch-Funktion suchen und zwar das deklarierte Wort $Karotten

    [autoit]

    If _ImageSearch($Produkt_Acker,1,$x0,$y0,$tol)=1 Then

    [/autoit]


    So scheint das ja nicht zu funktionieren weil er ja dann versucht "Karotten" zu suchen, statt "$Karotten".
    Wie kann ich das jetzt so ändern, dass er das tut was ich will?
    Ich hab schon das hier versucht:

    [autoit]

    $$Produkt_Acker
    $&$Produkt_Acker
    ${$Produkt_Acker}
    $($Produkt_Acker)
    $"$Produkt_Acker"
    $&"$Produkt_Acker"

    [/autoit]


    Nichts davon funktioniert hehe, hoffe jemand hat eine super Lösung für mich, danke schon im Voraus!
    Aber am besten ohne das Wort "Karotten" in der ComboBox in "$Karotten" zu ändern ;)

    PS. Die Semikolonen nach dem "Und-Zeichen" macht er hier irgendwie automatisch, die hab ich nicht drin.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™