Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Negative Zufallszahlen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.05.2005, 19:59 Uhr
~milian
Gast


Hi!
Ich muss für die Schule eine Funktion erstellen, die in dem Intervall von -10 bis 10 10 Zufallszahlen berechnet und ausgibt. Zunächst soll die Funktion aber allgemein gehalten werden und es soll das übergebene Intervall geprüft werden(Anfang kleiner als Ende + Intervall kleiner als RAND_MAX). ich komme erstens nicht mit der srand() funktion klar und zweites wie bekomme ich negative Zufallszahlen?? die beschränkung bis 10 bekomme ich mit modulo hin, das weiß ich.
DANKE!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.05.2005, 20:04 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


mach einfach modulo 20 und zieh 10 ab
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.05.2005, 22:00 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


also so:


C++:
int zahl = rand() % 20; // erzeugt erstmal zwischen 0-20
zahl -= 10; // nun von -10 bis 10



die zwei schritte kann man natürlich zusammenfassen:


C++:
int zahl = (rand() % 20) - 10;


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.05.2005, 02:15 Uhr
~milian
Gast



C++:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int Zufallsgenerator(int iAnfang, int iEnde)
{    int iZufallszahl;
    srand((unsigned)time(NULL));
    if(iAnfang<iEnde && iEnde<32768)
    {
        iZufallszahl =(rand()%(iEnde-iAnfang))-((iEnde-iAnfang)/2);
        return iZufallszahl;
    }
    else
    {
        printf("Bitte geben setzen sie das Intervallende kleiner als 32768 \n \bbzw. achten sie darauf, dass der Anfangswert kleiner als der Endwert ist.\n");
        return 0;
    }
}
main()
{
    int iEingabeA=0, iEingabeE=0, iErgebnis=0, i=0;

    printf("Bitte geben sie ein Intervall ein,\naus dem 10 Zufallszahlen gewählt werden sollen:\n");
    scanf("%i  %i", &iEingabeA, &iEingabeE);  
    
    printf("10 Zufallszahlen zwischen %i und %i:\n", iEingabeA, iEingabeE);

    for(i=0; i<10; i++)
    {
        iErgebnis= Zufallsgenerator(iEingabeA, iEingabeE);
        printf("%i\t", iErgebnis);
    }
}



so habe ich das gelöst. das problem ist, dass ich eine funktion implementieren sollte, die Zufallszahlen ausliest (nachdem ein Intervall vorgeben wurde).
In einer main funktion soll dies 10x getestet werden. Dies hab ich gemacht, aber anstatt 10 zufällige zu bringen, errechnet mein programm eine und liest sie 10x aus. Natürlich ist das logisch, aber ich weiß nicht wie ich es auf der Basis meines Codes ändern kann.
Bitte um Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.05.2005, 08:39 Uhr
ao

(Operator)



Zitat von ~milian:
ich weiß nicht wie ich es auf der Basis meines Codes ändern kann.

srand genau einmal aufrufen und nicht bei jedem Aufruf des Zufallsgenerators.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.05.2005, 09:00 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


da sich time wahrscheinlich einfach noch nicht geändert hast setzt du den zufallsgenerator somit "zurück" womit die gleiche zahl wieder rauskommt. Deshalb srand nur einmal aufrufen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.05.2005, 09:53 Uhr
~milian
Gast


ich habe es jetzt an den anfang als eigene funktion gesetzt, aber jetzt komm zwar 10 verschiedene, bei jedem programmaufruf aber die gleichen zahlen. kann das mal jemand testen? ich komm einfach nicht weiter!


C++:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void initZufallsgenerator()
{
    srand((unsigned)time(NULL));
}
int Zufallsgenerator(int iAnfang, int iEnde)
{    int iZufallszahl;
    if(iAnfang<iEnde && iEnde<32768)
    {
        iZufallszahl =(rand()%(iEnde-iAnfang))-((iEnde-iAnfang)/2);
        return iZufallszahl;
    }
    else
    {
        printf("Bitte setzen sie das Intervallende kleiner als 32768 \nbzw. achten sie darauf, dass der Anfangswert kleiner als der Endwert ist.\n");
        return 0;
    }
}
main()
{
    int iEingabeA=0, iEingabeE=0, iErgebnis=0, i=0;

    printf("Bitte geben sie ein Intervall ein,\naus dem 10 Zufallszahlen gewählt werden sollen:\n");
    scanf("%i  %i", &iEingabeA, &iEingabeE);  
    
    printf("10 Zufallszahlen zwischen %i und %i:\n", iEingabeA, iEingabeE);
    for(i=0; i<10; i++)
    {
        iErgebnis= Zufallsgenerator(iEingabeA, iEingabeE);
        printf("%i\t", iErgebnis);
    }
}
    
    

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.05.2005, 10:12 Uhr
ao

(Operator)


Du musst initZufallsgenerator auch aufrufen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.05.2005, 10:22 Uhr
~milian
Gast


Ooops..ich bin irgendwie ein bisschen durch den Wind...
Gott habe euch liebjavascript:insert_smiley('')
javascript:insert_smiley('')
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: