zmiana na losowe
-
- Użytkownik
- Posty: 21
- Rejestracja: 18 lis 2007, o 11:27
- Płeć: Kobieta
- Lokalizacja: Warszawa
- Podziękował: 1 raz
zmiana na losowe
mam wielka prośbę.
mógłby ktoś wprowadzić takie zmiany do tego programu aby losował on sam np 20 liczb a nie prosił o ich wpisanie.
Z góry dziękuję
#include
#include
using namespace std;
void inicjuj(int *A, int n)
{
for ( int i=0; i
mógłby ktoś wprowadzić takie zmiany do tego programu aby losował on sam np 20 liczb a nie prosił o ich wpisanie.
Z góry dziękuję
#include
#include
using namespace std;
void inicjuj(int *A, int n)
{
for ( int i=0; i
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
zmiana na losowe
Kod: Zaznacz cały
void inicjuj(int *A, int n, int min, int max)
{
srand(time(0));
for ( int i=0; i<n; i++)
{
A[i]=(int)(rand()/(RAND_MAX+1.0)*(max+abs(min)))+min;
//lub prościej, ale nieco gorzej A[i]=rand()%(abs(min)+max)+min;
}
}
Nie zapomnij też o pobraniu zakresu losowania do dwóch intów i wywołaniu funkcji inicjuj(A,n,min,max). Pozdrawiam
-
- Użytkownik
- Posty: 311
- Rejestracja: 15 mar 2007, o 16:52
- Płeć: Mężczyzna
- Lokalizacja: Lublin
- Podziękował: 28 razy
- Pomógł: 54 razy
zmiana na losowe
Jeśli ma to być w C++ a tak sądzę po to powinno być ctime i cmath (choć to tutaj nie potrzebne) to takie szczegóły
Lub jeszcze prościej:
i przed użyciem dodaj:
Kod: Zaznacz cały
#include <iostream>
kadiii pisze: A=(int)(rand()/(RAND_MAX+1.0)*(max+abs(min)))+min;
//lub prościej, ale nieco gorzej A=rand()%(abs(min)+max)+min;
Lub jeszcze prościej:
Kod: Zaznacz cały
// Losuje liczbę z przedziału od nMin do nMax
inline int random(int nMin, int nMax)
{
return rand() % (nMax - nMin + 1) + nMin;
}
Kod: Zaznacz cały
srand(static_cast<unsigned int>(time(NULL)));
Nie wiem co ta nazwa funkcji ma do tego co ona robi to powinno się nazywać przypiszkadiii pisze:inicjuj
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
zmiana na losowe
O widzę, że w każdym temacie próbujesz podać swoje "lepsze rozwiązania". Co do Inicjacji i inicjalizacji - po pierwsze to nie ja pierwszy nazwałem tak tę funkcję(zobacz pierwszy post), po drugie tych słów używa się czasem zamiennie - nawet w linku, który podałeś Ten sosób korzysta ze skalowania. Ma on tą przewagę, że w windowsie jeżeli użyjesz
to jeżeli nMax-nMin będzie większe od 32tys. z "groszami" to wyniki będą już niepoprawne.bo RAND_MAX ma w tym systemie właśnie taką wartość-ok32tys. Ogólnie to standardowe funkcje losujące są czasem mocno nieużyteczne- jak chcemy tylko wypełnić tablicę to starczają, ale jak ma to jakiś wymiar powiedzmy symulacyjny warto napisać własną funkcję losującą. Pozdrawiam
(to właśnie to znaczenie.2. �zapoczątkowanie lub rozpoczęcie się czegoś�
Kod: Zaznacz cały
A[i]=(int)(rand()/(RAND_MAX+1.0)*(max-min)+min;
Kod: Zaznacz cały
return rand() % (nMax - nMin + 1) + nMin;
-
- Użytkownik
- Posty: 311
- Rejestracja: 15 mar 2007, o 16:52
- Płeć: Mężczyzna
- Lokalizacja: Lublin
- Podziękował: 28 razy
- Pomógł: 54 razy
zmiana na losowe
Wartość RAND_MAX jest zależna ale minimalnie wynosi 32767 i w tym wypadku był to najlepsze i najszybsze rozwiązanie
Inicjalizacja to nadanie wartości początkowej, a w tym przypadku przypisujesz wartość, a nie nadajesz wartość początkową. Więc to nie jest to znaczenie.kadiii pisze:(to właśnie to znaczenie.
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
zmiana na losowe
Minimalna i dla Windowsa maksymalna, czyli jeśli byśmy chceli losować właśnie takie liczby to już mówiłem, że byłaby lipa a w końcu w zadaniu nie było podane jakie liczby mamy losować, więc czemu mamy ograniczać. Ale to chyba znowu drobnostka, której nie warto się czepiać. Ba, o jakiej szybkości my mówimy przy losowaniu 20 liczb . Co do słowa innicjalizacji(czy inicjacji) - przecież to właśnie robi funkcja, nadaje wartości pustej(często wyzerowanej) tablicy. Zgoda, że wywołanie tej funkcji ponownie na tej tablicy byłoby już przypisaniem. Jednakże z treści zadania jak i z użycia funkcji w programie jednoznacznie wynika, że chodzi nam właśnie o inicjalizaję.Wartość RAND_MAX jest zależne ale minimalnie wynosi 32767 i w tym wypadku był to najlepsze i najszybsze rozwiązanie
Nazwa funkcji inicjuj(czy inicjalizuj) jest jak najbardziej jasna, czytelna i adekwatna do jej użycia(zaproponowana przez ciebie nazwa przypisz byłaby raczej nieczytelna).
-
- Użytkownik
- Posty: 311
- Rejestracja: 15 mar 2007, o 16:52
- Płeć: Mężczyzna
- Lokalizacja: Lublin
- Podziękował: 28 razy
- Pomógł: 54 razy
zmiana na losowe
Inicjalizacja jest to nadanie wartości obiektowi w momencie jego tworzenia, a w tym przypadku tablicę mamy już stworzoną.
Ta funkcja przypisuje wartości do istniejących już elementów tablicy. Więc nazwa nie jest adekwatna do jej użyciakadiii pisze:przecież to właśnie robi funkcja
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
zmiana na losowe
Nie zgodzę się bo chociaż z formalnego punktu widzenia nie wykonujesz inicjalizacji w kodzie to jednak na płaszczyźnie algorytmu takowej dokonujesz. Zauważ, że chcemy mieć na wstępie ciąg losowy w tablicy czyli funkcja tworzy ciag losowy(inicjuje ciąg losowy). To, że w kodzie tak naprawdę jest to przypisanie nie ma żadnego znaczenia. To kwestia wyczucia nazywania funkcji zgodnie z ich użyciem. Inicjalizacja występuje na płaszczyźnie algorytmu czyli właśnie na tej, na której odbiera się strukturę programu.
-
- Użytkownik
- Posty: 311
- Rejestracja: 15 mar 2007, o 16:52
- Płeć: Mężczyzna
- Lokalizacja: Lublin
- Podziękował: 28 razy
- Pomógł: 54 razy
zmiana na losowe
Inicjalizacja:
int a = 6;
Przypisanie:
a = 7;
Tak jest między nimi różnica, a w tym przypadku widać, że funkcja nic nie inicjalizuje.
Ciekawe mamy tematy do kłótni, jak nazywanie funkcji
int a = 6;
Przypisanie:
a = 7;
Tak jest między nimi różnica, a w tym przypadku widać, że funkcja nic nie inicjalizuje.
Ciekawe mamy tematy do kłótni, jak nazywanie funkcji
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
zmiana na losowe
Jak mówi tytuł programu pana Pospieszalskiego "Warto rozmawiać"- może kłócić się też jest czasem warto, w końcu to też wymiana myśli . Co do tej inicjalizacji to tak jak pisałem na poziomie algorytmicznym inicjalizujesz. Może ciężko sobie to wyobrazić bo to mniej zunifikowana płaszczyzna. Ale spróbuj zrozumieć. Jak masz na wstępie jakiś element z wartością początkową( w tym wypadku ciąg losowy) to w programie inicjalizujesz(mówiąć kolokwialnie wypełniasz) tę tablicę. I nie ma znaczenia jak definiujesz inicjalizację w informatyce. Dla przykładu: funkcję, która byłaby taka:
int NAZWA(int x)
{
return x
int NAZWA(int x)
{
return x