Zamiana liczby dziesiętnej na szesnastkową

Odpowiedz Nowy wątek
Aniusia:)
2009-11-19 00:03
Aniusia:)
0

Witajcie,
mam do napisania program w jezyku c++, ktory bedzie wyswietlal liczbe dziesietna w systemie szesnastkowym. Nie jestem biegla w pisaniu takich programow wiec zwracam sie do Was, jezeli znajdzie sie jakis mily kolega i pomoze mi w napisaniu programu bede bardzo wdzieczna. Dodam program, ktory zamienia liczbe dziesietna na system binarny, z tego co sie dowiedzialam wystarczy go zedytowac i dodac kilka wierszy. Dziekuje za pomoc :)

// zamiana liczby dziesietnej na binarna

#include <stdio.h>
#include <stdlib.h>

main()
{
    int liczba,reszta;
    system("clear");
    printf("\n podaj liczbe calkowita : ");
    scanf("%i",&liczba);
    printf("\n liczba=%i",liczba);
    while(liczba!=0)
    {
        reszta=liczba%2;
        printf("\n%i",reszta);
        liczba=liczba/2;
    }
    puts("\n");
    return 0;
}
edytowany 1x, ostatnio: furious programming, 2018-10-07 21:23

Pozostało 580 znaków

2009-11-19 00:31

Rejestracja: 11 lat temu

Ostatnio: 9 lat temu

0

Zamiana liczb dziesiętnych na szesnastkowe

Tak jak w systemie dwójkowym, zamiana z dziesiętnego na szesnastkowy jest realizowana za pomocą nazywaną metoda reszty. W tej metodzie powtarzamy dzielenie liczby dziesiętnej przez liczbę podstawy (w tym przypadku 16). Wtedy zamienimy resztę za każdym razem na liczbę szesnastkową

Przykład:

Zamienić liczbę dziesiętną 24032 na liczbę szesnastkową.

24032 / 16 = 1502 ; reszta = 0

1502 / 16 = 93; reszta = 14 lub E

93 / 16 = 5; reszta = 13 lub D

5 / 16 = 0; reszta = 5

Odczytując reszty od tyłu otrzymujemy liczbę szesnastkową: 5DE0

Pozostało 580 znaków

Anusia:)
2009-11-19 00:39
Anusia:)
0

na papierze nie mam problemow z przeliczaniem, nie mam pojecia o pisaniu w jezyku "c", sadze, ze przy moich dzisiejszych wiadomosciach nie wyskrobie tego sama, jesli kolega bylby tak mily i zechcial mi pomoc w bardziej dostepny sposob bylo super :)

Pozostało 580 znaków

Aniusia:)
2009-11-19 00:56
Aniusia:)
0

// zamiana liczby dziesietnej na szesnastkowa

#include <stdio.h>
#include <stdlib.h>

main()
{int liczba,reszta;
system("clear");
printf("\n podaj liczbe calkowita : ");
scanf("%i",&liczba);
printf("\n liczba=%i",liczba);
while(liczba!=0)
{reszta=liczba%16;
printf("\n%i",reszta);
liczba=liczba/16;
}
puts("\n");
return 0;
}

a jednak cos wyskrobalam, program dziala jak powinien, poprawnie konwertuje liczy, natomiast zalezaloby mi jeszcze na dopisaniu komendy, ktora po wykryciu reszty zdzielenia np. 10 wyswietli"A" i tak odpowiednio do 15. czy bedzie to:

if(reszta=10)
printf("\nA)

sadze, ze nie, aczkolwiek warto zapytac, jesli tak to umiescic to za petla czy po petli while? :)

Pozostało 580 znaków

sadfg
2009-11-19 00:58
sadfg
0

Nie działa jak powinien, wyświetla odwrotnie...

Pozostało 580 znaków

Aniusia:)
2009-11-19 01:02
Aniusia:)
0

// zamiana liczby dziesietnej na szesnastkowa

#include <stdio.h>
#include <stdlib.h>

main()
{int liczba,reszta;
system("clear");
printf("\n podaj liczbe calkowita : ");
scanf("%i",&liczba);
printf("\n liczba=%i",liczba);
while(liczba!=0)
{reszta=liczba%16;
printf("\n%i",reszta);
liczba=liczba/16;
}
puts("\n");
return 0;
}

