Neuling braucht Ratschläge/Hilfe



  • 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_in hat gar keinen Parameter anzahl - 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?


Anmelden zum Antworten