Problem bei einem Programm mit Primzahlen

Beathoven

Grünschnabel
Hi,
ich schreibe gerade ein Programm, welches eine Zahl prüft, ob die Zahl eine Primzahl ist oder nicht.
Hier ist ertseinmal mein Code:
PHP:
include <cstdlib>
#include <iostream>

using namespace std;

  bool check_primenr(int prime){
                
         if (prime == 2 || prime == 3){
                   return 0;
                   }
                   
         if (prime%2 == 0 || prime%3 == 0){
                     return -1;
                       }
         if (prime%2 != 0 && prime%3 != 0){
                     return 0;
                     }    
         if (prime <2){
                   return -2;
                   }                   
           }
           
int main(int argc, char *argv[])
{
    cout<<"Bitte geben Sie eine Zahl an, um zu testen ob sie eine Primzahl ist!\n";
    int a;
    cin>>a;

 switch (check_primenr(a))
 {
 case 0: cout<<"Die Zahl ist eine Primzahl!\n";
      break;       
 case -1: cout<<"Die Zahl ist keine Primzahl!\n";     
      break;
 case -2: cout<<"Falscher Zahlenbereich!\n";     
      break;
 default: cout<<"Unbekannter Fehler!\n";     
      break;
 }
         
    system("PAUSE");
    return EXIT_SUCCESS;
}

So nun treten einige Fehler auf:
1. Zahlen die unter 2 sind bekommen nicht den richtigen Fehler:
Zum Beipsiel 1: da sagt mien Programm: Ist eine Primzahl. Genaus bie negativen Zahlen.

2. Bei Zahlen wie 66 gibt das Programm unbekannter Fehler aus.

Kann mir bitte jemand helfen den Fehler zu finden!!
 
Hi.

Die möglichen Werte eines bools sind true oder false. Wenn du aus der Funktion andere Werte zurückgeben willst, mußt du einen anderen Datentyp wählen.

Und warum sollten Werte < 2 im falschen Zahlenbereich sein? Die Funktion sollte einfach false zurückgeben.

Für Zahlen größer als 1 müßte man mit einer Schleife prüfen, ob ein Teiler für die Zahl gefunden werden kann, der größer 1 und kleiner als die Zahl selbst ist. Nur wenn keine solche Zahl gefunden werden kann, sollte die Funktion true zurückgeben; anderenfalls false.

Gruß
 
#include<stdio.h>
#include<string.h>

void main(void)
{
char * ue="Primzahlen";
int l=strlen(ue),z, p, i;
printf("%*s\n\n", 40+l/2, ue);

printf("Gib die Zahl ein: ");scanf("%d", &z);
p=1;
for(i=2;i<=z/2;i++)
{
if(z%i==0)
{
p=0;
break;
}
else
{}
}
if(p==1)
{
printf("\n\nPrimzahl\n\n\n");
}
else
printf("\n\nKeine Primzahl\n\n\n");
}
 
#include<stdio.h>
#include<string.h>

void main(void)
{
char * ue="Primzahlen";
int l=strlen(ue),z, p, i;
printf("%*s\n\n", 40+l/2, ue);

printf("Gib die Zahl ein: ");scanf("%d", &z);
p=1;
for(i=2;i<=z/2;i++)
{
if(z%i==0)
{
p=0;
break;
}
else
{}
}
if(p==1)
{
printf("\n\nPrimzahl\n\n\n");
}
else
printf("\n\nKeine Primzahl\n\n\n");
}

Und was soll daran jetzt einfacher sein? :confused:

Im Gegenteil. Durch die Nutzung einer Funktion wäre der Code einfacher und verständlicher. Außerdem wartbarer und besser wiederverwendbar. Noch dazu ist dein Programm nicht korrekt - die Zahl 1 ist keine Primzahl.
C++:
#include <cmath>

bool is_prime(int x) {
  for (int i = 2; i <= sqrt(x); ++i) {
    if (x % i == 0) return false;
  }
  return (x > 1);
}

int main() {
  int z;

  cout << "Zahl: ";

  if (cin >> z) {
    if (is_prime(z)) {
      cout << "Primzahl!\n";
    } else {
      cout << "Keine Primzahl.\n";
    }
 }
}
Gruß

PS: Und bitte, bitte, bitte lerne was Code Tags sind und benutze sie auch!
 

Neue Beiträge

Zurück