Primzahlen ausgeben



  • also sone schleife in der schleife?
    an das mit der bool hab ich auch schon gedacht.. ok ich geh dann mal zurück in die Schreikuppel
    Besten Dank!!!!!



  • @Th69 ok ich brauch ein bisschen Hilfe ob ich völlig aufm Holzweg bin 😞
    sind die scopes richtig?
    ich glaub ich hab mir zuviel vorgenommen da gibts viele offene Fragen..

    das hab ich bisher(nicht lachen):

    #include <iostream>
    
    int x;
    
    bool IsPrime(int number){
         
                     for(number = 1; number<=500; number++)
                     {
                           if(x%number==0)
                           
                                          return true;
                     }
         
                            }
    
    int main(void){
        int x =1;
                   while(x<=500)
                   {
                              if(true){
                              x=IsPrime();
                              }
                               else{x++;}  
                                 
                                 
                                 }
                   
                                
      
        
          
          
           }
              
                       return 0 ;
                             
              
    }    
    
    
    


  • @nochSoEiner wie ist denn eine Primzahl definiert?



  • nur durch 1 und sich selbst teilbar..



  • @nochSoEiner Das heisst die Funktion ist falsch..



  • Ja, du mußt den übergebenen Parameter number sinnvoll benutzen (anstatt ihn als Schleifenvariable zu überschreiben).

    Und du müßtest einen Compiler-Fehler in Z. 21 erhalten, denn der Aufruf ist falsch:

    if (IsPrime(x))
    {
       // x is a prime number
    }
    


  • @nochSoEiner Die Funktion heißt IsPrim.

    Die sollte also nur dann true zurück geben, wenn es eine Primzahl ist.
    Wenn sie durch eine andere Zahl teilbar ist, dann false.

    Zudem hat in der Funktion die 500 nichts, aber auch gar nichts zu suchen.
    Da ist nur number bekannt.



  • Danke für eure Mühen ich hab jetz aber immer noch denn gleichen Knoten im Kopf
    das ist der aktuelle Stand:(bin schon lange wach xD)

    #include <iostream>
    
    int x;
    
    bool IsPrime(int number){
         
                     for(number = 1; number<=500; number++)
                     {
                           if(x%number==0){
                                           std::cout << number << std::endl;
                           
                                          return true;
                                          }
                                          else{
                                          return false;
                                          }
                     }
         
                            }
    
    int main(void){
        int x =0;
                   while(x<=500)
                   {
                              if(true){
                              
                              IsPrime(x);
                              std::cout << x << std::endl;
                              x++;
                              system("pause");
                              }
                               else{ 
                                 
                                 }
                   
                                
      
        
          
          
           }
           }
              
                  
    


  • Ok mit den Hinweisen werd ichs schon irgendwann rauskriegen..
    ich bleib noch dran.



  • @nochSoEiner keine globalen Variablen (wie das merkwürdige x)



  • ok so weit so gut aber der Kollege meinte doch ich soll ne schleife Verwenden in der isPrime() war da nur der header falsch?
    oder genauer nur das <= 500???



  • Für Heute leg ichs auf Eis aber Morgen hagelts Primzahlen.
    Bis dann und danke



  • eine for schleife passt da besser denke ich @nochSoEiner dann fällt auch die globale variable weg.



  • ja, ich denke mir fehlt noch n bischen die klare Sicht.. Aber wenigstens hab ich mal ne Funktion mit bool gemacht und aufgerufen
    da bin ich schon relativ glücklich.. denn Rest pack ich auch noch



  • @nochSoEiner sagte in Primzahlen ausgeben:

    ok so weit so gut aber der Kollege meinte doch ich soll ne schleife Verwenden in der isPrime() war da nur der header falsch?
    oder genauer nur das <= 500???

    wenn du wissen willst, ob die Zahl 13 prim ist, brauchst du keine 500.

    Naiv betrachtest du, ob eine Zahl zwischen 1 und 13 (also von 2 bis 12) ganzzahliger Teiler von 13 ist.

    Dass sie prim ist, kannst du erst sagen, wenn du (fast) alle Zahlen getestet hast.



  • Überlege dir als erstes, was du eigentlich wissen willst.

    Ist deine Fragestellung also:
    a) Ist eine bestimmte Zahl eine Primzahl?
    b) Welche Zahlen im Bereich 1..n sind Primzahlen?

    Die Antwort auf Frage b) kannst du mit einer Schleife und der Fragestellung a) beantworten:
    Für alle Zahlen i von 1 bis n: wenn mit Hilfe von a) festgestellt wird, dass i prim ist, gib i aus.

    Also fang also erst einmal an, die Frage für eine einzige Zahl zu beantworten, also Aufgabe a) zu lösen. Es ist immer eine gute Idee, gleich einen Test zu schreiben. Zum Beispiel so wie hier in meinem Beispielcode unten. Bearbeite NUR den Bereich, wo "bitte ausfüllen" steht. Ändere nichts außerhalb (außer du brauchst weitere Header wie zB <cmath>, falls du eine Wurzel ziehen willst).

    #include <iostream>
    #include <utility>
    
    bool isPrime(int n) {
        // hier musst du testen, ob die Zahl n eine Primzahl ist
        // bitte ausfüllen
    }
    
    bool test_isPrime() {
        auto allOk = true;
        std::pair<int, bool> testData[] = {{1, false},  {2, true},   {3, true}, {4, false},
                                           {5, true},   {6, false},  {7, true}, {9, false},
                                           {181, true}, {183, false}};
        for (const auto &p : testData) {
            auto result = isPrime(p.first);
            if (result != p.second) {
                std::cout << std::boolalpha << "isPrime-Berechnung falsch für " << p.first
                          << ": erwartet war " << p.second << ", erhalten: " << result << "\n";
                allOk = false;
            }
        }
        if (allOk)
            std::cout << "Alle Tests von isPrime erfolgreich!\n";
        return allOk;
    }
    
    int main() {
        test_isPrime();
    }
    

    Du kannst dir alternativ hierzu einen anderen Weg ausdenken, wie du die Primzahlen von 1..n alle zusammen berechnest. Ich würde an deiner Stelle aber erstmal mit obigem Weg anfangen. Wenn du da fertig bist, geben wir gern weitere Hinweise.



  • Ok jetzt kommt noch n array hinzu 😃 da freu ich mich schon drauf aber ist echt ungelogen bin schon seit gestern (inder Nacht!!!)
    Wach..
    Und bool Erbsenhirn(lernkapazität <1 && Schlafmangel >500){
    kein Plan = kein Sinn return to bed
    }
    xD
    zieh mir Akte x rein und geh jetz pennen liebe Leute:
    ist n geiles Forum, hätt nicht so viele posts erwartet.
    peace



  • @nochSoEiner Das Array ist in der Funktion, die IsPrim testet.
    Diese Funktion braucht dich derzeit überhaupt nicht zu interessieren.