Zum Inhalt springen

Primzahlen (Berechnung) bitte hilfe!


eryx

Empfohlene Beiträge

Hallo zusammen,

also ich hab als hausaufgabe bekommen

ein programm zuschreiben das einen min und max wert abfragt und für diesen bereich alle primzahlen angibt.

Es soll ein einfaches übungsprogramm sein deshalb soll auf die Sieb-methode verzichtet werden.

so mein programm funktioniert, bis auf die kleinigkeit, dass es nach der schleife wieder alle zuvor bekannten primzahlen mit ausgibt....

kann mir einer sagen wo mein fehler liegt? hocke seit 3 stunden hier dran und bin am verzweifeln... :(

danke schonmal!



#include <iostream>

#include <conio.h>

using namespace std;


int main()


{

	int i =2;                                // Deklaration

	int eingabe_min;

	int eingabe_max;

	int prim;

	bool teiler = false;


	cout << "	Primzahlenausgabe\n" << " \n";  //Eingabeaufforderung

	cout << " Bitte geben sie den minimalen und maximalen Bereich der Ausgabe an\n" << " \n";


	cout << " Minimum: "; cin >> eingabe_min; cout << " \n";

	cout << " Maximum: "; cin >> eingabe_max; cout << " \n";


	cout << " Primzahlen von " << eingabe_min << " bis " << eingabe_max << ":\n\n\n";

	while (eingabe_min <= eingabe_max) // Äußere Schleife 

	{

		while (eingabe_min%2 > 0)  // Überprüfung ob rest > 0

		{


		for(int i=x; i<=eingabe_min; i++)

		{


			if (eingabe_min%i == 0) // Auf Prim überprüfen 

			{

				teiler = true;


			}


		if (teiler == true)

		{

			cout << i << endl << "\n"; // Ausgabe


		}

		teiler= false;


		}

		eingabe_min++;


		}

		eingabe_min++;

	}

	getch();


		return 0;

	} 

Link zu diesem Kommentar
Auf anderen Seiten teilen

so mein programm funktioniert, bis auf die kleinigkeit, dass es nach der schleife wieder alle zuvor bekannten primzahlen mit ausgibt....
Dein Programm kann gar nicht funktionieren, weil es sich gar nicht kompilieren lässt.

kann mir einer sagen wo mein fehler liegt?
Wie kommst du darauf, dass es nur einer ist?

Der auffälligste Fehler dürfte sein, dass du eine Variable x benutzt, die gar nicht deklariert ist. Selbst wenn man diesen Fehler möglichst sinnvoll behebt, funktioniert dein Programm nicht. Es gibt keine Primzahlen aus, sondern alle ungeraden Zahlen, mit allen ihren Teilern. Es gibt also jede Menge Zahlen aus, die gar keine Primzahlen sind (15, 21, 25 usw.) und die Primzahl 2 findet es nicht.

Schreib doch erst mal ein Programm, das prüft, ob eine bestimmte Zahl eine Primzahl ist. Und wenn das ordentlich läuft, pack eine Schleife drumherum.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Algorithmen zur Berechnung von Primzahlen gibt es einige. Zusätzlich solltest Du die Sonderfälle (0,1,2) auch passend behandeln. (obwohl die 0 nicht als natürliche Zahl gilt)

Def. Primzahl (Wiki): Eine Primzahl ist eine natürliche Zahl mit genau zwei natürlichen Zahlen als Teiler, nämlich der Zahl 1 und sich selbst.

Zum Code: "if a==true" ist immer etwas unschön "if a" reicht völlig aus. Innerhalb der For-Schleife das "if eingeabe.... bis if teiler ==" lässt sich zusammen fassen.

HTH Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen


		for(int i=x; i<=eingabe_min; i++)


Wie hier gesagt wurde, ist die Variable X nicht deklariert, benutz hier einfach eine feste Zahl, eine Variable wird hier nicht benötigt. Desweiteren musst du nicht bis eingabe_min durchgehen, sondern musst nur weniger Durchläufe benutzen, um zu testen, ob es sich um eine Primzahl handelt. Welche Zahlen du nehmen kannst, da sollst selbst drauf kommen.

if (eingabe_min%i == 0) // Auf Prim überprüfen 

{

				teiler = true;


			}


		if (teiler == true)

		{

			cout << i << endl << "\n"; // Ausgabe


		}

Hier überprüfst du, ob der Rest nach dem Teilen 0 ist (Die Zahl ist also teilbar und somit KEINE Primzahl.

Danach gibst du halt den Teiler aus, durch dem die Zahl teilbar ist. Somit hast du eine Liste aller Teiler von ungraden Zahlen, da du die graden Zahlen richtigerweise am Anfang direkt ausschliesst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

so hab das ganze programm nochmal neu geschrieben...

sind aber noch einige fehler drinne...

er gibt jetzt primzahlen aus, jedoch gibt er jede zahl die er findet die vorherigen auch mit an oO

man man man ganz schön schwierig...



#include <iostream>

#include <conio.h>


using namespace std;


int main()


{	



	int MinPrimzahl;

    int MaxPrimzahl;

    int Primzahl, Divisor;

    bool istEinePrimzahl;


	cout << "	Primzahlenausgabe\n" << " \n";  //Eingabeaufforderung

	cout << " Bitte geben sie den minimalen und maximalen Bereich der Ausgabe an\n" << " \n";


	cout << " Minimum: "; cin >> MinPrimzahl; cout << " \n";

	cout << " Maximum: "; cin >> MaxPrimzahl; cout << " \n";


	cout << " Primzahlen von " << MinPrimzahl << " bis " << MaxPrimzahl << ":\n\n\n";




while (MinPrimzahl <= MaxPrimzahl)

{

    for (Primzahl=2; Primzahl<=MinPrimzahl; Primzahl++)

    {

        istEinePrimzahl = true;

        // Pruefe, ob Primzahl wirklich eine Primzahl ist

        for (Divisor=2; istEinePrimzahl && Divisor<Primzahl;

             Divisor++)

        {

            // Ist das restlos teilbar?

            if (0==Primzahl % Divisor)

            {

                // Zahl ist teilbar, ist also keine Primzahl!

                istEinePrimzahl = false;

            }

        }

        // Pruefung ist beendet.

        // Wenn es eine Primzahl ist, ausgeben!

        if (istEinePrimzahl)

        {

            cout << " ," << Primzahl;

        }


	}


	MinPrimzahl++;

    }


    cout << endl ;


	getch();

}


Bearbeitet von eryx
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...