[Pascal] RANDOM

0

Jak zrobić aby funkcja random wybierała z okreslonego przedziału??
np. (10-100)
bo gdy pisze
random(10-100); to mi zgłasza bład !

0

repeat
a := random(100);
until a > 10;

chyba tak

0

Random(od 10 do 100);
Application.Losowanie;

0

lol

0

na pewno "od" "do" takie są komendy

0

Pozdrowienia

0

Spróbuj randomrange() (chyba tak to się nazywa...). Jest w module math.

--

Delphi 6

Pozdrówka

0

[niewinnosc]
Witam.

Wcale bym się nie zdziwił gdyby nie było takiej możliwości (tzn gdyby nie było możliwe wywołanie funkcji Random(od a do b) ).

Ale jeśli mamy funkcję generującą liczby losowe w zakresie od 0 do x (czyli inaczej mówiąc zwyczajny Random(x) ) możemy w prosty sposób ją wykorzystać, tak aby zwracała wartości w zakresie od a do b.

:-8

W twoim przypadku wystarczy takie wyrażenie:
10+Random(90);

Tak przy okazji: podejrzewam że instrukcję:
Random(10-100);
Pascal interpretował jako Random(-90) co zapewne generowało bład, gdyż argument funkcji Random powienien być dodatni. (aczkolwiek mogę się w tym wypadku mylić, gdyż ostatni raz pracowałem w Pascalu jakieś 6 lat temu)

Pozdrawiam ciepło
[niewinnosc]

0

10+Random(90);

jesli przedzial ma obejmowac 10 i 100 , to

10+Random(91);

--
Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

0

11+Random(90);

--
Vogel [[email protected]]

Life is just a dream, you know...
[Cowboy Bebop]

0

czyli lol kwadrat :] od do :P [diabel]

0

[niewinnosc]

10+Random(91);, pq
11+Random(90); Vogel

ludzie ! co wy piszecie ! Mam propozycję, zanim napiszecie coś w stylu: "12+Random(89)" wczytajcie się uważnie w posta na który odpowiadacie.

Powtarzam:
mamy funkcję Random(x) która zwraca liczbę losową z przedziału [0,x];
jeżeli chcemy otrzymać liczbę losową z przedziału [10,100] to trzeba użyć wyrażenia postaci:
10+Random(90);

Dlaczego? Spróbuję to wytłumaczyć:

Random(90) generuje losową liczbę z zakresu [0,90], (zakładam że wiecie co to jest zbiór domknięty).
rozważmy dwa przypadki:

  1. funkcja zwróciła najmniejszą możliwą wartość, czyli 0. Podstawiamy do wyrażenia 10+Random(90)=10+0=10.

  2. funkcja zwróciła największą możliwą wartość, czyli 90. Podstawiąjąc mamy: 10+Random(90)=10+90=100.

Wszystkie inne przypadki leżą pomiędzy tymi dwoma wartościami, czyli nasz nowy zakres to [10,100].

Na koniec mam prośbę: jeśli się ze mną nie zgadzacie i piszecie tak jak Vogel lub pq coś w stylu "Kapustka według mnie to raczej powinno być tak: ... " to prosiłbym o krótkie uzasadnienie, najlepiej przykład który jednoznaczenie wskazuje na fałszywość mojego stwierdzenia. Dlaczego? dlatego bo dużo łatwiej jest wykazać że stwierdzenie jest fałszywe, niż wykazać że twierdzenie jest prawdziwe.

Pozdrawiam
[niewinnosc]

P.S A może Vogel po prostu chciał być złośliwy?

0

P.S A może Vogel po prostu chciał być złośliwy?

Raczej nie :) Złośliwy bylem tu tylko raz :)
poza tym, to nadal nie masz racji. Ja też się pomyliłem i zwracam honor pq:

Random(90) generuje losową liczbę z zakresu [0,90]

Niestety nie. Zwraca liczbę z zakresu [0, 89] więc rzeczywiście powinno być:

10 + Random(91)

--
Vogel [[email protected]]

Life is just a dream, you know...
[Cowboy Bebop]

0

O rany. Ja nie piszę teraz o Pascalu, bo prawdę mówiąc już dawno z niego wyrosłem, powtarzam:

Mamy funkcję Random(x) która zwraca liczbę losową z przedziału [0,x]

To jest założenie, a nie stwierdzenie faktu, czyli nie oznacza to że akurat w Pascalu tak jest.

nawiasem mówiąc całkowicie niezrozumiałe wydaje mi się że w Pascalu Random(90) generuje liczbę losową z przedziału [0,89], gdyż to by oznaczało że:

Random(1) generuje liczbę losową z zakresu [0,0]. Ma to sens? nie.

Może miałeś na myśli przedział [0,90) ?
A może w Pascalu Random(1) zawsze w wyniku daje 0?

0

andom(1) generuje liczbę losową z zakresu [0,0]. Ma to sens? nie.

A po co mam losować 1 liczbę?

Może miałeś na myśli przedział [0,90) ?

Nie. Miałem na myśli [0, 89]

Jeżeli funkcje wywoła się:
Random
to zwróci liczbę z przedziału [0, 1)

--
Vogel [[email protected]]

Life is just a dream, you know...
[Cowboy Bebop]

0

Ok, to jest już kwestia implementacji.

Nie zajmuję się Pascalem dlatego opisałem ogólne podejście do problemu, jest mi przykro że tego nie zrozumiałeś.

0

Ech...

  1. W temacie: Pascal, wniosek: chodzi o Pascla.
  2. Napisałeś o standardowej funkcji Random, a ona zwraca wyniki z przedziału 0..x-1 a nie 0..x

