Niste prijavljeni

Dragi posjetioče, Dobrodošli na Otvoreni Forum - Novi Pazar. Ukoliko je ovo Vaša prva posjeta molimo vas pročitajte Pomoć. U pomoći je objašnjeno kako ovaj forum radi. Morate biti registrirani kako bi vidjeli sve teme i sve forume. Molimo vas da se registrirate ili da ovdje pročitate kako se registrirati. Ukoliko ste već registrirani molimo ulogirajte se ovdje.

@ngi3

Zlatna sredina

(10)

  • »@ngi3« je žensko

Postovi: 453

Datum registracije: 29.07.2003

  • Poruku poslati

41

Utorak, 09. Mart 2004

E ljudi puno puno vam hvala!!!!!

Admine skontala sam zadatak... bar ono u globalu. Hvala ti!

@Tulumba4All slab sam ti ja programer. Nesto nisam dobra sa logikom programiranja, tako da nisam skontala ovo sto si napiso :O . Al' kad imam spreman zadatak k'o ovo sto je poslo Admin ja onda sednem prostudiram ga i skontam kako on radi. Al umem i sama da pisem one malo lakse probleme ;)

@fingersbroken trenutno ne radim C. Ali posto sam u prvog semestru(druga godina) pala C moracu u junu da izlazim na polaganje. Nisam kampanjac pa nebi bilo lose dami posaljes te stvari od tvojih zadaca a mozda i same zadace 8)
Naucila sam...
Najlaksi nacin da kao osoba rastem jest da se
okruzim ljudima koji su pametniji od mene

Administrator

Urednik foruma

(121)

  • »Administrator« je muško

Postovi: 2.598

Datum registracije: 21.07.2002

Lokacija: Frankfurt

  • Poruku poslati

42

Utorak, 09. Mart 2004

Citirano

Orginalno od Tulumba4All
moze i ovako za isPalindrom(String recenica) :

public static boolean isPalindrom(String recenica)

{

if (recenica==null) return false;
return recenica.equalsIgnoreCase(reverse(recenica));

}

pod uslovom da vec postoji metoda reverse iz tacke b)


Tulumba4All u pravu si ;), ceo code je mogao da bude sigurno 3 puta kraci i mnogo bolje optimizovan ali sam se bojao da @ngi3 nece razumeti nista od toga. Polazeci od toga da je to skolski zadatak i da je @ngi3 pocetnik (ne znam koje predznanje ima), pisao sam tako da joj je lakse da razume princip.
Sve je ovo samo igra! Nema tog foruma koji je vrijedan Vasih zivaca! / Dokoni umovi - Sejtanska igralista

Tulumba4All

Profesionalac

(10)

  • »Tulumba4All« je muško
  • »Tulumba4All« je autor ove teme

Postovi: 700

Datum registracije: 04.09.2002

Lokacija: UK

  • Poruku poslati

43

Utorak, 09. Mart 2004

A sad pitanje za napredne programere:
Zasto je brze
for (int i=0; i<10; ++i);
od
for (int i=0; i<10; i++); ?
... And Tulumba for all
[SIZE=1]If you can't convince them, confuse them.

A fanatic is one who can't change his mind and won't change the subject

[/SIZE]

Administrator

Urednik foruma

(121)

  • »Administrator« je muško

Postovi: 2.598

Datum registracije: 21.07.2002

Lokacija: Frankfurt

  • Poruku poslati

44

Utorak, 09. Mart 2004

Zato sto se prva petlja pre zavrsi od ove druge :D

Promenljiva 'i' brze dostize vrednost 10 u prvoj petlji nego u drugoj.
Sve je ovo samo igra! Nema tog foruma koji je vrijedan Vasih zivaca! / Dokoni umovi - Sejtanska igralista

45

Utorak, 09. Mart 2004

@ Tulumba4All :
Daleko sam od naprednog programera al mislim da je ovo prvo brze jer se u njemu ++i poveceva pre zavrsetka "petlje" (procdure) a u drugom tek nakon . Dakle ovo prvo je brze za tacno jedan krug :D

