Skocz do zawartości

Zablokowane Random


zolty77

Rekomendowane odpowiedzi

int losuj(int min,int max)
{
return(min+rand()%(max-min));
};

int liczba=losuj(10.270)

 

EDIT: Sorry, nie doczytalem ze to delphi, a nie c++ ;P ale idea jest ta sama :)

Odnośnik do komentarza
Udostępnij na innych stronach

function Losuj(Min: Integer, Max: Integer): Integer;
begin
Randomize;
result:=Min+Random(Max-Min);
end;

var Liczba: Integer;
Liczba:=Losuj(10,270);

 

chyba tak to bedzie wygladac. nie programuje w delphi ale zajrzalem na szybki kursik i cos takiego powinno raczej dzialac ;p

Odnośnik do komentarza
Udostępnij na innych stronach

hmm, a te liczby "z kosmosu" w jakim srednio zakresie sie mieszcza?

 

result := Min+Random(Min-Max);

raczej Max-Min

Odnośnik do komentarza
Udostępnij na innych stronach

hmm, ale jakie najmniejsze i najwieksze wartosci wynikowe odnotowales? Bo z tego co patrzylem to Random(liczba) zwraca wartosc od 0 do wartosci argumentu "liczba".

 

EDIT: tutaj masz cos o randomie: http://4programmers.net/Delphi/Random

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem czy mnie dobrze zrozumiałeś, Funkcja zwraca liczbę z zakresu takiego jaki tam wpisze a mi chodzi o to żeby Losowało liczby od 0 do 270 tylko żeby liczby były losowane co dziesiątą 0,10,20,30,40 aż do 270.

 

POŁĄCZONO:

 

Ja się w google dzisiaj naszukałem , byłem już na tej stronce ale na niej nie ma tego o co mi chodzi

Odnośnik do komentarza
Udostępnij na innych stronach

aah o to chodzi :D

 

function Losuj(Min,Max,Exponent=0: integer): integer;
     begin
     randomize;
     result := ((Min+Random(Max-Min))/(10^Exponent))*(10^Exponent); // pierw losuje wartosc z danego zakresu, potem dzieli to przez 10 do potegi podanej jako Exponent (tutaj rowne 1, czyli 10^1=10) co powoduje zaokraglenie wartosci (45/10=4 jako integer) i mnozone jeszcze raz przez tamto (dajac 4*10=40)
     end;

var Liczba: integer;
Liczba:=Losuj(10,270,1); // losuj liczbe z przedzialu od 10 do 270 zaokraglajac wynik co 10 (10 do potegi 1 (argument Exponent=1))

 

EDIT: poprawione drugi raz ;p

Odnośnik do komentarza
Udostępnij na innych stronach

to zamiast 10^Exponent daj: sqr(10,Exponent) (czy jaki tam jest w delphi odpowiednik potegowania) :)

Odnośnik do komentarza
Udostępnij na innych stronach

Extended? hmm, a zapodaj prosze zrodlo tego co dotychczas wykombinowales, poszukamy i cos wykombinujemy jak naprawic :)

 

EDIT: tu pomoze rzutowanie integer na extended. poszukalem nieco i wychodzi na to ze wyglada to tak: extended(liczbainteger)

 

function Losuj(Min,Max,Exponent=0: integer): integer;
     begin
     randomize;
     result := ((Min+Random(Max-Min))/(Integer(IntPower(Extended(10),Exponent)))*(IntPower(Extended(10),Exponent)));
     end;

var Liczba: integer;
Liczba:=Losuj(10,270,1);

Odnośnik do komentarza
Udostępnij na innych stronach

dobra, sprawdz to:

function Losuj(Min,Max,Exponent=0: integer): integer;
     begin
     randomize;
     result := ((Min+Random(Max-Min))/(Integer(IntPower(Extended(10),Exponent)))*(IntPower(Extended(10),Exponent)));
     end;

