Abslotues Newb Prob
-
Moin.
hab versucht nen kleines proggie zu schreiben, was mir die Primzahlen von 1-100 ausrechnet(volkards c++ kurs*gg*). ok, dabei kam folgendes heraus:#include <iostream.h> bool istPrim(int kandidat) { int v; int test; v=1; do { if (v==kandidat) { return true; } else test = kandidat%v; v=v+1; if (test!=0) { return false; } else ; } while (v != kandidat); return false; } void main() { int k; bool test; k=1; do { test = istPrim (k); if (test=1) { cout<<k <<endl; } k=k+1; } while (k!= 101); };
kommen aber irgendwie nur zahlen von 1-100 raus. was hab ich falsch gemacht??
-
*hüstel*
if (test=1)
Schau Dir mal diese Zeile GENAUER an.
Außerdem werden Dich jetzt einige zerreissen, weil Du void main geschrieben hast, aber lass Dich davon zum jetzigen Zeitpunkt nicht irritieren.
-
Fabez schrieb:
... was mir die Primzahlen von 1-100 ausrechnet ...
Fabez schrieb:
... nur zahlen von 1-100 ...
Ich verstehe dein Problem nicht?
Das ist doch das gewünschte Ergebnis oder nicht?und was mir noch aufgefallen ist:
#include <iostream> using namespace std;
-
ChrissiB schrieb:
Fabez schrieb:
... nur zahlen von 1-100 ...
Ich verstehe dein Problem nicht?
Das ist doch das gewünschte Ergebnis oder nicht?*lol*, du postulierst also, dass alle Zahlen von 1 bis 100 Primzahlen sind
.
-
Ich glaube die Primfunktion ist noch leicht fehlerhaft:
if(test!=0) return false;
müte meine Meiung nach heißen:
if(test==0), denn dann ist ja kein Rest da und die Zahl damit teilbar.
MfG Jester
-
hmmm...
was hat das denn mit diesem void main() auf sich?
mein compiler will das gar net akzeptieren, im visual studio (zB) geht das aber... :xmas2:
-
MaSTaH schrieb:
ChrissiB schrieb:
Fabez schrieb:
... nur zahlen von 1-100 ...
Ich verstehe dein Problem nicht?
Das ist doch das gewünschte Ergebnis oder nicht?*lol*, du postulierst also, dass alle Zahlen von 1 bis 100 Primzahlen sind
.
Ja, ich habs auch jetzt gemerkt
@D-U-D-E http://www.volkard.de/vcppkold/klasse_nimmspiel__void_main_oder_int_main.html
http://homepages.tesco.net/~J.deBoynePollard/FGA/legality-of-void-main.html
-
ändert aber nichts, gibts immer noch zahlen von 1-100 aus
-
Hast Du auch mal die Änderung an der Primzahl-Funktion durchgeführt?
-
@Fabez Hast du dir schon den Lösungsvorschlag angeschaut?
-
natürlich hab ich mir die lösungsvorschläge angeschaut. geänder hab ich als erstes
primfunktion:if (test==0) { return false; }
hat keine auswirkungen gehabt.
dann hab ich das hier geändert
hauptfunktion:if (test==1) { cout<<k <<endl; }
Das hat nur geändert, das nur noch die 1 angezeigt wird
-
Was soll ich sagen, wer nicht lesen will, muß leiden.
Den Kernfehler des Programms habe ich 7 Minuten nach der Frage bereits aufgezeigt. Solange das nicht stimmt, braucht auch keiner an der Primfunktion zu basteln.
-
ich glaube test sollte gerade nicht 1 sein
-
aso, jetzt kommt aber nur noch press any key to continue.
-
mach mal aus der letzten Zeile der Prim-Funktion statt false ein true...
Das wirkt wunder!MfG Jester
-
@jester
hab ich eigentlich nur hingemacht, weil ansonsten beim compilieren ne warnung kommtD:\Dokumente und Einstellungen\****\hallo.cpp(26) : warning C4715: 'istPrim' : Nicht alle Steuerelementpfade geben einen Wert zurück
sprich ich bin davon ausgegangen das das gar keine auswirkung hat. egal, mal probiert, ändert nichts
-
das muß so bleiben. Außerdem ist v=1 sehr ungünstig. Denn durch 1 ist jede Zahl teilbar. Es wäre also günstiger mit v=2 anzufangen. Allerdins hast Du dann sofern Du die Abbruchbedinung der while-Schleife nicht änderst bei 1 ne Endlosschleife.
Schau Dir mal an, was passiert wenn Du ne Primzahl p testest:
die Schleife läuft bis v==p-1 durch (nach der Korrektur mit dem Startwert), anschließend wird v erhöht, sodaß v==p. Dann kommt die Abfrage der while-Schleife: v==p, also wird die Schleife verlassen und nach Deiner alten Version kommt false raus... ungünstig.MfG Jester