Dopuna : Admine ne vazi se ! ti ugrabi prvi da posaljes odgovor, ja se zapricah ovamo :O
"Ti sa svakim lijepo! I trazi da se dobra djela cine, a neznalica se kloni!" (El-'Araf, 199)

Tulumba4All

Profesionalac

(10)

  • »Tulumba4All« je muško
  • »Tulumba4All« je autor ove teme

Postovi: 700

Datum registracije: 04.09.2002

Lokacija: UK

  • Poruku poslati

46

Utorak, 09. Mart 2004

Citirano

Orginalno od Administrator
Zato sto se prva petlja pre zavrsi od ove druge :D

Promenljiva 'i' brze dostize vrednost 10 u prvoj petlji nego u drugoj.


Nazalost nije tacno ...
Obe petlje se izvrsavaju 10 puta.
Probajte, ako ne verujete ...
Ipak nije tako jednostavno ;) ...
... And Tulumba for all
[SIZE=1]If you can't convince them, confuse them.

A fanatic is one who can't change his mind and won't change the subject

[/SIZE]

sans

Majstor

(31)

  • »sans« je muško

Postovi: 2.733

Datum registracije: 29.07.2002

Lokacija: Svemir/zemlja/Evropa/SCG/New Pazar

  • Poruku poslati

47

Utorak, 09. Mart 2004

Što nažalost?? Baš je ovako interesantnije :D
Ako nemaš iskustva-prevariće te , a ako imaš - onda već jesu , onda već jesu , onda već jesu... ;)

i ... bode mi oči

... al lahko je tebi kad imas olovku sa gumicom

Giovanni

Profesionalac

(10)

  • »Giovanni« je muško

Postovi: 772

Datum registracije: 13.09.2002

Lokacija: Canada

  • Poruku poslati

48

Utorak, 09. Mart 2004

Citirano

Orginalno od Tulumba4All
A sad pitanje za napredne programere:
Zasto je brze
for (int i=0; i<10; ++i);
od
for (int i=0; i<10; i++); ?



Moj jaro bi rekao na ovakve smicalice "Get a life man", no nije da ja sad nesto aludiram, cisto 'nako...


Meni se cini da kod i++ inkrementiranja se prvo napravi a zatim i vrati kopija inkrementirane vrijednosti a ondak se ista dekrementira i kao takva se koristi u toj iteraciji dok kod ++i ovo nije slucaj, pa otud i brza egzekucija (koja je u gornjem primjeru je minorna, no ipak postoji). Mislim da je u visim programskim jezicima postinkrementiranje tako i implementirano, sad nisam 100% siguran.


Zivio
Giovanni
[SIZE=1]Sarajlija rozdenijem, Pazarac podrijetlom, Kanadjanin dekretom!

Homo homini lupus iliti Covjek je covjeku Vucko![/SIZE]

Administrator

Urednik foruma

(121)

  • »Administrator« je muško

Postovi: 2.598

Datum registracije: 21.07.2002

Lokacija: Frankfurt

  • Poruku poslati

49

Utorak, 09. Mart 2004

Citirano

Orginalno od Tulumba4All

Citirano

Orginalno od Administrator
Zato sto se prva petlja pre zavrsi od ove druge :D

Promenljiva 'i' brze dostize vrednost 10 u prvoj petlji nego u drugoj.


Nazalost nije tacno ...
Obe petlje se izvrsavaju 10 puta.
Probajte, ako ne verujete ...
Ipak nije tako jednostavno ;) ...



Tulumba4All, jasno je ko dan da se obe petlje izvrsavaju isti broj puta, nisam tvrdio suprotno. :))
Giovani je vec objasnio a ja cu evo to samo malo detaljnije opisati sa asemblerskog aspekta.

U slucaju post-inkrementacije (i++) masinski code dobijen kompiliranjem je manje efikasan (sporiji je) u odnosu na masinski code dobijen pre-inkrementacijom.

Kod post-inkrementacije (i++) kreirani masinski code prvo povecava promenljivu u memoriji za jedan, pa zatim radi kontra operaciju smanjivanja i upisivanja u registar da bi je na taj nacin pripremio za njenu prethodnu vrednost koja se koristi u izrazu (u nasem slucaju u "petlji").

