Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Objašnjenje koda

[es] :: C/C++ programiranje :: C/C++ za početnike :: Objašnjenje koda

[ Pregleda: 3315 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

grabber
Gorazde

Član broj: 213110
Poruke: 172
92.36.161.*



Profil

icon Objašnjenje koda09.01.2010. u 23:03 - pre 173 meseci
Code:
int main()
{
        unsigned char a=7, b=152, c, d=131;
    c+=++b/--a;
    c=b+d;
    b=++b-(--a)*((d--)/28);
    a*=a|(d>>1);
    d=b^1<<3;
}


može li mi neko molim vas objasniti liniju po liniju ovoga koda šta i zbog čega radi? nadam se da nije problem onima koji znaju C...

hvala unaprijed
 
Odgovor na temu

abitbp6

Član broj: 221384
Poruke: 216
*.ptt.rs.



+17 Profil

icon Re: Objašnjenje koda09.01.2010. u 23:19 - pre 173 meseci
Ovo je verovatno vežba iz oblasti operatora i namenjena je da proveri da li razumeš kojim redosledom se operacije izvršavaju. Dati kod je ekvivalentan sledećem:
Code:

int main()
{
    unsigned char a = 7, b = 152, c, d = 131;
    c = c + ((b + 1)/(a - 1));
    c = b + d;
    b = (b + 1) - (a - 1) * (d / 28); d + d - 1;
    a = a * (a | (d / 2));
    d = b ^ 8;
}
 
Odgovor na temu

grabber
Gorazde

Član broj: 213110
Poruke: 172
92.36.161.*



Profil

icon Re: Objašnjenje koda09.01.2010. u 23:26 - pre 173 meseci
ok, hvala drug...

je li može još samo objašnjenje za sljedeće operatore: ^, | i << (tj >>)... ili link gdje mogu pročitati jasna objašnjenja
 
Odgovor na temu

Picsel
Beograd

Član broj: 39817
Poruke: 440
95.180.74.*



+7 Profil

icon Re: Objašnjenje koda10.01.2010. u 10:29 - pre 173 meseci
http://en.wikipedia.org/wiki/Bitwise_operation

| je bitwise OR, ^ je bitwise XOR, a >> i << su aritmeticka shiftovanja u desno, odnosno u levo.
 
Odgovor na temu

grabber
Gorazde

Član broj: 213110
Poruke: 172
92.36.176.*



Profil

icon Re: Objašnjenje koda10.01.2010. u 12:32 - pre 173 meseci
hvala, čitao sam malo, ali mi je opet nejasno, koje rezultate bi trebala izbaciti zadnja dva reda u kodu kojeg sam naveo :?
 
Odgovor na temu

Picsel
Beograd

Član broj: 39817
Poruke: 440
95.180.74.*



+7 Profil

icon Re: Objašnjenje koda10.01.2010. u 16:43 - pre 173 meseci
Mrzi me da gledam sta su ti a, b i d u tom trenutku.
U svakom slucaju, da bi shvatio te operatore, moras da razumes binarni zapis brojeva.
Za primer, broj 12 i broj 10.
Broj 12 binarno zapisan je 00001100 (8 bitova jer je char).
Broj 10 binarno zapisan je 00001010 (8 bitova jer je char).

12<<1 znaci da binaran zapis pomeras ulevo za jedno mesto, odnosno on postaje 00011000 (to je broj 24).
12>>2 znaci da binaran zapis pomeras udesno za dva mesta, odnosno dobijas 00000011 (to je broj 3).

| je bitovno OR, sto znaci da se porede bitovi iste pozicije i u zavisnosti od vrednosti bitova, dobija se 0 i 1 kao rezultat na tom mestu. Za OR vazi da ako je bilo koji od bitova 1, onda ce rezultat biti 1, a ako su oba 0, onda je rezultat 0.
Za 12 i 10 to je
00001100
00001010
---------
00001110

(Prvo se porede bitovi oba broja na prvoj poziciji, pa na drugoj itd.) 00001110 je broj 14.

Sto se tice ^, sve se radi kao i kod |, jedino sto se drugacije dobijaju rezultati, odnosno ako se bitovi razlikuju, onda je resenje 1, ako su isti (0 i 0, ili 1 i 1), onda je 0.
Za 12 i 10 to je
00001100
00001010
---------
00000110

Odnosno broj 6.

Znaci 12|10 = 14
12^10=6
Sad samo to primeni na kojim god vrednostima trebas...

 
Odgovor na temu

mulaz
Ljubljana

Član broj: 47602
Poruke: 2239
*.dial-up.dsl.siol.net.

Jabber: mulaz@elitesecurity.org
Sajt: www.mulaz.org


+184 Profil

icon Re: Objašnjenje koda10.01.2010. u 17:30 - pre 173 meseci
Citat:
abitbp6: Ovo je verovatno vežba iz oblasti operatora i namenjena je da proveri da li razumeš kojim redosledom se operacije izvršavaju. Dati kod je ekvivalentan sledećem:
Code:

int main()
{
    unsigned char a = 7, b = 152, c, d = 131;
    c = c + ((b + 1)/(a - 1));
    c = b + d;
    b = (b + 1) - (a - 1) * (d / 28); d + d - 1;
    a = a * (a | (d / 2));
    d = b ^ 8;
}


Nije!!

zaboravio si da si i promenjive menjaju
Ako imas:
a=5;
x=10-(--a);
"x" je naravno 6, a i "a" je sada 4.

razlika izmedju "--a" i "a++", je da prvi prvo smanji "a" za 1, i onda upotrebi u racunu, a drugi da upotrebi sadasji "a" u racunu, i tek posle uvecava ga za 1.

[Ovu poruku je menjao mulaz dana 10.01.2010. u 18:41 GMT+1]
Bolje ispasti glup nego iz aviona
http://www.mulaz.org/
 
Odgovor na temu

vdes

Član broj: 248245
Poruke: 3
*.paleol.net.



Profil

icon Re: Objašnjenje koda23.01.2010. u 01:19 - pre 172 meseci
Pozdrav svima nova sam na sajtu i apsolutni pocetnik u programiranju pa ako nekome nije problem da mi objasni sta rade ove for petlje jer bas nista ne razumijem.Unaprijed hvala


[Ovu poruku je menjao vdes dana 24.01.2010. u 13:52 GMT+1]
 
Odgovor na temu

Picsel
Beograd

Član broj: 39817
Poruke: 440
95.180.74.*



+7 Profil

icon Re: Objašnjenje koda23.01.2010. u 09:27 - pre 172 meseci
Code:
for(i=1;i<=999;i++)
niz[i]=i+1;


Puni niz sa brojevima od 2 do 1000.

Code:
     for(i=1;i<=999;i++)
     {
      if(niz[i]!=0)
     {
      for(j=(i+1);j<=999;j++)
     {
      if(niz[j]!=0)
     {
      if((niz[j]%niz[i])==0)
        niz[j]=0;

     }}}}


Prolazi kroz ceo niz i za svaki clan sa indeksom i koji je razlicit od 0, prolazi kroz ostale clanove niza koji su veci od njega i za sve te clanove (indeks j) koji su razliciti od 0, proverava da li su deljivi sa clanom sa indeksom i, i ukoliko jesu, "brise" ih tako sto na njihovo mesto stavlja 0.

Na kraju ispisuje sve te brojeve koji su razliciti od 0.

A sta je to zapravo, pa, Eratostenovo sito. To jest, ovaj tvoj program odredjuje sve proste brojeve od 2 do 1000, a menjanjem vrednosti clana niza na 0 oznacava da je broj u nizu precrtan.
 
Odgovor na temu

vdes

Član broj: 248245
Poruke: 3
*.paleol.net.



Profil

icon Re: Objašnjenje koda23.01.2010. u 13:18 - pre 172 meseci
Hvala puno na odgovoru.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Objašnjenje koda

[ Pregleda: 3315 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.