Vektorproblem
-
ich mach grad was mit Vektoren und anscheinend habe ich etwas falsch gemacht mit ihnen (es kommt immer die fehlermeldung: vector subscript out of range (Vektorindex außerhalb des gültigen Bereichs)). hier mein code:
#include <vector> #include <fstream> #include <stdlib.h> #include <ctime> using namespace std; long potenz(long basis, int exponent) { ... } bool solovay_strassen_test(long n) { long counter = 0, hilfe, h, loop = 1, b, x = 0, y, z; int prim_true = 0; bool prim = false; vector<long>a; // Zufallszahl do { srand( ( unsigned ) time ( NULL ) ); a.push_back(rand () % n); while (a[loop] != 0) { h = a[loop] % n; a[loop] = n; b = h; a[loop] = x; } if (x == 1) { y = (a[loop] / n) % n; z = potenz(a[loop], (n-1) / 2) % n; if (y == z) { ++prim_true; } } ++loop; } while (prim_true < 3 || loop <= 5); if (loop - prim_true < loop / 2) { return true; } else { return false; } }vielleicht könnte mir jemand sagen / ein tip geben , was ich falsch gemacht habe

-
In vielen Programmiersprachen beginnt man mit dem Zählen bei 0. Auch in C++. Das erste Element deines Vektors a ist a[0]. Daher greifst du im ersten Durchgang bei a[loop] auf ein nicht exisiterendes Element zu (loop ist am Anfang 1).
P.S.: Dein Code sieht aber auch sonst falsch aus.
P.P.S.: Das srand willst du wahrscheinlich vor der Schleife haben.
-
mir ist grad aufgefallen, ich hab eh die hälfte vergessen
hier der rest:
int main() { long mittelzahl, loop; bool s; vector<long>primzahl; cout << "Welche Zahl soll die Mittelzahl bzw. trenner sein?" << endl; cin >> mittelzahl; // Mittelzahltest // erste Primzahl for (loop = 2; loop < mittelzahl; ++loop) { s = solovay_strassen_test(loop); if (s = true) { primzahl.push_back(loop); } } return 0; }was meinst du mit der code sieht falsch aus??
das andere hat geklappt aber jetzt passiert nichts wenn ich es ausführe
-
das andere hat geklappt aber jetzt passiert nichts wenn ich es ausführe
Kann nicht sein... die Frage ist was passiert und was passieren soll...
Also?
-
Gucky schrieb:
was meinst du mit der code sieht falsch aus??
Ich sag's mal so: Wenn ich so etwas sehe:
long counter = 0, hilfe, h, loop = 1, b, x = 0, y, z; int prim_true = 0; bool prim = false;Oder sowas:
do { srand( ( unsigned ) time ( NULL ) );Oder dies:
if (loop - prim_true < loop / 2) { return true; } else { return false; }Oder doppelt schlimm dies(
guck dir dies mal genauer an):if (s = true) { primzahl.push_back(loop); }Also wenn ich so etwas sehe, dann gibt mir das kein Vertrauen in den Code. Ich weiß dann aus Erfahrung, dass so schlechter Code auch meistens falsch ist.
-
wenn ich in die if-bedingung direkt die funktion reinschreibe, kommt die fehlermeldung, es muss ein änderbarer lvalue sein, wenn du das meinst.
-
= ist eine Zuweisung, == ein Vergleich!
-
sry ist mir auch grad aufgefallen
großer denkfehler
-
Aus diesem Grund schreibe ich immer nur
if ( s ) { primzahl.push_back(loop); }Ist meiner Meinung nach genauso gut lesbar und es passiert einem nicht ein = anstatt einem == zu tippen.
-
Oberon_0 schrieb:
= ist eine Zuweisung, == ein Vergleich!
Zuweisungen sind so lahm... Bei Vergleichen giebt's alles doppelt!