var Liczba: integer;
Liczba:=Losuj(10,270,1);

jak nie zadziala to zrob tak jak Will poradzil

Odnośnik do komentarza
Udostępnij na innych stronach

w Helpie jest taki kod

 

Ale co w związku z tym 0o? Przecież już podałem jego deklaracje.

Przekaż sobie do funkcji typ extended a potem jak już chcesz ten integer użyj Round() czy Floor().

Lepiej by było dla Ciebie jakbyś siedział nad tym 2 dni i wymyślił 100 sposobów na niepoprawne działanie niż pytać o takie błahostki na forum.

Odnośnik do komentarza
Udostępnij na innych stronach

pytanie z mojej strony: delphi wybrales z wlasnej woli (bo sie podoba(?)) czy raczej z koniecznosci/przymusu (na przyklad w szkole wymagaja) ?

Odnośnik do komentarza
Udostępnij na innych stronach

Jestem samoukiem i wszystkiego próbuje po kolii, delphi o wiele łatwiejsze mi się wydaje od C++

 

Zrobiłem to tak:

function Losuj(Min,Max,Exponent: integer): Extended;
     begin
     randomize;
     result := (Min+Random(Max-Min))/(Power(10,Exponent))*(Power(10,Exponent));
     end;

 

funkcja działa ale zwraca wynik nie zaokrąglony :(

Odnośnik do komentarza
Udostępnij na innych stronach

w takim razie nie Power a IntPower i wtedy Exponent musi byc typu Integer, no i wynik tego do floor wrzucasz.

 

Swoją drogą:

delphi o wiele łatwiejsze mi się wydaje od C++

właśnie widzisz jak łatwo. w c++ dla mnie idzie szybciej bez babrania się to zrobić

Odnośnik do komentarza
Udostępnij na innych stronach

Człowieku napisałem Ci przecież użyj Round ;D. To pobaw się javą czy c# są bardzo proste.

function Losuj(Min,Max,Exponent: integer): integer;
     begin
     randomize;
     result :=Round( (Min+Random(Max-Min))/(Power(10,Exponent))*(Power(10,Exponent)) );
     end;

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

C++ jest lepsze, piszę w Delphi czasem i naprawdę to jest kiepski język (ot chociażby begin i end zamiast { }, konieczność pisania then, słowo result które nie działa jak return i owszem, zwraca wartość, ale nie przerywa działania funkcji, trzeba pisać naprawdę sporo niepotrzebnego kodu, do tego nadawanie wartości poprzez :=, zamiast =, a przyrównywanie poprzez = zamiast ==, problemy z logicznym AND dla ifów (trzeba dać w nawiasie, albo są problemy) i setki takich pierdół, które na dłuższą metę są denerwujące, jak się zna chociaż jeden inny język).

 

Ten kod w C:

 

#include <time.h> // zapomniales

int losuj(int zakres)
{
zakres /= 10;
srand(time(NULL));
return (rand()%++zakres) * 10; // jednak preinkrementacja musi byc aby wylosowal z pelnego zakresu, sorki gnysku;p
}

 

i dla np. losuj (270) losuje nam jedną z liczb: 0,10,20,30,...,260,270.

 

zes na szybko pisal ;p

ΨΧΞ

Odnośnik do komentarza
Udostępnij na innych stronach

dodaj do tego koniecznosc deklarowania zmiennych/obiektow (za pomoca var) przed cialem funkcji/procedury/programu, czyli za wczasu tworzysz zmienne nawet gdy ich nie potrzebujesz, gdzie w c++ masz mozliwosc deklaracji ich w ciele (no poza switch).

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Z tego co pamiętam rand()%28 losuje z zakresu 0- 27 (tak działa modulo), dla tego upieram się przy ++zakres lub zakres+1.

 

A ze zmiennymi to racja, nie mówia o tym, że musisz pisać integer zamiast int :P

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...