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 !
repeat
a := random(100);
until a > 10;
chyba tak
Random(od 10 do 100);
Application.Losowanie;
lol
na pewno "od" "do" takie są komendy
Pozdrowienia
Spróbuj randomrange() (chyba tak to się nazywa...). Jest w module math.
--
Delphi 6
Pozdrówka
[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]
10+Random(90);
jesli przedzial ma obejmowac 10 i 100 , to
10+Random(91);
--
Pawel {Delphi 6 Personal}
Po pierwsze: naciśnij F1
11+Random(90);
--
Vogel [kylix.3.oe@slackware.8.1.0.1]
Life is just a dream, you know...
[Cowboy Bebop]
czyli lol kwadrat :] od do :P [diabel]
[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:
-
funkcja zwróciła najmniejszą możliwą wartość, czyli 0. Podstawiamy do wyrażenia 10+Random(90)=10+0=10.
-
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?
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 [kylix.3.oe@slackware.8.1.0.1]
Life is just a dream, you know...
[Cowboy Bebop]
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?
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 [kylix.3.oe@slackware.8.1.0.1]
Life is just a dream, you know...
[Cowboy Bebop]
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ś.
Ech...
- W temacie: Pascal, wniosek: chodzi o Pascla.
- Napisałeś o standardowej funkcji Random, a ona zwraca wyniki z przedziału 0..x-1 a nie 0..x
--
Vogel [kylix.3.oe@slackware.8.1.0.1]
Life is just a dream, you know...
[Cowboy Bebop]
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.
" 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 [kylix.3.oe@slackware.8.1.0.1]
Life is just a dream, you know...
[Cowboy Bebop]
ej, nie przestawajcie sie klucic, mi sie podobalo, na filozofi na pewno byscie sobie poradzili :-)
--
Lardux
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 [kylix.3.oe@slackware.8.1.0.1]
Life is just a dream, you know...
[Cowboy Bebop]
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
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
Ludzie!!!
Przecież w pomocy zarówno do Delphi jak i do TP jest opisane jakie liczby generuje funkcja random:
random - liczby rzeczywiste
A z jakiego rozkładu generuje random()?
--
Carl Friedrich Gauss(1777-1855) - Niemiec, książe matematyków
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
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;)
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
Naprawdę przepraszam za te pełne pretensji posty, nie wiem co mnie napadło.
Pozdrawiam
:)
--
Vogel [kylix.3.oe@slackware.8.1.0.1]
Life is just a dream, you know...
[Cowboy Bebop]
Niektórzy ludzie to mają problemy...
--
Tomkiewicz
tomkiewicz@2com.pl
www.wolfenstein-best.prv.pl