Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
ma Forumaš(ica)


Pridružen/a: 27. 01. 2007. (12:06:50) Postovi: (347)16
Spol: 
|
|
[Vrh] |
|
kus Forumaš(ica)


Pridružen/a: 04. 12. 2005. (12:33:18) Postovi: (4F)16
Spol: 
Lokacija: Poso, kuća birtija
|
|
[Vrh] |
|
Blizzard Forumaš(ica)


Pridružen/a: 19. 10. 2006. (20:17:17) Postovi: (121)16
Spol: 
Lokacija: u sjeni....
|
Postano: 15:25 čet, 19. 6. 2008 Naslov: |
|
|
[quote="kus"]jel netko mozda napravio operator + kod binarnih brojeva. mucim se sa tim vec 5-6 sati i nikako pa ako netko moze pomoc.[/quote]
Meni je to isto zadavalo najviše problema :grebgreb:.... ali mislim da mi radi :gg:...
Evo ja sam ovak,dobim dva BinarniBroj-a i sad radim sljedeće:
a)Provjeravam predznake i zakljucujem koji slučaj...
-oba pozitivna, slučaj 1
-prvi pozitivan, drugi negativan, slučaj 2
-prvi negativan, drugi pozitivan, slučaj 3
-oba negativna, slučaj 4
b)Na temelju slučaja radim algoritam...
1)Ovo je najlaksi slučaj samo idem po bitovima od 0-tog do zadnjeg(vodećeg) i zbrajam ih onako kako su nas učili da se zbrajaju binarni brojevi, to sve zapamtim i vratim binarni broj koji kreiram usput :gg:...
2)Ovaj slučaj je malo kompliciraniji, zanemarim predznak ovog negativnog i pravim se da je pozitivan (ali zapamtim da je bio negativan :roll:) ... onda upotrijebim operator ">" koji sam već napravio (ili ću tek napraviti :wink:) i pogledam koji mi je od ta dva broja veći....
Onaj manji kao nadopunim "0"-ama (sprijeda) i radim oduzimanje od onog većeg.... e sad to oduzimanje je malo tricky 8)...
Recimo da mi je gornji broj onaj veći a donji onaj manji, imam slučajeve...
[table][format]align:center[/format]Gornji(veći broj) [format]align:center[/format]Donji(manji broj) [format]align:center[/format]Prijenos [format]align:center[/format]Rezultantni bit [format]align:center[/format]Novi prijenos
0 0 0 0 0
0 0 1 1 1
0 1 0 1 1
0 1 1 0 1
1 0 0 1 0
1 0 1 0 0
1 1 0 0 0
1 1 1 1 1
[/table]
I tako dobim novi broj.... onda stavim minus ako je veći bio onaj koji je bio negativan inaće ostavljam "+" predznak....
3)Isto kao i drugi samo sa okrenutim brojevima, mislim da se može zvati return b+a;
4)Isto kao i 1) samo pamtim da je predznak "-" i to stavim na kraj....
To bi trebalo biti to... barem onako načelno... meni radi.... ili ja samo mislim da mi radi :nuts2:.... možda sam negdje pogriješio u pisanju ovoga :zubo:... nadam se da je pomoglo bar malo....
kus (napisa): | jel netko mozda napravio operator + kod binarnih brojeva. mucim se sa tim vec 5-6 sati i nikako pa ako netko moze pomoc. |
Meni je to isto zadavalo najviše problema .... ali mislim da mi radi ...
Evo ja sam ovak,dobim dva BinarniBroj-a i sad radim sljedeće:
a)Provjeravam predznake i zakljucujem koji slučaj...
-oba pozitivna, slučaj 1
-prvi pozitivan, drugi negativan, slučaj 2
-prvi negativan, drugi pozitivan, slučaj 3
-oba negativna, slučaj 4
b)Na temelju slučaja radim algoritam...
1)Ovo je najlaksi slučaj samo idem po bitovima od 0-tog do zadnjeg(vodećeg) i zbrajam ih onako kako su nas učili da se zbrajaju binarni brojevi, to sve zapamtim i vratim binarni broj koji kreiram usput ...
2)Ovaj slučaj je malo kompliciraniji, zanemarim predznak ovog negativnog i pravim se da je pozitivan (ali zapamtim da je bio negativan ) ... onda upotrijebim operator ">" koji sam već napravio (ili ću tek napraviti ) i pogledam koji mi je od ta dva broja veći....
Onaj manji kao nadopunim "0"-ama (sprijeda) i radim oduzimanje od onog većeg.... e sad to oduzimanje je malo tricky ...
Recimo da mi je gornji broj onaj veći a donji onaj manji, imam slučajeve...
Gornji(veći broj) | Donji(manji broj) | Prijenos | Rezultantni bit | Novi prijenos |
---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
I tako dobim novi broj.... onda stavim minus ako je veći bio onaj koji je bio negativan inaće ostavljam "+" predznak....
3)Isto kao i drugi samo sa okrenutim brojevima, mislim da se može zvati return b+a;
4)Isto kao i 1) samo pamtim da je predznak "-" i to stavim na kraj....
To bi trebalo biti to... barem onako načelno... meni radi.... ili ja samo mislim da mi radi .... možda sam negdje pogriješio u pisanju ovoga ... nadam se da je pomoglo bar malo....
|
|
[Vrh] |
|
kus Forumaš(ica)


