Witam serdecznie,
Tworzę pewien program i potrzebuję funkcji, która potrafi wylosować liczby rzeczywiste od - do w pewnym zaokrągleniu.
Np.
Gdy wpiszę przedział od 0.8 do 1.4 aby losował w zaokrągleniu do 0.0 lub 0.00
Losowanie liczby rzeczywistej z zadanego przedziału
Wątek przeniesiony 2014-01-24 18:07 z Delphi i Pascal przez ŁF.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 4
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Tuchów
- Postów: 12317
Gdy wpiszę przedział od 0.8 do 1.4 aby losował w zaokrągleniu do 0.0 lub 0.00
To zdanie nie ma sensu i brzmi tak, jakby wylosowana liczba po zaokrągleniu miała mieć wartość 0.0 lub 0.00; Tobie chodzi o zaokrąglenie do jednego lub dwóch miejsc po przecinku, więc tak trzeba było napisać od razu;
Rozwiązaniem jest wylosowanie liczby całkowitej i podzielenie jej przez odpowiednią potęgę 10; Jeśli potrzebujesz liczby rzeczywistej z przedziału 0.8 do 1.4 z maksymalnie dwoma miejscami po przecinku, to wylosuj liczbę całkowitą z przedziału od 80 do 140 i podziel ją przez 100; Wynik dzielenia będzie się mieścił w zadanym przedziale;
Jeśli potrzebujesz dokładności do jednego miejsca po przecinku, to losuj z przedziału od 8 do 14 i dziel przez 10.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
- Postów: 4191
A może być tak? Funkcję losującą znalazłem jako jeden z kilku pierwszych wyników w google na Experts Exchange czy jak to się tam zwie. Zawsze MUSISZ zanim tutaj napiszesz SZUKAĆ I KOMBINOWAĆ SAMODZIELNIE do BÓLU i dopiero później pisać z konkretami na forum. Poza tym uważam, że temat raczej nadaje się do działu Newbie. Zahacza tematyką o podstawowe zagadnienia.
program googlujemy_i_kombinujemy_zanim_zapytamy;
{$APPTYPE CONSOLE}
function RandomReal(Lo, Hi : Double) : Double;
var
Range, Hold : Double;
begin
if Lo > Hi then
begin
Hold := lo;
Lo := Hi;
Hi := Hold;
end;
Range := Hi - Lo;
RandomReal := Lo + Random * Range;
end;
var
R : Double;
I : integer;
begin
Randomize;
for I := 1 to 20 do
begin
R := RandomReal(0.8, 1.4);
Writeln(R : 0 : 2);
end;
Readln;
end.