Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Jag grötar till det när jag ska skapa slumptal

Postades av 2006-07-21 14:22:47 - Urban Olsson, i forum c++, Tråden har 4 Kommentarer och lästs av 1053 personer

Hejsan

Försöker skapa slumptal i en array med konstant storlek.(ej dynamsik)
Men det går inte som jag har tänkt mig.
Kan någon se vad jag gör för fel!
OBS: Är nybörjare i c++, så detta är bara kod för att jag ska lära mig.(ingen direkt funktion)

Mvh

Urban


************Program************

 

#include <iostream>
#include "iodos.h"

using namespace std;
int main()

{
    dos_console();
    srand( time(0));

    int range_low=0, range_high=0, random_integer=0, random_number;

    cout << "Välj lägsta och högsta tal : ";
    cin >> range_low >> range_high;
    cout << "Antal slumptal :";
    cin >> random_integer;

  
    int range=(range_low-range_high)+1;
    int random_array[126];

    for(int i=0; i<random_integer; i++)
    {
        random_number = range_low+int(range*rand()/(RAND_MAX + 1.0));
        random_array[i] = random_number;
    }

    for(int i=0; i<random_integer; i++)
    {
         cout<<random_array[i]<<endl;
    }
    return 0;
}


Svara

Sv: Jag grötar till det när jag ska skapa slumptal

Postades av 2006-07-22 00:02:40 - Peter Larsson

Hej Urban

Felet i din kod är raderna:

int range=(range_low-range_high)+1;
random_number = range_low+int(range*rand()/(RAND_MAX + 1.0));


Ändra dessa till:

int range = range_high - range_low + 1;
random_number = range_low + rand()%range;


<b>En liten förklaring:</b>
"rand()" ger ett tal mellan 0 och RAND_MAX (där RAND_MAX kan variera beroende på implementation).
Säg att du har:

 int random_number = rand();


"random_number" innehåller nu ett tal mellan 0 och RAND_MAX, exempelvis 230382.
Hur gör vi nu för att få ett tal mellan ett visst interval?
Jo, vi använder modulus-operatorn (%), som ger oss resten vid en division.

number = random_number % value;


Detta genererar ett värde mellan 0 och value-1.
För att få ett värde mellan 0 och value, adderar vi alltså 1.

Då du ber användaren om ett interval, "range_low" till "range_high", så blir value:

value = range_high - range_low + 1;


Ett tal mellan 0 och range_high blir alltså:

number = rand()%value;

För att få värdet inom den rätta gränsen, adderar vi "range_low".

Hela raden blir alltså som följer:

 random_number = range_low + rand()%(range_high - range_low + 1);

 eller

 random_number = range_low + rand()%value;


/ Peter


Svara

Sv:Jag grötar till det när jag ska skapa slumptal

Postades av 2006-07-22 10:24:10 - Urban Olsson

Hej

Tack för all hjälp Peter.
Nu förstår jag lite mer i all kod-djungel.

Mvh

Urban


Svara

Sv:Jag grötar till det när jag ska skapa slumptal

Postades av 2006-07-22 16:08:14 - Martin Adrian

>"random_number" innehåller nu ett tal mellan 0 och RAND_MAX, exempelvis 230382.
>Hur gör vi nu för att få ett tal mellan ett visst interval?
>Jo, vi använder modulus-operatorn (%), som ger oss resten vid en division.

modulus är enkel att använda men kom ihåg att den inte ger en jämn distribution (vissa värden har högre sannolikhet än andra).


Svara

Sv: Jag grötar till det när jag ska skapa slumptal

Postades av 2006-07-22 23:50:00 - Niklas Jansson

Man ska aldrig använda modulovarianten. Det får krävas ganska stora prestandakrav för att man skulle vilja det. Det finns två separata fördelningsproblem med modulovarianten, och ge rejält skev fördelning om det skulle vara så.

Koden ska i princip vara rätt, jag ser några små fel.

int range=(range_low-range_high)+1;
random_number = range_low+int(range*rand()/(RAND_MAX + 1.0));


detta bör vara:

double range=(range_high-range_low)+1;
random_number = range_low+int(range*rand()/RAND_MAX);


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 619
27 953
271 709
5 745
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies