Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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;

	} 

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.

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

hehe okay :)

werd ich mich jetzt ma dranmachen...

es lebe die zeitumstellung, ei^ne stunde mehr ^^

ich studiere seit oktober das erste semester info und hab vorher noch nie programmiert ^^

habt erbarmen :o


		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.

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

aaaaaaah sauber jetzt gehts :upps

juhu ^^

vielen danke an alle :bimei

bis zur nächsten hausaufagabe ^^

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.