jel mi moze neko objasnit naredbu rand hvala
#include<ctime>
using namespace std;
int main()
{
srand(time(NULL)); //POZOVI PRVO FUNKCIJU time() koja generira
//tj.simulira pravu slučajnost
rand ()
//ignoriraj prvi poziv rand() jer daje uvijek isti "broj"
//ili slican(sistemsko vrijeme)
for(int x =0; x<10;x++)
cout<<(rand()%10)<<endl;
system("pause");
return 0;
}
To je ukratko ali funkcionalno za primejer u c++-u.
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a;
for(a=0;a<20;a++)
cout<<rand()<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
/*EVO OVDJE JE POZVANA RAND FUNKCIJA 20 PUTA DA BI
GENERIRALA SLUCAJNI NIZ,NEDOSTATAK JE DA SE UVIJEK GENERIRA
ISTI NIZ ,ZATO SE NA POČTKU STAVLJA SRAND FUNKCIJA */
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a;
srand(2);
for(a=0;a<20;a++)
cout<<rand()<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Bilo bi lijepo da se taj broj u zagradi stalno mijenja i zato stavljamo "naredbu" time(NULL) unutar srand(time(NULL) u
onom prvom primjeru......da bi dobili automatizam izmjene brojeva.
možeš pozvati rand funkciju samo jednom ali mi je pozivamo kroz for petlju onoliko puta koliko želimo..
A na početku je pozivamo samo jednom prvi put prije for petlje zato jer daje slične počrtne brojeve
i zato da bi to izbjegli pozivamo je jednom izvan for petlje iako možemo i bez toga.
Znači srand i rand funkcije u kombinaciji s time(NULL) se koriste za dobivanje slučajnog niza.
Eto ukratko.(% to je operator modulo daje samo one brojeve tj. ostatke nakon dijeljenja s 10)
To znači npr. slučajni broj dobiven s rand() funkcijom je 1000 i ostatak je 0 kad se podijeli s deset i ti dobiješ nulu kao rezultat.
Probaj staviti 5 umjesto deset pa pogledaj ili dva itd.
hvala
a zakaj si stavio 10% kaj to znaci
% je operator koji kao rezultat daje ostatak cijelobrojnog dijeljenja
npr.
5 % 2 = 1
4 % 2 = 0
99 % 10 = 9
za bilo koji x: x % 10 daje posljednju znamenku tog broja (56 6, 24 4)
hvala vam dobro ste objasnili
jel moze neki stavit jos neki primjer kaj se moze sve radit sa random
lol
pa radi što god želiš... random ti daje slučajan broj a što ćeš ti raditi s brojevima je tvoja stvar
Kad budem imao vremena stavim ti neku igricu ,dobro nije ono što sam prvo rekao ali
koristi rand() da bi se igra odvijala,ništa neću objašnjavati jer sama po sebi je jasna :
#include <iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int zavrti();
int main()
{
enum Dogadjaj {NASTAVAK,POBJEDA,GUBITAK};
int bod;
Dogadjaj stat_igre;
srand(static_cast<unsigned>(time(0)));
int zbroj_prvi = zavrti();
switch(zbroj_prvi)
{
case 7: //pobjeda ,7 u prvom krugu
case 11://------.11 u prvom krugu
stat_igre =POBJEDA;
break;
case 2:
case 3:
case 12:
stat_igre = GUBITAK;
break;
default:
stat_igre=NASTAVAK;
bod = zbroj_prvi;
cout<<"Dobio sam : "<<bod<<endl;
break;
}
//-------------------------------------
while(stat_igre ==NASTAVAK)
{
zbroj_prvi = zavrti();
if (zbroj_prvi == bod)
stat_igre = POBJEDA;
else
if(zbroj_prvi ==7)
stat_igre = GUBITAK;
}
if(stat_igre == POBJEDA)
cout<<"Igrac pobjedjuje!"<<endl;
else
cout<<"Igrac gubi!"<<endl;
return 0;
}
int zavrti()
{
int zavrt1 = 1+rand()%6;
int zavrt2 = 1 + rand()%6;
int zbroj = zavrt1 + zavrt2;
cout<<"Igrac je igrao "<<zavrt1<<" + " <<zavrt2<<" = "<<zbroj<<endl;
return zbroj;
}
kaj znaci ova naredba enum
Deklaracija enumeracije.
Enumeracijom stvaraš neku vrstu svog tipa podataka, svakom elementu enumeracije se pridružuje neki broj (c++ može sam, a možeš i ti definirati koja int vrijednost za koji element). Nakon toga koristiš tu riječ iz enumeracije kao da je riječ o int konstanti.
hvala
iako mislim da su ti dobro objasnili, mislim da bi jos samo trebalo dodat ovo.
Znaci, rand() funkcija vraca slucajan broj iz inervala 0 do RAND_MAX koji je najcesce najveci integer, tj. negdje oko 2e9 (ako se ne varam)...
Da bi dobio slucajan broj iz intervala [a,b] mozes koristitovu funkciju:
inline int random (const int &a, const int &b) { return (rand() % (b-a+1)) + a; }
ovaj inline ubrzava pozive funkciji jer kompajler ne poziva tu funkciju neko samo ubaci kompajlani kod na mjesto poziva... (opet, bar mislim... ispravite me ako sam u krivu)
const ti znaci da se vrjednost varijabli a i b nece mjenjat,
& ti znaci prenos varijable po referenci (o tome mozes citat u tutorialima na ovom forumu),
sada.... znaci, rand () baca neki slucajan broj.... ti taj broj prvo svedes na interval [0, a-b] (zato jer zelis interval velik razlici brojeva)...a onda na kraju taj interval translatiras za a i time dobijes [0+a, b-a+a] sta je [a, b]..... najjednostavniji nacin da dobijes broj od 0 do nekog N-a je da ga modas (operator %, ostatak djeljenja) sa N+1... zato je tamo b-a+1....
sada mozes tu funkciju koristiti kao:
int main (void) {
srand (time(NULL));
int N;
scanf ("%d", &N);
//ili mozes koristiti: cin >> N;
for (int i = 0; i < N; i++)
printf ("%5d", random (a, N));
// a mozes koristiti i: cout << random (a, N) << endl;
return 0;
}
Znaci to sada genera N random brojeva
Nadam se da ti ovo daje neki uvod u operacije sa modom i random brojevima...
nije mi se dalo sve čitati, ali primjetio sam dvije stvari:
"najveci integer, tj. negdje oko 4e9 (ako se ne varam)"
Ovo ovisi o broju bitova koji se rezerviraju za pohranu integera, dakle ovisi iskključivo o implementaciji (danas najčešće 4 bajta = 32 bita - bit za predznak = +/- 2e31; ili za unsigned vrijednosti 2e32)
"inline int random (const &a, const &b) { return (rand() % (b-a+1)) + a; }"
Fali tip podataka argumenata funkcije. No, da ih je i bilo (možda sam previdio neki ključni dio), koji je uopće smisao slanja argumenata po referenci? Koliko vidim to ni na koji način ne utjeće na sam kod, pa se dio u zagradama može zamijeniti sa (int a, int b)
Po mom mišljenju ,printf i scanf spadaju u stil c pisanja koda i automatski i pisanje funkcija povlači za sobom
reference jer ih u c-u ima podosta(mislim na stil)...ne na funkcionalnost ili upotrebu. Ali,mislim da smo rand() dobro objasnili kolegi.
Po mom mišljenju ,printf i scanf spadaju u stil c pisanja koda i automatski i pisanje funkcija povlači za sobom
No,to nisam niti zaključio niti sam mislio ali po meni to spada u old style.
cout i cin se lakše koriste a i formatiranje se lakše može i kad želimo i kako želimo napraviti.
cout je objekt toka.
Funkcije printf i scanf su uglavnom vezane s određenom skupinom formata.
I sad dolazi problem,pojavi se novi tip podataka i one ne mogu s njim raditi!
A objekti tipa cin i cout mogu!!!
cin i cout objekti tokova rade sa svim formatima a printf i scanf ne.
Po meni cout i cin i operatori njima pridruženi imaju puno veću korisnost u OOP nego printf i scanf.
Moje mišljenje.I ne govorim o funkcijama da ih nema ili ne ,nisi me razumio o čemu sam htio govoriti.
Nadam se da je sad jasnije na što sam mislio.U biti jednostavno ne volim printf i scanf.
I dalje ne razumijem tvoj post :DD
Ma zaboravi :)
nije mi se dalo sve čitati, ali primjetio sam dvije stvari:
"najveci integer, tj. negdje oko 4e9 (ako se ne varam)"
Ovo ovisi o broju bitova koji se rezerviraju za pohranu integera, dakle ovisi iskključivo o implementaciji (danas najčešće 4 bajta = 32 bita - bit za predznak = +/- 2e31; ili za unsigned vrijednosti 2e32)
"inline int random (const &a, const &b) { return (rand() % (b-a+1)) + a; }"
Fali tip podataka argumenata funkcije. No, da ih je i bilo (možda sam previdio neki ključni dio), koji je uopće smisao slanja argumenata po referenci? Koliko vidim to ni na koji način ne utjeće na sam kod, pa se dio u zagradama može zamijeniti sa (int a, int b)
inline int random (const &a, const &b)
zapravo bilo
inline int random (const int &a, const int &b)
return 6;
}
Po mom mišljenju ,printf i scanf spadaju u stil c pisanja koda i automatski i pisanje funkcija povlači za sobom
reference jer ih u c-u ima podosta(mislim na stil)...ne na funkcionalnost ili upotrebu. Ali,mislim da smo rand() dobro objasnili kolegi.
No,to nisam niti zaključio niti sam mislio ali po meni to spada u old style.
cout i cin se lakše koriste a i formatiranje se lakše može i kad želimo i kako želimo napraviti.
cout je objekt toka.
Funkcije printf i scanf su uglavnom vezane s određenom skupinom formata.
I sad dolazi problem,pojavi se novi tip podataka i one ne mogu s njim raditi!
A objekti tipa cin i cout mogu!!!
cin i cout objekti tokova rade sa svim formatima a printf i scanf ne.
Po meni cout i cin i operatori njima pridruženi imaju puno veću korisnost u OOP nego printf i scanf.
Moje mišljenje.I ne govorim o funkcijama da ih nema ili ne ,nisi me razumio o čemu sam htio govoriti.
Nadam se da je sad jasnije na što sam mislio.U biti jednostavno ne volim printf i scanf.
#include <stdarg.h>
class Kompleksni
{
public:
double re, im;
Kompleksni(){}
Kompleksni(double x, double y) : re(x), im(y){}
};
{
int i;
Kompleksni x;
va_list lista;
va_start(lista, format);
for(i = 0; format[i]!='\0'; i++)
{
if(format[i] == '%')
switch(format[i+1])
{
case 'k' : {
x = va_arg(lista, Kompleksni);
printf("%f + %f", x.re, x.im);
i++;
break;
}
}
else
printf("%s", format[i]);
}
va_end(lista);
}
{
Kompleksni Z(1, 3);
ispis("%k", Z); // %k - novi format za kompleksni broj
return 0;
}
Evo, ovdje imaš funkciju za ispis u kojoj je definiran korisnički format (%k) i on služi za ispis kompleksnog broja. I sad svatko po volji može dodati što god želi: Nove tipove podataka i nove formate po izboru. Sve je moguće. Samo treba znati. U C-u su pisani operacijski sustavi, a kamoli da se ne bi mogao ispisati novi tip podatka, i zato nemoj širiti dezinformacije ukoliko već nisi dovoljno upoznat s programiranjem u ovim jezicima.
I dalje ne razumijem tvoj post :DD
Ma zaboravi :)
jer je malo pa ne vrjedi otvarat novu temu za to.
Zašto neki ljudi pišu
#include(iostream.h)
umjesto
#include (iostream)
jer je malo pa ne vrjedi otvarat novu temu za to.
Zašto neki ljudi pišu
#include(iostream.h)
umjesto
#include (iostream)
Tracer koliko znam C++, za razliku od C-a, ne dopušta "pretpostavljanje" tipova. A za reference - šalju se integeri, imalo bi smisla slati po referenci da je to neki veliki podatak (struktura), ali 4bytea ne mijenjaju puno toga pa je ovo više nepotrebno kompliciranje nego dobitak na efikasnosti.
@Tracer.
...lijepo napisano i naravno samo sam čekao kad češ se pojaviti ,ali više mi to nije niti važno a niti sam
htio objašnjavati preopterećenje operatora i detaljno objašnjenje što se koristi u c++ a što u c-u i što je bolje ili nije.
Neka svatko piše kako hoće i što hoće,a što se tiče tuta,pa napiši svoj ili preuredi ovaj na Bug forumu kako hočeš jer
vidim da se smatarš jedinim relevantnim za c i c++ ,a ja lijepo govorim u postovima da je to moje mišljenje ne dirajući se u
druga s visoka .Nisam niti ću ikada biti bahat i druge omalovažavati ,a koliko vidim jedino se slažeš s onima koji
te hvale ili pitaju za savjet i naravno svi griješe osim tebe .Lijepi pozdrav s ove teme pa piši.
racer koliko znam C++, za razliku od C-a, ne dopušta "pretpostavljanje" tipova. A za reference - šalju se integeri, imalo bi smisla slati po referenci da je to neki veliki podatak (struktura), ali 4bytea ne mijenjaju puno toga pa je ovo više nepotrebno kompliciranje nego dobitak na efikasnosti.
@Tracer.
...lijepo napisano i naravno samo sam čekao kad češ se pojaviti ,ali više mi to nije niti važno a niti sam
htio objašnjavati preopterećenje operatora i detaljno objašnjenje što se koristi u c++ a što u c-u i što je bolje ili nije.
Neka svatko piše kako hoće i što hoće,a što se tiče tuta,pa napiši svoj ili preuredi ovaj na Bug forumu kako hočeš jer
vidim da se smatarš jedinim relevantnim za c i c++ ,a ja lijepo govorim u postovima da je to moje mišljenje ne dirajući se u
druga s visoka .Nisam niti ću ikada biti bahat i druge omalovažavati ,a koliko vidim jedino se slažeš s onima koji
te hvale ili pitaju za savjet i naravno svi griješe osim tebe .Lijepi pozdrav s ove teme pa piši.
Ne, mislim da je baš tako po standardu.. evo sad sam probao, mingw ne prevodi ovaj primjer gore za random brojeve. Ali bolje je tako, uvijek znaš o kojem se tipu radi..
nije mi se dalo sve čitati, ali primjetio sam dvije stvari:
"najveci integer, tj. negdje oko 4e9 (ako se ne varam)"
Ovo ovisi o broju bitova koji se rezerviraju za pohranu integera, dakle ovisi iskključivo o implementaciji (danas najčešće 4 bajta = 32 bita - bit za predznak = +/- 2e31; ili za unsigned vrijednosti 2e32)
"inline int random (const &a, const &b) { return (rand() % (b-a+1)) + a; }"
Fali tip podataka argumenata funkcije. No, da ih je i bilo (možda sam previdio neki ključni dio), koji je uopće smisao slanja argumenata po referenci? Koliko vidim to ni na koji način ne utjeće na sam kod, pa se dio u zagradama može zamijeniti sa (int a, int b)
da, zaboravih tip podataka napisat...
ali u skoro svim kompajlerima (za C++, ne C) sa kojima sam radio, int = long int = 2^31 ~ 2e9, ali imas pravo da ovisi o kompajleru
imam naviku ono sta se nece mjenjat navesti kao const, i prenositi argumente po referenci kada je god moguce jer je brze (ovisi o tipu podataka, jer se vrjednosti kopiraju kada se ne predose po referecni), i trosi manje stack-a (ali to je bitno samo kod rekruzivnih poziva).... ali za ovakav banalan prijmer uopce nije bilo potrebno, slazem se....
hvala na ispravcima...
Po mom mišljenju ,printf i scanf spadaju u stil c pisanja koda i automatski i pisanje funkcija povlači za sobom
reference jer ih u c-u ima podosta(mislim na stil)...ne na funkcionalnost ili upotrebu. Ali,mislim da smo rand() dobro objasnili kolegi.
No,to nisam niti zaključio niti sam mislio ali po meni to spada u old style.
cout i cin se lakše koriste a i formatiranje se lakše može i kad želimo i kako želimo napraviti.
cout je objekt toka.
Funkcije printf i scanf su uglavnom vezane s određenom skupinom formata.
I sad dolazi problem,pojavi se novi tip podataka i one ne mogu s njim raditi!
A objekti tipa cin i cout mogu!!!
cin i cout objekti tokova rade sa svim formatima a printf i scanf ne.
Po meni cout i cin i operatori njima pridruženi imaju puno veću korisnost u OOP nego printf i scanf.
Moje mišljenje.I ne govorim o funkcijama da ih nema ili ne ,nisi me razumio o čemu sam htio govoriti.
Nadam se da je sad jasnije na što sam mislio.U biti jednostavno ne volim printf i scanf.
Uostalom, sta ti je jednostavnije napisat (ili barem, sta je brze za napisat i barem 100 puta preglednije):
ili:
printf ("Osoba %s [%d] je visoka %f centimetara. \n", x[i].ime, i, x[i].visina);
ili mozes napravit konstruktor kopije za string (ako ti ne treba... a ako ti treba, samo koristi neku funkcijski clan)...
char * something::print (const int &i) {
char *x = new char[500];
sprintf (x, "Osoba %s [%d] je visoka %f centimetara. \n", x[i].ime, i, x[i].visina);
return x;
}
i onda mozes printf ("Bla bla bla %s %s\n", x.print (i), x.print(i+2%3/6));
...mah ...vidim da me nije nitko razumio i na nikoga se ne odnosi ,htjedoh nakon svega reći da ja preferiram cin,cout.....
a printf i scanf ne volim previše ....u tome je stvar ...a ne sad u objašnjenja tko kako piše ,neka svatko piše kako želi.
Bez njih mogu i ne trebaju mi.Uopće mi je žao što spomenuh bilo što o tim funkcijama i načinima ispisa jer se to samo pretvori
u raspravu koja nigdje ne vodi.A naslov posta je random().Stoga se ispričavam autoru na of topicu.