👤

W pliku tekstowym liczby1.txt zapisano 1000 dodatnich liczb binarnych. W pliku liczby zapisano w
kolejnych wierszach po jednej liczbie w wierszu. W pliku liczby1.txt długosc zapisu kazdej z liczb jest
nie większa od 12.
Dla pliku z danymi wyznacz, ile zawiera on
– liczb podzielnych przez 2,
– liczb podzielnych przez 3,
– liczb podzielnych przez 5.
Wynik ma pojawic się w pliku podzielnosc5.txt zawierającym w trzech kolejnych wierszach trzy liczby,
oznaczające ilosc liczb podzielnych kolejno przez 2, 3 i 5.
Program ma być napisany w C++


Odpowiedź :

Program wczytuje liczbę z pliku "liczby1.txt", następnie zamienia ją z postaci binarnej na dziesiętną, po czym sprawdza czy jest podzielna przez 2, 3 i 5. Po sprawdzeniu wszystkich liczb, zgodnie z poleceniem wynik ląduje w pliku "podzielnosc5.txt". Program nie generuje komunikatów.

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

int zamien(unsigned long long x)

{//funkcja zamienia liczbe binarna na dziesietna

string binarna = to_string(x);

int dziesietna = 0;

int potega = 1;

for (int i = 1; i <= binarna.length(); i++)

{

 if (binarna[binarna.length() - i] == '1')

  dziesietna += potega;

 potega *= 2;

}

return dziesietna;

}

int main()

{

unsigned long long bin;

int liczba;

int nadwa = 0, natrzy = 0, napiec = 0;

fstream liczby("liczby1.txt", ios::in);

while (!liczby.eof())

{

 liczby >> bin;

 liczba = zamien(bin);

 if (liczba % 2 == 0) nadwa++; //sprawdzanie

 if (liczba % 3 == 0) natrzy++;//podzielnosci

 if (liczba % 5 == 0) napiec++;

}

liczby.close();

fstream wynik("podzielnosc5.txt", ios::out);

wynik << nadwa << endl; //zapisanie

wynik << natrzy << endl;//wyniku

wynik << napiec;        //do pliku

wynik.close();

return 0;

}

Zobacz obrazek Kowal75