Pridružen/a: 04. 12. 2005. (12:33:18) Postovi: (4F)16
Spol: 
Lokacija: Poso, kuća birtija
|
|
[Vrh] |
|
sunny Forumaš(ica)

Pridružen/a: 21. 01. 2007. (01:06:34) Postovi: (153)16
|
Postano: 22:02 čet, 19. 6. 2008 Naslov: |
|
|
meni nije sljedece jasno (u BinarniBroj-evima) : za konstruktor BinarniBroj(string s, int k=1) pise : "konstruktor koji stvara binarni broj jednak bitovima u s. [b]Ako u s ne pisu bitovi, pozovite exit(1)[/b]; Ako je zadan i k, potrebano je u binarni broj zapisati k kopija bitova od i. Pripazite na predznak binarnog broja. [b]Također, potrebno je provjeriti da li u stringu zaista piše binarni broj (ako se u stringu nalazi bilo koji znak osim 0 ili 1 ili predznaka na početku stringa, pozovite funkciju exit(0);)[/b]. Pripazite i na eliminaciju vodećih nula."
Boldano mi nije jasno... da li se tu trazi 2 puta ista stvar?? ili je greska ili... ja ne kuzim sto je pijesnik time htio reci :shock: :?
meni nije sljedece jasno (u BinarniBroj-evima) : za konstruktor BinarniBroj(string s, int k=1) pise : "konstruktor koji stvara binarni broj jednak bitovima u s. Ako u s ne pisu bitovi, pozovite exit(1); Ako je zadan i k, potrebano je u binarni broj zapisati k kopija bitova od i. Pripazite na predznak binarnog broja. Također, potrebno je provjeriti da li u stringu zaista piše binarni broj (ako se u stringu nalazi bilo koji znak osim 0 ili 1 ili predznaka na početku stringa, pozovite funkciju exit(0) . Pripazite i na eliminaciju vodećih nula."
Boldano mi nije jasno... da li se tu trazi 2 puta ista stvar?? ili je greska ili... ja ne kuzim sto je pijesnik time htio reci
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
sunny Forumaš(ica)

