bigpoint Geschrieben 23. November 2004 Geschrieben 23. November 2004 Hmmm... abgesehen davon was du da machen willst….. Zu zweiten mal, das funk einfach nicht !!!!!! zahl1 / zahl1 = zahl2; // zahl1 durch zahl1 teilen, zahl2 kommt heraus zahl2 / 1 = ausgabe; // zahl2 durch 1 teilen, ausgabe kommt heraus Zitieren
Klotzkopp Geschrieben 23. November 2004 Geschrieben 23. November 2004 zahl1 / zahl1 = zahl2; // zahl1 durch zahl1 teilen, zahl2 kommt heraus Erstens steht bei einer Zuweisung das Ziel (also die Variable, in der der Wert abgelegt werden soll) auf der linken Seite. Also wenn überhaupt, dann zahl2 = zahl1 / zahl1; Zweitens: zahl1 / zahl1 ist 1, egal, welchen Wert zahl1 hat (außer Null, da ist es undefiniert). zahl2 / 1 = ausgabe; // zahl2 durch 1 teilen, ausgabe kommt heraus Auch hier: Das Ziel der Zuweisung muss links stehen. Und zahl2 geteilt durch 1 bleibt zahl2. Man könnte also zusammenfassen; zahl2 = 1; ausgabe = zahl2; // und damit ausgabe = 1;[/CODE] Das ist offensichtlich Unsinn. Deine Kommentare an den Zeilen helfen da auch nicht weiter, weil sie nur wiedergeben, was der Code [i]macht[/i]. Das wissen wir schon. Um dieses Problem zu lösen, müssen wir von dir wissen, was dieser Code [i]tun soll[/i]. Denn das sind offensichtlich zwei unterschiedliche Dinge. Erklär uns, [i]warum[/i] du gerade diese Rechenschritte machst, dann kommen wir der Lösung näher. Zitieren
Phade Geschrieben 23. November 2004 Autor Geschrieben 23. November 2004 Also, hier ist meine Erklärung: Ich möchte ja die Primzahlen einer beliebigen Zahl x berechnen lassen. Bekanntlich sind Primzahlen ja nur durch 1 und durch sich selber teilbar. Deshalb habe ich geschrieben, dass die eingabe zahl1 werden soll und dannzahl1 durch sich selber teilen zu lassen. Das Ergebnis soll dann zahl2 sein, die dann durch 1 geteilt werden soll und das Ergebenis soll dann die ausgabe sein. In der Schule haben wir ein Ähnliches Programm geschrieben, ebenfalls mit so einer Anweisung und das hat gefunzt. Deshalb bin ich etwas überraschend verwirrt.... :confused: :confused: Hoffe, ich habe euch nicht so verwirrt. Bis später dann, Zitieren
Klotzkopp Geschrieben 23. November 2004 Geschrieben 23. November 2004 Ich möchte ja die Primzahlen einer beliebigen Zahl x berechnen lassen. Bekanntlich sind Primzahlen ja nur durch 1 und durch sich selber teilbar. Deshalb habe ich geschrieben, dass die eingabe zahl1 werden soll und dannzahl1 durch sich selber teilen zu lassen. Das Ergebnis soll dann zahl2 sein, die dann durch 1 geteilt werden soll und das Ergebenis soll dann die ausgabe sein. Jetzt dämmert's. Leider kannst du durch das bloße Durchführen dieser Rechnung nicht bestimmen, ob eine Zahl eine Primzahl ist. Jede natürliche Zahl ist durch sich selbst und durch 1 teilbar, aber nur Primzahlen sind nicht durch andere Zahlen teilbar. Um die Teilbarkeit zu testen, brauchst du zuerst mal eine if-Abfrage: if(a % b == 0) { // a ist durch b teilbar }[/CODE] % (modulo) liefert den Rest der Division. Ist der Null, geht die Division glatt auf. Die Formulierung ""Die Zahl hat folgende Primzahlen: "" ist auch Unsinn. Eine Zahl hat keine Primzahlen. Sie ist eine oder sie ist keine. Sie hat [i]Primfaktoren[/i], aber um die bestimmen zu können, solltest du zuerst ein Programm schreiben, dass prüft, ob eine eingegebene Zahl eine Primzahl ist. Und um eine Schleife wirst du da nicht herum kommen. Zitieren
Phade Geschrieben 23. November 2004 Autor Geschrieben 23. November 2004 Ahhhh, jetzt dämmerts mir auch !!!!! Hmm, ok, ich muss also eine Modulo Schleife einbauen, anstatt der if Anweisung ??? (Da waren sie wieder, meine drei Probleme ) Kannst du mir eventuell sagen wo/wie ich das einbauen kann/muss/will/möchte.... Aber zum glück sind wir ja jetzt übern Berg.... Zitieren
Klotzkopp Geschrieben 23. November 2004 Geschrieben 23. November 2004 Das ein oder andere if wirst du auch brauchen. Formulieren wir doch erst mal den Algorithmus: Um festzustellen, ob eine Zahl eine Primzahl ist, musst du sicherstellen, dass sie nur durch sich selbst und durch eins teilbar ist. Wenn also eine Zahl durch irgendeine Zahl >1 und <Zahl teilbar ist, ist sie keine Primzahl. Wir prüfen also alle Zahlen von 2 bis (Zahl-1) und testen, ob Zahl dadurch teilbar ist. Falls ja, ist die Zahl keine Primzahl, und wir sind fertig. Falls nicht, machen wir mit der nächsten Zahl weiter. Haben wir alle Zahlen getestet, ohne eine gefunden zu haben, durch die die Zahl teilbar ist, ist die Zahl eine Primzahl. Einverstanden? Dann solltest du das jetzt in Code umsetzen, oder auch in einen PAP/Struktogramm, falls du den Zwischenschritt auch noch machen möchtest. Eine Anmerkung am Rande: Der Algorithmus ist nicht optimiert. Aber er tut, was er soll. Zitieren
Phade Geschrieben 23. November 2004 Autor Geschrieben 23. November 2004 Ok, werde dann mal das Programm so umschreiben und hoffe das ich es richtig verstanden habe. Also, bis nächstes Jahr dann.... :floet: (kleiner scherz am Rande) Gut, werde mein bestes versuchen. Das mit dem PAP/Struktogramm lass ich lieber, da ich auf diesem Gebiet auch noch nicht so Firm bin. Ach ja, da wäre noch eine Frage: Gib es eigendlich ein Struktogramm Programm für Linux, außer den bereits vorhandenen? Mit denen komme ich nicht so gut zu rande.... Abpropo Strucktogramme, ich habe mir das Programm Strukted gezogen und auf meinem 'XP-Heimrechner' installiert. Nun wenn ich ein Struktogramm erstellen möchte sehe ich nur ein weißes Blatt. Das Programm macht alles was ich ihm sage, nur sehen tue ich nichts. Das kuriose ist ja, in der Schule funktioniert es ja einwandfrei und die haben auch nur XP-Rechner.... Hat da vielleicht einer ne Idee? bis dänne dann, thanx Zitieren
Phade Geschrieben 23. November 2004 Autor Geschrieben 23. November 2004 Ähm, ich nochmal, kann ich jetzt zum Beispiel schreiben: if(eingabe % eingabe) ??? Also ich glaube ich hab jetzt knoten im Kopf, stehe voll auf dem schlauch.......hüüüüüllllffffeeeee.....ich glaube ich mache erst einmal Mittag, und versuche es dann nochmal. Ich versteh es nicht. Ich komme nicht drauf wie ich es schreiben soll.....Ach ähm, ist ein for-Schleife angebracht, oder ist eine andere besser??? Ich hoffe ich nerv nicht zu viel, aber irgendwie muss ich das dann doch auch mal in meinen Kopf bekommen.... Zitieren
Klotzkopp Geschrieben 23. November 2004 Geschrieben 23. November 2004 kann ich jetzt zum Beispiel schreiben: if(eingabe % eingabe) ??? Kannst du. Ist aber sinnlos. eingabe % eingabe ist der Rest der Division einer Zahl durch sich selbst. Das ist immer 0. Ach ähm, ist ein for-Schleife angebracht, oder ist eine andere besser???Das ist letztlich egal. Eine for-Schleife bietet sich an, wenn du in festen Schritten von einem Startwert zu einem vorher bekannten Endwert laufen musst. So wie hier. Ich hoffe ich nerv nicht zu viel, aber irgendwie muss ich das dann doch auch mal in meinen Kopf bekommen....Mach doch erst die Schleife, lass den Modulo-Teil weg, und zeig, was du hast. Zitieren
Phade Geschrieben 23. November 2004 Autor Geschrieben 23. November 2004 Mach doch erst die Schleife, lass den Modulo-Teil weg, und zeig, was du hast. Ähm, ist jetzt vielleicht blöd, aber welche Schleife meinst du denn jetzt? Die if- oder for-Schleife :confused: Ich würde ja sagen du meinst die for-Schleife, da ich den Modulo-Teil in eine if-Schleife packen würde.... Zitieren
Guybrush Threepwood Geschrieben 23. November 2004 Geschrieben 23. November 2004 If ist keine Schleife sondern eine Abfrage, es wird ja nichts wiederholt sondern nur ein Ausdruck überprüft. Zitieren
Phade Geschrieben 23. November 2004 Autor Geschrieben 23. November 2004 Stimmt, hast recht, bin schon ganz durch den Wind.... Zitieren
Phade Geschrieben 23. November 2004 Autor Geschrieben 23. November 2004 Malzeit, Hier ist der Quelltext den ich bis jetzt habe. Komme aber momentan nicht weiter, habe einen Blackout und komme nicht weiter..... #include <iostream> // Headerdatei using namespace std; int main () { int eingabe, ausgabe, zahl1, zahl2; // Deklaraton for(int ... ) { cout << "Bitte geben Sie eine beliebige Zahl ein: "; cin >> eingabe; // Einlesen der Eingabe mit cin if (a % b == 0) { } } return 0; } Hoffentlich ist etwas richtig...ich bin der Meinung, das irgend etwas falsch ist..... Zitieren
Klotzkopp Geschrieben 23. November 2004 Geschrieben 23. November 2004 So, jetzt mal mit Nachdenken. Es soll doch nur eine Zahl eingegeben werden, oder? Also darf cout & cin nicht in der Schleife stehen. Die Schleife soll von 2 bis eingabe-1 laufen. Das solltest du aber hinbekommen. Zitieren
Phade Geschrieben 23. November 2004 Autor Geschrieben 23. November 2004 So, hab mal versucht zu denken... also wenn ich das richtig verstanden habe würde ich nun schreiben: for(int eingabe=0; eingabe<=eingabe-1; ++; Oder sollte ich noch einen Zähler einbauen??? Ach herje, Fragen über Fragen..... Zitieren
Klotzkopp Geschrieben 23. November 2004 Geschrieben 23. November 2004 Oder sollte ich noch einen Zähler einbauen??? Was heißt "noch"? Sicher brauchst du einen Zähler. Bei for-Schleifen brauchst du immer einen Zähler. Oder erwartest du wirklich, dass eingabe<=eingabe-1 jemals wahr wird? Zitieren
Phade Geschrieben 23. November 2004 Autor Geschrieben 23. November 2004 Was heißt "noch"? Sicher brauchst du einen Zähler. Bei for-Schleifen brauchst du immer einen Zähler. Oder erwartest du wirklich, dass eingabe<=eingabe-1 jemals wahr wird? AHHHHHHHHH, ich spring hier gleich im Fünfeck!! Warum komme ich denn da nicht von selber drauf!!?? Ok, dann werd ich mich mal wieder an die Tastatur begen... Zitieren
Phade Geschrieben 24. November 2004 Autor Geschrieben 24. November 2004 Hi, bin leider noch nicht weiter gekommen, habe bis jetzt: #include <iostream> // Headerdatei using namespace std; int main () { int eingabe, ausgabe, zahl1, zahl2, Zaehler; // Deklaration cout << "Bitte geben Sie eine beliebige Zahl ein: "; cin >> eingabe; // Einlesen der Eingabe mit cin for(int Zaehler=2; Zaehler<=eingabe-1; Zaehler++) { if (eingabe % 1 == 0) { // Anweisung } else { // Anweisung } } return 0; } Wobei ich aber nun wieder blöd da stehe, weil mir keine passenden Anweisungen einfallen..... Für else würde ich schreiben, das die eingegebene Zahl keine Primzahl ist, da der Rest nicht 0 (null) ist. Ähm..., vielleicht kann man das Programm ja so schreiben, das es nur die Primzahlen bis zu dieser Zahl ausgibt....??? Zitieren
Klotzkopp Geschrieben 24. November 2004 Geschrieben 24. November 2004 Hi, bin leider noch nicht weiter gekommen, Du bist schon ein ganzes Stück weiter gekommen. Das sieht doch schon fast gut aus. int eingabe, ausgabe, zahl1, zahl2, Zaehler; // Deklaration Wirf da mal alles raus, was du nicht brauchst. if (eingabe % 1 == 0) Hier prüfst du, ob eingabe ohne Rest durch 1 teilbar ist. Abgesehen davon, dass das für jede ganze Zahl gilt, machst du bei jedem Schleifendurchlauf dasselbe. Denk noch mal nach, wofür wir die Schleife und ihren Zähler haben. Für else würde ich schreiben, das die eingegebene Zahl keine Primzahl ist, da der Rest nicht 0 (null) ist. Andersrum. Wenn der Rest nicht null ist, ist eingabe ja nicht teilbar. Bei Primzahlen ist der Rest immer von Null verschieden. Schau dir nochmal den Algorithmus an. Ähm..., vielleicht kann man das Programm ja so schreiben, das es nur die Primzahlen bis zu dieser Zahl ausgibt....??? Das geht erst dann, wenn du weißt, wie du prüfst, ob eine Zahl eine Primzahl ist. Und da sitzen wir gerade dran. Zitieren
Phade Geschrieben 24. November 2004 Autor Geschrieben 24. November 2004 Ok, einen Teil habe ich verstanden.... also, ich habe die Deklaration um die zahl2 gekürzt. Das, so finde ich, das einzigste ist, was raus könnte....(?) Bei der if- und else-Abfrage stehe ich mal wieder auf dem Schlauch...!.... Wir haben doch die Schleife, um die eingabe zwo mal zu Überprüfen. Oder verstehe ich das falsch :confused: Bin aber schon guten Mutes zu hören, das ich doch schon weiter gekommen bin Zitieren
Klotzkopp Geschrieben 24. November 2004 Geschrieben 24. November 2004 Ok, einen Teil habe ich verstanden.... also, ich habe die Deklaration um die zahl2 gekürzt. Das, so finde ich, das einzigste ist, was raus könnte....(?) Und was ist mit ausgabe und zahl1? Benutzt du die irgendwo? Nein. Also raus damit. Wir haben doch die Schleife, um die eingabe zwo mal zu Überprüfen. Oder verstehe ich das falsch :confused: Wir brauchen die Schleife, weil wir die eingegebene Zahl durch eine Reihe anderer Zahlen teilen müssen. Ein Beispiel: Der Benutzer gibt 35 ein. Schleife von 2 bis 34 Wir prüfen: 35 % 2 ist nicht 0 -> weiter Wir prüfen: 35 % 3 ist nicht 0 -> weiter Wir prüfen: 35 % 4 ist nicht 0 -> weiter Wir prüfen: 35 % 5 ist 0 -> 35 ist keine Primzahl. Anderes Beispiel: Der Benutzer gibt 7 ein. Schleife von 2 bis 6 Wir prüfen: 7 % 2 ist nicht 0 -> weiter Wir prüfen: 7 % 3 ist nicht 0 -> weiter Wir prüfen: 7 % 4 ist nicht 0 -> weiter Wir prüfen: 7 % 5 ist nicht 0 -> weiter Wir prüfen: 7 % 6 ist nicht 0 -> weiter Schleife durchgelaufen, kein Teiler gefunden, 7 ist eine Primzahl. Erkennst du, wo der Zähler der Schleife zum Einsatz kommt? Bin aber schon guten Mutes zu hören, das ich doch schon weiter gekommen bin Nur nicht aufgeben. Und ganz wichtig: Denken ist besser als Rumprobieren. :mod: Vielleicht wäre ein PAP oder Struktogramm doch nicht so verkehrt. Zitieren
Phade Geschrieben 24. November 2004 Autor Geschrieben 24. November 2004 Ich glaube ich hatte gerade einen Gedankenblitz!!! :eek: Kann es denn dann sein, das es dann heißt: if(eingabe % 2 == 0) ? Oder war das nur ein Irrtuhm? Falls es doch Richtig ist, was kommt denn dann für eine Anweisung in die {}??? Kann es eventuell sein, das dann nur noch die cout´s kommen??? Zitieren
Klotzkopp Geschrieben 24. November 2004 Geschrieben 24. November 2004 Ich glaube ich hatte gerade einen Gedankenblitz!!! :eek: Kann es denn dann sein, das es dann heißt: if(eingabe % 2 == 0) ? Nur für den ersten Schleifendurchlauf. Für den nächsten muss da 3 stehen, dann 4 usw. Der Zähler ändert sich doch bei jedem Durchlauf der Schleife. Und welcher Teil ändert sich in den Beispielen von Zeile zu Zeile? Zitieren
Phade Geschrieben 24. November 2004 Autor Geschrieben 24. November 2004 Du meinst sicherlich, das ich if(eingabe % zaehler == 0) schreiben sollte, Oder???? :beagolisc Zitieren
Klotzkopp Geschrieben 24. November 2004 Geschrieben 24. November 2004 Du meinst sicherlich, das ich if(eingabe % zaehler == 0) schreiben sollte, Oder???? :beagolisc BINGO! Zitieren
Empfohlene Beiträge
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.