Neuling braucht Ratschläge/Hilfe
-
Oha. Ich muss mich korrigieren: Du definierst in Z.8 einen integer, der genauso heißt wie die Funktion srand(). Das ist aber immer noch nicht besser, stimmt's?
hallo,
genau das ist mein Problem. Ich weiß nicht wie man diese Systemfunktion srand() auf den Initialwert von 5 setzt. Wenn ich als Dateityp void nehme wird ein Fehler angezeigt.Ich habe die Probleme in meiner restlichen Funktion gefunden, der return-wert hat gefehlt ^^"" darüber hinaus weiß ich jetzt einigermaßen wie man mit Zeigern rechnet.
Ich habe aber wie gesagt nach wie vor Probleme mit der srand()-systemfunktion
-
Diandranewby schrieb:
Ich weiß nicht wie man diese Systemfunktion srand() auf den Initialwert von 5 setzt.
srand(5);
-
Diandranewby schrieb:
genau das ist mein Problem. Ich weiß nicht wie man diese Systemfunktion srand() auf den Initialwert von 5 setzt.
Die Aufgabenstellung ist an der Stelle falsch bzw. falsch formuliert. Man setzt nicht srand auf einen Initialwert (das ergibt auch keinen Sinn), sondern man setzt mithilfe von srand den Initialwert des Zufallszahlengenerators.
-
Dann lass die doch erstmal weg. rand() gibt auch so erstmal Zufallszahlen raus.
-
C++:
srand(5);error: Diese Deklaration hat keine Speicherklasse oder keinen Typspezifizierer
Dann lass die doch erstmal weg. rand() gibt auch so erstmal Zufallszahlen raus.
ich weiß nicht ob das für meinen Dozenten in Ordnung ist
-
Diandranewby schrieb:
C++:
srand(5);error: Diese Deklaration hat keine Speicherklasse oder keinen Typspezifizierer
Ich weiß nicht, was du schreibst, aber das ist ein stinknormaler Funktionsaufruf!
-
welche Bibliothek muss ich dafür denn einbinden? ich dachte bislang dass diese Funktion in cstdlib gespeichert ist. Das Programm läuft übrigens obwohl der Compiler angibt dass srand(5) fehlerhaft sei.
-
Dies ist ein Funktionsaufruf, also muß der innerhalb der main-Funktion aufgerufen werden:
int main() { srand(5); // ... }Damit du aber jedesmal beim Aufrufen des Programms unterschiedliche Zufallszahlen kriegst, sollte man den Wert anhand der aktuellen Systemzeit bestimmen:
#include <cstdlib> #include <ctime> using namespace std; int main() { srand((unsigned)time(0)); // ... }
-
Diandranewby schrieb:
welche Bibliothek muss ich dafür denn einbinden? ich dachte bislang dass diese Funktion in cstdlib gespeichert ist. Das Programm läuft übrigens obwohl der Compiler angibt dass srand(5) fehlerhaft sei.
Dieselbe wie auch für rand, cstdlib.
Einfach am Anfang der main die Funktion aufrufen.
-
ah ich habs raus, diese Funktion muss in meiner mainfunktion als lokale Variable auftauchen und sie darf keine globale Variable sein ^^ warum ist das so?
Soweit so gut, wenn ich allerdings jetzt das Programm starte wird mir immer wieder der selbe Wert ausgegeben. Und zwar -2147482048.
-
hier nochmal die Funktionen die ich dafür benutze
int irand(int anfang, int ende) { double r = ende-anfang+1; return anfang+(int)(r*rand()/(RAND_MAX+1,0)); } int vector_in(int *vecname,int anfang, int ende) { for(int i=0;i<anzahl;i++) { *(vecname+i) = irand(anfang, ende); } return 0; }
-
ist ja lustig, ich hab das Programm neu gestartet und jetzt funktionierts einwandfrei. Danke euch allen für die Hilfe und Erläuterungen.
-
Diandranewby schrieb:
ah ich habs raus, diese Funktion muss in meiner mainfunktion als lokale Variable auftauchen und sie darf keine globale Variable sein ^^ warum ist das so?
Ganz sicher muss das nicht so sein. Vielleicht bringst du einen Funktionsaufruf mit der Deklaration einer Variablen durcheinander. Ich weiß zwar nicht warum, weil die wirklich vollkommen anders aussehen, aber das ist die einzige Erklärung.
int g; // <- Deklaration einer globalen Variablen srand(5); // Funktionsaufruf, hier nicht erlaubt int main() { int x; // <-- Deklaration einer lokalen Variablen srand(5); // <-- Funktionsaufruf }
-
Diandranewby schrieb:
return anfang+(int)(r*rand()/(RAND_MAX+1,0));Statt dem Komma muß da ein Punkt hin (sonst teilst du immer durch 0 - Stichwort: Sequenzoperator!), also
return anfang+(int)(r*rand()/(RAND_MAX+1.0));
-
Diandranewby schrieb:
hier nochmal die Funktionen die ich dafür benutze
int irand(int anfang, int ende) { double r = ende-anfang+1; return anfang+(int)(r*rand()/(RAND_MAX+1,0)); } int vector_in(int *vecname,int anfang, int ende) { for(int i=0;i<anzahl;i++) { *(vecname+i) = irand(anfang, ende); } return 0; }vec_inhat gar keinen Parameteranzahl- d.h. Du hantierst da doch irgendwo mit globalen Variablen rum. Das ist nicht gut.
Was hast Du Dir denn bei dem Rückgabewert (0) gedacht? Ist ein Rückgabewert, der immer 0 ist nicht überflüssig wie ein Loch im Knie?