[gelöst] Problem bei Algorythmus



  • Hi,

    ich habe gestern versucht das
    Sieb des Eratosthenes nachzubaun. Aber irgentwie will das ganze nicht so ganz funktionieren.
    Denn der int Array lässt sich nicht erzeugen.

    Hoffentlich könnt ihr mir Helfen !

    Hier mal meinen Code.

    #include<iostream>
    using namespace std;
    
     int main() {
    	  int Zahl = 999;
    	  int ZahlSqrt = static_cast<int>(sqrt(static_cast<double>(Zahl)));
    
    	  int aMatch[Zahl];
    
    	  int MatchIndex = 0;
    	  bool Match = false;
    
    	  for (int x=2;x<Zahl;x++) {
    		  for (int Teiler=2;Teiler<ZahlSqrt;Teiler++) {
    			  if (!(x%Teiler)) {
    				  Match = true;
    				  break;
    			  }
    		  }
    		  if (!Match) {
    			  aMatch[MatchIndex] = x;
    				  MatchIndex++;
    		  }
    		  Match = false;
    	  }
    
    	  for (int x=0;x<MatchIndex;x++) {
    		  cout<<aMatch[x]<<"\n";
    	  }
    
    	  system("pause >nul");
    	  return 0;
     }
    

    Und hier ist die funktionierende AutoIt variante http://autoit.pastebin.com/azCrLxWe



  • Sprenger120 schrieb:

    Hi,

    ich habe gestern versucht das
    Sieb des Eratosthenes nachzubaun. Aber irgentwie will das ganze nicht so ganz funktionieren.
    Hoffentlich könnt ihr mir Helfen !

    Wenn du sagen würdest, was nicht funktioniert ...

    Lars



  • goto LoopE;
    

    Ein break hätte es auch getan.

    if (Match = false)
    

    Der Vergleichsoperator ist ==. !Match ist äquivalent zu Match==false .

    Nachtrag:
    Arraygrößen müssen zur Kompilierzeit bekannte Konstanten sein.
    Für

    int aMatch[Zahl];
          int MatchIndex = 0;
    

    gibt es vector.

    int ZahlSqrt = sqrt(Zahl); tut's auch und in beiden Fällen musst du noch cmath einbinden.



  • @manni66: Oh sry hatte ich im eifer des Gefechts vergessen :D.
    Also der int Array lässt sich nicht deklarieren

    @Athar: Danke für die Tipps, habs mal abgeändert.

    //Edit: Danke vectoren waren das richtige.


Anmelden zum Antworten