Übungsaufgabe Struktogramm Primfaktorzerlegung



  • Ah ja danke, jetzt hat das mit den Codetags funktioniert.
    Ich habe das mit dem int main() schon öfters im Internet gelesen. Warum sollte ich es so schreiben und nicht so wie bisher?

    for, do und while. Aber ich habe keine Idee welche Bedingungen ich da angeben müsste.

    Edit: Was mich irritiert ist, wie die Schleife im Struktogramm angezeigt wird. Alle Beispiele die ich gesehen hab umschließen einen Block immer komplett. Was hier ja nicht der Fall ist.



  • Thaelisin schrieb:

    Ich habe das mit dem int main() schon öfters im Internet gelesen. Warum sollte ich es so schreiben und nicht so wie bisher?

    Weil es falsch ist?

    Thaelisin schrieb:

    for, do und while. Aber ich habe keine Idee welche Bedingungen ich da angeben müsste.

    Die Bedingung steht im Struktogramm.

    Thaelisin schrieb:

    Was hier ja nicht der Fall ist.

    Nein?



  • Ich habe es mal mit for probiert. Allerdings wird mir angezeigt das eine Bedingung erwartet wir. Aber ich habe doch die Bedingung eingegeben?

    #include <iomanip>
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main()
    
    {
    	int faktor = 2, zahl, rest;
    	cout << "Geben Sie eine Zahl ein: " << endl;
    	cin >> zahl;
    
    	for (faktor <= (int)sqrt((double)zahl)
    	{
    
    		rest = zahl%faktor;
    
    			if (rest == 0)
    			{
    				cout << "Faktor: " << faktor << endl;
    					zahl = zahl / faktor;
    					faktor = 2;
    			}
    			else
    			{
    				faktor = faktor + 1;
    			}
    	}
    	cout << "Zahl:" << zahl << endl;
    }
    

    Danke für deine Mühe schon mal.



  • Lies nochmal nach, wie eine for-Schleife aussieht.



  • Thaelisin schrieb:

    Ich habe es mal mit for probiert.

    Warum?



  • Ah ja stimmt. Initialisierung, Bedingung, Statement.
    Da wird das wohl gar nicht die richtige Schleife sein. Ich habe es jetzt mal mit der while-Schleife probiert. Da bekomme ich zwar keine Fehler aber es änndert auch nichts.^

    #include <iomanip>
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main()
    
    {
    	int faktor = 2, zahl, rest;
    	cout << "Geben Sie eine Zahl ein: " << endl;
    	cin >> zahl;
    
    	while (faktor <= (int)sqrt((double)zahl))
    	{
    
    		rest = zahl%faktor;
    
    			if (rest == 0)
    			{
    				cout << "Faktor: " << faktor << endl;
    					zahl = zahl / faktor;
    					faktor = 2;
    			}
    			else
    			{
    				faktor = faktor + 1;
    			}
    	}
    	cout << "Zahl:" << zahl << endl;
    }
    


  • Warum setzt du den 'factor' innerhalb der Schleife wieder auf 2 zurück?
    Du kannst dir ja mal mit

    cout << "Faktor:" << faktor << endl;
    

    diesen in der Schleife ausgeben lassen.



  • Thaelisin schrieb:

    Ich habe es jetzt mal mit der while-Schleife probiert.

    Warum?



  • Ich habe mir den Faktor jetzt mal innerhalb der Schleife ausgeben lassen. Da bekomme ich aber gar nichts mehr angezeigt.

    Ich habe mich gegen die for-Schleife entschieden, da ich denke (irrtümer natürlich nicht ausgeschlossen) das ich hier nichts hoch zähle oder ähnliches.

    Ist denn überhaupt irgendwas richtig, von dem was ich hier tue?

    Edit: Ach so, vll doch mit der for-Schleife. Da ich ja bei false faktor = faktor+1 zähle. Nur wo muss ich denn dann die schleife ansetzen?



  • Th69 schrieb:

    Warum setzt du den 'factor' innerhalb der Schleife wieder auf 2 zurück?
    Du kannst dir ja mal mit

    cout << "Faktor:" << faktor << endl;
    

    diesen in der Schleife ausgeben lassen.

    Weil er einen Primfaktor gefunden hat und die nächste Primfaktor Prüfung wieder bei 2 beginnt.



  • Das sieht doch schon besser aus oder?

    #include <iomanip>
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main()
    
    {
    	int faktor, zahl, rest;
    	cout << "Geben Sie eine Zahl ein: " << endl;
    	cin >> zahl;
    
    	for (faktor = 2; faktor<=(int)sqrt(double(zahl));faktor++)
    	{
    
    		rest = zahl%faktor;
    
    			if (rest == 0)
    			{
    				cout << "Faktor: " << faktor << endl;
    					zahl = zahl / faktor;
    					faktor = 2;
    			}
    
    	}
    	cout << "Zahl:" << zahl << endl;
    }
    


  • Thaelisin schrieb:

    Das sieht doch schon besser aus oder?

    Hat das noch was mit deinem Struktogramm zu tun?


  • Mod

    Thaelisin schrieb:

    Das sieht doch schon besser aus oder?

    Nein. Bei dir hat die 36 die Primfaktoren 2, 3 und 6!



  • Ach mist...
    Kann mir jemand von euch irgendwie weiterhelfen? Ich weiß nicht was ich falsch mache.



  • Thaelisin schrieb:

    Ach mist...
    Kann mir jemand von euch irgendwie weiterhelfen? Ich weiß nicht was ich falsch mache.

    Du hältst dich nicht ans Struktogramm.



  • Jetzt sieht es doch gut aus oder?

    #include <iomanip>
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main()
    
    {
    	int faktor = 2, zahl, rest;
    	cout << "Geben Sie eine Zahl ein: " << endl;
    	cin >> zahl;
    
    	while (faktor<=(int)sqrt(double(zahl)))
    	{
    
    		rest = zahl%faktor;
    
    			if (rest == 0)
    			{
    				cout << "Faktor: " << faktor << endl;
    					zahl = zahl / faktor;
    					faktor = 2;
    			}
    			else
    			{
    				faktor = faktor + 1;
    			}
    
    	}
    	cout << "Zahl:" << zahl << endl;
    }
    


  • Ja? Ich sage nur Struktogramm.



  • Hmm ich erkenne nicht, wo mein Programm aktuell von dem Struktogramm abweicht. Kannst du mir bitte weiterhelfen?



  • #include <iomanip>
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main()
    
    {
        int faktor = 2, zahl, rest;
        cout << "Geben Sie eine Zahl ein: " << endl;
        cin >> zahl;
    
        do
        {
            rest = zahl%faktor;
    
                if (rest == 0)
                {
                    cout << "Faktor: " << faktor << endl;
                        zahl = zahl / faktor;
                        faktor = 2;
                }
                else
                {
                    faktor = faktor + 1;
                }
    
        }while (faktor<=(int)sqrt(double(zahl)))
        cout << "Zahl:" << zahl << endl;
    }
    


  • Ach so, war es daran zu erkennen wie die Schleife im Struktogramm dargestellt ist? Also wo der Block nur links und unten von der Schleife eingefasst wird?

    Vielen Dank schon mal!


Anmelden zum Antworten