• Hi,

    ich habe gerade das Sieb des Eratosthenes in AutoIt gebaut und habe das in C++ übersetzt. Nur es gibt ein paar Probleme.

    • SQRT verlangt komischerweise einen double
    • Der Array lässt sich nicht deklarieren
    • Und wenn ich dem Array bei der größenangabe statt einer Variable eine Zahl gebe ist dieses Problem nicht mehr, aber dann lässt er sich nicht mehr ausgeben.

    Ich würd ja meine Frage auch im http://www.c-plusplus.de Forum Posten aber da kann man sich nicht mehr anmelden :S.

    Hier ist der C++ Code

    Spoiler anzeigen

    Und die funktionierene Variante in AutoIt

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <Timers.au3>
    $hGui = GUICreate("")
    $iTime = 0
    $iTimer = _Timer_SetTimer($hGui,1000,"_Update")

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

    $MaxZahl = 100000
    $MaxZahlSqrt = Int(Sqrt($MaxZahl))

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

    Dim $aMatch[$MaxZahl]

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

    Global $MatchIndex = 0
    Global $Match = False

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

    For $x = 2 To $MaxZahl
    For $Teiler = 2 To $MaxZahlSqrt
    If Not Mod($x, $Teiler) Then
    $Match = True
    ExitLoop
    EndIf
    Next
    If Not $Match Then
    $aMatch[$MatchIndex] = $x
    $MatchIndex += 1
    EndIf
    $Match = False
    Next
    _Timer_KillTimer($hGui,$iTimer)
    ReDim $aMatch[$MatchIndex]
    _ArrayDisplay($aMatch)

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

    Func _Update($hWnd, $Msg, $iIDTimer, $dwTime)
    $iTime += 1
    ConsoleWrite("Aktuelle Zahl: " & $x & "|" & "Berechnete Prims: " & $MatchIndex & "|" & "Zeit: " & $iTime & " sek.|" & Int(($x * 100) / $MaxZahl) & "%" & @CRLF)
    EndFunc

    [/autoit]


    Ich hoffe ihr könnt mir Helfen !

  • Stackarrays können keine variable Größe haben. Du könntest die Daten im Heap speichern. Dann musst du sie aber wieder von Hand freigeben

    In C++:

    Code
    int *aMatch = new int[Zahl];   //Speicher anfordern
    delete[] aMatch;                     //wieder freigeben

    Du könntest auch die Klasse Vector verwenden:

    Code
    #include <vector>
    Vector<int> aMatch;
  • Ich habs mal so probiert aber es erfolgt immer noch keine Ausgabe

    Spoiler anzeigen

    //Edit: Ich sehe ja gerade das wir ne C++ Ecke haben. :D