Forumi


Povratak   PC Ekspert Forum > Računala > Software > Web dizajn, programiranje i ostalo
Ime
Lozinka

Odgovori
 
Uređivanje
Staro 28.03.2008., 00:34   #1
kalixius
...carpe diem...
 
kalixius's Avatar
 
Datum registracije: Jun 2006
Lokacija: Zagreb - okolica
Postovi: 1,363
Zadatak u programiranju-hitno

Postoji li možda neki kolega programer stručan u tome području.

Radi se o nekim lakšim zadacima koje bi trebao do sutra riješiti jer imam vježbe,a programiranje mi je potpuna strano.

Treba uzeti posljednje znamenke (npr. 3601) i zapisati ih u obliku dva dvoznamenkasta broja? (objasniti tak da mogu i kolegi riješiti njegov broj )
Zatim treba oduzeti drugi od prvoga broja primjenom tehnike dvojnog komplementa(neka mi netko i ovo objasni) sa prikazom binarnog broja u 8 bita sa predznakom i prikažite rezultat u binarnom, dekadskom,oktalnom i heksadekadskom brojevnom sustavu?


Pa ako netko ima vremena onda bi mi to trebalo sutra do 9h. Hvala
kalixius je offline   Reply With Quote
Staro 28.03.2008., 00:59   #2
munst0r
Premium
Moj komp
 
munst0r's Avatar
 
Datum registracije: Mar 2004
Lokacija: Bjelovar/Zagreb
Postovi: 357
1. Treba uzeti posljednje znamenke cega? Koliko posljednjih znamenki? Zapisati ih u obliku dva dvoznamenkasta broja? Dekadska dvoznamenkasta broja? Wtf?


No dobro, recimo da smo napravili ovo pod tockom 1 i sad imamo dva binarna broja koja zelimo oduzeti tehnikom dvojnog komplementa. Zadano je da te brojeve prikazujemo u 8 bitova.

Ajmo za primjer oduzeti brojeve 72 i 42.

72 zapisan binarno je 01001000
42 zapisan binarno je 00101010

Sada, uzmimo drugi broj i napravimo od njega dvojni komplement.
To se radi u dva koraka:
1) zamijeni sve nule s jedinicama, a jedinice s nulama
2) dodaj mu 1 (dakle, zbroji ga s brojem 1)

Znaci, imamo
00101010
Radimo zamjenu nula i jedinica i dodajemo 1
11010101
+
00000001
11010110

Dakle, dvojni komplement broja 00101010 (42) je broj 11010110 (214).

Sada zbrojimo broj 01001000 (72) i dobiveni dvojni komplement 11010110 (214).

01001000
+
11010110
100011110

No, dobiveni broj nam ima 9 bitova. Zbog toga prvi bit bacamo u smece i kao dobiveni rezultat uzimamo 00011110. A to je 30. Dakle, tocno smo oduzeli...




Zbrajanje binarnih brojeva radi se isto kao i zbrajanje dekadskih.

Napisemo ih jednog ispod drugog, tako da nam se znamenke poklope.
0+0=0
0+1=1
1+0=1
1+1=10 (znaci, pisemo 0, a 1 ide dalje i zbraja se s brojevima u sljedecem koraku)

Zadnje izmijenjeno od: munst0r. 28.03.2008. u 01:33.
munst0r je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 28.03.2008., 01:18   #3
munst0r
Premium
Moj komp
 
munst0r's Avatar
 
Datum registracije: Mar 2004
Lokacija: Bjelovar/Zagreb
Postovi: 357
Pretvaranje iz jednog brojevnog sustava u drugi

Ajmo dobiveni broj 00011110 pretvoriti u dekadski, heksadekadski i oktalni sustav.


1) Iz binarnog u dekadski

Indeksirajmo sve znamenke binarnog broja, krenuvsi od zadnje.

Napisimo broj, a ispod svake znamenke njezin indeks.

0 0 0 1 1 1 1 0
7 6 5 4 3 2 1 0

Sada gledamo SAMO indekse ispod jedinica (one ispod nula zanemarujemo). Dakle, svaki od tih indeksa ispod jedinica stavimo "na" dvojku i izracunamo tu potenciju. Na kraju sve te dobivene potencije zbrojimo. Vjerojatno ti nista nije jasno iz ovih zadnjih par recenica. Ne znam kako da to objasnim rijecima. Ali nadam se da ce sve biti jasno nakon konretnog primjera:

dekadski_broj = 2^1 + 2^2 + 2^3 + 2^4 =
= 2 + 4 + 8 + 16 =
= 30


Evo jos jedan primjer. Broj 01001000 (72) pretvaramo u dekadski broj:

0 1 0 0 1 0 0 0
7 6 5 4 3 2 1 0

dekadski_broj = 2^3 + 2^6 =
= 8 + 64 =
= 72