Pridružen/a: 21. 01. 2007. (01:06:34) Postovi: (153)16
|
|
[Vrh] |
|
pecina Forumaš(ica)


Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol: 
Lokacija: Happily traveling through space since 1986!
|
Postano: 10:01 pet, 20. 6. 2008 Naslov: |
|
|
[quote="sunny"][quote="Anonymous"][quote="sunny"]na početku stringa, pozovite funkciju exit(0Boldano mi nije jasno... da li se tu trazi 2 puta ista stvar?? ili je greska ili... ja ne kuzim sto je pijesnik time htio reci :shock: :?[/quote]
s naglaskom na pocetak stringa:)[/quote]
i dalje ne kuzim :evil:
kak sta na pocetku stringa? u prvoj recenici provjeravam bitove... a sta njima spada u bitove? 0, 1, svi brojevi...?????? a u drugoj recenici provjeravam da li u stringu ima nesto drugog osim 0 ili 1 ili predznaka (a predznak mora biti na pocetku stringa)? je li se na to mislilo?
malo mi sve to nema smisla :? :twisted:[/quote]Ako se na prvom mjestu ne nalazi predznak, exit(0), ako na svim ostalim mjestima nađeš nešto različito od 0 ili 1 (pa čak i drugi predznak) zovi exit(1)
Stvarno jest jednostavno :roll:
sunny (napisa): | Anonymous (napisa): | sunny (napisa): | na početku stringa, pozovite funkciju exit(0Boldano mi nije jasno... da li se tu trazi 2 puta ista stvar?? ili je greska ili... ja ne kuzim sto je pijesnik time htio reci  |
s naglaskom na pocetak stringa:) |
i dalje ne kuzim
kak sta na pocetku stringa? u prvoj recenici provjeravam bitove... a sta njima spada u bitove? 0, 1, svi brojevi...?????? a u drugoj recenici provjeravam da li u stringu ima nesto drugog osim 0 ili 1 ili predznaka (a predznak mora biti na pocetku stringa)? je li se na to mislilo?
malo mi sve to nema smisla  | Ako se na prvom mjestu ne nalazi predznak, exit(0), ako na svim ostalim mjestima nađeš nešto različito od 0 ili 1 (pa čak i drugi predznak) zovi exit(1)
Stvarno jest jednostavno
_________________ -- space available for rent --
|
|
[Vrh] |
|
ß Forumaš(ica)


