Modulo-Problem
-
#include <iostream> #include <string> using namespace std; int diverg; int zahl; int teiler; int ugnpz=1; int pzz=2; int p1=3; int p2=1; int main() { for(zahl=1; zahl<=1000; zahl=zahl+2) //Zahlhersteller { for(teiler=2; teiler<=zahl/2; teiler=teiler+1) //Primzahlprüfer { diverg = zahl%teiler; if (diverg == 0) { ugnpz=ugnpz+1; cout<<zahl<<" ist die "<<ugnpz<<". uNPZ "<<pzz<<"/"<<ugnpz<<" = "<<pzz/ugnpz<<","<<pzz%ugnpz<<" UGZDistanz = "<<((zahl-p2)/2)-1<<"\n"; p2=zahl; break; } else { if (teiler == (zahl-1)/2) { pzz=pzz+1; cout<<zahl<< " ist die "<<pzz<<". PZ "<<pzz<<"/"<<ugnpz<<" = "<<pzz/ugnpz<<","<<pzz%ugnpz<<" UGZDistanz = "<<((zahl-p1)/2)-1<<" \n"; // Dies ist die wichtige richtige, nur wegen Pzpz auskommentiert. p1=zahl; } } } } return 0; }Seht Euch mal den Nachkommawert in der 4 Zeile (PZ = 11) an. Da stimmt doch was nicht mit Modulo...
Wer hat den rettenden Tip?
-
Dein Code ist echt kaum lesbar, vielleicht stelle ich mich auch an, aber die Namensvergebung könnte definitiv besser sein.
-
Welchen "Nachkommawert"? Du rechnest doch nur mit Ganzzahlen?
-
Wer hat den rettenden Tip?
Könntest du das Problem "reduzieren"?
Es gibt schließlich offensichtlich einen Unterschied zwischen der Ausgabe die dein Programm erzeugt, und der die du erwartet hast.
Erst einmal könntest du diese beiden Ausgaben posten. Was du erwartet hast und was rauskam.Dann könntest du diesen Unterschied reproduzieren, aber mit weniger Code.
Etwas direkter. Dann kann man auch das Missverständnis besser sehen.Keiner hat Lust, sich durch so ein Monstrum von schlecht eingerücktem und komisch programmiertem Code zu wühlen.
Beachte auch Den richtigen Code posten: reduziertes compilierbares Beispiel.
-
Das ist die Ausgabe: 11 ist die 5. PZ 5/2 = 2,1 UGZDistanz = 1
Ich erwarte bei 5/2 2,5 als Ausgabe.
Es bezieht sich auf Zeile 33 des Codes
-
brak schrieb:
Das ist die Ausgabe: 11 ist die 5. PZ 5/2 = 2,1 UGZDistanz = 1
Das ist völlig richtig so.
Deine "Nachkommastelle", sprich die Zahl die nach dem Komma kommt, wird durch den Modulo des Dividenden und Divisors "berechnet".Wieo hast du erwartet ?
-
Wenn du bei einer Division die erste Nachkommastelle berechnen möchtest, geht das folgendermaßen:
Du multiplizierst den Dividenden mit 10 und ermittelst den Rest der Division durch den ursprünglichen Divisor.Beispiel:
#include <iostream> int main() { int a, b; std::cin >> a >> b; std::cout << "Erste Nachkommastelle: " << (a * 10) / b % 10; }