Gå til innhold

Bone's Offisielle C++ hjelpetråd


Anbefalte innlegg

Poenget med rand funksjonen er ikke å lage tilfeldige tall, men å lage tall som har et spredningsområde over hele bitmønsteret både frem og tilbake. Vet du den nåværende seeden, kan du fint regne deg frem til neste tall i rekken gang etter gang. Det ville derimot ikke fungert på virkelig tilfeldige tall.

Datamaskiner (og matematikk) er deterministiske av natur.

Lenke til kommentar
Videoannonse
Annonse

Og dersom man ikke syns 'emulert' tilfeldighet er godt nok, kan man jo lage en enhet som måler bakgrunnstråling, og trekker ett tall fra resultatene man får ut derfra.

 

 

 

 

Dog er ei heller det ekte tilfeldighet, da man, dersom man hadde kjent til absolutt alle startparameterne i forbindelse med universets skapelse, og hadde en korrekt modell, likevel kunne regnet seg til også dette tallet.

 

Hvorfor trenger du noe mer tilfeldig enn det computermaskinen beregner for deg?

Lenke til kommentar

Nei, koden er veldig tidsavhengig:

 

Output, fire ulike kjøretidspunkt av programmet (ca. 2-5 sek mellomrom)

14378 28619 6495 2860  2648  28304 15969 13425 20713
14437 25482 370  10015 24470 681   6457  26270 23010
14486 22868 6189 10517 15349 26814 20376 15129 8540
14528 31525 9047 28428 18366 12326 28069 9843  26583

 

Klikk for å se/fjerne spoilerteksten nedenfor

#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

using namespace std;

int main()

{
srand ( time(NULL) );

int tall;

for (int i = 1; i < 10; i++)
cout << rand()  << " ";



cin.get();
return 0;
}

Klikk for å se/fjerne spoilerteksten nedenfor
Endret av Senyor de la guerra
Lenke til kommentar

Det forteller preprocessoren at "srand((int)GetCurrentProcessId())" skal kjøres dersom operativsystemet er windows. Om det ikke er windows (OSX, Linux, Unix, etc.) skal "srand((int)getpid());" kjøres. Ikke noe hokus pokus.

 

 

EDIT: Ooops - Jeg må slutte i copy/paste så mye på dette forumet :p

(Ref: Inlegget under)

Endret av ze5400
Lenke til kommentar
  • 5 uker senere...

Urgh, floor vil ikke ta "int", og får denne med: "error C2296: '%' : illegal, left operand has type 'double'" med double. Skal regne tverrsummen.

 

#include "stdafx.h"
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
double number = 0;
double rest = 11;
double value = 0;
double numberpart = 0;
cin >> number;

while (number > 9)
{
	rest = number%10;
	value = value + rest;
	numberpart = number/10;
	number = floor(numberpart);
}

cout << value;
cin.get();

return 0;
}

Lenke til kommentar

Funker med liten justering. Noe tips for å få den til å kjøre med flere enn ti siffer?

 

#include "stdafx.h"
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
int number = 0;
double rest = 0;
double value = 0;
double numberpart = 0;
cout << "Tall: ";
cin >> number;

while (number > 9)
{
	rest = number%10;
	value = value + rest;
	numberpart = number/10;
	number = floor(numberpart);
}

value = value + number;
cout << "Tverrsummen er: " << value;
cin >> number;

return 0;
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...