Skip to content

Instantly share code, notes, and snippets.

@rafalw
Last active March 28, 2022 15:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rafalw/479bc202fbe90bb8a49d194a7f7518e2 to your computer and use it in GitHub Desktop.
Save rafalw/479bc202fbe90bb8a49d194a7f7518e2 to your computer and use it in GitHub Desktop.
Zadania maturalne (informatyka rozszerzona). Maj 2011, zadanie 6. C++11/C++17
Dane do zadania dostępne są pod adresem:
https://arkusze.pl/maturalne/informatyka-2011-maj-matura-rozszerzona-zalaczniki.zip
#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