Übungsaufgabe Struktogramm Primfaktorzerlegung



  • Hallo Leute,
    ich bin neu auf diesem Board und hoffe ich bin hier auch richtig.
    Ich habe zur Prüfungsvorbereitung einige Aufgaben bekommen. Die ersten Zwei Aufgaben konnte ich bisher auch lösen, bei der dritten scheitere ich leider völlig.
    Ich benutze Visual Studio Community 2015. Das Programm wird in C++ geschrieben.
    Es geht darum aus einem Struktogramm ein Programm zu schreiben. Hierzu darf ich Schleifen und Verzweigungen verwenden.
    Die Deklarationen und Berechnungen bzw. arithmetischen Ausdrücke bekomme ich hin. Allerdings scheitere ich an den Schleifen und Verzweigungen. Ich habe das Bild mal hochgeladen und hier als Link eingefügt. Vielleicht könnt ihr mir ja weiterhelfen, wie ich damit am besten Anfange. Die Suche habe ich bemüht aber leider nichts passendes gefunden.

    https://picload.org/view/ripgwdpl/uebung.png.html

    Vielen Dank schon mal und beste Grüße


  • Mod

    Was ist deine konkrete Frage?

    Thaelisin schrieb:

    Vielleicht könnt ihr mir ja weiterhelfen, wie ich damit am besten Anfange.

    Der beste Anfang zum Lösen von Hausaufgaben ist es, den Unterrichtsstoff zu lernen und anzuwenden. Letzter Punkt ist auch sehr wichtig und ist gerade der Zweck, weshalb Hausaufgaben gestellt werden. Wenn du das Gefühl hast, dass du den derzeitigen Stoff nicht mehr verstehst und/oder nicht weißt, wie du ihn anwendest, dann hast du diese Schritte bei den vorherigen Lektionen nicht gewissenhaft genug durchgeführt. Dann empfiehlt es sich dringend, diese noch einmal zu wiederholen, sonst wirst du immer weiter abgehängt.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum MFC (Visual C++) in das Forum C++ (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Zeige deinen Code. Definiere "scheitere ich an den Schleifen und Verzweigungen". Ein if wirst du ja wohl hoffentlich schreiben können.



  • Hallo,
    danke schon mal für die Hilfe und entschuldigt das ich im falschen Forum begonnen habe. Programmieren ist leider für mich ein Buch mit sieben Siegeln. Ich studiere Maschinenbau.

    #include <iomanip>
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    void main(void)
    
    {
    	int faktor = 2, zahl, rest;
    	cout << "Geben Sie eine Zahl ein: " << endl;
    	cin >> zahl;
    	// Hier muss ich wohl irgendwie mit einer Schleife beginnen
    	rest = zahl%faktor;
    	if (rest == 0)
    	{
    		cout << "Faktor: " << faktor << endl;
    		zahl = zahl / faktor;
    		faktor = 2;
    	}
    	else
    	{
    		faktor = faktor + 1;
    	}
    
    	cout << "Zahl:" << zahl << endl;
    }
    


  • Thaelisin schrieb:

    Programmieren ist leider für mich ein Buch mit sieben Siegeln. Ich studiere Maschinenbau.

    Blabla

    Welche Schleifen kennst du? Welche davon könnte wohl zu deinem Struktogramm passen?

    Benutzer Codetags!
    Es heißt "int main()".



  • 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.


Anmelden zum Antworten