Dakle, gledamo samo one indekse (potencije) ispod jedinica.


2) Iz binarnog u heksadekadski

Ovo je veoma jednostavno.
Samo treba "zapamtiti" ovu tablicu (ne napamet, sve ide po redu i lako ju je izvesti na papiru u par sekundi):

0000 = 0
0001 = 1
0010 = 2
0011 = 3
0100 = 4
0101 = 5
0110 = 6
0111 = 7
1000 = 8
1001 = 9
1010 = A
1011 = B
1100 = C
1101 = D
1110 = E
1111 = F

Nakon toga trebamo provjeriti da li nam je broj znamenaka binarnog broja djeljiv s 4. Ako nije, onda nadopisemo ispred nule po potrebi. Dakle, binarni broj mora biti napisan s 4, 8, 12, 16, ... znamenaka.

Sada samo podijelimo broj na grupe po 4 znamenke i gledamo u tablicu.

Primjer:

Pretvaramo 00011110 u heksadekadski:

0001|1110
1E

Ili 1001000 u heksadekadski zapis.
Odmah primijetimo da imamo 7 znamenki, pa nepisemo jednu nulu ispred i grupiramo po 4 znamenke.

0100|1000
48


3) Iz dekadskog u binarni


Idemo 72 pretvoriti u binarni broj.

Ni ovo nije nista komplicirano. Radi se tako da cjelobrojno dijelimo broj s 2 dokle god ide. S obzirom da radimo cjelobrojno dijeljenje, necemo nikada dobiti decimalni broj, nego cijeli broj, a ostatak ce nam biti 0 ili 1.

Dakle, sada necemo reci da je 5/2 = 2.5, nego 5/2 = 2 i ostatak 1


Ajmo to demonstrirati na 72. Ispod pisemo rezultat dijeljenja s 2, a desno ostatak.

72 | 0
36 | 0
18 | 0
09 | 1
04 | 0
02 | 0
01 | 1

I to je to.
Sada samo prepisemo ove nule i jedinice odozdola i imamo 1001000. S obzirom da se u zadatku trazi prikaz na 8 bitova, onda jos dodamo nulu na pocetak i imamo: 01001000




Nemam sad vise vremena. Mozda nastavim nekada.

Zadnje izmijenjeno od: munst0r. 28.03.2008. u 01:29.
munst0r je offline   Reply With Quote
Staro 31.03.2008., 13:50   #4
expozed
Registered User
 
expozed's Avatar
 
Datum registracije: Mar 2008
Lokacija: ZG-DA
Postovi: 3
Zanimljivo, a kako bi bilo kada bi npr. imali broj 19 i 37, te moras oduzet veci broj od manjeg? Znaci sve je isto, prikaz binarnog broja u 8 bita sa predznakom. Jel onda radis dvojni komplement veceg broja pa oduzimas binarni broj 19 od dvojnog 37? Rezultat bi trebao biti -18 ne?
expozed je offline   Reply With Quote
Staro 31.03.2008., 14:28   #5
expozed
Registered User
 
expozed's Avatar
 
Datum registracije: Mar 2008
Lokacija: ZG-DA
Postovi: 3
Ajd da probam:

znaci broj pretvorim u dvojni 19(10) = 00010011(2)
broj je 37(10) = 00100101(2)

pretvorimo broj 19(10) = 00010011(2) u dvojni
11111111
00010011
---------
11101100
+1
---------
11101101

e sad po ovome sto je munst0r napisao
manji broj oduzmem od veceg

00100101
+
11101101
---------
100010010

sto iznosi da je 18, a trebao bi biti -18, ako se 9bit izbacuje onda je MSB 0 sto znaci da je broj pozitivan?

Kako Hexadecimalni broj prikazati kao negativan? isto vrijedi i za oktalni?

Zadnje izmijenjeno od: expozed. 31.03.2008. u 14:58.
expozed je offline   Reply With Quote
Staro 31.03.2008., 15:22   #6
expozed
Registered User
 
expozed's Avatar
 
Datum registracije: Mar 2008
Lokacija: ZG-DA
Postovi: 3
Hah! Zaj*b

nije kako sam naveo iznad vec kontra

19(10) = 00010011(2)
broj 37(10) = 00100101(2) u dvojni

pretvorimo broj 37(10) = 00100101(2) u dvojni
11111111
00100101
---------
11011010
..........+1
---------
11011011

pa ispada da je

00010011
+
11011011
---------
11101110

ako se pretvori taj broj u decimalni ispada:
11101110(2)=(-2)^7 + 2^6 + 2^5 + 2^3 + 2^2 + 2^1 = -128 + 110 = -18



isprike na 3 posta, ali nisam editirao da se vidi gdje grijesim
expozed je offline   Reply With Quote
Staro 01.04.2008., 01:15   #7
munst0r
Premium
Moj komp
 
