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

Beiträge von ProgrammingDonkey

  • primzahlenrechner

    • ProgrammingDonkey
    • 13. April 2015 um 17:05

    Nein - leider dauert das ganze wieder viel länger :(

  • primzahlenrechner

    • ProgrammingDonkey
    • 12. April 2015 um 23:55

    Danke für die Hilfe, dieses Problem hatte ich allerdings schon beseitigt. Das ganze dauerte dann aber viel länger.. Morgen Nachmittag kann ich deine Verbesserung testen, ich hoffe, dass mein neues Problem dort nicht auftritt :)

  • primzahlenrechner

    • ProgrammingDonkey
    • 12. April 2015 um 20:51

    1-20 = 8 Primzahlen, und die stimmen auch noch alle :/

    Spoiler anzeigen


    2
    3
    5
    7
    11
    13
    17
    19


    EDIT: Aber bei 30 schleicht sich die 25 ein. Mal sehen :)

  • primzahlenrechner

    • ProgrammingDonkey
    • 12. April 2015 um 20:21

    Neues Script:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    Const $iMax = 1000000
    $hTimer = TimerInit()
    $aPrimes = GetPrimes($iMax)
    ConsoleWrite(@CRLF&"Time >> "&round(TimerDiff($hTimer)/1000, 4)&@CRLF)
    _ArrayDisplay($aPrimes)

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

    Func GetPrimes(Const $iHead)
    Local $aPrimes[round($iHead/2-1, 0)]
    $iResult = round($iHead/2-1, 0)
    $x = 0
    for $i = 3 to $iHead step +2
    $aPrimes[$x] = $i
    $x += 1
    Next
    $Stop = False
    for $x = 0 to UBound($aPrimes)-1 step +1
    $iNumber = $aPrimes[$x]
    If $x > UBound($aPrimes)-1 or $Stop Then
    ConsoleWrite("Last one: "&$iNumber&@CRLF)
    ExitLoop
    EndIf
    $Stop = True

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

    ;Local $hTimer = TimerInit()
    for $iNum = $x+1 to UBound($aPrimes)-1
    If $aPrimes[$iNum] = -1 Then ExitLoop
    If Mod($aPrimes[$iNum], $iNumber) = 0 Then
    $Stop = False
    ;ConsoleWrite("Delete: "&$aPrimes[$iNum]&@CRLF)
    $aPrimes[$iNum] = -1
    $iResult -= 1
    EndIf
    Next
    ;ConsoleWrite($iNumber&" / "&UBound($aPrimes)-1&" Time: "&TimerDiff($hTimer)&@CRLF)
    Next
    Local $aResult[$iResult+1]
    $x = 0
    $aResult[0] = 2
    for $i = 1 to $iResult
    While $aPrimes[$x] = -1
    $x += 1
    WEnd
    $aResult[$i] = $aPrimes[$x]
    $x += 1
    Next
    ConsoleWrite($iResult +1 &" Primes found."&@CRLF)
    Return $aResult
    EndFunc

    [/autoit]


    Stimmen die Primzahlen? Sind es 333334 bis eine Mio?

  • primzahlenrechner

    • ProgrammingDonkey
    • 12. April 2015 um 19:48

    @Make-Grafik >> Mein Script macht genau das gleiche, nur das die Zahlen Liste nur aus ungeraden besteht. Erklärende Kommentare bräuchte dein Script btw auch ^^.
    An die anderen >> Danke für die schnelle Hilfe, ich versuche es gleich auch ohne _ArrayDelete in der Schleife.
    @Kanashius >> Das ConsoleWrite() macht zeittechnisch keinen Unterschied (habe ich getestet), deshalb habe ich es zur Darstellung drin gelassen ;)

  • primzahlenrechner

    • ProgrammingDonkey
    • 12. April 2015 um 17:17

    Ich habe mich nun an die gleiche Technik angelehnt, wie @Make-Grafik, allerdings funktioniert das ganze nur sehr langsam:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    Const $iMax = 3000
    $hTimer = TimerInit()
    $aPrimes = GetPrimes($iMax)
    ConsoleWrite(@CRLF&"Time >> "&round(TimerDiff($hTimer)/1000, 4)&@CRLF)
    _ArrayDisplay($aPrimes)

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

    Func GetPrimes(Const $iHead)
    Local $aPrimes[round($iHead/2-1, 0)]
    $x = 0
    for $i = 3 to $iHead step +2
    $aPrimes[$x] = $i
    $x += 1
    Next
    $Stop = False
    for $x = 0 to UBound($aPrimes)-1 step +1
    If $x > UBound($aPrimes)-1 or $Stop Then
    ConsoleWrite("Last one: "&$iNumber&@CRLF)
    ExitLoop
    EndIf
    $Stop = True
    $iNumber = $aPrimes[$x]
    Local $hTimer = TimerInit()
    for $iNum = UBound($aPrimes)-1 to $x+1 step -1
    If Mod($aPrimes[$iNum], $iNumber) = 0 Then
    $Stop = False
    ConsoleWrite("Delete: "&$aPrimes[$iNum]&@CRLF)
    _ArrayDelete($aPrimes, $iNum)
    EndIf
    Next
    ConsoleWrite($iNumber&" / "&UBound($aPrimes)-1&" Time: "&TimerDiff($hTimer)&@CRLF)
    Next
    Return $aPrimes
    EndFunc

    [/autoit]


    Wie kann ich da (viel) mehr Zeit sparen?

  • Pc Modell auslesen und mit IF then verknpfen

    • ProgrammingDonkey
    • 8. April 2015 um 20:20

    @Raupi >> Danke, gut zu wissen ^^

  • Pc Modell auslesen und mit IF then verknpfen

    • ProgrammingDonkey
    • 8. April 2015 um 19:26

    Und eigentlich auch das zweite "="?
    Das braucht man bei C++, Python usw. Aber bei AutoIt genügt ein "="..

  • komplexer Synthesizer (Bass.dll)

    • ProgrammingDonkey
    • 8. April 2015 um 16:00

    Sorry für die Leichenschänderei, aber der Link ist down, und ich würde dein Programm gerne testen..

  • Rundumschlag GDI+

    • ProgrammingDonkey
    • 7. April 2015 um 21:16

    Sehr schönes und verständliches Tutorial :)
    Alles gut zusammengefasst und erklärt - Und mir hat es sehr geholfen, da ich nun keine eckigen Kreise mehr habe ^^
    Danke :)

  • MY_WM_DEVICECHANGE ohne GUI

    • ProgrammingDonkey
    • 5. April 2015 um 13:42

    @Tweaky >> Ich hätte vor einem Blick in die Hilfe gedacht, dass man die Funktion an andere Fenster anbinden kann vonwegen:

    [autoit]

    GUIRegisterMsg($hMsg, $sFunc [, $hWnd])

    [/autoit]


    Leider geht das nicht.
    @Kanashius >> Der explorer ist ja bekanntlich immer offen. Und mit ihm kommt auch immer ein Fenster; "Program Manager" heißt es glaube ich. Darauf kann man auch zugreifen, aber als normaler Windows Nutzer nicht schließen (Normal = Man lässt das System in Ruhe, und verwendet kein WinClose("Program Manager") ^^ )

  • MY_WM_DEVICECHANGE ohne GUI

    • ProgrammingDonkey
    • 5. April 2015 um 00:07

    Ich meine irgendwo mal eine _WinAPI_Funktion für sowas gesehen zu haben - aber prüfe doch malmal, ob du GUIRegister(..) auf fremde GUIs anwenden kannst, dann könnte man das auf das Fenster vom explorer.exe packen.

  • MY_WM_DEVICECHANGE ohne GUI

    • ProgrammingDonkey
    • 4. April 2015 um 23:58

    Du kannst zur Not aber auch ein GUI erstellen, ohne es anzuzeigen. Das ist zwar etwas "umständlich", ich wüsste aber nicht, was dagegen spricht. :/

  • [GDI+] Uhr

    • ProgrammingDonkey
    • 4. April 2015 um 15:07

    Ok Danke :)

  • [GDI+] Uhr

    • ProgrammingDonkey
    • 4. April 2015 um 13:27

    Was ich meinte, ist dass man den Bereich, in den man mit der Maus geht, um die Uhr anzuzeigen, verkleinern sollte.
    z.B. auf die Mitte (man könnte dort auch dauerhaft einen kleinen halb transparenten Strich/GUI anzeigen lassen, damit man den Bereich sieht.)

  • [GDI+] Uhr

    • ProgrammingDonkey
    • 3. April 2015 um 23:12

    Sehr schick, ich würde allerdings den Maus-Bereich verkleinern.
    Aber um das zutun fehlen mir die Kentnisse; Was passiert in folgender Zeile, und wo für stehen die Fragezeichen und Doppelpunkte?:

    [autoit]


    $iOffset = $aPos[1] = 0 ? $iOffset / 1.5 : ($iOffset + 1) * 1.5 > $iH ? $iH : ($iOffset + 1) * 1.5

    [/autoit]
  • Größerer Pixelbereich

    • ProgrammingDonkey
    • 3. April 2015 um 23:05

    https://www.autoitscript.com/autoit3/docs/f…PixelSearch.htm
    "Searches a rectangle of pixels for the pixel color provided."
    ~ Sucht in einem Viereck von Pixeln nach dem Pixel mit der angegebenen Farbe ~

  • Wenn beenden - MsgBox

    • ProgrammingDonkey
    • 2. April 2015 um 19:58

    @chesstiger >> Meine andere Frage war im Thread verrutscht; Ich hatte noch den "primzahlenrechner"-Thread offen, und dachte, ich wäre dort noch drauf ^^
    Jedenfalls habe ich meine Frage hier gelöscht :)

  • Wenn beenden - MsgBox

    • ProgrammingDonkey
    • 2. April 2015 um 18:55

    Gut zu wissen :)
    Gibt es eine Möglichkeit, an der Stelle Parameter für die Funktion hinzuzufügen?
    Nach dem Motto

    [autoit]

    Register("Funktion /Param1 /Param2")

    [/autoit]


    Oder so?

  • primzahlenrechner

    • ProgrammingDonkey
    • 2. April 2015 um 18:40

    Genial :)
    Allerdings verstehe ich deinen Code nicht ganz, und bitte dich darum mal eine Erklärung dazu zu verfassen :)
    Und noch eine Idee:

    Spoiler anzeigen


    Eine nicht-Primzahl ist doch zwangshaft durch eine Primzahl teilbar, oder?
    Dann hätte ich da noch eine Idee:

    Spoiler anzeigen

    [autoit#include <Array.au3> $hTimer = TimerInit() Global Const $iMax = 100000 $aResult = GetPrimes($iMax) MsgBox(0,"Done","Passed time:"&@TAB&Round(TimerDiff($hTimer)/1000, 4)) _ArrayDisplay($aResult) Func GetPrimes($iHead) $aPrimes[1] = [2] $bContinue = True For $iNumber = 3 to $iHead step +2 For $iElement in $aPrimes If $iElement > sqrt($iNumber) Then ExitLoop EndIf If Mod($iNumber, $iElement) = 0 Then $bContinue = False ExitLoop EndIf Next If not $bContinue Then $bContinue = True Else _ArrayAdd($aPrimes, $iNumber) EndIf Next Return $aPrimes EndFunc[/autoit]


    Ist zwar leider sehr langsam, aber daran arbeite ich noch; Wäre jedenfalls auch ein Ansatz.

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™