I_R_W14_M34_Java Działania na liczbach w innych systemach
jak działają systemy liczbowe o różnych podstawach,
jak zamieniać liczby między systemami dziesiętnym, binarnym, ósemkowym i szesnastkowym, stosując poznane metody konwersji,
w jaki sposób wykonać działania arytmetyczne (dodawanie, odejmowanie, mnożenie, dzielenie) w systemach innych niż dziesiętny, zapisując poprawnie kolejne etapy obliczeń,
jak radzić sobie z różnymi rodzajami zadań maturalnych, więc teraz możesz sprawdzić swoje umiejętności na trzech przykładach zadań z arkuszy z lat 2023–2025. To krótki zestaw, który pozwoli zobaczyć, jak działają twoje strategie w praktyce. (Ćwiczenia 1‑3)
Dane są liczby zapisane w systemach pozycyjnych o podstawach 3, 5 i 6. Wstaw w miejsce kropek odpowiedni znak spośród: <, > , =, tak aby wyrażenie było poprawne.
2011Indeks dolny (3) Indeks dolny koniec(3) ……………………………… 134Indeks dolny (6)(6)
134Indeks dolny (5) Indeks dolny koniec(5) …………………………...…… 134Indeks dolny (6)(6)
2222Indeks dolny (3)(3)……………………………… 1111Indeks dolny (6)(6)
W tym przypadku podstawy systemów nie są ze sobą powiązane, więc metoda baz skojarzonych nie ma tu zastosowania. Pierwsza para liczb: rozwiń obie liczby jako sumy potęg podstawy i sprawdź, czy dają tę samą wartość. Druga para: zastanów się, jak zmienia się wartość liczby, gdy zapis cyfr zostaje taki sam, ale zmienia się podstawa systemu. W ostatnim porównaniu spróbuj oszacować, jak duże mogą być te liczby, korzystając tylko z największej potęgi podstawy, jaka w nich występuje.
Zadanie 5 z arkusza maturalnego 2023, publikowanego na stronie Centralnej Komisji Egzaminacyjnej.
Schemat oceniania
1 pkt – odpowiedź poprawna.
0 pkt – odpowiedź niepoprawna albo brak odpowiedzi.
2011Indeks dolny (3)(3) = 134Indeks dolny (6)(6)
134Indeks dolny (5)(5) < 134Indeks dolny ((Indeks dolny 6)6)
2222Indeks dolny (3)(3) < 1111Indeks dolny (6)(6)
Wykonaj działania na liczbach zapisanych w systemie trójkowym i systemie dziewiątkowym. Wyniki podaj w systemie trójkowym.
101112Indeks dolny ((Indeks dolny 3)3) + 121Indeks dolny ((Indeks dolny 9)9) = ………………………………
101112Indeks dolny ((Indeks dolny 3)3) – 121Indeks dolny ((Indeks dolny 9)9) = ………………………………
System dziewiątkowy i trójkowy są ze sobą bezpośrednio powiązane, ponieważ: 9 = 3²
każdej cyfrze w systemie dziewiątkowym odpowiada dokładnie blok dwóch cyfr w systemie trójkowym
To klasyczny przykład baz skojarzonych. Zamień liczby w systemie dziewiątkowym na system trójkowy i wykonaj działania.
Zadanie 6 z arkusza maturalnego 2024, publikowanego na stronie internetowej Centralnej Komisji Egzaminacyjnej.
Schemat oceniania:
2 pkt – odpowiedź poprawna dla dwóch działań.
1 pkt – odpowiedź poprawna dla jednego działania.
0 pkt – odpowiedź niepoprawna albo brak odpowiedzi.
101112Indeks dolny ((Indeks dolny 3) Indeks dolny koniec3) + 121Indeks dolny ((Indeks dolny 9) Indeks dolny koniec9) = 112020Indeks dolny (3)(3)
101112Indeks dolny ((Indeks dolny 3)3) – 121Indeks dolny ((Indeks dolny 9) Indeks dolny koniec9) = 20211Indeks dolny (3)(3)
Poniżej sposobem pisemnym dodano dwie liczby podane w zapisie binarnym. Uzupełnij brakujące cyfry tak, aby działanie było wykonane poprawnie.