--
Vogel [[email protected]]

Life is just a dream, you know...
[Cowboy Bebop]

0

Postanowiłem sprawdzić jak to faktycznie jest w Pascalu, poniżej cytuję "Biblię pascala", czyli dwutomowy podręcznik A.Marciniaka Turbo Pascal 7.0, tom 1, str 437:

" Jeśli w wywołaniu funkcji Random [...] podano zakres, to wartością funkcji jest liczba losowa całkowita z przedziału [0,zakres), przy czym dla wartości zakres=0 wartością funkcji jest 0. "

Ciekaw jestem ile jeszcze razy będę musiał udowadniać że poprawną konstrukcją jest:

10+Random(90), dzięki czemu generujemy liczbę z zakresu [10,100) (Jeżeli piszemy w pascalu)

Jeżeli natomiast posłużymy się:
10+Random(91); to otrzymamy liczbę z zakresu [10,101) (czyli np.100.75)

11+Random(90); jest jeszcze gorzej bo otrzymujemy liczbę z zakresu [11,101) czyli tak samo np.100.75, ale w tym wypadku nigdy nie wylosujemy liczby 10.

Powoli tracę frajdę z pisania jakichkolwiek postów.

Zaraz ! faktycznie !
Pascal generuje liczby losowe-[b]całowite[/b], czyli faktycznie zakres [10,101) oznacza w praktyce [10,100].

Sorry

Czyli w przypadku pascala, faktycznie poprawne jest 10+Random(91)
he he

Powtarzam-pisałem w oparciu o założenie, że mamy funkcję Random która spełnia pewne warunki, nie mogłem wiedzieć że w pascalu jest akurat inaczej gdyż piszę w zupełnie innym środowisku.

0

" Jeśli w wywołaniu funkcji Random [...] podano zakres, to wartością funkcji jest liczba losowa całkowita z przedziału [0,zakres), przy czym dla wartości zakres=0 wartością funkcji jest 0.

Ale Random zwraca (gdy podano parametr) liczbę całkowitą!!

11+Random(90)

Za tą pomyłke już przeprosiłem [wstyd]

--
Vogel [[email protected]]

Life is just a dream, you know...
[Cowboy Bebop]

0

ej, nie przestawajcie sie klucic, mi sie podobalo, na filozofi na pewno byscie sobie poradzili :-)

--
Lardux

0

ej, nie przestawajcie sie klucic, mi sie podobalo, na filozofi na pewno byscie sobie poradzili

:) To nie kłótnia, tylko wymiana zdań mająca doprowadzić do obiektywnych i słusznych wniosków. Jeszcze tak [killer] źle nie jest :)

--
Vogel [[email protected]]

Life is just a dream, you know...
[Cowboy Bebop]

0

Ok, to jest już kwestia implementacji.

Nie zajmuję się Pascalem dlatego opisałem ogólne podejście do problemu, jest mi przykro że tego nie zrozumiałeś.

Sorry Kapustka, jestem amatorem i czesto mysle implementacja a nie ogolnie. Dlatego myslalem o Random(i) z Delphi, ktore generuje z zakresu [0, i-1] (mam nadzieje ze uzylem poprawnych nawiasow).

Pozdrawiam i podziwiam za scislosc myslenia,

pq

--
Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

0

Dlatego myslalem o Random(i) z Delphi, ktore generuje z zakresu [0, i-1] (mam nadzieje ze uzylem poprawnych nawiasow).

Nawiasy to będą chyba tak: 'result € <0, i) ^ result € C' :-P

--

Delphi 6

Pozdrówka

0

Ludzie!!!
Przecież w pomocy zarówno do Delphi jak i do TP jest opisane jakie liczby generuje funkcja random:
random - liczby rzeczywiste

0

A z jakiego rozkładu generuje random()?

--
Carl Friedrich Gauss(1777-1855) - Niemiec, książe matematyków

0

A z jakiego rozkładu generuje random()?

W Delphi (nie wiem jak w Pascalu) jest:
RandG - rozkład gausa
RandSeed - zmienna umożliwiająca dopasowanie rozkładu

Oprócz tego istnieje RandomFrom, które umożliwia wylosowanie elementów z danej tablicy liczb lub łańcuchów oraz RandomRange, która generuje liczby losowe z odpowiedniego domkniętego przedziału (czyli to, o co nam chodzi w tym postcie).

--
Jest jeszcze jeden błąd ... :)
--------Oficjalny kanał----------
Service for programmers w IRC:
Kanał: #4programmers
Serwer: warszawa.ircnet.pl
Sieć: POLNet
Port: 6667

0

JOOO ;)
A ja se zrobiłem funkcje z tego;)

np.

function randomrange(od,do:integer):integer;
begin
result:=random(od)+do;
end;

chyba oto ci chodziło?

--
Najpierw wypróbuj wszystkie możliwości potem pytaj;)

0

He he, przeczytałem właśnie post Dryobatesa i powiem szczerze:
WYMIĘKAM :d

Następnie przeczytałem swoje posty i powiem szczerze:
TROCHĘ MNIE PONIOSŁO [niewinnosc]

Naprawdę przepraszam za te pełne pretensji posty, nie wiem co mnie napadło.
Pozdrawiam

0

Naprawdę przepraszam za te pełne pretensji posty, nie wiem co mnie napadło.
Pozdrawiam

:)

--
Vogel [[email protected]]

Life is just a dream, you know...
[Cowboy Bebop]

0

Niektórzy ludzie to mają problemy...

--
Tomkiewicz
[email protected]
www.wolfenstein-best.prv.pl

1 użytkowników online, w tym zalogowanych: 0, gości: 1