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. Yjuq

Beiträge von Yjuq

  • Häufigkeit der Wörter in einem Array

    • Yjuq
    • 6. November 2014 um 06:14

    Du erstellst ein neues array mit 2 dimensionen. In der ersten spalte speicherst du alle vorkommenden namen ab, in der zweiten wie oft sie vorkommen. Du musst lediglich beide arrays durchlaufen und immer wieder vergleichen ob der name schon im neu angelegten array enthalten ist. Ist er das, dann den zähler um eins erhöhen, ist er es nicht fügst du den namen einfach noch hinzu. Den rest schaffst du denke ich alleine.

    Gesendet von meinem HTC Desire HD A9191 mit Tapatalk 2

  • Wettbewerb (für Anfänger und Fortgeschrittene) ?

    • Yjuq
    • 4. November 2014 um 21:35
    Zitat von Mars

    [...] Meine Idee für den vergleich verschiedener Funktionen kann man sich ggf nur schwer vorstellen. [...]


    Deine Idee muss man nicht verstehen oder? Das Excel Diagramm hat mich ehrlich gesagt viel mehr verwirrt als wie es eigentlich helfen sollte. ^^
    Also, du vergleichst die Mittelwerte und die Streuung, derjenige der dann die geringsten Werte hat wird Sieger. So richtig?

    Vielleicht sollte ich mir mal die Mathematik dahinter angucken. :S

  • 1,245 GB AutoIt-Scripte

    • Yjuq
    • 4. November 2014 um 21:12

    Wenn wir schon dabei sind, Steintafeln! Wer bietet mehr? :D

  • Kommunikation Skripte untereinander

    • Yjuq
    • 4. November 2014 um 14:17
    Zitat von rynow

    Das stimmt und wäre zu dem viel einfacher, aber blockiere ich dadurch nicht enorm viel Speicher?

    Wieso? Wenn du z.B. 3 Byte nur benötigst dann ist es vollkommen egal ob du 3 Bytes hintereinander nimmst oder direkt ein DWord. Und dann die 3 Bytes einfach in das DWord speicherst. Ich meine mal irgendwo gelesen zu haben dass Zugriffe im RAM in 4er Schritten (Sprich, immer 4 Bytes also ein DWord) schneller ist als ein Zugriff auf ein einzelnes Byte.

    Ob nun 1 bis 3 Byte an Speicher nun übrig bleibt ist total irrelevant. Das juckt keine Sau, bei 8 Gigabyte an Arbeitsspeicher kannst du schon einen String mit 8'796'093'022'208 Zeichen abspeichern. Und wenn du mir einen Text liefert der mein RAM sprengt, dann schicke ich dir gerne die Zahl in Euros zu. ^^

    Selbst wenn du jedes Zeichen eines 1'000'000 Zeichen langen Textes in ein DWord packst, verschwendest du gerade mal 0.000000341% des Arbeitsspeicher. Also, dass du "enorm" viel Speicher blockierst ist totaler Schwachsinn. Wenn du mir nicht glaubst, rechne nochmal selber nach. Also mach dir mal da keine Gedanken zu.


    Zitat von rynow

    Genau das versteh ich nicht wie man das machen soll? Wie kann ich weitere Elemente an das DllStructCreate() dranhängen obwohl es bereits erstellt ist?

    Da du hier speziell nach DLLStruct fragst, entweder erstellst du die Struktur komplett neu + die dranzuhängenden Daten, oder du reservierst dir ein extra DWord und schreibst da einfach den Pointer zu einer neuen Struktur hinein, welche die erweiterten Daten enthält. Andy sagte es ja bereits: "Verkettete Liste"

    Für die DLL muss ich denke ich nichts zu sagen, da kannst du ja selber locker an jeder x-Beliebigen Stelle die Daten verändern und somit auch erweitern.

  • Kommunikation Skripte untereinander

    • Yjuq
    • 3. November 2014 um 19:33

    Ja, jedoch ist mir beim durchschauen schon ein zwei Fehler aufgefallen ^^
    Codezeile 21 bringt's so nicht. Du nimmst ersetzt ja den ursprünglichen String ja nicht durch den Rückgabewert von StringTrimRight, jedoch ist mir aufgefallen dass ein abschließendes Semikolon bei DllStructCreate nicht schadet, aber auch keinen Effekt hast. Im Grunde hätte ich bei meinen Skript beim Return den Funktionsaufruf mir sparen können. Heißt für dich, raus damit. Desweiteren fügst du in Zeile 34 ein Chr(0) an's Stringende. Nützt dir nur nichts da du in Zeile 17 vergessen hast ein extra Byte dafür zu reservieren. Sprich: Der String wird überhaupt nicht durch ein Null Character abgeschlossen. Solltest du aber unbedingt machen! Ich verrate dir auch warum, wenn du später mal ein String veränderst im Speicher und du die Größe des eigentlichen Strings nicht kennst und n' paar Byte an Daten extra reservierst, wirst du dich wundern was für Extra Zeichen hinten am eigentlichen String in der Konsole noch mit ausgegeben werden. Ansonsten genial wie du die Funktion erweitert hast. Mach das mal noch für andere Datentypen auch noch, dann brauch ich es nämlich nicht mehr machen! xD

    Andy:

    Zitat von Andy

    [...] Naja, da nimmt man eine verkettete Liste, [...]


    Jaja, ich sagte ja nur dass es "schwieriger" sei, nicht das es schwierig ist. ^^
    Da liegen WELTEN zwischen. :D

    Im Grunde hatte ich das mit den Startpointern im Hinterkopf.
    LG :)

  • Wettbewerb (für Anfänger und Fortgeschrittene) ?

    • Yjuq
    • 3. November 2014 um 16:57

    Nun ja, bei meinen Algorithmus (welcher drz. nur auf Papier existiert) versuche ich alle Möglichkeiten zu berechnen. Diese Vorberechnung wird bis zu einer bestimmten Suchtiefe (wird abhängig von der vorgegeben Zeit sein) gemacht. Dies ist wahrscheinlich der Schritt den jeder Algorithmus der bei dem Wettbewerb eingereicht wird eingesetzt wird. Allerdings versuche ich durch Analyse des Spielfeldes bestimmte Kombinationen vorab auszugrenzen. Diese Analyse ist sehr oberflächlich gehalten, das hat den Grund, dass sich der Algorithmus an diesen Schritt nicht zulange aufhält. So kann ich die Suchtiefe um einiges erhöhen. Die bereits analysierten Daten werden abgespeichert, sodass bei einem erneuten Aufruf der Funktion an der letzten Analyse angesetzt werden kann und somit die Rätsel in möglichst wenigen Zügen gelöst werden kann. Zudem lege ich zusätzlich eine Datenbank an welche für ein 3x3 Spielfeld für jede Möglichkeit den besten Weg beinhaltet. Mithilfe dieser Datenbank kann ich die Möglichkeiten auf einem größeren Spielfeld schneller abschätzen. Dabei beachte ich, dass Muster auch gedreht und gespiegelt vorkommen können, so kann ich die Datenbank minimieren. Wenn sie nicht zu groß ausfällt dann schaue ich mal ob ich das doch lieber für 4x4 Spielfelder übernehme.

    So sieht zumindest meine Idee bisher aus, in wie fern sich das ganze umsetzen lässt (und vorallem zeitsparend ist) muss ich mal schauen. Ich hab da auch so ein paar Tricks und Kniffe um auch mit den Beschränkungen ordentlich Speed in mein Skript zu bekommen. ^^

  • Kommunikation Skripte untereinander

    • Yjuq
    • 3. November 2014 um 16:16

    Mit einem Array welches Strings beinhalten soll ist das so eine Sache. Bei Double oder Integer weiß man ja vorab wie groß die Daten sind. Diese sind je nach Größe (byte, word, dword, qword) beschränkt. Bei Strings ist das nicht so, zwar könntest du sagen du nimmst eine Maximal zulässige Gesamtlänge der Strings, nimmt aber bei kürzeren Strings dafür schon unnötig Speicherplatz weg.

    Wenn du also sagst meine Strings bekommen einen Speicher von 64 KB (65536 Zeichen) zugewiesen, so kannst du die Strings wie in den Beispielen oben gezeigt einfach hintereinander legen. Schwieriger wird es sobald du nach Möglichkeit Platzsparend programmieren möchtest. Dann muss da was anderes her.

    Auch dafür gibt es eine Möglichkeit, aber dazu schreib ich was wenn Bedarf besteht. Die einfachste Möglichkeit: Einfach die Maximalgrenze an Zeichen festlegen, dann kannst du das Problem relativ simple Lösen:

    [autoit]

    Global Const $iMaxLen = 1024 ; 1 Kilobyte
    Global $tStruct = DllStructCreate(_StringStruct(3 * 4, $iMaxLen))
    Global $i

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

    DllStructSetData($tStruct, 1, 'Account' & Chr(0)) ; [0][0]
    DllStructSetData($tStruct, 2, 'Ticket ID' & Chr(0)) ; [0][1]
    DllStructSetData($tStruct, 3, 'Vorname' & Chr(0)) ; [0][2]
    DllStructSetData($tStruct, 4, 'Nachname' & Chr(0)) ; [0][3]

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

    DllStructSetData($tStruct, 5, '123' & Chr(0)) ; [1][0]
    DllStructSetData($tStruct, 6, '456' & Chr(0)) ; [1][1]
    DllStructSetData($tStruct, 7, 'Max' & Chr(0)) ; [1][2]
    DllStructSetData($tStruct, 8, 'Meier' & Chr(0)) ; [1][3]

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

    DllStructSetData($tStruct, 9, '789' & Chr(0)) ; [2][0]
    DllStructSetData($tStruct, 10, '1011' & Chr(0)) ; [2][1]
    DllStructSetData($tStruct, 11, 'Meier' & Chr(0)) ; [2][2]
    DllStructSetData($tStruct, 12, 'Max' & Chr(0)) ; [2][3]

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

    Func _StringStruct($iElements, $iLen)
    Local $sRet, $i

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

    For $i = 1 To $iElements
    $sRet &= 'char[' & $iLen & '];'
    Next

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

    Return StringTrimRight($sRet, 1)
    EndFunc

    [/autoit]
  • Wettbewerb (für Anfänger und Fortgeschrittene) ?

    • Yjuq
    • 3. November 2014 um 14:52

    Danke Mars, zu der Zeitbeschränkung:
    Sag bitte noch rechtzeitig bescheid wie hoch du dann das limit setzt. Je mehr zeit man hat umeo mehr schritte lassen sich logischerweise im vorraus berechnen. Ggf. wird sich mein algorithmus dann selbständig an die zeitvorgabe anpassen wenn diese als zusätzlicher parameter oder als globale Konstante definiert wird. Dh. auch meine Frage.

    Gesendet von meinem HTC Desire HD A9191 mit Tapatalk 2

  • 1,245 GB AutoIt-Scripte

    • Yjuq
    • 1. November 2014 um 20:34

    Ah super, wenn ich dann mal ältere AutoIt Versionen brauche dann weiß ich ja wo ich nachfragen kann! :D

  • Wettbewerb (für Anfänger und Fortgeschrittene) ?

    • Yjuq
    • 31. Oktober 2014 um 22:18

    1. Frage: Muss die KI komplett in die _Solve Funktion ausgelagert werden oder darf diese in einer eigenen UDF unterteilt werden? (Um z.B. Teilaufgaben separat auszulagern)
    2. Frage: Spielt die KI später auf ein 12x12 Feld (so wie du angeben hast in der Gray.au3) oder variiert dies?
    3. Frage: Wird da die benötigte Zeit der KI eine Rolle in der Wertung spielen?

    Ich hoffe dass ich hier nichts überlesen habe. ^^

  • Kommunikation Skripte untereinander

    • Yjuq
    • 31. Oktober 2014 um 21:52

    Bei einem 1 Dimensionalen Array ist das ja einfach. Via DllStructCreate gibt es ja die Möglichkeit einen Index anzugeben. Sieht ja in etwa so aus: "int var[100]" (1D Array mit 100 Elementen)

    "Schwieriger" wird es bei n-Dimensionale Array's. Da muss man dann schon ein wenig rechnen, geht aber im Grunde ganz einfach. Du musst wissen welche Dimension wie viele Indizes besitzt. Dann kannst du das Array in ein Eindimensionales umrechnen.

    Bei einem 3D Array sieht das so aus:
    1. Dimension: 200 Elemente
    2. Dimension: 150 Elemente
    3. Dimension: 300 Elemente

    Insgesamt hat das Array dadurch 200*150*300 = 9'000'000 Elemente. Als DllStruct demnach "int var[9000000]" verwenden.
    Um nun auf den Index [55][23][89] zuzugreifen, müssen wir das ein wenig umrechnen.

    Also: 55*150*300 + 23*300 + 89 + 1 = 2'481'990

    (Die +1 in der Formel ist notwendig, da DllStruct mit den Index 1 beginnt)

    Das 2'481'990 Element im 1D Array entspricht also den Indizes [55][23][89] im 3D Array.


    Um nun ein Array als Struct zu konvertieren müssen lediglich alle Elemente nach der Reihe nach durchgegangen werden und diese dementsprechend kopiert werden. Das ist aber sehr zeitaufwendig, daher empfiehlt sich das Array direkt als Struct anzulegen und dann mit der oberen genannten Methode mit den einzelnen Indizes zu rechnen.


    Praktisches Beispiel:

    [autoit]

    ; Array[10][5]
    $tStruct = DllStructCreate('byte d1; byte d2; dword array[50]')
    $tStruct.d1 = 10 ; 1. Dimension -> 10 Elemente
    $tStruct.d2 = 5 ; 2. Dimension -> 5 Elemente

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

    For $i = 0 To $tStruct.d1 -1
    For $n = 0 To $tStruct.d2 -1
    $tStruct.array(($i * $tStruct.d2 + $n +1)) = Random(1, 100, 1) ; Jedes Element zufällig befüllen
    Next
    Next

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

    ; $Array[2][4]
    ConsoleWrite(Pseudo2DArray($tStruct, 2, 4) & @CRLF)

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

    Func Pseudo2DArray(ByRef $t, $x, $y)
    Return $tStruct.array(($x * $t.d2 + $y +1))
    EndFunc

    [/autoit]


    Schwieriger wird es wenn mehrere Datentypen im Array vorhanden sind, da muss sich ein anderes System überlegt werden. Wenn du willst schreibe ich dir Morgen ein paar Funktionen für die Verwaltung von Daten des Datentypes Variant (speziell ausgelegt für n-Dimensionale Arrays). Dann musst du zwar Umwege über Funktionen machen, sollte aber relativ "einfach" sein damit zu arbeiten.

  • Wettbewerb (für Anfänger und Fortgeschrittene) ?

    • Yjuq
    • 31. Oktober 2014 um 06:46

    Klingt interessant. Hab ja sowieso eine Vorliebe für solche Art an Aufgabenstellungen & Algorithmen. Klar, ich mach da auch mit. Aber jetzt erst mal Schule. :D

    Gesendet von meinem HTC Desire HD A9191 mit Tapatalk 2

  • Schaffung eines "openfile"

    • Yjuq
    • 26. Oktober 2014 um 18:11

    https://www.autoitscript.com/autoit3/docs/f…ndFirstFile.htm

    In the first Parameter you can use Wildcards.
    With the Wildcard "*.*" find you all files.
    If you want text files then must you use *.txt as first parameter for example.
    For other files use another file extension. :)

    [autoit]

    $sPath = "C:\Users\joesoef pc\Desktop\autoit\programma\lijsten\lijsten2\"
    $hSearch = FileFindFirstFile('*.txt') ; I have changed this :x

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

    ;~ $hGUI = GUICreate('')
    ;~ $idMenu = GUICtrlCreateMenu('Files')
    $idOpen = GUICtrlCreateMenu('Open34', $filemenu)

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

    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    GUICtrlCreateMenuItem($sFile, $idOpen)
    WEnd

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

    FileClose($hSearch) ; I had forgotten that.

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

    GUISetState()
    While GUIGetMsg() <> -3
    WEnd

    [/autoit]
  • Schaffung eines "openfile"

    • Yjuq
    • 26. Oktober 2014 um 15:51

    Okey, I think I know what you mean.
    You can find the Files with FileFindFirstFile() and FileFindNextFile().
    The Files can you add in your Menu with GUICtrlCreateMenuItem() or _GUICtrlMenu_AddMenuItem().

    Example:

    [autoit]

    $sPath = 'C:'
    $hSearch = FileFindFirstFile('*.*')

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

    $hGUI = GUICreate('')
    $idMenu = GUICtrlCreateMenu('Files')
    $idOpen = GUICtrlCreateMenu('Open', $idMenu)

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

    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    GUICtrlCreateMenuItem($sFile, $idOpen)
    WEnd

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

    GUISetState()

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

    While GUIGetMsg() <> -3
    WEnd

    [/autoit]
  • Schaffung eines "openfile"

    • Yjuq
    • 26. Oktober 2014 um 14:45
    Zitat

    [...] Ik gebruik: Google Translate, want ik kan [...]

    Okay, dieses gewurschtel da oben versteht doch kein Mensch. :D


    viper93:
    I'm very sorry buddy, but I can't understand you.
    Can you speak English?

    €dit:
    Aha, jetzt kann man auch was lesen ^^
    Mal schauen :x

  • Coole Fehlermeldung Häuptling-Admin

    • Yjuq
    • 25. Oktober 2014 um 22:11

    Die fehlermeldung gabs schon als ich vor 2.7 jahre versucht hatte auf sensible daten hier im forum zuzugreifen. Da war ich aber noch so gut wie ein newbie hier. ^^

    Komisch dass dir das so spät erst auffällt. :o

    Gesendet von meinem HTC Desire HD A9191 mit Tapatalk 2

  • Passwort verschlüsseln / auslagern

    • Yjuq
    • 22. Oktober 2014 um 06:43

    Hey, wie wäre es mit einer serverseitigen Verwaltung? Ich z.B. nutze bei solche Sachen PHP und greife in meine Skripts nicht direkt auf den FTP Server zu sonder nur über die PHP-Seite. Welche Daten ja dann geändert werden dürfen kannst du so dann definieren.

    Gesendet von meinem HTC Desire HD A9191 mit Tapatalk 2

  • Unable to open the Script file

    • Yjuq
    • 21. Oktober 2014 um 16:43

    Okay, das Skript ist an sich richtig. Daher muss das Problem woanders liegen. Starte nochmal das Skript in der SciTE und führe es aus. Dann kopiere den Inhalt unten in der Console und stell das mal Online. Dann schauen wir mal weiter. Die Ursache kann ich so leider nicht direkt feststellen.

    Bei mir sieht die Console Ausgabe folgendermaßen aus:

    Spoiler anzeigen
    Code
    >"E:\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Users\Cederik\Desktop\Script.au3" /UserParams    
    +>16:40:54 Starting AutoIt3Wrapper v.14.801.2025.0 SciTE v.3.4.4.0   Keyboard:00000407  OS:WIN_7/Service Pack 1  CPU:X64 OS:X64    Environment(Language:0407)
    +>         SciTEDir => E:\AutoIt3\SciTE   UserDir => C:\Users\Cederik\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper   SCITE_USERHOME => C:\Users\Cederik\AppData\Local\AutoIt v3\SciTE 
    >Running AU3Check (3.3.12.0)  from:E:\AutoIt3  input:C:\Users\Cederik\Desktop\Script.au3
    +>16:40:54 AU3Check ended.rc:0
    >Running:(3.3.12.0):E:\AutoIt3\autoit3.exe "C:\Users\Cederik\Desktop\Script.au3"    
    --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
    +>16:41:06 AutoIt3.exe ended.rc:0
    +>16:41:06 AutoIt3Wrapper Finished.
    >Exit code: 0    Time: 12.7
  • Unable to open the Script file

    • Yjuq
    • 21. Oktober 2014 um 16:05

    Alina:
    Das Sprichwort hab ich so noch nicht gehört. Eher: "Probieren geht über studieren!"

    Darnas:
    Wenn ich am Rechner bin schau ich mir das mal an. Es wäre durchaus hilfreich wenn du uns mal deine Fehlermeldung bzw. die komplette Console Ausgabe mitteilst. Es kann an AutoIt liegen, aber vielleicht auch andere Ursachen haben. Muss man mal gucken. Ich melde mich nochmal.

    Gesendet von meinem HTC Desire HD A9191 mit Tapatalk 2

  • Consolewrite für die GUI?

    • Yjuq
    • 18. Oktober 2014 um 18:55

    Versuch es mal mit den Debug-Funktionen. Sie liegen in der Debug.au3 im mitgelieferten include Verzeichnis. :p

    Gesendet von meinem HTC Desire HD A9191 mit Tapatalk 2

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™