Zamiana liczby dziesiętnej na heksadecymalną

 
Napisz nowy temat   Odpowiedz do tematu    Forum Wszystko o Turbo Pascalu Strona Główna -> Problemy
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

PostWysł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
Zobacz profil autora
Szymek
Administrator



Dołączył: 22 Maj 2006
Posty: 103
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysł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
Zobacz profil autora
basior89
Nowy



Dołączył: 09 Lut 2007
Posty: 3
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: ruda śl

PostWysł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
Zobacz profil autora
Szymek
Administrator



Dołączył: 22 Maj 2006
Posty: 103
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysł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
Zobacz profil autora
basior89
Nowy



Dołączył: 09 Lut 2007
Posty: 3
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: ruda śl

PostWysł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
Zobacz profil autora
Szymek
Administrator



Dołączył: 22 Maj 2006
Posty: 103
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysł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
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Wszystko o Turbo Pascalu Strona Główna -> Problemy Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


Bluetab template design by FF8Jake of FFD
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group
Regulamin