mikrocontroller.net

Forum: PC-Programmierung hilfe bitte warum erzeugt rand() immer bei die variablen 1??


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von wewerica (Gast)


Bewertung
-3 lesenswert
nicht lesenswert
void generatedata(wetterstation mydata[], int size)
{
  for (int i = 0; i < size; i++)
  {
    mydata[i].temperatur = (float) (rand()% 410 + (-200) * 0,1);
    mydata[i].luftfeuchtigkeit = (float) (rand()% (1010 + 0)*0,1);
    mydata[i].luftdruck = (float) (rand()% (11010 + 9000) * 0,1);
    mydata[i].messzeit = GetTickCount();

    printf("messzeit:%d\n\tluftdruck:%f\n\tluftfeuchtigkeit:%f\n\ttemperatur 
:%f\n\t",  mydata[i].messzeit, mydata[i].luftdruck, 
mydata[i].luftfeuchtigkeit, mydata[i].temperatur);

  }

}

von Mark B. (markbrandis)


Bewertung
0 lesenswert
nicht lesenswert
Der Zufallsgenerator braucht einen Startwert.
    srand(time(NULL)); // use current time as seed for random generator
    int random_variable = rand();


https://en.cppreference.com/w/c/numeric/random/rand

von leo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
wewerica schrieb:
> (-200) * 0,1);

Und da solltest du noch nachbessern PUNKT

leo

von Mark B. (markbrandis)


Bewertung
0 lesenswert
nicht lesenswert
leo schrieb:
> wewerica schrieb:
>> (-200) * 0,1);
>
> Und da solltest du noch nachbessern PUNKT
>
> leo

Stimmt, das sollte so eigentlich gar nicht kompilieren?

von Sebastian S. (amateur)


Bewertung
0 lesenswert
nicht lesenswert
Würde mich wundern, wenn der Compiler da keinen Meckerer ausgibt. Die 
Insulaner und Usanesen haben's nicht so mit dem Komma.

von leo (Gast)


Bewertung
1 lesenswert
nicht lesenswert
leo schrieb:
> wewerica schrieb:
>> (-200) * 0,1);
>
> Und da solltest du noch nachbessern PUNKT

Falls das nicht klar sein sollte, du machst:
x = y, 1;

s. "comma operator"

leo

von Mark B. (markbrandis)


Bewertung
0 lesenswert
nicht lesenswert
So in etwa sollte das eher tun:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct {
    float temperatur;
    float luftfeuchtigkeit;
    float luftdruck;
    int messzeit;
} wetterstation;

void generatedata(wetterstation mydata[], int size)
{
  for (int i = 0; i < size; i++)
  {
    mydata[i].temperatur = (float) (rand()% 410 + (-200) * 0.1);
    mydata[i].luftfeuchtigkeit = (float) (rand()% (1010 + 0) * 0.1);
    mydata[i].luftdruck = (float) (rand()% (11010 + 9000) * 0.1);
    mydata[i].messzeit = 1; // GetTickCount();

    printf("messzeit: %d\nluftdruck: %f\nluftfeuchtigkeit: %f\ntemperatur: %f\n",  
    mydata[i].messzeit, mydata[i].luftdruck, mydata[i].luftfeuchtigkeit, mydata[i].temperatur);
  }

}

int main()
{
    srand(time(NULL)); // use current time as seed for random generator
    wetterstation w1[2];
    generatedata(w1, 2);
    
    return 0;
}

von sid (Gast)


Bewertung
1 lesenswert
nicht lesenswert
wewerica schrieb:
> mydata[i].temperatur = (float) (rand()% 410 + (-200) * 0,1);

Mark B. schrieb:
> mydata[i].temperatur = (float) (rand()% 410 + (-200) * 0.1);

auf die Klammern achten..
das da ist gleich (rand()%410) - 20
und nicht etwa wie vermutlich gewünscht (rand()%410 - 200) *0.1

ausgehend von
wewerica schrieb:
> mydata[i].luftfeuchtigkeit = (float) (rand()% (1010 + 0)*0,1);

Mark B. schrieb:
> mydata[i].luftfeuchtigkeit = (float) (rand()% (1010 + 0) * 0.1);

das da ist (rand()%1010) * 0.1

und
wewerica schrieb:
> mydata[i].luftdruck = (float) (rand()% (11010 + 9000) * 0,1);

Mark B. schrieb:
> mydata[i].luftdruck = (float) (rand()% (11010 + 9000) * 0.1);

welches ja (rand()%20010) * 0.1 wäre.

Beitrag #6035262 wurde vom Autor gelöscht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.