Pridružen/a: 29. 07. 2006. (15:29:06) Postovi: (115)16
Spol: 
Lokacija: Graveyard Mountain Home
|
Postano: 12:05 pet, 20. 6. 2008 Naslov: |
|
|
[quote="pecina"][quote="sunny"]predznak mora biti na pocetku stringa)? je li se na to mislilo?
malo mi sve to nema smisla :? :twisted:[/quote]Ako se na prvom mjestu ne nalazi predznak, exit(0), ako na svim ostalim mjestima nađeš nešto različito od 0 ili 1 (pa čak i drugi predznak) zovi exit(1)
Stvarno jest jednostavno :roll:[/quote]
Ono "na početku stringa" se odnosilo na predznak, u smislu:
[i]Ako se u stringu nalazi bilo koji znak (osim (0) ili (1) ili (predznaka na početku stringa)), pozovite funkciju exit(0)[/i]
:roll:
A što ako se na prvom mjestu ne nalazi predznak nego naprimjer '1' ? :P :P
Ne, mislim (ustvari, prilično sam uvjeren u to) da se radi o slučajnoj dvostrukoj obavijesti o istoj stvari. A da li izlaziš sa exit(1), exit(0) ili exit(666) mislim da je poprilično svejedno, čisto sumnjam da će provjeravat koju konstantu ti je izbacio program.
Nego, mene muči jedna druga stvar u istom zadatku. Krenuo sam napisati operator unarnog minusa, što bi stvarno trebala biti trivijalna stvar - ali, problemi! Dakle, moj potprogram obrne predznak, kao što treba, ali pritom najmanje značajni bit postavi na nulu ( ??? ).
Uglavnom, nakon provjeravanja svega i svačega, od ispisa do mogućih zaostataka u drugim funkcijama koje pozivam prije, nemam pojma u čemu je greška.
Promijenio sam funkciju unarnog minusa tako da ne radi (ne bi trebala) apsolutno ništa, dakle sad izgleda ovako:
[code:1]
BinarniBroj BinarniBroj::operator-() const {
return *this;
}
[/code:1]
I opet radi isto: ako je npr. x=1111, -x će ispisati 1110. U čemu je problem?
pecina (napisa): | sunny (napisa): | predznak mora biti na pocetku stringa)? je li se na to mislilo?
malo mi sve to nema smisla  | Ako se na prvom mjestu ne nalazi predznak, exit(0), ako na svim ostalim mjestima nađeš nešto različito od 0 ili 1 (pa čak i drugi predznak) zovi exit(1)
Stvarno jest jednostavno  |
Ono "na početku stringa" se odnosilo na predznak, u smislu:
Ako se u stringu nalazi bilo koji znak (osim (0) ili (1) ili (predznaka na početku stringa)), pozovite funkciju exit(0)
A što ako se na prvom mjestu ne nalazi predznak nego naprimjer '1' ?
Ne, mislim (ustvari, prilično sam uvjeren u to) da se radi o slučajnoj dvostrukoj obavijesti o istoj stvari. A da li izlaziš sa exit(1), exit(0) ili exit(666) mislim da je poprilično svejedno, čisto sumnjam da će provjeravat koju konstantu ti je izbacio program.
Nego, mene muči jedna druga stvar u istom zadatku. Krenuo sam napisati operator unarnog minusa, što bi stvarno trebala biti trivijalna stvar - ali, problemi! Dakle, moj potprogram obrne predznak, kao što treba, ali pritom najmanje značajni bit postavi na nulu ( ??? ).
Uglavnom, nakon provjeravanja svega i svačega, od ispisa do mogućih zaostataka u drugim funkcijama koje pozivam prije, nemam pojma u čemu je greška.
Promijenio sam funkciju unarnog minusa tako da ne radi (ne bi trebala) apsolutno ništa, dakle sad izgleda ovako:
Kod: |
BinarniBroj BinarniBroj::operator-() const {
return *this;
}
|
I opet radi isto: ako je npr. x=1111, -x će ispisati 1110. U čemu je problem?
_________________ Devious movements in your eyes moved me from relief
Breath comes out white clouds with your lies
and filters through me
|
|
[Vrh] |
|
pecina Forumaš(ica)


Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol: 
Lokacija: Happily traveling through space since 1986!
|
Postano: 12:09 pet, 20. 6. 2008 Naslov: |
|
|
[quote="ß"]Nego, mene muči jedna druga stvar u istom zadatku. Krenuo sam napisati operator unarnog minusa, što bi stvarno trebala biti trivijalna stvar - ali, problemi! Dakle, moj potprogram obrne predznak, kao što treba, ali pritom najmanje značajni bit postavi na nulu ( ??? ).
Uglavnom, nakon provjeravanja svega i svačega, od ispisa do mogućih zaostataka u drugim funkcijama koje pozivam prije, nemam pojma u čemu je greška.
Promijenio sam funkciju unarnog minusa tako da ne radi (ne bi trebala) apsolutno ništa, dakle sad izgleda ovako:
[code:1]
BinarniBroj BinarniBroj::operator-() const {
return *this;
}
[/code:1]
I opet radi isto: ako je npr. x=1111, -x će ispisati 1110. U čemu je problem?[/quote]
Što ne možeš jednostavno promijeniti predznak u '-'
ß (napisa): | Nego, mene muči jedna druga stvar u istom zadatku. Krenuo sam napisati operator unarnog minusa, što bi stvarno trebala biti trivijalna stvar - ali, problemi! Dakle, moj potprogram obrne predznak, kao što treba, ali pritom najmanje značajni bit postavi na nulu ( ??? ).
Uglavnom, nakon provjeravanja svega i svačega, od ispisa do mogućih zaostataka u drugim funkcijama koje pozivam prije, nemam pojma u čemu je greška.
Promijenio sam funkciju unarnog minusa tako da ne radi (ne bi trebala) apsolutno ništa, dakle sad izgleda ovako:
Kod: |
BinarniBroj BinarniBroj::operator-() const {
return *this;
}
|
I opet radi isto: ako je npr. x=1111, -x će ispisati 1110. U čemu je problem? |
Što ne možeš jednostavno promijeniti predznak u '-'
_________________ -- space available for rent --
|
|
[Vrh] |
|
ß Forumaš(ica)


