Nächstgrößere Primzahl ausgeben [gelöst]
-
Guten Abend,
ich habe mal aus Jux und Tollerei ein Programm geschrieben, welches mir überprüft, ob meine Eingabe eine Primzahl ist oder nicht. Dann habe ich überlegt, dass es ja auch interessant wäre die nächstgrößere Primzahl, von meiner Eingabe ausgehend, auszugeben. Leider bekomme ich das nicht hin. Hätte dort jemand einen Tipp dafür? Liebe Grüße#include <iostream> #include <cmath> using namespace std; int main() { int zahl; cout<< "Geben Sie eine Zahl ein."<<endl; cin>>zahl; for(int teiler=2;teiler<zahl;teiler++) { if(zahl%teiler==0) { cout<<"Keine Primzahl"; return 0; } } cout<<"Primzahl"<<endl; return 0; }
-
Als erstes würde ich den Primzahltest in eine Funktion auslagern die eine Zahl nimmt und
true
zurückgibt wenn es eine Primzahl ist und sonstfalse
.
-
@Swordfish Da ich im Nachhinein den Code in Maschinensprache (Von Neumann-Rechner) übersetzen möchte, wäre das ziemlich unpraktisch. Aber sonst wäre das eine super Idee
-
#include <cmath> #include <iostream> int main() { std::cout << "Your number: "; unsigned number; std::cin >> number; bool is_prime; do { ++number; is_prime = false; if (number == 2) is_prime = true; else if (number < 2 || number % 2 == 0) is_prime = false; else { is_prime = true; unsigned const limit = std::sqrt(number); for (unsigned n{ 3 }; n <= limit; ++n) { if (number % n == 0) { is_prime = false; break; } } } } while (!is_prime); std::cout << "The next bigger prime is " << number << ".\n\n"; }
-
@Swordfish Vielen Dank für dein Codebeispiel ! Könntest du mir vllt erklären was
unsigned const limit = std::sqrt(number);
und
unsigned number;
bedeuten ? Ansonsten verstehe ich alles
-
unsigned
ist dasselbe wieunsigned int
undint unsigned
.
const
type qualifier
-
@Swordfish Vielen Dank!
-
@Francesco sagte in Nächstgrößere Primzahl ausgeben [gelöst]:
Da ich im Nachhinein den Code in Maschinensprache (Von Neumann-Rechner) übersetzen möchte
Darf ich als Laie fragen was das heißt? Wo findet man wirklich in der Lehre verwendete Sprachdefinitionen für sowas?
-
@Swordfish sagte in Nächstgrößere Primzahl ausgeben [gelöst]:
Darf ich als Laie fragen was das heißt? Wo findet man wirklich in der Lehre verwendete Sprachdefinitionen für sowas?
Ist das jetzt eine rhetorische Frage? Denn das ist absolutes Basiswissen und mittlerweile ist die Harvard-Architektur verbreiteter.
-
@john-0 Ist eine ganz normale Frage:
Gibt es in der Lehre verbreitete, gängige nicht unbeding real existierende Beispiele für Harvard- und Von-Neumann-Architektur und dazugehörige Befehlsreferenzen?
-
@Swordfish sagte in Nächstgrößere Primzahl ausgeben [gelöst]:
Gibt es in der Lehre verbreitete, gängige nicht unbedingt real existierende Beispiele für Harvard- und Von-Neumann-Architektur und dazugehörige Befehlsreferenzen?
Es geht nicht um Befehlssätze sondern um das grundlegende Design wie die Daten im System verarbeitet werden: Processing Unit, Control Unit, Memory, Mass Storage, IO. Eine Von-Neumann-Architektur erlaubt selbstmodifizierenden Code, weil Programmcode und Daten im selben Speicher abgelegt werden. Eine Harvard-Architektur erlaubt genau das nicht. Es gibt Artikel auf Wikipedia auf denen das genauer erklärt wird.
-
@john-0 Wenn du nochmal liest wirst du erkennen daß ich nicht wissen wollte was architektur x ausmacht.
-
@Swordfish
Du spielst auf so Dinge wie MIX und MMIX an?
-
@john-0 Ja, nach sowas habe ich gefragt. Aber auch, was aktuell wirklich an Universitäten und Fachhochschulen "bei uns" verwendet wird.
-
@Swordfish Also ich studiere als Nebenfach Informatik und dort ist der Von-Neumann-Rechner, also das grundlegende Prinzip vieler Rechner, im Teile der Theorie der Informatik eines unserer ersten Themen. Unsere Uni hat uns dazu einen Emulator erstellt und es wird vorrausgesetzt, dass wir die Basics und die Art und Weise der Befehle anwenden können. Ich hoffe das meintest du mit deiner Frage.
-
@Francesco sagte in Nächstgrößere Primzahl ausgeben [gelöst]:
Ich hoffe das meintest du mit deiner Frage.
Ja, das meine ich.
@Francesco sagte in Nächstgrößere Primzahl ausgeben [gelöst]:
Unsere Uni hat uns dazu einen Emulator erstellt und es wird vorrausgesetzt
Irgendwie öffentlich zugänglich? Doku?
-
Ja, hier ist der Link zum Emulator. Die Befehlsliste kann ich dir leider nicht weiterleiten.
https://github.com/Funzinator/von-neumann-emulator/releases
Liebe Grüße
-
Yay, danke!
@Francesco sagte in Nächstgrößere Primzahl ausgeben [gelöst]:
Die Befehlsliste kann ich dir leider nicht weiterleiten.
Naja, die kann man sich aus der Dokumentation zusammenkratzen.
-
@Swordfish sagte in Nächstgrößere Primzahl ausgeben [gelöst]:
Fachhochschulen
Nichts. Von der Harvard-Architektur hatte ich bisher nichts gehört, oder konnte mich zumindest nicht dran erinnern. Von Neumann wurde in allen möglichen Vorlesungen mal erwähnt, kannte ich aber auch schon als Schüler. Deswegen war ich grad auch etwas überrascht zu hören, dass die Harvard-Architektur sogar weiter verbreitet ist.
Wir hatten sowas wie eine "Rechnerarchitektur" Vorlesung, da ging es aber vor allem um solche Sachen wie Branch Prediction, out of order execution usw., aber da wurde sowas wie Von Neumann Architektur höchstens am Rande erwähnt.
-
0: ini { input -> AC } 1: sta 0 { AC -> cell 0 } 2: ena 2 { AC = 2 } 3: sta 1 { AC -> cell 1 } { begin loop } 4: ena 1 { AC = 1 } 5: ada 0 { AC += cell 0 } 6: sta 0 { AC -> cell 0 } { if cell 0 == 2 --> done } 7: ena -2 { AC = -2 } 8: ada 0 { AC += cell 0 } 9: azj,eq 27 { if AC == 0 (cell 0 == 2) then jump 27 } { if cell 0 < 2 --> restart loop } 10: azj,ls 4 { if AC < 0 (cell 0 < 2) then jump 4 } { if cell 0 % 2 --> restart loop } 11: lda 0 { cell 0 -> AC } 12: mda 1 { AC %= 2 } 13: azj,eq 4 { if AC == 0 (cell 0 % 2 == 0) then jump 4 } { initialize counter } 14: ena 3 { AC = 3 } 15: sta 2 { AC -> cell 2 } { begin division loop } 16: lda 2 { cell 2 -> AC } 17: mua 2 { AC *= cell 2 } 18: sba 0 { AC -= cell 0 } 19: azj,gr 27 { if AC > cell 0 (cell 2 * cell 2 > cell 0) then jump 27 } { if cell 0 % cell 2 == 0 restart loop } 20: lda 0 { cell 0 -> AC } 21: mda 2 { AC %= cell 2 } 22: azj,eq 4 { if AC == 0 (cell 0 % cell 2 == 0) then jump 4 } { increment counter (cell 2) } 23: ena 1 { AC = 1 } 24: ada 2 { AC += cell 2 } 25: sta 2 { AC -> cell 2 } 26: ujp 16 { restart division loop } { output cell 0 and stop } 27: lda 0 { cell 0 -> AC } 28: oui { AC -> output } 29: stp