Kod pre-inkremetacije (++i) se promenljiva povecava u memoriji i ista vrednost se upisuje u registar.

Znaci masinski code pri post-inkrementaciji radi jednu operaciju vise.

E sad kad ovo saznanje primenimo u primeru koji si ti dao dolazimo do zakljucka da druga petlja izvrsava citavih 10 operacija vise od prve petlje.

Dakle moj zakljucak u prethodnom prilogu:

Citirano

Orginalno od Administrator
Promenljiva 'i' brze dostize vrednost 10 u prvoj petlji nego u drugoj.

je itekako tacan ;)

Ova analogija vazi i za post- i pre-dekrementaciju (i--,--i).
Sve je ovo samo igra! Nema tog foruma koji je vrijedan Vasih zivaca! / Dokoni umovi - Sejtanska igralista

Tulumba4All

Profesionalac

(10)

  • »Tulumba4All« je muško
  • »Tulumba4All« je autor ove teme

Postovi: 700

Datum registracije: 04.09.2002

Lokacija: UK

  • Poruku poslati

50

Srijeda, 10. Mart 2004

Citirano

Orginalno od Administrator
Kod post-inkrementacije (i++) kreirani masinski code prvo povecava promenljivu u memoriji za jedan, pa zatim radi kontra operaciju smanjivanja i upisivanja u registar da bi je na taj nacin pripremio za njenu prethodnu vrednost koja se koristi u izrazu (u nasem slucaju u "petlji").


OK. Ovo je vec tacnije. Tvoj prethodni odgovor

Citirano

Orginalno od Administrator
Promenljiva 'i' brze dostize vrednost 10 u prvoj petlji nego u drugoj.

nije dovoljno precizan. Zbog toga je Pink dosla do pogresnog zakljucka:

Citirano

Orginalno od Pink
Daleko sam od naprednog programera al mislim da je ovo prvo brze jer se u njemu ++i poveceva pre zavrsetka "petlje" (procdure) a u drugom tek nakon . Dakle ovo prvo je brze za tacno jedan krug.

++i i i++ se izvrsavaju na kraju petlje. Uvek ! Da je pisalo ++i<10 ili i++<10 onda bi se moglo govoriti o manje ulazaka u telo petlje.

Da citiram mog profesora programiranja:
"Mozes da budes ili jasan ili precizan. Ja sam bio vrlo precizan ..." ;)

Dakle zakljucak je : obe petlje se izvrsavaju isti broj puta (10), ali u petlji sa ++i ima manje masinskih operacija, pa je zato brza.

Pitanje za 10 poena :
Zasto ovo ne vazi za programski jezik JAVA a vazi za C++ ?

Dodatno pitanje za sve (sem za Djordjerda jer smo to vec komentarisali):
imate int promenljive a i b. Kako da im zamenite vrednosti bez koriscenja trece promenljive ?
Sa koriscenjem trece promenljive je:
int t = a;
a=b;
b=t;
... And Tulumba for all
[SIZE=1]If you can't convince them, confuse them.

A fanatic is one who can't change his mind and won't change the subject

[/SIZE]

sans

Majstor

(31)

  • »sans« je muško

Postovi: 2.733

Datum registracije: 29.07.2002

Lokacija: Svemir/zemlja/Evropa/SCG/New Pazar

  • Poruku poslati

51

Srijeda, 10. Mart 2004

Citirano

Orginalno od Tulumba4All
Dodatno pitanje za sve (sem za Djordjerda jer smo to vec komentarisali):
imate int promenljive a i b. Kako da im zamenite vrednosti bez koriscenja trece promenljive ?
Sa koriscenjem trece promenljive je:
int t = a;
a=b;
b=t;


a=a+b;
b=a-b;
a=a-b;

(Ako je tačno to je zbog Joza Dujmovića, a ako nije, to je zbog zaborava)
Ako nemaš iskustva-prevariće te , a ako imaš - onda već jesu , onda već jesu , onda već jesu... ;)