Pridružen/a: 29. 07. 2006. (15:29:06) Postovi: (115)16
Spol: 
Lokacija: Graveyard Mountain Home
|
|
[Vrh] |
|
pecina Forumaš(ica)


Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol: 
Lokacija: Happily traveling through space since 1986!
|
|
[Vrh] |
|
MKova Forumaš(ica)


Pridružen/a: 01. 10. 2005. (18:24:38) Postovi: (187)16
Spol: 
|
Postano: 13:05 pet, 20. 6. 2008 Naslov: |
|
|
zna li tko pravilan nacin da se pozove konstruktor unutar konstruktora? U ostalim jezicima (Java, C#..) radi...
Ovako, za skup brojeva imam napisani konstruktor koji prima pointer na int kao pocetak polja i duzinu polja int:
[code:1]SkupBrojeva(int *poc, int len) {...}[/code:1]
E sad trebalo je napisati drugi konstruktor koji prima pointer na pocetak i pointer na kraj polja. Ja sam u skladu sa pravilima dobrog programiranja htio sto vise toga "ucahuriti" (enkapsuliranje = ucahurivanje kako us nas ucili :) ) Nisam htio gnjaviti se mogu li dobiti duljinu iz razlika 2 adrese od pointera pa sam samo napisao petlju:
[code:1]SkupBrojeva(int *poc, int *kraj)
{
int len = 0;
int *sacuvajPoc = poc;
while (poc != kraj) {
poc++;
len++:
}
SkupBrojeva(sacuvajPoc, len);
}[/code:1]
.. nakon izvrsavanja nesto ne stima, objekt se ne stvori dobro jer ispis poludi, pokusava pristupit memoriji negdje miljama daleko (broj elemenata n=2bilijuna umjesto n=3). Ako direktno kopiram kod iz drugog konstruktora u taj, sve radi... dakle moje pitanje je zasto? Kako pravilno pozvati konstruktor? Sto sam propustio?
zna li tko pravilan nacin da se pozove konstruktor unutar konstruktora? U ostalim jezicima (Java, C#..) radi...
Ovako, za skup brojeva imam napisani konstruktor koji prima pointer na int kao pocetak polja i duzinu polja int:
Kod: | SkupBrojeva(int *poc, int len) {...} |
E sad trebalo je napisati drugi konstruktor koji prima pointer na pocetak i pointer na kraj polja. Ja sam u skladu sa pravilima dobrog programiranja htio sto vise toga "ucahuriti" (enkapsuliranje = ucahurivanje kako us nas ucili ) Nisam htio gnjaviti se mogu li dobiti duljinu iz razlika 2 adrese od pointera pa sam samo napisao petlju:
Kod: | SkupBrojeva(int *poc, int *kraj)
{
int len = 0;
int *sacuvajPoc = poc;
while (poc != kraj) {
poc++;
len++:
}
SkupBrojeva(sacuvajPoc, len);
} |
.. nakon izvrsavanja nesto ne stima, objekt se ne stvori dobro jer ispis poludi, pokusava pristupit memoriji negdje miljama daleko (broj elemenata n=2bilijuna umjesto n=3). Ako direktno kopiram kod iz drugog konstruktora u taj, sve radi... dakle moje pitanje je zasto? Kako pravilno pozvati konstruktor? Sto sam propustio?
_________________ suradnici za razvoj igre traženi!! vidi ovo
|
|
[Vrh] |
|
Luuka Forumaš(ica)


Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol: 
Lokacija: Hakuna Matata
|
Postano: 13:26 pet, 20. 6. 2008 Naslov: |
|
|
Ja sam ovako:
[code:1]int velicina=(kraj-poc)+1;
SkupBrojeva A(poc,velicina);[/code:1]
I sad ako je A različit od praznog skupa kopiram elemnete iz a u this, a ako je prazan skup, onda je i this prazan. Al imam i ja pitanje tu:
[code:1]int velicina=(kraj-poc)+1;
SkupBrojeva A(poc,velicina);
(*this)=A;[/code:1]
radi na windowsima (devc++) al na ubuntu i g++ compileru u praktikumu ne. (segmentation fault). Zašto?
I ako napravimo
[code:1]pointer=(int*)malloc(0*sizeof(int));[/code:1]
dal će pointer bit NULL?
edit: da si sam odgovorim na zadnje pitanje: NE, pointer neće bit NULL. :)
Ja sam ovako:
Kod: | int velicina=(kraj-poc)+1;
SkupBrojeva A(poc,velicina); |
I sad ako je A različit od praznog skupa kopiram elemnete iz a u this, a ako je prazan skup, onda je i this prazan. Al imam i ja pitanje tu:
Kod: | int velicina=(kraj-poc)+1;
SkupBrojeva A(poc,velicina);
(*this)=A; |
radi na windowsima (devc++) al na ubuntu i g++ compileru u praktikumu ne. (segmentation fault). Zašto?
I ako napravimo
Kod: | pointer=(int*)malloc(0*sizeof(int)); |
dal će pointer bit NULL?
edit: da si sam odgovorim na zadnje pitanje: NE, pointer neće bit NULL.
_________________ "Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy 
|
|
[Vrh] |
|
ß Forumaš(ica)


