//Liczby binarne - 2015 R
//autor: Marek Galaszewski, I LO Suwalki

#include <iostream> #include <fstream>

using namespace std;

ifstream in;
ofstream out;

//sprawdzanie czy w liczbie binarnej jest wiecej zer czy jedynek

bool more0than1(string liczba)
{
int count0 = 0, count1 = 0;
for (unsigned int i = 0; i < liczba.size(); i++)
if (liczba[i] == '0') count0++; else count1++; //zliczanie zer i jedynek w liczbie binarnej
if (count0 > count1) return true;
return false;
}

void task4_1()
{
string liczba;
int licznik = 0;
in.open("liczby.txt");
while (!in.eof())
{
in >> liczba;
if (more0than1(liczba)) licznik++; //zliczanie liczb spelniajacych warunek zadania
}
in.close();

out << "4.1. " << licznik << endl;
}

//testowanie podzielnosci przez 2 liczby binarnej (ostatni bit musi byc rowny 0)

bool divBy2(string liczba)
{
if (liczba[liczba.size() - 1] == '0') return true;
return false;
}

//testowanie podzielnosci przez 8 liczby binarnej (liczba musi miec co najmnie 4 bity i ostatnie 3 bity musza byc rowne 0)

bool divBy8(string liczba)
{
if (liczba.size() > 3 && liczba[liczba.size() - 1] == '0' && liczba[liczba.size() - 2] == '0' && liczba[liczba.size() - 3] == '0' )
return true;
return false;
}

void task4_2()
{
string liczba;
int div2 = 0, div8 = 0;
in.open("liczby.txt");
while (!in.eof())
{
in >> liczba;
if (divBy2(liczba)) div2++;
if (divBy8(liczba)) div8++;
}
in.close();

out << "4.2. " << "podzielne przez 2: " << div2 << endl;
out << " " << "podzielne przez 8: " << div8 << endl;
}

void task4_3()
{

string liczba;
in.open("liczby.txt");
in >> liczba;
string maxL = liczba, //aktualnie najwieksza liczba
minL = liczba; //aktualnie najmniejsza liczba
unsigned int maxDlugosc = liczba.size(), //aktualnie najwieksza dlugosc liczby binarnej (ilosc bitow)
minDlugosc = liczba.size(), //aktualnie najmniejsza dlugosc liczby binarnej (ilosc bitow)
maxNrWiersz = 1, //nr wiersza z aktualnie najwieksza liczba binarna
minNrWiersz = 1, //nr wiersza z aktualnie najmniejsza liczba binarna
aktualNrWiersz = 1; //nr wiersza z aktualnie analizowana liczba binarna
while (!in.eof())
{
in >> liczba;
aktualNrWiersz++;
if (liczba.size() >= maxDlugosc) //jesli dlugosc kolejnej liczby jest conajmniej rowna aktualnej
{
maxDlugosc = liczba.size();
if (liczba > maxL) //jesli aktualnie analizowana liczba jest wieksza od biezacego max
{
maxL = liczba; //zmien max liczbe
maxNrWiersz = aktualNrWiersz; //zmien nr wiersza
}
}
if (liczba.size() <= minDlugosc) //jesli dlugosc kolejnej liczby jest conajwyzej rowna aktualnej
{
minDlugosc = liczba.size();
if (liczba < minL) //jesli aktualnie analizowana liczba jest mniejsza od biezacego min
{
minL = liczba; //zmien min liczbe
minNrWiersz = aktualNrWiersz; //zmien nr wiersza
}
}
}
in.close();

out << "4.3. " << "Nr wiersza z min: " << minNrWiersz << endl;
out << " " << "Nr wiersza z max: " << maxNrWiersz << endl;
}

int main()
{
out.open("wynik4.txt");
task4_1();
task4_2();
task4_3();
out.close();
return 0;
}