Last active
March 28, 2022 15:06
-
-
Save rafalw/479bc202fbe90bb8a49d194a7f7518e2 to your computer and use it in GitHub Desktop.
Zadania maturalne (informatyka rozszerzona). Maj 2011, zadanie 6. C++11/C++17
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Dane do zadania dostępne są pod adresem: | |
https://arkusze.pl/maturalne/informatyka-2011-maj-matura-rozszerzona-zalaczniki.zip |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <vector> | |
#include <string> | |
#include <fstream> | |
#include <bitset> | |
using namespace std; | |
// Ułatwiamy sobie życie: liczba odczytana z pliku będzie reprezentowana jednocześnie jako | |
// ciąg znaków (postać binarna) i wartość dziesiętna. | |
struct liczba { | |
string bin; | |
unsigned long dec; | |
}; | |
// Tablica liczb wczytanych z pliku. | |
vector<liczba> liczby; | |
// Wczytywanie zawartości pliku i jednoczesna konwersja wartości na postać dziesiętną. | |
void wczytaj_plik_konwertuj_dane(vector<liczba>& dane) { | |
ifstream plik_we("liczby.txt"); | |
liczba wartosc = { | |
"", | |
0 | |
}; | |
while (getline(plik_we, wartosc.bin)) { | |
wartosc.dec = stoul(wartosc.bin, nullptr, 2); | |
liczby.push_back(wartosc); | |
} | |
// Dobry nawyk: | |
plik_we.close(); | |
} | |
// Zliczamy liczby parzyste | |
unsigned int ile_parzystych(vector<liczba>& dane) { | |
unsigned ile = 0; | |
for(liczba a : dane) { | |
if (a.dec % 2 == 0) { | |
ile++; | |
} | |
} | |
return ile; | |
} | |
// Znajdujemy największą liczbę (algorytm boleśnie prosty) | |
liczba najwieksza_liczba(vector<liczba>& dane) { | |
liczba maks = dane[0]; | |
for(size_t i = 1; i < dane.size(); i++) { | |
if (maks.dec < dane[i].dec) { | |
maks = dane[i]; | |
} | |
} | |
return maks; | |
} | |
// Zmienna globalna – upraszczamy nieco nasz program | |
unsigned suma_9_cyfrowych = 0; | |
// Zliczamy liczby 9-cyfrowe i jednocześnie je sumujemy. | |
unsigned ile_9_cyfrowych(vector<liczba>& dane) { | |
unsigned ile = 0; | |
for (liczba a : dane) { | |
if (a.bin.length() == 9) { | |
ile++; | |
suma_9_cyfrowych += a.dec; // suma w zmiennej globalnej... | |
} | |
} | |
return ile; | |
} | |
int main() { | |
wczytaj_plik_konwertuj_dane(liczby); | |
cout << "W pliku jest " << ile_parzystych(liczby) << " liczb parzystych." << endl; | |
liczba wartosc = najwieksza_liczba(liczby); | |
cout << "Największa liczba w pliku: " << wartosc.dec << ", binarnie " << wartosc.bin << endl; | |
cout << "Plik zawiera " << ile_9_cyfrowych(liczby) << " liczb 9-cyfrowych, których suma wynosi "; | |
// Najprostsza konwersja liczby dziesiętnej na binarną (16 bitową – wystarczającą ze względu na wartość maksymalną). | |
bitset<16> suma_bin = suma_9_cyfrowych; | |
cout << suma_bin << endl; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment