Primzahl Fehler im Programm C++



  • Hallo Leute, wie haben als Aufbgabe, ein Programm zu programmiere, dass zwei natürliche Zahlen einliest und der Nutzer dann die Möglichkeit hat zu entscheiden, was mit denen passiert. Entweder soll das geometrische Mittel, das arithmetische Mittel oder es soll aisgegeben werden, ob es sich bei den Zahlen um Primzahlen handelt. Ich habe jetzt alles selber programmiert, nur bei dem Teil mit der Primzahl hab ich mir es ein wenig zusammengestückelt und komm nicht auf den Fehler. Kann mir da vielleicht jemand weiterhelfen?

    //Aufgabe 3 ii)
    #include <iostream>
    #include <cmath>
    
    double mittelwert (double a, double b) {
        double mittel;
        mittel = (a+b)/2.0;
        return mittel;
    }
    double geomittel (double a, double b) {
        double geo;
        geo = sqrt(a * b);
        return geo;
    }
    bool primzahl(int c) {
      bool prim = 0;
      bool faktor = 0;
      if (c == 2) {
        prim = 1;
        //printf("2");
      }
      else {
        int t;
        for (t = 2; t <= sqrt(c); t++) {
          if (c % t == 0) {
            prim = 0;
            //printf("andere %d", (c % t));
            break;
          }
          else {
            prim = 1;
          }
        }
      }
      //printf("%d ",prim);
      return prim;
    }
    
    int main ()
    {
    int a, b , n;
    std::cout << "Bitte gib zuerst a und dann b ein" << std::endl;
    std::cin >> a >> b;
    if (a < 0 || b < 0)
    std::cout << "ERROR" << std::endl;
    
    else
      std::cout << "Welche der 3 Typen wollt ihr?\n1. Arithmetisches Mittel\n2. Geometrisches Mittel\n3. Pruefen ob Primzahl" << std::endl;
    
    std::cin >> n;
    
    if (n==1)
        std::cout << "Ihr Ergebnis ist\n" << mittelwert(a, b) << "\n";
    else if (n==2)
        std::cout << "Ihr Ergebnis ist\n" << geomittel(a, b) << "\n";
    else if (n==3)
        std::cout << "Ihr Ergebnis ist" << primzahl(a, b) << "\n";
    }


  • Du versuchst eine Funktion die einen Parameter nimmt mit zwei Parametern aufzurufen.



  • @o0omax sagte in Primzahl Fehler im Programm C++:

    nur bei dem Teil mit der Primzahl hab ich mir es ein wenig zusammengestückelt und komm nicht auf den Fehler.

    Welcher Fehler denn?
    Was passiert?
    Was erwartest du, dass passieren soll?



  • @dirkb Die Aufgabe ist: Schreiben Sie ein Programm, welches zwei positive ganze Zahlen a und b einliest und den
    Benutzer fragt, welche der folgenden Aktionen ausgefuhrt werden soll: ¨
    • Berechnung des arithmetischen Mittels
    • Berechnung des geometrisches Mittels
    • Prufen, ob es sich bei den eingegebenen Zahlen um Primzahlen handelt. ¨
    Anschließend sollte ihr Programm das Ergebnis ausgeben. Die Bestimmung der Ausgabewerte
    soll dabei jeweils in einer eigenen Unterfunktion implementiert sein, welche dann im Hauptteil
    des Programms entsprechend der Benutzereingabe aufgerufen wird.
    Hinweis: Implementieren Sie unter anderem eine Funktion bool ist primzahl( int z ), deren
    Ruckgabewert genau dann ¨ true ist,

    Als Fehler wird mir angezeigt: too many arguents to function bool primzahl(int)



  • @swordfish danke, jetzt funktioniert das Programm zwar, allerdings kommt beim Aufrufen der Primzahlfunktion immer 0 raus.

    //Aufgabe 3 ii)
    #include <iostream>
    #include <cmath>
    
    double mittelwert (double a, double b) {
        double mittel;
        mittel = (a+b)/2.0;
        return mittel;
    }
    double geomittel (double a, double b) {
        double geo;
        geo = sqrt(a * b);
        return geo;
    }
    bool primzahl(int c) {
      bool prim = 0;
      bool faktor = 0;
      if (c == 2) {
        prim = 1;
        //printf("2");
      }
      else {
        int t;
        for (t = 2; t <= sqrt(c); t++) {
          if (c % t == 0) {
            prim = 0;
            //printf("andere %d", (c % t));
            break;
          }
          else {
            prim = 1;
          }
        }
      }
      //printf("%d ",prim);
      return prim;
    }
    
    int main ()
    {
    int a, b , c, n;
    std::cout << "Bitte gib zuerst a und dann b ein" << std::endl;
    std::cin >> a >> b;
    if (a < 0 || b < 0)
    std::cout << "ERROR" << std::endl;
    
    else
      std::cout << "Welche der 3 Typen wollt ihr?\n1. Arithmetisches Mittel\n2. Geometrisches Mittel\n3. Pruefen ob Primzahl" << std::endl;
    
    std::cin >> n;
    
    if (n==1)
        std::cout << "Ihr Ergebnis ist\n" << mittelwert(a, b) << "\n";
    else if (n==2)
        std::cout << "Ihr Ergebnis ist\n" << geomittel(a, b) << "\n";
    else if (n==3)
        std::cout << "Ihr Ergebnis ist" << primzahl(c) << "\n";
    }

  • Mod

    Welchen Wert hat denn c?

    Du hast gerade ein prinzipielles Problem, dass du anscheinend viel durch Copy&Paste und/oder Herumprobieren programmierst, ohne wirklich zu verstehen, was dein eigenes (du hast es doch selber geschrieben, oder?) Programm tut.

    Du hast zwei Zahlen, a, b. Du möchtest über beide jeweils wissen, ob sie eine Primzahl sind. Du hast eine Funktion, die feststellt, ob eine bestimmte Zahl eine Primzahl ist oder nicht. Deine Aufgabe ist nun, diese Tatsachen zusammen zu führen. Das geht nicht dadurch, dass man so lange Änderungen am Programm durchführt, bis es compiliert, denn "es compiliert" sagt nur etwas darüber aus, ob dein Programm grammatikalisch korrektes C++ ist, nicht darüber ob das Geschriebene irgendwie sinnvoll ist. Für den Sinn zu sorgen ist deine Aufgabe als Programmierer. Darüber gilt es nachzudenken. Wie kannst du es schaffen, zwei Zahlen auf Primzahlheit zu prüfen, wenn du eine Funktion hast, um eine einzelne Zahl auf Primzahlheit zu prüfen? Die Antwort ist nicht, eine dritte Zahl einzuführen.



  • @seppj ja ich habes selber geschrieben, aber bei der primzahl nicht genau gewusst, was ich tue. Danke für deine Hilfe, habe es jetzt hinbekommen, dass es auch funktioniert, auch wenn es vielleicht nicht die schönste Lösung ist.

    //Aufgabe 3 ii)
    #include <iostream>
    #include <cmath>
    
    double mittelwert (double a, double b) {
        double mittel;
        mittel = (a+b)/2.0;
        return mittel;
    }
    double geomittel (double a, double b) {
        double geo;
        geo = sqrt(a * b);
        return geo;
    }
    bool primzahl(int a) {
      bool prim = 0;
      bool faktor = 0;
      if (a == 2) {
        prim = 1;
      }
      else {
        int t;
        for (t = 2; t <= sqrt(a); t++) {
          if (a % t == 0) {
            prim = 0;
            break;
          }
          else {
            prim = 1;
          }
        }
      }
      return prim;
    }
    bool primzahl2(int b) {
      bool prim = 0;
      bool faktor = 0;
      if (b == 2) {
        prim = 1;
      }
      else {
        int t;
        for (t = 2; t <= sqrt(b); t++) {
          if (b % t == 0) {
            prim = 0;
            break;
          }
          else {
            prim = 1;
          }
        }
      }
    
      return prim;
    }
    int main ()
    {
    int a, b , c, n;
    std::cout << "Bitte gib zuerst a und dann b ein" << std::endl;
    std::cin >> a >> b;
    if (a < 0 || b < 0)
    std::cout << "ERROR" << std::endl;
    
    else
      std::cout << "Welche der 3 Typen wollt ihr?\n1. Arithmetisches Mittel\n2. Geometrisches Mittel\n3. Pruefen ob Primzahl" << std::endl;
    
    std::cin >> n;
    
    if (n==1)
        std::cout << "Ihr Ergebnis ist\n" << mittelwert(a, b) << "\n";
    else if (n==2)
        std::cout << "Ihr Ergebnis ist\n" << geomittel(a, b) << "\n";
    else if (n==3)
    {
        if (primzahl(a)==0)
        std::cout << "a ist keine Primzahl"<< "\n";
        else
        std::cout << "a ist eine Primzahl";
    
        if(primzahl (b)==0)
        std::cout << "b ist keine Primzahl";
        else
        std::cout << "b ist eine Primzahl";
    
    }
    }