i ... bode mi oči

... al lahko je tebi kad imas olovku sa gumicom

Tulumba4All

Profesionalac

(10)

  • »Tulumba4All« je muško
  • »Tulumba4All« je autor ove teme

Postovi: 700

Datum registracije: 04.09.2002

Lokacija: UK

  • Poruku poslati

52

Srijeda, 10. Mart 2004

Teoretski je tacno, sem sto ne radi uvek.
Ako je a+b> MAX_INT onda ne radi ...
... And Tulumba for all
[SIZE=1]If you can't convince them, confuse them.

A fanatic is one who can't change his mind and won't change the subject

[/SIZE]

Administrator

Urednik foruma

(121)

  • »Administrator« je muško

Postovi: 2.598

Datum registracije: 21.07.2002

Lokacija: Frankfurt

  • Poruku poslati

53

Srijeda, 10. Mart 2004

Citirano

Orginalno od Tulumba4All
Pitanje za 10 poena :
Zasto ovo ne vazi za programski jezik JAVA a vazi za C++ ?


Odgovor lezi u samom metodu izvrsavanja programa napisanih u Javi i C++.

Da bi izvrsili program napisan u C++ potrebno je kompilirati izvorni code C++ programa.
Njegovim kompiliranjem dobija se masinski code koji radi kako je opisano u mom prethodnom prilogu.

Kod Jave je drugi slucaj, jer se programski code, uglavnom, ne kompilira u masinski code vec u bytecode koji se dalje izvrsava putem interpretera.

Java interpreter izvrsava "++i" i "i++" na isti nacin, te su obe operacije podjednako "brze".

Izvorni code Java programa moguce je kompilirati direktno u masinski code medjutim on je onda direktno povezan sa odredjenim Runtime okruzenjem koje ove operacije ("++i" i "i++") takodje izvrsava na isti nacin.

Ova fundamentalna razlika u izvrsavanju Java i C++ programa ima za posledicu da su Java programi nezavisni od sistema na kojem se izvrsavaju, dok se programi pisani u C++ jeziku moraju kompilirati posebno za svaki (operativni) sistem.
Sve je ovo samo igra! Nema tog foruma koji je vrijedan Vasih zivaca! / Dokoni umovi - Sejtanska igralista

Administrator

Urednik foruma

(121)

  • »Administrator« je muško

Postovi: 2.598

Datum registracije: 21.07.2002

Lokacija: Frankfurt

  • Poruku poslati

54

Srijeda, 10. Mart 2004

Citirano

Orginalno od Tulumba4All
Dodatno pitanje za sve (sem za Djordjerda jer smo to vec komentarisali):
imate int promenljive a i b. Kako da im zamenite vrednosti bez koriscenja trece promenljive ?
Sa koriscenjem trece promenljive je:
int t = a;
a=b;
b=t;


U Javi je to moguce uraditi koriscenjem bit xor operatora ^, na sledeci nacin:

a = a^b;
b = a^b;
a = a^b;

ili jos krace:

a ^= b ^= a ^= b;
Sve je ovo samo igra! Nema tog foruma koji je vrijedan Vasih zivaca! / Dokoni umovi - Sejtanska igralista

Tulumba4All

Profesionalac

(10)

  • »Tulumba4All« je muško
  • »Tulumba4All« je autor ove teme

Postovi: 700

Datum registracije: 04.09.2002

Lokacija: UK

  • Poruku poslati

55

Srijeda, 10. Mart 2004

Citirano

Orginalno od Administrator
U Javi je to moguce uraditi koriscenjem bit xor operatora ^, na sledeci nacin:

a = a^b;
b = a^b;
a = a^b;

ili jos krace:

a ^= b ^= a ^= b;


Kao i obicno tacno.
ALI ....
a ^= b ^= a ^= b;
ne radi.
a je 0 uvek posle ove naredbe.

