[ Milan Aksic @ 26.06.2001. 00:30 ] @
Napisao sam kod, gde trazi da se unese broj i on prevede u binarni i smesti ga u niz. Ali sam ja hteo da taj binarni broj ne bude u nizu vec u promenljivoj, u ovom slucaju test, koja je tipa long. Ali nisam ni video da li ovakva ideja, kao sto sam ja napisao, uopste funkcionise, jer mi se na kraju uopste ne prikazuje vrednost test promenljive.
Evo koda:

#include <stdio.h>

void ConvertToBinary(int ValueToConvert);

main()
{
int ValueToConvert;
printf("Unesite integer vrednost: ");
scanf("%d", &ValueToConvert);
ConvertToBinary(ValueToConvert);

return (0);
}

void ConvertToBinary(int ValueToConvert)
{
int offset = 0;
int HoldBitConversion[50];
long test = 0;
while (ValueToConvert != 0)
{
HoldBitConversion[offset] = (ValueToConvert % 2);
ValueToConvert /= 2;
offset++;
}
offset--;
for (; offset >= 0; offset--)
{
printf("%1d", HoldBitConversion[offset]);
if (HoldBitConversion[offset] = '0')
{
if (test == 0)
test += 0;
else
test *=10;
}
else
test +=1;
}
printf("nnOvo je broj: %l", test); /* Evo ovde bi trebalo da prikaze vrednost promenljive test */
printf("n");
}
[ Vojislav Milunovic @ 26.06.2001. 12:43 ] @
Kod printf:
Code:

printf("Ovo je broj: %l", test);


treba da izglerda ovako :
Code:

printf("Ovo je broj: %ld", test);


i ovo
Code:

if (HoldBitConversion[offset] = '0') 
                          { 
                          if (test == 0) 
[b]                          test += 0; [/b]
                          else 
                          test *=10; 
                          } 


Mislim ovo test +=0; stvarno nema smisla ;o)
[ Vojislav Milunovic @ 26.06.2001. 12:45 ] @
E da koristi:

[ code ]
[ / code] da uokviris code jer je mnogo citljivije

[Ovu poruku je menjao predator dana 06-26-2001 u 11:45 AM GMT]
[ Milan Aksic @ 26.06.2001. 16:37 ] @
E hvala predator, na onoj ispravci. Ali ono sto mi stvarno predstalja problem je ideja za ovaj program. Naime on bez problema pretvara uneti broj u binarni broj, i taj binarni broj cuva u niz, u ovom slucaju se taj niz zove HoldBitConversion. E sada u knjizi iz koje radim, C/C++ vodic za programere, se postavlja pitanje, za ovaj program, kako moze da se promeni ovaj program da se krajnji rezultat, binarni broj, cuva, NE u nizu vec u promenljivoj, u ovom slucaju se ta promenljiva tipa long zove test. Znaci kako da se taj dobijeni binarni broj ne cuva u nizu vec u promenljivoj. Saljem prepravljeni kod, ono gore, i kao sto ces videti ja sam nesto pokusavao, mozda sa bio na dobrom putu ali sam se na kraju potpuno zapetljao. E koda pa mi reci da li imas ideju kako da resim ovaj problem. E da i da napomenem, kod je, sto se sintakse i zvodjenja tice OK, znaci izvrsava se bez problema, ali ne dobijam tacan rezultat, znaci da je do ideje ili algoritma, npr. Unesem broj 54, dobijem tacan binarni broj 110110 koji se cuva u nizu, a onaj binarni broj koji se cuva u promenljivoj test je 111111, znaci netacno.


#include <stdio.h>

void ConvertToBinary(int ValueToConvert);

main()
{
int ValueToConvert;
printf("Unesite integer vrednost: ");
scanf("%d", &ValueToConvert);
ConvertToBinary(ValueToConvert);

return (0);
}

void ConvertToBinary(int ValueToConvert)
{
int offset = 0;
int HoldBitConversion[50];
long test = 0;
while (ValueToConvert != 0)
{
HoldBitConversion[offset] = (ValueToConvert % 2);
ValueToConvert /= 2;
offset++;
}
offset--;
for (; offset >= 0; offset--)
{
printf("%1d", HoldBitConversion[offset]);

/* ODSADA pocinje kod koji mi pravi probleme */
if (HoldBitConversion[offset] == '0')
{
if ((HoldBitConversion[offset] == '0') && (test == 0))
;
else if ((HoldBitConversion[offset] == '0') && (test != 0))
test *= 10;
}
else if ((HoldBitConversion[offset] != '0') && (test % 2) == 0)
{
if (test == 0)
test += 1;
else
{
test *= 10;
test += 1;
}
}
else if ((HoldBitConversion[offset] != '0') && (test % 2) != 0)
{
if (test == 0)
test += 1;
else
{
test *= 10;
test += 1;
}
}
}
printf("nnOvo je broj: %ld", test);
printf("n");
}
[ Vojislav Milunovic @ 26.06.2001. 19:10 ] @
Imam jedan veoma los kod na tu temu.To sam radio dok sam jos ucio osnove C++-a tako da nemoj neko da komentarise kod jel i sam znam da je vise nego ocajan.
http://www.beotel.yu/~predator/binarni.cpp <decimalno u binarno>
http://www.beotel.yu/~predator/decimalni.cpp <binarno u decimalno>
[ Milan Aksic @ 26.06.2001. 20:47 ] @
Citat:
predator je napisao:
Imam jedan veoma los kod na tu temu.To sam radio dok sam jos ucio osnove C++-a tako da nemoj neko da komentarise kod jel i sam znam da je vise nego ocajan.
http://www.beotel.yu/~predator/binarni.cpp <decimalno u binarno>
http://www.beotel.yu/~predator/decimalni.cpp <binarno u decimalno>


