Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Funkcija koja na osnovu neoznacenog broja formira nisku koja sadrzi heksadekadni zapis tog broja

[es] :: C/C++ programiranje :: Funkcija koja na osnovu neoznacenog broja formira nisku koja sadrzi heksadekadni zapis tog broja

[ Pregleda: 1336 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

___
Pančevo

Član broj: 137559
Poruke: 58
*.static.madnet.rs.



Profil

icon Funkcija koja na osnovu neoznacenog broja formira nisku koja sadrzi heksadekadni zapis tog broja09.03.2011. u 18:53 - pre 159 meseci
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;
}


 
Odgovor na temu

enaB
Beograd

Član broj: 59951
Poruke: 397
*.dynamic.sbb.rs.

ICQ: 276002814


+9 Profil

icon Re: Funkcija koja na osnovu neoznacenog broja formira nisku koja sadrzi heksadekadni zapis tog broja09.03.2011. u 23:53 - pre 159 meseci
Može li ovako? :)


Code:
#include <stdio.h>

void main() {
    int  x, i, b, n;
    char niska[9];

    printf ("Unesite broj: ");
    scanf("%d", &x);

    for(n=0, i=7; i>=0; i--) {
        if(!(b=(x>>(i*4))&15) && !n)
            continue;
        niska[n++]=(b>9)?(b+'A'-10):(b+'0');
    }
    niska[n]='\0';

    printf ("0x%s\n", niska);
}
 
Odgovor na temu

___
Pančevo

Član broj: 137559
Poruke: 58
*.static.madnet.rs.



Profil

icon Re: Funkcija koja na osnovu neoznacenog broja formira nisku koja sadrzi heksadekadni zapis tog broja10.03.2011. u 06:24 - pre 159 meseci
Vau, to deluje jedno 100 puta jednostavnije. Hvala puno!
 
Odgovor na temu

enaB
Beograd

Član broj: 59951
Poruke: 397
*.dynamic.sbb.rs.

ICQ: 276002814


+9 Profil

icon Re: Funkcija koja na osnovu neoznacenog broja formira nisku koja sadrzi heksadekadni zapis tog broja10.03.2011. u 08:28 - pre 159 meseci
Nema na čemu :) Samo nisam stavio da bude neoznačen, to možeš da promeniš.
Isto kao i u tvom kodu unsigned int x ali se unosi sa
scanf("%u", &x);

%u umesto %d.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Funkcija koja na osnovu neoznacenog broja formira nisku koja sadrzi heksadekadni zapis tog broja

[ Pregleda: 1336 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.