Na istu foru je i:
int a=5, b=6;
a+=b+=a+=b;
umesto da je a=28 a b=17, dobija se a=22, b=17 !!!
Pravilo: ne upotrebljavaj ugnjezdene operatore za dodelu (^= += -= *= /= %= &= |= <<= >>= >>>= =) narocito ako je sa leve i desne strane ista varijabla.
... And Tulumba for all
[SIZE=1]If you can't convince them, confuse them.

A fanatic is one who can't change his mind and won't change the subject

[/SIZE]

@ngi3

Zlatna sredina

(10)

  • »@ngi3« je žensko

Postovi: 453

Datum registracije: 29.07.2003

  • Poruku poslati

56

Četvrtak, 11. Mart 2004

Citirano

Orginalno od Administrator
Tulumba4All u pravu si ;), ceo code je mogao da bude sigurno 3 puta kraci i mnogo bolje optimizovan ali sam se bojao da @ngi3 nece razumeti nista od toga. Polazeci od toga da je to skolski zadatak i da je @ngi3 pocetnik (ne znam koje predznanje ima), pisao sam tako da joj je lakse da razume princip.


Jedan profesionalni programer uvek ce paziti na duzinu i optimizaciju programa, radi lakseg shvatanja samog koda il radi prepravljanja ako bude doslo do greske. No @ngi3 i nema bas neko predznanje zato je meni puno lakse da razumem program koji je Admin napisao, (mada je i tamo bilo nekih stvari koje nisam u potpunosti razumela npr. red u prvoj methodi: dest.append(source.charAt(i) i zasto u drugoj methodi public static boolean isPalindrom(String recenica) ispred Palindrome stoji is ) nego neki program napisan u 5 redova.

Znam da nije ok da upadam medju profesinalne programere, al ovakve stvari smo radili i u C-u. To je ono kad hocemo vrednost a da prebacimo u b , a b vec poseduje vrednos tada nam je potrebna jedna t Temporary promenljiva, koja ce vrednost b da drzi dok se ovo ubacivanje ne izavrsi.
p.s. ne znam sta mi htede ovo da pisem, ali eto napisah :rolleyes:
Naucila sam...
Najlaksi nacin da kao osoba rastem jest da se
okruzim ljudima koji su pametniji od mene

Administrator

Urednik foruma

(121)

  • »Administrator« je muško

Postovi: 2.598

Datum registracije: 21.07.2002

Lokacija: Frankfurt

  • Poruku poslati

57

Četvrtak, 11. Mart 2004

Citirano

Orginalno od @ngi3

No @ngi3 i nema bas neko predznanje zato je meni puno lakse da razumem program koji je Admin napisao, (mada je i tamo bilo nekih stvari koje nisam u potpunosti razumela npr. red u prvoj methodi: dest.append(source.charAt(i) i zasto u drugoj methodi public static boolean isPalindrom(String recenica) ispred Palindrome stoji is ) nego neki program napisan u 5 redova.


Evo funkcije jos jedamput:

PHP Source kod

1
2
3
4
5
6
7
8
9
10
  [FONT=sans-serif]public static boolean isPalindrom(String recenica) 
  { 
      int laenge recenica.length(); 
      String recenica_mala recenica.toLowerCase(); 
      boolean pal_ok true; 
      for (int i 0laenge 2i++) 
         if (recenica_mala.charAt(i) != recenica_mala.charAt(laenge 1)) 
           pal_ok false; 
       return pal_ok; 
  }[/FONT]  


Funkcija je nazvana isPalindrom a mogla je da se zove bilo kako drugacije npr. DaLiJePalindrom. Naravno ako je funkcija nazvana (definisana) kao isPalindrom, ne moze se pozivati sa drugog mesta pomocu izraza DaLiJePalindrom.

Sto se tice izraza dest.append(source.charAt(i)), za njegovo desifrovanje moras uvek poci sa desne strane da bi ga lakse razumela.
Dakle funkcija charAt(i) vraca karakter na poziciji 'i', pa je onda rezultat izraza source.charAt(i) karakter string promenljive 'source' koji se nalazi na poziciji 'i'.

Funkcija append() u ovom slucaju dodaje njoj prosledjeni karakter u string buffer.
U ovom slucaju string buffer je definisan kao strig buffer promenljiva sa imenom 'dest' te stoga ceo izraz izgleda dest.append(source.charAt(i)).

Citirano

Orginalno od @ngi3
Znam da nije ok da upadam medju profesinalne programere, al ovakve stvari smo radili i u C-u. To je ono kad hocemo vrednost a da prebacimo u b , a b vec poseduje vrednos tada nam je potrebna jedna t Temporary promenljiva, koja ce vrednost b da drzi dok se ovo ubacivanje ne izavrsi.
p.s. ne znam sta mi htede ovo da pisem, ali eto napisah :rolleyes:


Pa zadatak je bio da se nadje resenje u kome se ne upotrebljava temp promenljiva ;) A i resenje je vec napisano.

P.S: @Tulumba4All, dobro si primetio da se "ugnjezdavanjem" operatora za dodelu ne dobija tacno resenje (o)
Sve je ovo samo igra! Nema tog foruma koji je vrijedan Vasih zivaca! / Dokoni umovi - Sejtanska igralista

Chonbey

Zlatna sredina

(10)

  • »Chonbey« je muško

Postovi: 286

Datum registracije: 10.03.2004

Lokacija: US

  • Poruku poslati

58

Srijeda, 17. Mart 2004

Malo da udavim oko postincrement i preincrement u C++, kao komentar na i++ vs. ++i.

Preincrement uvek vraca temporary object, tako da je, osim sto je losiji po pitanju brzine, pride definitivno losiji po pitanju potrosnje memorije (C++ programeri brinu o tome, za razliku od Java kolega :D ). To vazi cak i za builtin tipove kao sto je int.

U korisnicki definisanim klasama postincrement je obicno implementiran preko preincrement-a (ocigledno je sta je brze, je li :] ). Skolski primer je klasa za kompleksne brojeve, cija bi (nepotpuna) implementacija isla ovako

