Primzahl Programm stuertzt direkt nach eingabe von Zahlenbegrenzung ab.



  • Mit dem fehler: "Dieser Vorgagng wird aufgrund eines ungueltigen Vorgangs geschlossen.
    Wodrann kann es liegen?

    @Hume Sikkins so besser?

    #include <iostream.h>
    
    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;};
    };
    
    void main()
    {
      int zahl;
      cout<<"Bis zu welcher Zahl sollen die Primzahlen ausgegeben werden?"<<endl;
      cin>>zahl;
      Prim(zahl);
      cin>>zahl;
    };
    


  • Hallo,
    also zualler erst ist das kein gültiges C++.

    1. main hat als Rückgabewert int
    2. <iostream.h> ist veraltet und sollte, wenn möglich, durch den Standard-Header <iostream> ersetzt werden (Namespace std nicht vergessen)
    3. Es fehlt die Funktionsdeklaration für sqrt -> <cmath> bzw. <math.h> inkludieren

    4. Funktionsdefinitionen enden nicht mit einem Semikolon.

    Zum Code:

    if(temp=1) 
    {
        count++; 
        array[count]=i; 
        cout<<i<<endl;
        temp = 0;
    }
    

    Das soll wohl if (temp == 1) heißen. Ansonsten ist diese Bedingung völlig überflüssig, da immer wahr.

    Und wozu die überflüssigen else-Anweisungen?



  • Sorry, aber so wie du deinen Code formatierst, kann man wirklich schlecht helfen.
    Ausserdem verwendest du den alten Header <iostream.h> nimm stattdessen <iostream>
    ohne ".h" her und verwende die using direktive:

    #include <iostream>
    using namespace std;
    

    Ich habe zwar keinerlei Ahnung vom Codeformatieren,
    aber klammere if anweisungen.
    Lass main einen wert zurückgeben!

    return 0;
    

    [EDIT]Hume war schneller 😞 [/EDIT]

    cu max



  • 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().


Log in to reply