Pridružen/a: 29. 07. 2006. (15:29:06) Postovi: (115)16
Spol: 
Lokacija: Graveyard Mountain Home
|
Postano: 14:34 pet, 20. 6. 2008 Naslov: |
|
|
[quote="pecina"][quote="ß"][quote="pecina"]
Što ne možeš jednostavno promijeniti predznak u '-'[/quote]
To sam i napravio, ali nije u tome stvar. Predznak jednostavno promijenim u '-' (ili u '+' ako je bio negativan), ali usto mi ovo prčka po bitovima, a ne kužim zašto![/quote]Koruptirana ti je memorija vjerojatno. Pišeš po komadu memorije koji nisi dobro alocirao.[/quote]
Ali po čemu uopće [b]ovo[/b] išta piše? :D
[code:1]BinarniBroj BinarniBroj::operator-() const {
return *this;
}[/code:1]
Ovo samo vraća referencu na onog ko ga je pozvao, ne? Ali ispis od ovog:[code:1]cout<<x<<endl;
cout<<(-x)<<endl;[/code:1]bude ovo:
11111
11110
Zašto, pobogu?!
:?: :?: :?:
pecina (napisa): | ß (napisa): | pecina (napisa): |
Što ne možeš jednostavno promijeniti predznak u '-' |
To sam i napravio, ali nije u tome stvar. Predznak jednostavno promijenim u '-' (ili u '+' ako je bio negativan), ali usto mi ovo prčka po bitovima, a ne kužim zašto! | Koruptirana ti je memorija vjerojatno. Pišeš po komadu memorije koji nisi dobro alocirao. |
Ali po čemu uopće ovo išta piše?
Kod: | BinarniBroj BinarniBroj::operator-() const {
return *this;
} |
Ovo samo vraća referencu na onog ko ga je pozvao, ne? Ali ispis od ovog: Kod: | cout<<x<<endl;
cout<<(-x)<<endl; | bude ovo:
11111
11110
Zašto, pobogu?!
_________________ Devious movements in your eyes moved me from relief
Breath comes out white clouds with your lies
and filters through me
|
|
[Vrh] |
|
Luuka Forumaš(ica)


Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol: 
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
ß Forumaš(ica)


Pridružen/a: 29. 07. 2006. (15:29:06) Postovi: (115)16
Spol: 
Lokacija: Graveyard Mountain Home
|
|
[Vrh] |
|
rafaelm Forumaš(ica)


Pridružen/a: 24. 12. 2006. (13:30:11) Postovi: (21F)16
Spol: 
Lokacija: Zagreb
|
|
[Vrh] |
|
MKova Forumaš(ica)


Pridružen/a: 01. 10. 2005. (18:24:38) Postovi: (187)16
Spol: 
|
|
[Vrh] |
|
5ra Forumaš(ica)


Pridružen/a: 13. 08. 2006. (21:34:08) Postovi: (D5)16
Spol: 
|
|
[Vrh] |
|
|