Cześć,
zadanie 4 z matury 2015 z informatyki.
- polecenie https://cke.gov.pl/images/_EGZAMIN_MATURALNY_OD_2015/Arkusze_egzaminacyjne/2015/formula_od_2015/MIN-R2_1P-152.pdf
- pliki https://cke.gov.pl/images/_EGZAMIN_MATURALNY_OD_2015/Arkusze_egzaminacyjne/2015/formula_od_2015/Dane_PR2.zip
- odpowiedzi https://cke.gov.pl/images/_EGZAMIN_MATURALNY_OD_2015/Arkusze_egzaminacyjne/2015/formula_od_2015/odpowiedzi/MIN-R1-N.pdf
W zamianie na decymalne jest jakiś błąd, którego nie mogę wyłapać. Zrobiłem już to zadanie w inny sposób, ale ta wersja nie daje mi spokoju.
Widzicie błąd?
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cmath>
using namespace std;
int main()
{
ifstream myfile("liczby.txt");
if( !myfile.is_open() || !myfile.good() ){
cout << "ERROR!"; exit(0);
}
long long unsigned suma=0, w=0, m=0; //w-największa liczba; m-najmniejsza liczba
unsigned short najm=1, najw=1, linia=1; //najm-nr linii najmniejszej liczby; najw-nr linii największej liczby
string liczba;
unsigned short ile2=0, ile8=0;
while( myfile >> liczba ){
suma=0;
unsigned short potega = liczba.length();
for(short i=0; i<potega; i++){
if(liczba[i] == '1'){
suma += pow(2,potega-i-1);
}
}
if(linia==1) { m = w = suma; }
if( suma%2 == 0 ) ile2++;
if( suma%8 == 0 ) ile8++;
if( suma > w ) { w=suma; najw=linia; }
if( suma < m ) { m=suma; najm=linia; }
linia++;
}
cout << "Przez 2: " << ile2 << endl;
cout << "Przez 8: " << ile8 << endl;
cout << "Najwieksza: " << najw << endl;
cout << "Najmniejsza: " << najm << endl;
myfile.close();
return 0;
}