a jednak cos wyskrobalam, program dziala jak powinien, poprawnie konwertuje liczy, natomiast zalezaloby mi jeszcze na dopisaniu komendy, ktora po wykryciu reszty zdzielenia np. 10 wyswietli"A" i tak odpowiednio do 15. czy bedzie to:

if(reszta=10)
printf("\nA)

sadze, ze nie, aczkolwiek warto zapytac, jesli tak to umiescic to za petla czy po petli while? :)

Pozostało 580 znaków

Aniusia:)
2009-11-19 01:08
Aniusia:)
0
sadfg napisał(a)

Nie działa jak powinien, wyświetla odwrotnie...

Dla mnie dziala poprawnie czytajac od z dolu do gory, przykladowo liczba 2009 to 7"13"9

Pozostało 580 znaków

sadfg
2009-11-19 01:10
sadfg
0

Zawsze myślałem, że to od najbardziej znaczącej cyfry się zaczyna... Poza tym takich wątków były dziesiątki.

Pozostało 580 znaków

2009-11-19 02:40

Rejestracja: 14 lat temu

Ostatnio: 2 godziny temu

0

Tu jest przykład w C#, a w C++ będzie bardzo podobnie.

W zależności, czy liczba ma być 4-bitowa, 8-bitowa, czy 16-bitowa, wywołujemy odpowiednio IntToHex4, IntToHex8, IntToHex16. Analogicznie można zbudować IntToHex32 i IntToHex64, o ile kompilator obsługuje liczby naturalne (unsigned) 32-bitowe i 64-bitowe.

Są to funkcje zwracające napis string zawierający zapis szesnastkowy danej liczby.

        // Cyfry systemu szestnastkowego
        string HexDigits = "0123456789ABCDEF";

        // Zamiana liczby na HEX 4bit
        private string IntToHex4(int Data)
        {
            string H = "";
            H = HexDigits[Data].ToString();
            return H;
        }

        // Zamiana liczby na HEX 8bit
        private string IntToHex8(int Data)
        {
            int D1 = Data >> 4;
            int D2 = Data & 15;
            string H1 = IntToHex4(D1);
            string H2 = IntToHex4(D2);
            string H = H1 + H2;
            return H;
        }

        // Zamiana liczby na HEX 16bit
        private string IntToHex16(int Data)
        {
            int D1 = Data >> 8;
            int D2 = Data & 255;
            string H1 = IntToHex8(D1);
            string H2 = IntToHex8(D2);
            string H = H1 + H2;
            return H;
        }

Pozostało 580 znaków

2009-11-19 11:09

Rejestracja: 13 lat temu

Ostatnio: 1 rok temu

0

wiesz, równie dobrze mógłbyś jej powiedzieć, zeby użyła;
int main()
{
.....
printf("%X", liczba);
}
ale chyba nie o to chodzi? wątpię żeby Twoja metoda była dla autorki bardziej zrozumiała niż ta, z którą zaczęła.


no to pojechałem z nieobecnością.. chwila przerwy i prawie rok przeleciał

Pozostało 580 znaków

2009-11-19 12:15

Rejestracja: 10 lat temu

Ostatnio: 3 minuty temu

0
Aniusia:) napisał(a)

a jednak cos wyskrobalam, program dziala jak powinien, poprawnie konwertuje liczy, natomiast zalezaloby mi jeszcze na dopisaniu komendy, ktora po wykryciu reszty zdzielenia np. 10 wyswietli"A" i tak odpowiednio do 15.

Konwersji nie sprawdzałem, jeśli masz dobrze można wszystkie pół bajty (0-15) zamieniać na chary. Zamiast kolumny ifów zrób sobie tablicę charów i w pętelce porównuj ze sobą odpowiednie zmienne. Pętla wyglądałaby mniej więcej tak:

char znak[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char final_hex;
for(int j=0; j<16;j++)
    {
        znak[j];
        if(pre_final==j)//pre_final to nasz pół bajt 0-15
        {
            final_hex=znak[j];
        }
        }

Z tymże musiałabyś dopisać rozpoznawanie ilości pół bajtów w przekonwertowanej wartości i odpowiednio zmodyfikować powyższą pętle. Tak, specjalnie zostawiłem to Tobie ;-P

EDIT: Spojrzałem na konwersję, ja zawsze konwertowałem sobie najpierw na binarkę a potem dopiero na hex, no ale ile głów tyle pomysłów ;-)


Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0