class Complex {
public:
explicit Complex( double real, double imaginary )
: m_real(real), m_imaginary(imaginary) {}

Complex& operator++() {
++m_real;
return *this;
}

const Complex operator++( int ) {
Complex temp = *this;
++(*this);
return temp;
}

....

private:
double m_real, m_imaginary;
...
};

I preincrement i postincrement se definisu kao operator++. Da bi mogli da se razlikuju sa stanovista kompajlera, uveden je tzv "silent" int kao argument za postincrement.
Solve it. Solve it quickly, right or wrong. If you solve it wrong, it will come back and slap you in the face, and then you can solve it right

Tulumba4All

Profesionalac

(10)

  • »Tulumba4All« je muško
  • »Tulumba4All« je autor ove teme

Postovi: 700

Datum registracije: 04.09.2002

Lokacija: UK

  • Poruku poslati

59

Srijeda, 17. Mart 2004

Pozdrav za novog clana Chonbey-a.

Da li u C++ radi ovo :
int a=5, b=6;
a+=b+=a+=b;
... And Tulumba for all
[SIZE=1]If you can't convince them, confuse them.

A fanatic is one who can't change his mind and won't change the subject

[/SIZE]

Chonbey

Zlatna sredina

(10)

  • »Chonbey« je muško

Postovi: 286

Datum registracije: 10.03.2004

Lokacija: US

  • Poruku poslati

60

Srijeda, 17. Mart 2004

U C++ to bi trebalo da radi sasvim fino.

Izraz

a+=b;

je u sustini ekvivalentan sa

a.operator+=(b)

Sad, operator+= po pravilu
1. prima const& kao argument
2. vraca referencu na izracunati objekat
3. menja vrednost this direktno.

To sve izgleda u redu, ne vidim razlog da ugnjezdenje pravi probleme. Izraz a+=b+=a+=b predstavljen u originalu izleda veoma komplikovano, ali funkcionalno je u redu:
a.operator+=(b.operator+=(a.operator+=(b)))

Usput, moze li neko da objasni zasto to ne radi u Javi?
Solve it. Solve it quickly, right or wrong. If you solve it wrong, it will come back and slap you in the face, and then you can solve it right

Social bookmarks