Modulo Schleife oder so

01/22/2013 21:48 Saturday²#1
N'Abönd,

ich würde gerne einen Programm schreiben was sagen soll ob x eine Primzahl ist oder nicht.
Dafür wollte ich fragen da ich erst neu angefangen habe mit c++ zu arbeiten welchen Befehl ich am besten nehmen soll. Ich will das der Nutzer eine Zahl eingibt und das Programm x%2 x%3 x%4 teilt und wenn der Rest 0 ist -> keine Primzahl halt mit If x=0 goto blubb und else x ist eine Primzahl. Weis vllt jemand wie ich das am besten machen kann mit "do" vlt?
01/22/2013 22:08 MrSm!th#2
Goto ist böse.

Code:
bool is_prime(int num)
{
    if(num == 2 || num == 3)
        return true;
    else
        return ( num % 2 != 0 && num % 3 != 0 );
}

//irgendwo

if(is_prime(x))
    std::cout << x << " ist eine Primzahl!" << std::endl;
else
    std::cout << x << " ist keine Primzahl!" << std::endl;
Was möchtest du mit do (do-while Schleife?)? Soll das Ganze in einer Schleife alle Zahlen von x - y durchgehen und prüfen, ob sie Primzahlen sind? Um eine einzelne Zahl zu prüfen, brauchst du keine Schleife.

edit:

Übrigens ist eine Division durch 2, 3 und 4 kein vielsagender Test für Primzahlen.
01/22/2013 22:10 Saturday²#3
Hättest du Skype dann könnte ich es dir vielleicht besser erklären kannst mich dannach auch wieder löschen ;>.

So ein Problem hätte ich da noch :< Die Zahl 2 ist eine Primzahl, aber wenn ich diese eingebe sagt er mir es sei keine, da ich glaube ich y den Wert 2 zugeordnet habe. Weiß vlt. jemand wie ich das beheben kann. Nicht wundern das ist eine Commando Anwendung oder so xD.

Quote:
#include <iostream>

using namespace std;

int main()
{
int x,y;
Anfang:
cout << "\n\nBitte geben Sie eine Zahl zwischen 2-100 ein : " ;
cin >> x;

y=2;
do
{
if (x==1) cout<<"~~~~~Bitte achten Sie auf ihre Eingabe!~~~~~";
if (x==1) goto Anfang;
if (x%y == 0) cout<<"~~~~~Die Zahl "<< x << " ist leider keine Primzahl!~~~~~\n";
if (x%y == 0) goto Anfang;
if (x%y !=0) y=y+1;
}



while(y!=x);

cout <<"*****Die Zahl "<< x << " ist eine Primzahl!*****\n";
goto Anfang;


return 0;
}
01/22/2013 22:44 xNopex#4
01/22/2013 22:51 MrSm!th#5
Dein Test ist ziemlich ineffizient (du musst nur die Teilbarkeit bis zur Wurzel von x prüfen, nicht bis x).
Zudem solltest du dir das mit dem goto schnell wieder abgewöhnen. Womit lernst du C++?

Und ja, 2 % 2 ist 0. Deshalb war in meiner (falschen :<) is_prime Funktion auch vorher eine Abfrage, ob die Zahl gleich 2 oder 3 ist.
01/22/2013 22:59 snow#6
Modulo in einer While-Schleife, bitteschön:

PHP Code:
bool isPrimzahl(int n)
{
    
    
unsigned int i 2;
    
    while (
<= 2) {
        
        if (
== 0)
            return 
false;
        
        ++
i;
    }
    
    return 
true;

Sicher gibts da was effizienteres, für den Anfang sollte das aber einigermaßen verständlich sein (das Sieb des Erathostenes wollte mein Dozent nicht, weil das ja zu schwer zu programmieren ist :<)
01/22/2013 23:10 Saturday²#7
haha ich danke euch allen für eure Hilfe alle mal den hier machen :< xD
Gute Nacht euch allen!