zolty77 Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 Witam, nakierował by mnie ktoś jak napisać losowanie liczby z przedziału od 0 do 270 , tak żeby losowało co 10 liczbę czyli 0,10,20...270. Pozdrawiam. :rolleyes: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
zolty77 Opublikowano 12 Listopada 2009 Autor Udostępnij Opublikowano 12 Listopada 2009 Za bardzo nie wiem jak to przerobić na delphi :( :mellow: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
zolty77 Opublikowano 12 Listopada 2009 Autor Udostępnij Opublikowano 12 Listopada 2009 Prawidłowo funkcje pisze się tak: function Losuj(min,max: integer): integer; begin randomize; result := Min+Random(Min-Max); end; Ale wynik z tej funkcji wychodzi z kosmosu <_< Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
zolty77 Opublikowano 12 Listopada 2009 Autor Udostępnij Opublikowano 12 Listopada 2009 a racja Max-Min ale to też nie działa prawidłowo, wynik wychodzi taki sam jak bez funkcji :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
zolty77 Opublikowano 12 Listopada 2009 Autor Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
PsichiX Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
zolty77 Opublikowano 12 Listopada 2009 Autor Udostępnij Opublikowano 12 Listopada 2009 Wywala mi błąd ciągle [DCC Error] Unit1.pas(43): E2017 Pointer type required przy tym pierwszym nawiasie (10^Exponent) :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
Will Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 sqr o ile się nie mylę podnosi do kwadratu. Daj po prostu Power(x,y). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
zolty77 Opublikowano 12 Listopada 2009 Autor Udostępnij Opublikowano 12 Listopada 2009 Kombinuje i kombinuje z tym Power i ciągle ten sam błąd [DCC Error] Unit1.pas(43): E2010 Incompatible types: 'Integer' and 'Extended' może wiesz o co chodzi ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
Will Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 Przekazujesz do funkcji zły typ. Jako, że power obsługuje też typy zmiennoprzecinkowe. Użyj typu Extended. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
zolty77 Opublikowano 12 Listopada 2009 Autor Udostępnij Opublikowano 12 Listopada 2009 w Helpie jest taki kod function Power(const Base: Extended; const Exponent: Extended): Extended; overload; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
Will Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
zolty77 Opublikowano 12 Listopada 2009 Autor Udostępnij Opublikowano 12 Listopada 2009 Dla mnie to nie są błahostki, nad delphi siedzę dopiero drugi dzień, a tak poza tym jestem początkujący, na forum jak ktoś mi coś napisze to też się nauczę :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
Will Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 Jeśli delphi nie jest przymusem przerzuć się na C/C++/Java/C#. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
zolty77 Opublikowano 12 Listopada 2009 Autor Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
PsichiX Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
Will Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Listopada 2009 Administratorzy Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
PsichiX Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Listopada 2009 Administratorzy Udostępnij Opublikowano 12 Listopada 2009 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 Więcej opcji udostępniania...
Will Opublikowano 12 Listopada 2009 Udostępnij Opublikowano 12 Listopada 2009 Użycie srand w środku funkcji nie jest dobrym pomysłem. Użyj twojej funkcji 3 razy pod rząd to zobaczysz o co mi chodzi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Listopada 2009 Administratorzy Udostępnij Opublikowano 12 Listopada 2009 Wiem, wiem :P Losuje to samo :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi