Hallo und willkommen!
hallo ich hab die aufgabe bekommen ein c++ programm erklären zu können habe jedoch ein problem an dem ich nicht weiter komme und hoffe ihr könnt mir weiterhelfen
Darf man nach dem Kontext fragen? Soll stilistisch (und/oder syntaktisch) oder logisch (semantisch) geprüft werden?
if (x == 2 or x == 3 or x == 5 or x == 7)
Ist das C++? Korrekt würde das
C++:
if(x ==2 || x ==3 || x ==5 || x ==7)
lauten - es stellt sich mir die Frage, woher du diesen Code hast. Z.B. wird auch "Aufforderung" nicht verwendet, die Werte sollten initialisiert werden und die Divisionen würden mit korrekter Bezeichnung auch besser funktionieren (z.B. "/ 2.0f" statt "/ 2").
ich weiß das int keine kommerstellen anzeigt und float schon
Das stimmt nur halb. Anzeigen tut es ohnehin ein Konverter, der Mensch liest nicht so gerne binär - der Computer hingegen schon. Das führt z.B. dazu, dass float ungenau ist - alle Werte, die sich nicht durch 2^(-x) darstellen lassen, stimmen ab einer bestimmten Nachkommastelle nicht mehr. Int ist dafür nur dann für Divisionen geeignet, wenn der Dividend ein Vielfaches des Divisors ist - ansonsten wird abgerundet (z.B. 3/2==1).
Daher sind auch die Vergleiche wie "if(Berechnung1 == Zahl1)" ziemlich mutig und der Compiler wird zumindest eine Warnung auswerfen.
trz verstehe ich den zusammenhang der rechnung und der dannachfolgige if befehel
Das Konzept des Programmes ist folgendes:
Vorgaben:
- Wir prüfen anhand einer Primzahl p.
- Die zu prüfende Zahl sei n.
Schritte:
1. F := n/p, wobei F das "exakte" Resultat ist (Berechnung1 = x /2)
2. N := n/p, wobei N das abgerundete Resultat ist (Zahl1 = x/2)
3. Ist F gleich N?
Da für jede ganze Zahl b gilt: b = a * x, wobei a und x ebenfalls Ganzzahlen sind (=man kann jede Zahl faktorisieren, zumindest mit sich selbst und 1), ist, auf dieses Beispiel angewandt n = N * p nur dann der Fall, wenn sich n zerlegen lässt - was für Primzahlen eben nicht zutrifft, wenn man 1 für N und p ausschliesst (1 ist keine Primzahl).
Teilen kann man ja dennoch - und da kommt die Kommazahl ins Spiel: Wenn die exakte Division ein anderes Resultat ergibt als die abgerundete, dann ist die Zahl nicht (ganzzahlig) teilbar und somit möglicherweise prim - man muss diesen Test für alle p < n wiederholen.
Allerdings: Protip:
Dasselbe in besser(TM) erreicht man mit Modulo: Eine Zahl ist nicht prim, wenn gilt: n mod p = 0. Oder in C++ if(n % p == 0) std::cout << "Zahl nicht prim";.
ist mir auch unklar wieso x diese zahl sein muss um eine primzahl zu sein 17 ist zB auch eine primzahl und steht dort nicht drinne.
Stimmt. Daher hat es das letzte else: Wenn x nicht 2, 3, 5 oder 7 ist und sich nicht teilen lässt (durch die 4 ziemlich zufälligen Anwendungen des Algorithmus oben ermittelt), ist sie auch prim.
ich hoffe ich hab mich nicht zu unklar ausgedrückt und hoffe das ihr mir weiter helfen könnt
Naja. Um ehrlich zu sein: Das war schon ein ziemliches Geschwurbel. Wir alle hier helfen mehr oder weniger gerne, aber ein bisschen Rücksicht in Form einer einigermassen aktuellen und korrekten Rechtschreibung wird eigentlich vorausgesetzt - nicht, weil wir die Fragenden quälen wollen, sondern weil wir uns nicht quälen wollen, wenn wir schon *gratis* Hilfe leisten.
Wenn noch Fragen offen sind, immer her damit, aber vielleicht nimmst du dir ein nächstes Mal ein bisschen Zeit zum Formulieren und Aufschreiben deiner Sätze, und wenn du fertig bist, solltest du deinen Beitrag vielleicht nochmals korrekturlesen - braucht ein bisschen Zeit, lohnt sich aber.
Gruss
cwriter