Sprawdź się
Zadanie 3. System numeracji dokumentów
W pewnej firmie informatycznej od wielu lat stosuje się zasadę, zgodnie z którą każdy dokument musi mieć nadany numer, a wersja elektroniczna tego dokumentu (np. w postaci skanu, pliku tekstowego) ma być umieszczona na wspólnym serwerze, aby każdy pracownik miał swobodny dostęp do materiałów.
Do numeracji dokumentów wykorzystuje się liczby szesnastkowe. Ze względów bezpieczeństwa dokumenty nie są numerowanie po kolei.
Nadane numery mają szczególne znaczenie. Po konwersji liczby do systemu binarnego i zliczeniu jedynek, uzyskana wartość przechowuje informacje, do jakiego działu należy dokument.
Działy w firmie mają przydzielone następujące zapisy:
dział kadr – liczba jedynek z zakresu ,
dział księgowości – liczba jedynek z zakresu ,
dział programistów – liczba jedynek z zakresu ,
dział jakości – liczba jedynek z zakresu .
Numery dokumentów po przekonwertowaniu do systemu dziesiętnego przechowują dodatkową informację. Jeżeli uzyskana liczba jest parzysta, jest to dokument poufny, do którego wgląd mają tylko niektórzy pracownicy. Gdy liczba jest nieparzysta, do dokumentu ma dostęp każdy pracownik.
W pliku dane.txt zawartych jest 150 numerów dokumentów zapisanych w systemie szesnastkowym, po jednym w każdej linii. Każdy z numerów dokumentów zapisanych w pliku składa się z 3 lub 4 cyfr.
Przycisk z napisem Pobierz załącznik pobiera plik o nazwie dane_sprawdz_sie.txt. Pobierz załącznik
Zadanie 3.1
Korzystając z wybranego języka programowania, napisz program, który sprawdzi, ile dokumentów, któych numery spisano w pliku, należy do działu programistów.
Do oceny oddajesz:
plik
wynik.txtzawierający odpowiedź do zadania (jedną liczbę, czyli liczbę dokumentów należącą do działu programistów),
plik(i) z komputerową realizacją zadania (kodem programu).
Przedstaw rozwiązanie zadania, pisząc program w języku C++, Java lub Python. Odpowiedź do zadania znajdziesz pod sekcją ćwiczeń.
Przykładowe rozwiązania działają na tablicy liczby.
JĘZYK C++
Funkcja to_string() zamienia wartość liczbową zapisaną jako typ int na tę samą wartość liczbową zapisaną jako typ string.
Przykładowe rozwiązanie:
#include <iostream>
#include <string>
using namespace std;
int main() {
string dane[]{"111", "199", "1F5", "17F", "18E", "1E4", "101", "1C3", "1AA", "109", "141", "1AD", "170", "1FC",
"134", "192"};
int programisci = 0;
int n = sizeof(dane)/sizeof(dane[0]);
for (int i = 0; i < n; i++) {
int jedynki = 0;
for (int j = 0; j < dane[i].length(); j++) {
if (dane[i][j] == '1' || dane[i][j] == '2' || dane[i][j] == '4' || dane[i][j] == '8') {
jedynki += 1;
}
else if (dane[i][j] == '3' || dane[i][j] == '5' || dane[i][j] == '6' || dane[i][j] == '9' || dane[i][j] == 'A' || dane[i][j] == 'C'){
jedynki += 2;
}
else if (dane[i][j] == '7' || dane[i][j] == 'B' || dane[i][j] == 'D' || dane[i][j] == 'E') {
jedynki += 3;
}
else if (dane[i][j] == 'F'){
jedynki += 4;
}
}
if (jedynki >= 6 && jedynki <= 10) {
programisci += 1;
}
}
cout << programisci << endl;
return 0;
}JĘZYK JAVA
Funkcja Character.getNumericValue() zamienia wartość liczbową zapisaną jako typ char na tę samą wartość liczbową zapisaną jako typ int.
Przykładowe rozwiązanie:
public class Main {
public static void main(String [] args) {
String[] dane = {"111", "199", "1F5", "17F", "18E", "1E4", "101", "1C3", "1AA", "109", "141", "1AD", "170", "1FC", "134", "192"};
int programisci = 0;
for (int i = 0; i < dane.length; i++) {
int jedynki = 0;
for (int j = 0; j < dane[i].length(); j++) {
if (dane[i].charAt(j) == '1' || dane[i].charAt(j) == '2' || dane[i].charAt(j) == '4' || dane[i].charAt(j) == '8') {
jedynki += 1;
}
else if (dane[i].charAt(j) == '3' || dane[i].charAt(j) == '5' || dane[i].charAt(j)== '6' || dane[i].charAt(j) == '9' || dane[i].charAt(j) == 'A' || dane[i].charAt(j) == 'C'){
jedynki += 2;
}
else if (dane[i].charAt(j) == '7' || dane[i].charAt(j) == 'B' || dane[i].charAt(j) == 'D' || dane[i].charAt(j) == 'E') {
jedynki += 3;
}
else if (dane[i].charAt(j) == 'F'){
jedynki += 4;
}
}
if (jedynki >= 6 && jedynki <= 10) {
programisci += 1;
}
}
System.out.println(programisci);
}
}JĘZYK PYTHON
Funkcja str() zamienia wartość liczbową zapisaną jako typ int na tę samą wartość liczbową zapisaną jako typ str.
Przykładowe rozwiązanie:
dane = ["111", "199", "1F5", "17F", "18E", "1E4", "101", "1C3", "1AA", "109", "141", "1AD", "170", "1FC", "134", "192"]
programisci = 0
n = len(dane)
for i in range(n):
jedynki = 0
for j in range(len(dane[i])):
if dane[i][j] == '1' or dane[i][j] == '2' or dane[i][j] == '4' or dane[i][j] == '8':
jedynki += 1
elif dane[i][j] == '3' or dane[i][j] == '5' or dane[i][j] == '6' or dane[i][j] == '9' or dane[i][j] == 'A' or dane[i][j] == 'C':
jedynki += 2
elif dane[i][j] == '7' or dane[i][j] == 'B' or dane[i][j] == 'D' or dane[i][j] == 'E':
jedynki += 3
elif dane[i][j] == 'F':
jedynki += 4
if 6 <= jedynki <= 10:
programisci += 1
print(programisci)Odpowiedź do zadania
Wynik dla danych z pliku:
Przycisk z napisem Pobierz załącznik pobiera plik o nazwie wyniki_sprawdz_sie.txt. Pobierz załącznik
Zadanie 3.2
Korzystając z wybranego języka programowania i numerów dokumentów w pliku dane.txt, podaj, ile dokumentów jest poufnych.
Do oceny oddajesz:
plik
wynik2.txtzawierający odpowiedź do zadania (jedną liczbę – liczbę dokumentów poufnych),
plik(i) z komputerową realizacją zadania (kodem programu).
Przedstaw rozwiązanie zadania, pisząc program w języku C++, Java lub Python. Odpowiedź do zadania znajdziesz pod sekcją ćwiczeń.
JĘZYK C++
Przykładowe rozwiązanie:
#include <iostream>
#include <string>
using namespace std;
int main() {
string dane[] {"111", "199", "1F5", "17F", "18E", "1E4", "101", "1C3", "1AA", "109", "141", "1AD", "170", "1FC", "134", "192"};
int poufne = 0;
int n = sizeof(dane)/sizeof(dane[0]);
for (int i = 0; i < n; i++) {
string heks = dane[i];
char cyfra = heks[heks.length() - 1];
int liczba;
if (cyfra >= 'A' && cyfra <= 'F') {
liczba = cyfra - 'A' + 10;
} else {
liczba = cyfra - '0';
}
if (liczba % 2 == 0) {
poufne += 1;
}
}
cout << poufne;
return 0;
}JĘZYK JAVA
Przykładowe rozwiązanie:
public class Main {
public static void main(String [] args) {
String[] dane = {"111", "199", "1F5", "17F", "18E", "1E4", "101", "1C3", "1AA", "109", "141", "1AD", "170", "1FC", "134", "192"};
int poufne = 0;
int n = dane.length;
for (int indeks = 0; indeks < n; indeks++) {
String heks = dane[indeks];
char cyfra = heks.charAt(heks.length() - 1);
int liczba = Character.getNumericValue(cyfra);
if (liczba % 2 == 0) {
poufne += 1;
}
}
System.out.println(poufne);
}
}JĘZYK PYTHON
Przykładowe rozwiązanie:
parzyste = ["0", "2", "4", "6", "8", "A", "C", "E"]
dane = ["111", "199", "1F5", "17F", "18E", "1E4", "101", "1C3", "1AA", "109", "141", "1AD", "170", "1FC", "134", "192"]
poufne = 0
for i in dane:
cyfra = i[len(i) - 1]
if cyfra in parzyste:
poufne += 1
print(poufne)Odpowiedź do zadania
Wynik dla danych z pliku: