[ ___ @ 09.03.2011. 18:53 ] @
Iz nekog razloga, ne ispisuje se niska na kraju. Ako bi neko izdvojio koji minut da baci pogled...bila bih mu veoma zahvalna. Code: /* 2. Napisati funkciju koja na osnovu neoznacenog broja x formira nisku s koja sadrzi heksadekadni zapis broja x, koristeci algoritam za brzo prevodjenje binarnog u heksadekadni zapis (svake 4 binarne cifre se zamenjuju jednom odgovarajucom heksadekadnom cifrom). */ #include <stdio.h> #include <stdlib.h> #include <math.h> #define broj_bitova 32 #define dimenzija_niske 32/4 + 1 // ukupan broj bitova delimo na celine od cetiri bita, a potom dodajemo jos jedan, za terminisucu nulu void to_hex(unsigned int x, char s[]) { unsigned int mask; // maska koja ce nam pomoci za dobijanje zeljenog bita char c; // pomocni karakter koji cuva trenutni bit u vidu karaktera mask = 1 << (broj_bitova - 1); int i, j, suma; for(i = 0;i<dimenzija_niske - 1;i++) { // idemo do terminisuce nule, odnosno karakter PRE nje suma = 0; // postavimo sumu na nula, resetujemo je takoreci for(j = 0;j < 4;j++) { // pomocna petljica, samo za manevrisanje u okviru cetiri bita c = (mask & x ? '1' : '0'); // izvucemo bit iz x suma += atoi(&c) * pow(2,3-j); // na sumu dodamo celobrojnu vrednost naseg karaktera, pomnozenu odgovarajucim stepenom broja 2 -> na taj nacin se prelazi iz binarnog u dekadni sistem mask = mask >> 1; // pomerimo jedinicu jedno mesto u desno } s[i] = suma; } s[i] = '\0'; // i na kraju terminisuca nula, kako bi s uopste funkcionisalo kao niska /* ne zaboravimo da prebacujemo u HEX dekadni sistem, znaci treba brojevima izmedju 9 i 16 dodeliti slovne oznake */ for(i = 0;s[i]!=0; i++) { switch(s[i]) { case 10 : s[i] = 'A'; break; case 11 : s[i] = 'B'; break; case 12 : s[i] = 'C'; break; case 13 : s[i] = 'D'; break; case 14 : s[i] = 'E'; break; case 15 : s[i] = 'F'; break; } } } void pisi_nisku(char s[]) { int i; for(i=0; s[i]!=0; i++) { putchar(s[i]); } } /* pomocna funkcija koja ce ispisati bitove unetog broja x */ void pisi_bitove(unsigned int x) { unsigned int mask = 1; for(mask = 1 << (broj_bitova - 1);mask!=0;mask= mask >> 1) putchar(x & mask ? '1' : '0'); putchar('\n'); } int main(int argc, char argv[]) { unsigned int x; char s[dimenzija_niske]; printf("\nUnesite broj: "); scanf("%d", &x); to_hex(x, s); printf("\nBinarni zapis unetog broja x je: "); pisi_bitove(x); printf("\nIsti broj u heksadekadnom zapisu je: "); pisi_nisku(s); putchar('\n'); return 0; } |