munst0r's Avatar
 
Datum registracije: Mar 2004
Lokacija: Bjelovar/Zagreb
Postovi: 357
Citiraj:
Autor expozed Pregled postova
ako se pretvori taj broj u decimalni ispada:
11101110(2)=(-2)^7 + 2^6 + 2^5 + 2^3 + 2^2 + 2^1 = -128 + 110 = -18
Nije to dobro...
Dok pretvaras iz binarnog broja u dekadski uvijek je 2^nesto. Ne moze biti -2 nikada. Sta da smo imali zapis na 9 bitova? Tada bi ti prvi bit bio na osmu potenciju. A to je pozitivan broj...


A sad, da bi mogli reci na koji nacin ispravno oduzeti veci od manjeg binarnog broja, prvo moramo tocno definirati problem, tj. situaciju u kojoj se nalazimo (nacin na koji zapisujemo negativne binarne brojeve).


1. opcija: Negativne binarne brojeve zapisujemo isto kao i dekadske. Dakle, samo nakeljimo '-' ispred broja.

U ovom slucaju je situacija prilicno jasna. Oduzimanje cemo obaviti isto kao sto bi to napravili i s dekadskim brojevima. Okrenut cemo redoslijed brojeva i normalno oduzeti manji od vecega. Zatim ispred rezultata samo nakeljimo - i eto nam rjesenja.

No, moram reci da je ova siutacija dosta rijetka. Mozda nije neobicna negdje gdje se samo uci malo racunati s binarnim brojevima. Ali, u svijetu racunala takvo sto ne postoji.


2. opcija: Ne podrzavamo negativne binarne brojeve.

To je kao da pri deklaraciji varijable u nekom programskom jeziku (koji to podrzava) stavimo "unsigned" (samo pozitivni brojevi).
Primjer u C-u bi glasio:
unsigned int pero;

Dakle, ako koristimo 8 bita za prikaz broja, onda znaci da baratamo s brojevima iz raspona [0-255].

Ajmo to pokazati na primjeru.

Racunamo 19 - 37.
19 = 00010011
37 = 00100101

Prvo nalazimo dvojni komplement od 37.

11011010
+
00000001
---------
11011011

Sada zbrojimo 19 i dvojni komplement od 37.

00010011
+
11011011
---------
11101110 = 238

Dobili smo 238. I u ovom slucaju je to sasvim ispravan rezultat i s njime vise nista ne treba raditi. Jedino, valja primijetiti da je 238 - (255 + 1) = -18. A to je upravo onaj rezultat koji bi ocekivali u dekadskom sustavu.


3. opcija: Prvi bit koristimo kao bit predznaka.


Ako i sada koristimo 8 bitova za prikaz brojeva, onda mozemo raditi s rasponom [-128, 127] (opet je to 255 brojeva ukupno).

No, sto tocno znaci da nam prvi bit predstavlja predznak? To znaci ako je taj bit 0, onda imamo pozitivan broj, a ako je 1, onda imamo negativan broj. No, necemo tu jedinicu samo zanemariti i razmisljati o njoj kao o obicnom minusu, a o ostalih 7 bitova kao o pravom broju, nego je i ta jedinica dio broja.

Konkretno, to znaci sljedece.
Ako imamo broj kojemu je prvi bit 0, onda je to najobicniji pozitivni binarni broj i mozemo ga odmah pretvoriti u dekadski broj (na dobro poznati nacin).
No, ako je prvi bit 1, onda cemo prvo taj broj dvojno komplementirati i tek onda ga pretvoriti u dekadski broj.

Evo primjera:
(ovo je copy/paste prethodnog primjera s malo dodatka na kraju)

Racunamo 19 - 37.
19 = 00010011
37 = 00100101

Prvo nalazimo dvojni komplement od 37.

11011010
+
00000001
---------
11011011

Sada zbrojimo 19 i dvojni komplement od 37.

00010011
+
11011011
---------
11101110

Dobili smo nas rezultat, ali vidimo da je prvi bit 1, pa cemo ga dvojno komplementirati prije pretvorbe u dekadski sustav. Komplement je 00010010. A to je broj 18. Naravno, mi znamo da je on negativan, pa mozemo napisati -18.
munst0r je offline   Reply With Quote
Staro 01.04.2008., 01:34   #8
Matesonik
prcknedl
Moj komp
 
Matesonik's Avatar
 
Datum registracije: Dec 2005
Lokacija: Zagreb
Postovi: 3,131
Citiraj:
Autor kalixius Pregled postova
Treba uzeti posljednje znamenke (npr. 3601) i zapisati ih u obliku dva dvoznamenkasta broja? (objasniti tak da mogu i kolegi riješiti njegov broj )
Imas neki broj, recimo 4853601.

