Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
basior89
Nowy
Dołączył: 09 Lut 2007
Posty: 3
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: ruda śl
|
Wysłany: Pią 14:44, 09 Lut 2007 Temat postu: Zamiana liczby dziesiętnej na heksadecymalną |
|
|
mam zadanie i nie umie se dać rady pomóżcie
W systemie szesnastkowym (heksadecymalnym), którym często posługują się komputery, do zapisu liczb całkowitych
używa się aż 16 znaków (cyfr): 0123456789ABCDEF, o wartościach z zakresu od 0 do 15. Maksymalna liczba
trzycyfrowa w zapisie heksadecymalnym ma wartość FFF i jest równa 15*162+15*16+15=4095.
Napisz program, który wczyta liczbę całkowitą i wypisze jej reprezentację w systemie szesnastkowym.
Wejście
Pierwszy i jedyny wiersz wejścia zakończony znakiem nowej linii zawiera liczbę całkowitą z zakresu 0..4095.
Wyjście
Wyjście zgodne z przykładem.
Post został pochwalony 0 razy
Ostatnio zmieniony przez basior89 dnia Nie 11:56, 11 Lut 2007, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
 |
|
 |
Szymek
Administrator
Dołączył: 22 Maj 2006
Posty: 103
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
Wysłany: Sob 20:46, 10 Lut 2007 Temat postu: |
|
|
No to robisz tak:
- wczytujesz liczbę całkowitą (np. 169)
- dzielisz ją przez 16 - wynik dzielenia modulo (reszta, MOD) przez 16 to pierwsza od końca cyfra liczby szesnastkowej (np. jeżeli 169 MOD 16 to 9, to pierwsza od końca (czyli ostatnia) cyfra to 9)
- wynik dzielenia całkowitego poprzedniego wyniku znowu dzielisz przez 16 (np. 10, czyli szesnastkowe A). Jeżeli dzielenie całkowite tej liczby przez 16 to 0, to reszta z dzielenia jest pierwszą cyfrą tej liczby (czyli A).
Trochę to skomplikowałem, niżej będzie inny przykład.
Tabelka (wykaz) liczb dziesiętnych i odpowiadających im liczb heksadecymalnych:
1 - 1
2 - 2
3 - 3
4 - 4
5 - 5
6 - 6
7 - 7
8 - 8
9 - 9
10 - A
11 - B
12 - C
13 - D
14 - E
15 - F
Inny przykład (2034 na liczbę heksadecymalną):
2034 DIV 16 = 127
2034 MOD 16 = 2 -> ostatnia liczba
127 DIV 16 = 7
127 MOD 16 = 15 (F szesnastkowo) -> przedostatnia liczba
7 DIV 16 = 0
7 MOD 16 = 7 -> przed-przed-ostatnia liczba -> jest pierwsza, bo wynik dzielenia całkowitego 7 przez 16 to 0
Otrzymana liczba: 7F2
Jakieś pytania? Pisz w tym temacie.
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
 |
basior89
Nowy
Dołączył: 09 Lut 2007
Posty: 3
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: ruda śl
|
Wysłany: Nie 9:10, 11 Lut 2007 Temat postu: |
|
|
a może koś podać cały kod źródłowy prosze
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
 |
Szymek
Administrator
Dołączył: 22 Maj 2006
Posty: 103
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
Wysłany: Nie 10:53, 11 Lut 2007 Temat postu: |
|
|
Ale jak ci podam cały kod źródłowy, to się nic nie nauczysz. Dobra, podam ci kod, ale nie sprawdzałem go, więc nie gwarantuję, że będzie poprawnie działał:
Kod: |
program DlaBasiora;
var
temp: integer; {zmienna tymczasowa}
liczba: integer;
hex: string; {czyli liczba szesnastkowa w postaci znaków}
begin
Write('Podaj liczbe: ');
Readln(liczba);
hex := ''; {pusty ciąg znaków}
repeat
temp := liczba MOD 16;
if temp = 1 then hex := '1' + hex;
if temp = 2 then hex := '2' + hex;
if temp = 3 then hex := '3' + hex;
if temp = 4 then hex := '4' + hex;
if temp = 5 then hex := '5' + hex;
if temp = 6 then hex := '6' + hex;
if temp = 7 then hex := '7' + hex;
if temp = 8 then hex := '8' + hex;
if temp = 9 then hex := '9' + hex;
if temp = 10 then hex := 'A' + hex;
if temp = 11 then hex := 'B' + hex;
if temp = 12 then hex := 'C' + hex;
if temp = 13 then hex := 'D' + hex;
if temp = 14 then hex := 'E' + hex;
if temp = 15 then hex := 'F' + hex;
liczba := liczba DIV 16;
until liczba = 0;
Write('Uzyskana liczba to: ',hex);
end.
|
W razie problemów pisz. Następnym razem nie napiszę żadnego programu, bo to jest dziecinnie łatwe.
Wiem, że ten kod było można napisać prościej, ale nie chciało mi się nad tym myśleć.
BTW: popraw nazwę tematu na jakąś odpowiadającą jego treści (np.: "Zamiana liczby dziesiętnej na heksadecymalną", czy coś w tym stylu). Jeśli tego nie zrobisz, będę zmuszony postawić ci ostrzeżenie. (porządek na forum musi być)
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
 |
basior89
Nowy
Dołączył: 09 Lut 2007
Posty: 3
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: ruda śl
|
Wysłany: Nie 11:57, 11 Lut 2007 Temat postu: |
|
|
dzięki za pomoc jak by ktoś jeszcze mógł mi wysłać schemat blokowy był bym wdziećzny
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
 |
Szymek
Administrator
Dołączył: 22 Maj 2006
Posty: 103
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
Wysłany: Nie 12:31, 11 Lut 2007 Temat postu: |
|
|
Na podstawie kodu łatwo napisać schemat blokowy.
1. Wczytujesz liczbę -> 2. Resztę dzielenia tej liczby przez 16 dopisujesz przed innymi cyframi liczby heksadecymalnej (zgodnie z wcześniejszą tabelką) -> 3. Jeżeli wynik dzielenia liczby przez 16 jest różny od zera, to ten wynik przekształcasz zgodnie z punktem 2, w przeciwnym wypadku kończysz schemat.
No i to jest cały schemat blokowy. Musisz tylko go ładnie narysować i dopisać obok tę moją tabelkę.
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
 |
|