Sprawdź się
Zadanie 3
Zadanie 3.1
W pliku liczby_binarne.txt znajduje się 100 wierszy. W każdym wierszu zapisana jest liczba w postaci binarnej składająca się maksymalnie z cyfr.
Plik z danymi do pobrania:
Przycisk do pobrania pliku TXT z treścią zadania. Pobierz załącznik
liczby_binarne.txt.Napisz program, który spośród wszystkich liczb binarnych w pliku wybierze tę, która po zamianie na system szesnastkowy będzie miała największą sumę cyfr, a następnie zapisze ją w postaci szesnastkowej do pliku wyniki1.txt (w pliku jest tylko jedna taka liczba).
Oto przykład obliczania wartości: 11100100Indeks dolny (2)(2) = E4Indeks dolny (16)(16), a zatem suma cyfr wynosi E + 4 = 14 + 4 = 18.
Do oceny oddajesz:
plik
wyniki1.txtzawierający odpowiedź do zadania (jedna liczba zapisana w systemie szesnastkowym o największej sumie cyfr w tym systemie),
plik(i) z komputerową realizacją zadania (kodem programu).
Przedstaw rozwiązanie zadania, pisząc program w języku C++, Java lub Python. Zadbaj o prawidłowe wczytanie danych z pliku tekstowego. Odpowiedź do zadania znajdziesz pod sekcją ćwiczeń.
JĘZYK C++
#include <iostream>
#include <cstring>
using namespace std;
string konwersja(int liczba) {
if(liczba < 10) return to_string(liczba);
else {
switch(liczba) {
case 10 : return "A";
case 11 : return "B";
case 12 : return "C";
case 13 : return "D";
case 14 : return "E";
case 15 : return "F";
}
}
return "0";
}
int wartosc_cyfry(string cztery_bity) {
int wartosc_cyfry = 0;
for(int i = 0; i < 4; i++) {
wartosc_cyfry *= 2;
wartosc_cyfry += cztery_bity[i]-'0';
}
return wartosc_cyfry;
}
int suma_cyfr_w_hex(string liczba_bin) {
int suma_cyfr = 0;
if (liczba_bin == "0")
return 0;
while (liczba_bin.length() % 4 != 0)
liczba_bin = "0" + liczba_bin;
for (int i =0; i < liczba_bin.length(); i +=4) {
suma_cyfr += wartosc_cyfry(liczba_bin.substr(i,4));
}
return suma_cyfr;
}
string bin2hex(string liczba_bin) {
string napis_hex = "";
if (liczba_bin == "0")
return "0";
while (liczba_bin.length() % 4 != 0)
liczba_bin = "0" + liczba_bin;
for (int i =0; i < liczba_bin.length(); i +=4) {
napis_hex += konwersja(wartosc_cyfry(liczba_bin.substr(i,4)));
}
return napis_hex;
}
int main() {
string liczby_binarne[4] = {
"1101110001111011010100101010101110010000101111100011100110011110100000000100011000000001101101110011001110010101101101101010101000011000101110010010010100110101100000001110010110001011000100010111111000100011010000110011010001001001010011001001010111",
"111010001011001101101000000000100010100011000010011111100101110000000111001011101011100011111100100011110110110100111001010100110011100000001111011001000011101010110011011011111000110110110101101100001110000000000011110100110011011101001111100001011",
"1011010000000011101010110100101010010011111010010111000101001010001100110011000011111000001001110111110110100101010011011001100010110001001111101000101111100110110000001100011111011101111011011010010000101110110111001011010000000010001000111010100010",
"10000011001000000111110111000010010111010011110001011001000111110100011110110001000110010010100101000100001100100011111100101101010011101100010101110111011101111110001010111011011111111101010101101001110011100110101110011100100000010111011010101111"
};
int max_suma_cyfr = 0, index;
for (int i = 0; i < 4; i++) {
int suma_cyfr = suma_cyfr_w_hex(liczby_binarne[i]);
if (suma_cyfr > max_suma_cyfr) {
max_suma_cyfr = suma_cyfr;
index = i;
}
}
cout << bin2hex(liczby_binarne[index]) << endl;
return 0;
}JĘZYK JAVA
public class Main {
public static String konwersja(int liczba) {
if(liczba < 10) return String.valueOf(liczba);
else{
switch(liczba){
case 10 : return "A";
case 11 : return "B";
case 12 : return "C";
case 13 : return "D";
case 14 : return "E";
case 15 : return "F";
}
}
return "0";
}
public static int wartosc_cyfry(String cztery_bity) {
int wartosc_cyfry = 0;
for(int i = 0; i < 4; i++){
wartosc_cyfry *= 2;
wartosc_cyfry += cztery_bity.charAt(i) - '0';
}
return wartosc_cyfry;
}
public static int suma_cyfr_w_hex(String liczba_bin) {
int suma_cyfr = 0;
if (liczba_bin.equals("0"))
return 0;
while (liczba_bin.length() % 4 != 0)
liczba_bin = "0" + liczba_bin;
for (int i =0; i < liczba_bin.length(); i +=4){
suma_cyfr += wartosc_cyfry(liczba_bin.substring(i,i+4));
}
return suma_cyfr;
}
public static String bin2hex(String liczba_bin) {
String napis_hex = "";
if (liczba_bin == "0")
return "0";
while (liczba_bin.length() % 4 != 0)
liczba_bin = "0" + liczba_bin;
for (int i =0; i < liczba_bin.length(); i +=4){
napis_hex += konwersja(wartosc_cyfry(liczba_bin.substring(i,i+4)));
}
return napis_hex;
}
public static void main(String[] args) {
String [] liczby_binarne = {
"1101110001111011010100101010101110010000101111100011100110011110100000000100011000000001101101110011001110010101101101101010101000011000101110010010010100110101100000001110010110001011000100010111111000100011010000110011010001001001010011001001010111",
"111010001011001101101000000000100010100011000010011111100101110000000111001011101011100011111100100011110110110100111001010100110011100000001111011001000011101010110011011011111000110110110101101100001110000000000011110100110011011101001111100001011",
"1011010000000011101010110100101010010011111010010111000101001010001100110011000011111000001001110111110110100101010011011001100010110001001111101000101111100110110000001100011111011101111011011010010000101110110111001011010000000010001000111010100010",
"10000011001000000111110111000010010111010011110001011001000111110100011110110001000110010010100101000100001100100011111100101101010011101100010101110111011101111110001010111011011111111101010101101001110011100110101110011100100000010111011010101111"
};
int max_suma_cyfr = 0, index = 0;
for (int i = 0; i < liczby_binarne.length; ++i) {
int suma_cyfr = suma_cyfr_w_hex(liczby_binarne[i]);
if (suma_cyfr > max_suma_cyfr) {
max_suma_cyfr = suma_cyfr;
index = i;
}
}
System.out.println(bin2hex(liczby_binarne[index]));
}
}JĘZYK PYTHON
def cztery_bity(liczba):
if liczba < 10:
return str(liczba)
elif liczba == 10:
return "A"
elif liczba == 11 :
return "B"
elif liczba == 12 :
return "C"
elif liczba == 13 :
return "D"
elif liczba == 14 :
return "E"
elif liczba == 15 :
return "F"
return "0"
def wartosc_cyfry(cztery_bity):
wartosc_cyfry = 0
for i in range(4):
wartosc_cyfry *= 2
wartosc_cyfry += int(cztery_bity[i])
return wartosc_cyfry
def suma_cyfr_w_hex(liczba_bin):
suma_cyfr = 0
if liczba_bin == "0":
return 0
while len(liczba_bin) % 4 != 0:
liczba_bin = "0" + liczba_bin
dlugosc = len(liczba_bin)
for i in range(0,dlugosc,4):
suma_cyfr += wartosc_cyfry(liczba_bin[i:i+4])
return suma_cyfr
def bin2hex(liczba_bin):
napis_hex = ""
if liczba_bin == "0":
return "0"
while len(liczba_bin) % 4 != 0:
liczba_bin = "0" + liczba_bin
dlugosc = len(liczba_bin)
for i in range(0,dlugosc,4):
napis_hex += cztery_bity(wartosc_cyfry(liczba_bin[i:i+4]))
return napis_hex
liczby_binarne = [
"1101110001111011010100101010101110010000101111100011100110011110100000000100011000000001101101110011001110010101101101101010101000011000101110010010010100110101100000001110010110001011000100010111111000100011010000110011010001001001010011001001010111",
"111010001011001101101000000000100010100011000010011111100101110000000111001011101011100011111100100011110110110100111001010100110011100000001111011001000011101010110011011011111000110110110101101100001110000000000011110100110011011101001111100001011",
"1011010000000011101010110100101010010011111010010111000101001010001100110011000011111000001001110111110110100101010011011001100010110001001111101000101111100110110000001100011111011101111011011010010000101110110111001011010000000010001000111010100010",
"10000011001000000111110111000010010111010011110001011001000111110100011110110001000110010010100101000100001100100011111100101101010011101100010101110111011101111110001010111011011111111101010101101001110011100110101110011100100000010111011010101111"]
max_suma_cyfr = 0
szukana_liczba = ""
for liczba in liczby_binarne:
suma_cyfr = suma_cyfr_w_hex(liczba)
if suma_cyfr > max_suma_cyfr:
max_suma_cyfr = suma_cyfr
szukana_liczba = liczba
print(bin2hex(szukana_liczba))Odpowiedź do zadania dla danych zawartych w pliku tekstowym:
253D6F741A0FE4AE7E1ACF58E53BBDBF3F764F4586CCEFC94CE87E4CEEAE3B0Zadanie 3.2
Napisz program, który wśród liczb binarnych podanych w pliku liczby_binarne.txt znajdzie te zawierające więcej niż 125 cyfr 1 i zapisze je w systemie szesnastkowym do pliku wyniki2.txt (każda znaleziona liczba w osobnym wierszu).
Do oceny oddajesz:
plik
wyniki2.txt– zawierający odpowiedź do zadania (zapisane w systemie szesnastkowym liczby mające więcej niż 125 cyfr 1 w postaci binarnej),
plik(i) z komputerową realizacją zadania (kodem programu).
Przedstaw rozwiązanie zadania, pisząc program w języku C++, Java lub Python. Zadbaj o prawidłowe wczytanie danych z pliku tekstowego. Odpowiedź do zadania znajdziesz pod sekcją ćwiczeń.
JĘZYK C++
#include <iostream>
#include <cstring>
using namespace std;
string konwersja(string cztery_bity) {
int liczba = 0;
for(int i = 0; i < 4; i++){
liczba *= 2;
liczba += cztery_bity[i]-'0';
}
if(liczba < 10) return to_string(liczba);
else{
switch(liczba){
case 10 : return "A";
case 11 : return "B";
case 12 : return "C";
case 13 : return "D";
case 14 : return "E";
case 15 : return "F";
}
}
}
string bin2hex(string liczba_bin) {
string napis_hex = "";
if (liczba_bin == "0")
return "0";
while (liczba_bin.length() % 4 != 0)
liczba_bin = "0" + liczba_bin;
for (int i =0; i < liczba_bin.length(); i +=4){
napis_hex += konwersja(liczba_bin.substr(i,4));
}
return napis_hex;
}
int main() {
string liczby_binarne[4] = {
"1101110001111011010100101010101110010000101111100011100110011110100000000100011000000001101101110011001110010101101101101010101000011000101110010010010100110101100000001110010110001011000100010111111000100011010000110011010001001001010011001001010111",
"111010001011001101101000000000100010100011000010011111100101110000000111001011101011100011111100100011110110110100111001010100110011100000001111011001000011101010110011011011111000110110110101101100001110000000000011110100110011011101001111100001011",
"1011010000000011101010110100101010010011111010010111000101001010001100110011000011111000001001110111110110100101010011011001100010110001001111101000101111100110110000001100011111011101111011011010010000101110110111001011010000000010001000111010100010",
"10000011001000000111110111000010010111010011110001011001000111110100011110110001000110010010100101000100001100100011111100101101010011101100010101110111011101111110001010111011011111111101010101101001110011100110101110011100100000010111011010101111"};
for (int i = 0; i < 4; i++) {
string liczba = liczby_binarne[i];
int suma_cyfr = 0;
for(int j = 0; j < liczba.length();j++){
suma_cyfr += liczba[j] - '0';
if (suma_cyfr > 125) {
cout << bin2hex(liczby_binarne[i]) << endl;
break;
}
}
}
return 0;
}JĘZYK JAVA
public class Main {
public static String konwersja(String cztery_bity) {
int liczba = 0;
for(int i = 0; i < 4; i++){
liczba *= 2;
liczba += cztery_bity.charAt(i) - '0';
}
if(liczba < 10) return String.valueOf(liczba);
else{
switch(liczba){
case 10 : return "A";
case 11 : return "B";
case 12 : return "C";
case 13 : return "D";
case 14 : return "E";
case 15 : return "F";
}
}
return "0";
}
public static String bin2hex(String liczba_bin) {
String napis_hex = "";
if (liczba_bin == "0")
return "0";
while (liczba_bin.length() % 4 != 0)
liczba_bin = "0" + liczba_bin;
for (int i =0; i < liczba_bin.length(); i +=4){
napis_hex += konwersja(liczba_bin.substring(i,i+4));
}
return napis_hex;
}
public static void main(String[] args) {
String [] liczby_binarne = {
"1101110001111011010100101010101110010000101111100011100110011110100000000100011000000001101101110011001110010101101101101010101000011000101110010010010100110101100000001110010110001011000100010111111000100011010000110011010001001001010011001001010111",
"111010001011001101101000000000100010100011000010011111100101110000000111001011101011100011111100100011110110110100111001010100110011100000001111011001000011101010110011011011111000110110110101101100001110000000000011110100110011011101001111100001011",
"1011010000000011101010110100101010010011111010010111000101001010001100110011000011111000001001110111110110100101010011011001100010110001001111101000101111100110110000001100011111011101111011011010010000101110110111001011010000000010001000111010100010",
"10000011001000000111110111000010010111010011110001011001000111110100011110110001000110010010100101000100001100100011111100101101010011101100010101110111011101111110001010111011011111111101010101101001110011100110101110011100100000010111011010101111"
};
for (int i = 0; i < 4; i++) {
String liczba = liczby_binarne[i];
int suma_cyfr = 0;
for(int j = 0; j < liczba.length();j++){
suma_cyfr += liczba.charAt(j) - '0';
if (suma_cyfr > 125) {
System.out.println(bin2hex(liczby_binarne[i]));
break;
}
}
}
}
}JĘZYK PYTHON
def cztery_bity(cztery_bity):
liczba = 0
for i in range(4):
liczba *= 2
liczba += int(cztery_bity[i])
if liczba < 10:
return str(liczba)
elif liczba == 10:
return "A"
elif liczba == 11 :
return "B"
elif liczba == 12 :
return "C"
elif liczba == 13 :
return "D"
elif liczba == 14 :
return "E"
elif liczba == 15 :
return "F"
return "0"
def bin2hex(liczba_bin):
napis_hex = ""
if liczba_bin == "0":
return "0"
while len(liczba_bin) % 4 != 0:
liczba_bin = "0" + liczba_bin
dlugosc = len(liczba_bin)
for i in range(0,dlugosc,4):
napis_hex += cztery_bity(liczba_bin[i:i+4])
return napis_hex
liczby_binarne = [
"1101110001111011010100101010101110010000101111100011100110011110100000000100011000000001101101110011001110010101101101101010101000011000101110010010010100110101100000001110010110001011000100010111111000100011010000110011010001001001010011001001010111",
"111010001011001101101000000000100010100011000010011111100101110000000111001011101011100011111100100011110110110100111001010100110011100000001111011001000011101010110011011011111000110110110101101100001110000000000011110100110011011101001111100001011",
"1011010000000011101010110100101010010011111010010111000101001010001100110011000011111000001001110111110110100101010011011001100010110001001111101000101111100110110000001100011111011101111011011010010000101110110111001011010000000010001000111010100010",
"10000011001000000111110111000010010111010011110001011001000111110100011110110001000110010010100101000100001100100011111100101101010011101100010101110111011101111110001010111011011111111101010101101001110011100110101110011100100000010111011010101111"]
for liczba in liczby_binarne:
suma_cyfr = 0
for cyfra in liczba:
suma_cyfr += int(cyfra)
if suma_cyfr > 125:
print(bin2hex(liczba))
breakPoprawne wyniki zadania dla danych zawartych w pliku tekstowym:
wyniki2.txt
Przycisk do pobrania pliku TXT z wynikiem zadania. Pobierz załącznik