Dodając dwie cyfry binarne, pamiętaj, że 1 + 1 daje 0 i przeniesienie 1 do kolejnej kolumny. Reszta działa dokładnie tak jak w dodawaniu pisemnym w systemie dziesiętnym.
Zadanie 5 z arkusza maturalnego 2025, publikowanego na stronie internetowej Centralnej Komisji Egzaminacyjnej.
Schemat oceniania:
2 pkt – odpowiedź poprawna dla wszystkich pól.
1 pkt – odpowiedź poprawna dla 4 pól.
0 pkt – odpowiedź niepełna lub niepoprawna albo brak rozwiązania.
1 1 0 0 1 0 1 1 0 1 1 + 1 1 0 0 1 1 0 1 1 1 = 1 0 0 1 1 0 0 1 0 0 1 0
Dany jest program przeprowadzający konwersję liczby całkowitej zapisanej w systemie dwójkowym na system szesnastkowy. Blok funkcji głównej jest niekompletny. Dopisz brakujący kod, tak aby program przy użyciu funkcji parseInt() oraz dec2Hex() konwertował podaną liczbę całkowitą z systemu binarnego na system szesnastkowy.
Działanie programu przetestuj dla liczby 101001010Indeks dolny (2)(2).
Jeśli długość liczby przekracza 31 znaków, program powinien wypisać następujący komunikat:
Podaj liczbę binarną, która zawiera mniej bitów.Specyfikacja problemu:
Dane:
liczbaBin– łańcuch znaków; liczba zapisana w systemie dwójkowym
Wynik:
liczbaHex– łańcuch znaków; liczba zapisana w systemie szesnastkowym
Przykładowe rozwiązanie zadania:
public class Main {
public static String dec2Hex(int liczbaDec) {
if (liczbaDec == 0) {
return "0";
}
String liczbaHex = "";
int reszta = 0;
while (liczbaDec > 0) {
if (liczbaDec % 16 <= 9) {
reszta = liczbaDec % 16;
liczbaHex = reszta + liczbaHex;
} else {
reszta = liczbaDec % 16 - 10 + 'A';
liczbaHex = (char) reszta + liczbaHex;
}
liczbaDec = liczbaDec / 16;
}
return liczbaHex;
}
public static void main(String[] args) {
String liczbaBin = "101001010";
if (liczbaBin.length() < 32) {
int liczbaDec = Integer.parseInt(liczbaBin, 2);
System.out.println(dec2Hex(liczbaDec));
} else {
System.out.println("Podaj liczbę binarną, która zawiera mniej bitów.");
}
}
}Dany jest program przeprowadzający konwersję części ułamkowej liczby zapisanej w systemie dwójkowym na system szesnastkowy. Blok polecenia switch jest jednak niepełny. Dopisz brakujący kod, aby program działał poprawnie, czyli konwertował podaną część ułamkową liczby zapisanej w systemie binarnym na system szesnastkowy.
Działanie programu przetestuj dla części ułamkowej liczby binarnej: 10111Indeks dolny (2)(2).
Specyfikacja problemu:
Dane:
liczbaBin – łańcuch znaków; część ułamkowa liczby zapisanej w systemie dwójkowym
Wynik:
liczbaHex– łańcuch znaków; część ułamkowa liczby zapisana w systemie szesnastkowym wypisana z poprzedzającymi znakami „0,” części całkowitej
Przykładowe rozwiązanie zadania:
public class Main {
public static String konwertujUlamek(String liczbaBin) {
String liczbaHex = "";
int dlugosc = liczbaBin.length();
if (dlugosc % 4 != 0) {
int ileBrakuje = 4 - dlugosc % 4;
for (int j = 0; j < ileBrakuje; j++) {
liczbaBin += "0";
}
}
int i = 0;
do {
String bity = "";
for (int j = i; j < i + 4; j++) {
bity = bity + liczbaBin.charAt(j);
}
switch (bity) {
case "0000":
liczbaHex = liczbaHex + "0";
break;
case "0001":
liczbaHex = liczbaHex + "1";
break;
case "0010":
liczbaHex = liczbaHex + "2";
break;
case "0011":
liczbaHex = liczbaHex + "3";
break;
case "0100":
liczbaHex = liczbaHex + "4";
break;
case "0101":
liczbaHex = liczbaHex + "5";
break;
case "0110":
liczbaHex = liczbaHex + "6";
break;
case "0111":
liczbaHex = liczbaHex + "7";
break;
case "1000":
liczbaHex = liczbaHex + "8";
break;
case "1001":
liczbaHex = liczbaHex + "9";
break;
case "1010":
liczbaHex = liczbaHex + "A";
break;
case "1011":
liczbaHex = liczbaHex + "B";
break;
case "1100":
liczbaHex = liczbaHex + "C";
break;
case "1101":
liczbaHex = liczbaHex + "D";
break;
case "1110":
liczbaHex = liczbaHex + "E";
break;
case "1111":
liczbaHex = liczbaHex + "F";
break;
}
i = i + 4;
} while (i < dlugosc);
return liczbaHex;
}
public static void main(String[] args) {
String liczbaBin = "10111";
System.out.println("0," + konwertujUlamek(liczbaBin));
}
}Napisz program przeprowadzający konwersję liczby naturalnej z systemu binarnego na szesnastkowy, wykorzystując bazy skojarzone.
Działanie programu przetestuj dla liczby 1111111111100Indeks dolny (2)(2).
Specyfikacja problemu:
Dane:
liczbaBin– łańcuch znaków; liczba naturalna zapisana w systemie dwójkowym
Wynik:
liczbaHex– łańcuch znaków; liczba zapisana w systemie szesnastkowym
Przykładowe rozwiązanie zadania:
public class Bin2Hex {
public static String konwertujLiczbe(String liczbaBin) {
String liczbaHex = "";
int dlugosc = liczbaBin.length();
if (dlugosc % 4 != 0) {
int brakuje = 4 - dlugosc % 4;
for (int j = 0; j < brakuje; j++) {
liczbaBin = "0" + liczbaBin;
}
}
dlugosc = liczbaBin.length();
int i = 0;
do {
String bity = "";
for (int j = i; j < i + 4; j++) {
bity = bity + liczbaBin.charAt(j);
}
switch (bity) {
case "0000":
liczbaHex = liczbaHex + "0";
break;
case "0001":
liczbaHex = liczbaHex + "1";
break;
case "0010":
liczbaHex = liczbaHex + "2";
break;
case "0011":
liczbaHex = liczbaHex + "3";
break;
case "0100":
liczbaHex = liczbaHex + "4";
break;
case "0101":
liczbaHex = liczbaHex + "5";
break;
case "0110":
liczbaHex = liczbaHex + "6";
break;
case "0111":
liczbaHex = liczbaHex + "7";
break;
case "1000":
liczbaHex = liczbaHex + "8";
break;
case "1001":
liczbaHex = liczbaHex + "9";
break;
case "1010":
liczbaHex = liczbaHex + "A";
break;
case "1011":
liczbaHex = liczbaHex + "B";
break;
case "1100":
liczbaHex = liczbaHex + "C";
break;
case "1101":
liczbaHex = liczbaHex + "D";
break;
case "1110":
liczbaHex = liczbaHex + "E";
break;
case "1111":
liczbaHex = liczbaHex + "F";
break;
}
i = i + 4;
} while (i < dlugosc);
return liczbaHex;
}
public static void main(String[] args) {
System.out.println(konwertujLiczbe("1111111111100"));
}
}Wykorzystując podane fragmenty kodu, napisz program, który zrealizuje konwersję liczby stałoprzecinkowej zapisanej w systemie dwójkowym na system szesnastkowy.
Działanie programu przetestuj dla liczby 10110,101101Indeks dolny (2)(2).
Specyfikacja problemu:
Dane:
liczbaBin– łańcuch znaków; liczba zapisana w systemie dwójkowym
Wynik:
liczbaHex– łańcuch znaków; liczba zapisana w systemie szesnastkowym
Przykładowe rozwiązanie zadania:
public class Main {
public static int bin2Dec(String liczbaBin) {
int liczbaDec = Character.getNumericValue(liczbaBin.charAt(0));
for(int i = 1; i < liczbaBin.length(); i++) {
liczbaDec = liczbaDec * 2 + Character.getNumericValue(liczbaBin.charAt(i));
}
return liczbaDec;
}
public static String konwertujCzescCalkowita(String czescCalkowita) {
int czescCalkowitaDec = bin2Dec(czescCalkowita);
String czescCalkowitaHex = "";
int reszta = 0;
while (czescCalkowitaDec > 0) {
if (czescCalkowitaDec % 16 <= 9) {
reszta = czescCalkowitaDec % 16;
czescCalkowitaHex = reszta + czescCalkowitaHex;
} else {
reszta = czescCalkowitaDec % 16 - 10 + 'A';
czescCalkowitaHex = (char) reszta + czescCalkowitaHex;
}
czescCalkowitaDec = czescCalkowitaDec / 16;
}
return czescCalkowitaHex;
}
public static String konwertujCzescUlamkowa(String czescUlamkowa) {
String czescUlamkowaHex = "";
int dlugosc = czescUlamkowa.length();
if (dlugosc % 4 != 0) {
int brakuje = 4 - dlugosc % 4;
for (int j = 0; j < brakuje; j++) {
czescUlamkowa += "0";
}
}
dlugosc = czescUlamkowa.length();
int k = 0;
do {
String bity = "";
for (int j = k; j < k + 4; j++) {
bity = bity + czescUlamkowa.charAt(j);
}
switch (bity) {
case "0000":
czescUlamkowaHex += "0";
break;
case "0001":
czescUlamkowaHex += "1";
break;
case "0010":
czescUlamkowaHex += "2";
break;
case "0011":
czescUlamkowaHex += "3";
break;
case "0100":
czescUlamkowaHex += "4";
break;
case "0101":
czescUlamkowaHex += "5";
break;
case "0110":
czescUlamkowaHex += "6";
break;
case "0111":
czescUlamkowaHex += "7";
break;
case "1000":
czescUlamkowaHex += "8";
break;
case "1001":
czescUlamkowaHex += "9";
break;
case "1010":
czescUlamkowaHex += "A";
break;
case "1011":
czescUlamkowaHex += "B";
break;
case "1100":
czescUlamkowaHex += "C";
break;
case "1101":
czescUlamkowaHex += "D";
break;
case "1110":
czescUlamkowaHex += "E";
break;
case "1111":
czescUlamkowaHex += "F";
break;
}
k = k + 4;
} while (k < dlugosc);
return czescUlamkowaHex;
}
public static String bin2Hex(String liczbaBin) {
int i = 0;
String czescCalkowita = "";
while (liczbaBin.charAt(i) != ',') {
czescCalkowita += liczbaBin.charAt(i);
i++;
}
i++;
String czescUlamkowa = "";
for (int j = i; j < liczbaBin.length(); j++) {
czescUlamkowa += liczbaBin.charAt(j);
}
String czescCalkowitaHex = konwertujCzescCalkowita(czescCalkowita);
String czescUlamkowaHex = konwertujCzescUlamkowa(czescUlamkowa);
return czescCalkowitaHex + "," + czescUlamkowaHex;
}
public static void main(String[] args) {
String liczbaBin = "10110,101101";
System.out.println(bin2Hex(liczbaBin));
}
}