Dvije zadnje znamenke dobijes pomocu mod 100, u Pascalu to izgleda ovako: br1:=pocetni_br div 100. Dobijes 1 jer je to ostatak od dijeljenja pocetnog broja sa 100.

Druge dvije znamenke dobijes ovako: prvo napravis pocetni_broj:= pocetni_broj div 100 kako bi se rijesio zadnjih dviju znamenaka koj si vec obradio i zatim kao i u gornjem primjeru nadjes zadnje dvije pomocu mod.

Za ovo ti broj mora biti integer.

Zadnje izmijenjeno od: Matesonik. 01.04.2008. u 02:15.
Matesonik je offline   Reply With Quote
Staro 01.04.2008., 01:44   #9
munst0r
Premium
Moj komp
 
munst0r's Avatar
 
Datum registracije: Mar 2004
Lokacija: Bjelovar/Zagreb
Postovi: 357
Citiraj:
Autor Matesonik Pregled postova
Imas neki broj, recimo 4853601.

Dvije zadnje znamenke dobijes pomocu div 100, u Pascalu to izgleda ovako: br1:=pocetni_br div 100. Dobijes 1 jer je to ostatak od dijeljenja pocetnog broja sa 100.

Druge dvije znamenke dobijes ovako: prvo napravis pocetni_broj:= pocetni_broj mod 100 kako bi se rijesio zadnjih dviju znamenaka koj si vec obradio i zatim kao i u gornjem primjeru nadjes zadnje dvije pomocu div.

Za ovo ti broj mora biti integer.

Je, sve ok. Osim sto si zamijenio DIV i MOD...


DIV je cjelobrojno dijeljenje.
MOD je ostatak cjelobrojnog dijeljenja.

Ako zelimo zadnje dvije znamenke, onda ih dobimo sa MOD 100. A uklonimo ih sa DIV 100 (broj podijelimo sa 100, a necemo dobiti decimalni broj jer je to cjelobrojno dijeljenje).


I naravno, kljucne rijeci DIV i MOD vrijede samo za Pascal...
munst0r je offline   Reply With Quote
Staro 01.04.2008., 02:15   #10
Matesonik
prcknedl
Moj komp
 
Matesonik's Avatar
 
Datum registracije: Dec 2005
Lokacija: Zagreb
Postovi: 3,131
Citiraj:
Autor munst0r Pregled postova
Je, sve ok. Osim sto si zamijenio DIV i MOD...


DIV je cjelobrojno dijeljenje.
MOD je ostatak cjelobrojnog dijeljenja.

Ako zelimo zadnje dvije znamenke, onda ih dobimo sa MOD 100. A uklonimo ih sa DIV 100 (broj podijelimo sa 100, a necemo dobiti decimalni broj jer je to cjelobrojno dijeljenje).


I naravno, kljucne rijeci DIV i MOD vrijede samo za Pascal...
Hvala na ispravku,budem editirao. Ipak je rano ujutro...
Matesonik je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 24.03.2009., 11:33   #11
Rebbit
Premium
Moj komp
 
Datum registracije: Mar 2007
Lokacija: Zg
Postovi: 660
joj kolega kolega kad te kazem radovanu...
__________________
nek sam isti kao on, ma nek sam isti ko stari moj, dok zivot juri, ja cu lagano....


Lenovo Thinkpad T14
Logitech MX Master 2S
Logitech MX Keys

Galaxy S23+

Rebbit je offline   Reply With Quote
Staro 24.03.2009., 13:41   #12
domy1
Yugokiller
Moj komp
 
domy1's Avatar
 
Datum registracije: Jun 2006
Lokacija: Dugo Selo
Postovi: 646
A i ti si isto, isčupaš od prošle godine, pa valjda je nešto naučio do sad, a nadam se da si i ti
__________________

domy1 je offline   Reply With Quote
Staro 24.03.2009., 14:51   #13
Rebbit
Premium
Moj komp
 
Datum registracije: Mar 2007
Lokacija: Zg
Postovi: 660
ja mislio da je to novi post.. nisam gledo datum jer m ije frend sam poslo link od toga... pa sam mislio da je to novijeg datuma, al sad vidim da sam ovo izvuko iz arhive masne...
sry mods
__________________
nek sam isti kao on, ma nek sam isti ko stari moj, dok zivot juri, ja cu lagano....


Lenovo Thinkpad T14
Logitech MX Master 2S
Logitech MX Keys

Galaxy S23+

Rebbit je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Odgovori



Pravila postanja
Vi ne možete otvarati nove teme
Vi ne možete pisati odgovore
Vi ne možete uploadati priloge
Vi ne možete uređivati svoje poruke

BB code je Uključeno
Smajlići su Uključeno
[IMG] kod je Uključeno
HTML je Isključeno

Idi na