Primzahl Programm stuertzt direkt nach eingabe von Zahlenbegrenzung ab.



  • main muss keinen Wert zurückgeben wenn es den Datentyp void hat.
    Mehr als ein ; ist zuviel.

    Ich würde dir mal vorschlagen du lässt dir was an der Formatierung einfallen. Das ist ja grauenhaft 😡



  • Hab die Korekturen Alle vorgenommen. Immer noch wird es wegen eines ungültigen Vorgangs geschlossen. Ichahbe dieses math reingenommen. ich habe nur da mit dm namespace std nicht verstanden. Wie soll ich das denn genau machen(sry:NOOB)?
    Hab die Formatierung von Volkarts C++ Kurs.



  • SparxII schrieb:

    Hab die Korekturen Alle vorgenommen. Immer noch wird es wegen eines ungültigen Vorgangs geschlossen. Ichahbe dieses math reingenommen. ich habe nur da mit dm namespace std nicht verstanden. Wie soll ich das denn genau machen(sry:NOOB)?

    wi wäre es wenn du die neue version hier mal postest?



  • [code#include <iostream>
    using namespace std;
    #include <cmath>
    void Prim(int zahl)
    {
    int array[100000]={2};
    int i;
    int u;
    int count=1;
    int temp=0;
    float temp2=0;
    for(i=3;i<=zahl;i++)
    {temp=0;
    if(sqrt(zahl)<count)
    temp2 = sqrt(zahl);
    else
    temp2 = count;;
    for(u=1;u<=temp2;u++)
    { if(i%array[u]==0)
    temp=1;;};
    if(temp==1)
    {count++;
    array[count]=i;
    cout<<i<<endl;
    temp = 0;};};
    };

    void main()
    {
    int zahl;
    cout<<"Bis zu welcher Zahl sollen die Primzahlen ausgegeben werden?"<<endl;
    cin>>zahl;
    Prim(zahl);
    cin>>zahl;
    };[/code]



  • Ach ja, wäre besser wenn du vor der main einen Prototypen erstellst,
    und deine Funktion nach die main schreibst, ist (finde ich übersichtlicher)

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    void Prim(int zahl);//Prototyp
    
    int main() 
    { 
      int zahl; 
      cout<<"Bis zu welcher Zahl sollen die Primzahlen ausgegeben werden?"<<endl; 
      cin>>zahl; 
      Prim(zahl); 
      cin>>zahl; 
    return 0;
    }
    
    void Prim(int zahl) 
    { 
      int array[100000]={2}; 
      int i; 
      int u; 
      int count=1; 
      int temp=0; 
      float temp2=0; 
        for(i=3;i<=zahl;i++) 
          {temp=0; 
             if(sqrt(zahl)<count) 
               temp2 = sqrt(zahl); 
             else 
               temp2 = count;; 
             for(u=1;u<=temp2;u++) 
               { if(i%array[u]==0) 
                    temp=1; 
                  else;}; 
             if(temp=1) 
               {count++; 
               array[count]=i; 
               cout<<i<<endl;; 
               temp = 0;} 
             else;}; 
    }
    


  • SparxII schrieb:

    #include <iostream>
    #include <cmath>
    using namespace std;       //<-- so wir das benutzt
    void Prim(int zahl)
    {
      int array[100000]={2};
      int i;
      int u;
      int count=1;
      int temp=0;
      float temp2=0;
    
        for(i=3;i<=zahl;i++)
          {temp=0;
             if(sqrt(zahl)<count)
               temp2 = sqrt(zahl);
             else
               temp2 = count;;     // ein ; ziviel
             for(u=1;u<=temp2;u++)
               { if(i%array[u]==0)
                    temp=1;;};     // da auch ein ; zuviel
             if(temp==1)
               {count++;
               array[count]=i;
               cout<<i<<endl;
               temp = 0;};};
    };
    
    void main()
    {
      int zahl;
      cout<<"Bis zu welcher Zahl sollen die Primzahlen ausgegeben werden?"<<endl;
      cin>>zahl;
      Prim(zahl);
      cin>>zahl;     //wozu wird die zahl nochmal eingegeben?
    };
    


  • Online schrieb:

    main muss keinen Wert zurückgeben wenn es den Datentyp void hat.

    1. main darf laut Standard keinen anderen Rückgabewert als int haben
    2. main muss laut Standard kein explizites return-Statement enthalten. In diesem Fall wird implizit 0 zurückgeliefert.



  • Was hat das ganze den jetzt mit "Anwendung wird aufgrund eines ungültigen Vorgangs geschlossen." zu tun?

    Die Zahl am Ende soll eingegeben werden, damit man eine pause hat und der MSdos bildschirm nicht direkt verschwindet.



  • Online schrieb:

    main muss keinen Wert zurückgeben wenn es den Datentyp void hat.
    Mehr als ein ; ist zuviel.

    Laut standard-C++ muss main aber int sein(und muss keinen wert zurückgeben(aber sollte))
    Die Funktion void main schlucken einige Compiler nicht, z.B. Dev-C++ mit mingw.

    cu max



  • Hallo,
    du teilst durch 0, denn alle bis auf dein erstes Array-Element sind 0. Dadurch wird

    if(i%array[u]==0)
    

    zu

    if( i % 0 == 0)
    

    und das ist eine Division durch 0!



  • HumeSikkins schrieb:

    Online schrieb:

    main muss keinen Wert zurückgeben wenn es den Datentyp void hat.

    1. main darf laut Standard keinen anderen Rückgabewert als int haben
    2. main muss laut Standard kein explizites return-Statement enthalten. In diesem Fall wird implizit 0 zurückgeliefert.

    ok...dann wird das halt falsch an der FH unterrichtet und die 4 Bücher, die ich hier hab wissens auch nicht besser



  • Oki das programm stuertzt nicht mehr ab, aber die primzahlen wollen nicht. Das werd ich selber machen. Ich muss auch jetz ins bettchen, Morgen ersten beiden Mathe Klausur.



  • ';' kann es gar nicht zuviele geben, außer es ist eine von einer Kontrollstruktur kontrollierte Anweisung.
    Ich würde dir jetzt enpfehlen, mal als Debug-Version zu compilieren und zu starten, dann fängst du bestimmt ne Exception auf. 🙂



  • SparxII schrieb:

    Mein compiler compiled wie ne Fabrik. Mein problem ist waerend das prog läuft.

    du...mein Kompiler meldet hier Division durch Null...irgendwo wird in deinem Code Division durch Null durchgeführt



  • Online schrieb:

    HumeSikkins schrieb:

    Online schrieb:

    main muss keinen Wert zurückgeben wenn es den Datentyp void hat.

    1. main darf laut Standard keinen anderen Rückgabewert als int haben
    2. main muss laut Standard kein explizites return-Statement enthalten. In diesem Fall wird implizit 0 zurückgeliefert.

    ok...dann wird das halt falsch an der FH unterrichtet und die 4 Bücher, die ich hier hab wissens auch nicht besser

    Laut Stroustrup muss main tatsächlich int zurückliefern. Allerdings scheinen die meisten Compiler mit void zufrieden zu sein und ich tendiere auch dazu.



  • Wird da wirklich was zurückgegeben, auch wenn der Rückgabewert von main void ist ?



  • Jo, der Compiler ersetzt das vermutlich durch int main().



  • ok...dann wird das halt falsch an der FH unterrichtet und die 4 Bücher, die ich hier hab wissens auch nicht besser

    Na siehste. Wieviel so ein Besuch in diesem Forum einem doch bringt. Und wenn du immer noch an der Richtigkeit meiner Aussage zweifelst, dann schau doch einfach im Standard im Abschnitt 3.6.1 Main function nach.

    du...mein Kompiler meldet hier Division durch Null...irgendwo wird in deinem Code Division durch Null durchgeführt

    Sowas. Und alle Leute die sich Zeit nehmen und das Lesen erlernen, finden in einem meiner Beiträge auch einen konkreten Hinweis.

    Allerdings scheinen die meisten Compiler mit void zufrieden zu sein und ich tendiere auch dazu.

    Na wenn du dazu tendierst, dann sollten die vom Standardkomitee wohl unbedingt noch mal drüber nachdenken. Vielleicht wird void main dann ja schon in den neuen Standard aufgenommen. Das wäre doch toll, oder?
    Und bis dahin ignorierst du einfach die Leute mit ordentlichen Compilern. Was soll's? Hauptsache dein Code läuft bei dir.



  • Optimizer schrieb:

    Jo, der Compiler ersetzt das vermutlich durch int main().

    Der von Microsoft spuckt da ein dickes Error raus:

    d:\studium\Prog1\Test\main.cpp(43): error C2562: 'main' : 'void'-Funktion gibt einen Wert zurück

    muss höhstens so lauten:

    int main()
    {
      return 0;
    }
    


  • HumeSikkins schrieb:

    ok...dann wird das halt falsch an der FH unterrichtet und die 4 Bücher, die ich hier hab wissens auch nicht besser

    Na siehste. Wieviel so ein Besuch in diesem Forum einem doch bringt. Und wenn du immer noch an der Richtigkeit meiner Aussage zweifelst, dann schau doch einfach im Standard im Abschnitt 3.6.1 Main function nach.

    Ich hab deine Aussage ja nicht bezweifelt aber bei einer Funktion, bei der der Typ mit void deklariert wird kann es wohl keinen Rückgabewert geben.

    du...mein Kompiler meldet hier Division durch Null...irgendwo wird in deinem Code Division durch Null durchgeführt

    Sowas. Und alle Leute die sich Zeit nehmen und das Lesen erlernen, finden in einem meiner Beiträge auch einen konkreten Hinweis.

    Da warst du wohl einen Tick schneller...passiert halt oder, kein Grund so Bissig zu reagieren.

    Allerdings scheinen die meisten Compiler mit void zufrieden zu sein und ich tendiere auch dazu.

    Na wenn du dazu tendierst, dann sollten die vom Standardkomitee wohl unbedingt noch mal drüber nachdenken. Vielleicht wird void main dann ja schon in den neuen Standard aufgenommen. Das wäre doch toll, oder?
    Und bis dahin ignorierst du einfach die Leute mit ordentlichen Compilern. Was soll's? Hauptsache dein Code läuft bei dir.

    Es kann ja gut sein das das der Standard ist, es gibt aber genug Compiler bei denen void funktioniert. Und was verstehst du unter ordentlichen Compiler?


Anmelden zum Antworten