E ostavio si pogresan link, kakav je ovo los kod koji mi se ispisuje po ekranu, salim se :) :) Rekao si da je kod los, ma nije bitno da li je los ili nije, bar ne u mom slucaju. Ali bih te drugo nesto zamolio, ako imas vremena da pogledas ovlas, ovaj moj kod koji sam gore ostavio, i da mi eventualno ako otkrijes gresku, kazes gde gresim. Jer vidis ovaj moj kod je mnogo manji i radi, on pretvara iz decimalnog u binarni, ali to cuva u nizu, znaci niz[0] = 1, niz[1] = 0 , niz[2] = 1 itd. Ali me interesuje kako da dobijeni broj cuva u promenljivoj a ne u nizu. E sada ako nemas vremena da pogledas moj kod i eventualno mi kazes gde gresim, da li onda mozes da mi das neki komentar za tvoj kod koji sam skinuo, npr. zasto da li je num>=128, i od 64 i od 32 ..., onda zasto u funkcijama *binarni=10000000+*binarni , pa onda *binarni=(*binarni+1000000); *binarni=*binarni+100000; itd. Eto za te stvari u tvom kodu mi treba komentar, mada ipak ako budes imao vremena ostavi komentar i za moj kod, cisto da vidim gde gresim.
Pozdrav.


[Ovu poruku je menjao passanger dana 06-26-2001 u 08:48 PM GMT]
[ tOwk @ 26.06.2001. 23:54 ] @
Probaj sa ovim kodom.

Code:

unsigned long IntToBin(int vrednost) {
    unsigned long bin=0,mnozi=1;
    while (vrednost > 0) {
        bin += (vrednost % 2)*mnozi;
        vrednost /= 2;
        mnozi *= 10;
    }
    return bin;
}



Na kraju samo ispišes pomoću:

Code:

printf("broj: %ld
", IntToBin(ValueToConvert));


iz main() funkcije.

Toliko.
[ Milan Aksic @ 27.06.2001. 00:39 ] @
Towk hvala PUNO! Samo ne znam da li treba da mi bude drago sto sam stekao novo iskustvo ili da se osecam glupo sto se ja toga nisam setio. Sve u svemu thanks a lot. Kod radi savrseno kao sto verovatno i sam video, samo sam hteo da te pitam u vezi jedne stvari. Ako je treceg obrtaja npr. U while petlji bin = 111, i (vrednost % 2) = 0, znaci treba da se postavi 0 u bin promenljivoj da bi bin iznosila 1110, e sada ako je (vrednost % 2) = 0, i onda se mnozi sa promenljivom mnozi koja iznosi mnozi 1000, onda je bin(111) += 0 * 1000, onda je bin i dalje 111 jer 111 = 111 + 0 je isto 111. Valjda sam jasno objasnio, mislim kod radi savrseno samo mi nije jasno na koju foru je ovo gore.
Usput ako mozes pogledaj ovu brlju od mog koda, i reci mi da li sam bar bio na dobrom putu.
Pozdrav.
[ tOwk @ 01.07.2001. 15:19 ] @
Citat:
passanger je napisao:
Towk hvala PUNO! Samo ne znam da li treba da mi bude drago sto sam stekao novo iskustvo ili da se osecam glupo sto se ja toga nisam setio. Sve u svemu thanks a lot. Kod radi savrseno kao sto verovatno i sam video, samo sam hteo da te pitam u vezi jedne stvari. Ako je treceg obrtaja npr. U while petlji bin = 111, i (vrednost % 2) = 0, znaci treba da se postavi 0 u bin promenljivoj da bi bin iznosila 1110, e sada ako je (vrednost % 2) = 0, i onda se mnozi sa promenljivom mnozi koja iznosi mnozi 1000, onda je bin(111) += 0 * 1000, onda je bin i dalje 111 jer 111 = 111 + 0 je isto 111. Valjda sam jasno objasnio, mislim kod radi savrseno samo mi nije jasno na koju foru je ovo gore.


Stvar je u sledećem: pomoću (vrednost % 2) dobijam poslednju cifru preostalog broja. U mnozi se čuva trenutno mesto na kojem treba da se nađe ta cifra (znači prvo cifra jedinica, pa desetica, itd.).

Do pomenute situacije dolazi kada se prvo uzima najviša cifra (a ne poslednja). U tvom primeru, radi se o broju 0111, a ne 1110 kao što si ti naveo. Razlika je u tome što bi se sa brojem 1110 prvo dodalo 0 (vrednost %2) * 1 (mnozi), zatim 1 * 10, pa 1 * 100, i tek onda 1 * 1000, a ne obrnuto (tj. 1 * 1 + 1 * 10 + 1 * 100 + 0 * 1000).

Nadam se da sam pojasnio.

Toliko.



[ tOwk @ 01.07.2001. 15:37 ] @
I pogledao sam tvoj kod, i primetio sam samo jedno. U HoldBitConversion[offset] se ne nalaze znakovi '0' i '1', ve brojne vrednosti 0 i 1. Tako, uklanjanjem navodnika iz tvojih if konstrukcija se dobija taan rezultat.

Naravno, umesto tih desetak redova if i else konstrukcija, moe se to uraditi i u dve linije:

Code:

test *= 10;
test += HoldBitConversion[offset];


ili u jednoj:

Code:

test = test * 10 + HoldBitConversion[offset];


Toliko.