Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "iostream" //obsługa ekranu
- #include "fstream" //obsługa plików
- #include "string" //to dlatego, że Visual Studio jest ułomne, nieistotne, w Dev działałoby bez tego
- #include "bitset" //użyte do konwersji do dwójkowego
- using namespace std;
- int BinToDec(string s) //konwertuje tekst z zerami i jedynkami na system dziesiętny
- {
- //ogólny zamysł jest taki, że czytamy string od tyłu i mnożymy tą liczbę przez kolejne potęgi dwóch (no tak się zamienia, tego już nie będę wyjaśniał xD)
- int liczba=0; // to będzie wynik, na razie zero
- int potega=1; // to się będzie powiększać w razie potrzeby
- for (int i=1; i<s.length(); i++) // powtarzać od 1 do długości napisu
- {
- liczba=liczba+(int)s[s.length()-i]*pow(2,potega); // poprzez rzutowanie zamieniamy znak na liczbę, żeby czytać od tyłu odejmujemy licznik od długości napisu
- // nie muszę chyba przypominać, że każdy string jest tablicą znaków (char)?
- potega++; //kolejna potęga,
- }
- return liczba; //oddajemy wynik
- }
- int main()
- {
- string a; //pomocnicze do odczytywania
- int parzyste = 0; //liczenie parzystych dlatego najpierw zero
- int max =0; //szukanie największej
- string maxs; //pomocnicze do tej największej
- int dziewiatki=0; //do punktu c
- ifstream liczby("liczby.txt"); //no mam nadzieję, że to to już jest oczywiste...
- ofstream odpowiedzi("zadanie6.txt");
- if(!liczby) //sprawdzanie czy plik istnieje, formułka z podręcznika
- {
- cout << "Nima pliku." << endl;
- system("pause");
- return 1; //kończy program i zwraca błąd do systemu. Każdy program jest tak naprawdę funkcją systemową, a funkcja tablicą, ale to już inna historia....
- }
- while(!liczby.eof()) //dopóki plik się nie skończy
- {
- liczby >> a; //pokazujemy strzałeczką >>, że chcemy przelać literki z wiaderka liczby do wiaderka a
- if (a[a.length()-1]=='0') // a) liczba binarna jest parzysta, jeżeli kończy się na zero, dlatego wystarczy sprawdzić ostatni znak
- // -1 jest bo jest, o chyba wiem, czemu się nie kompilowało, w Dev jest inna obsługa stringów...
- parzyste++; //trzeba policzyć
- if(BinToDec(a)>max) //b) typowe szukanie maksimum, tyle tylko, że zamieniamy na dziesiętne, bo łatwiej takimi operować
- { // jeżeli a większe od max to a staje się nowym max
- max=BinToDec(a);
- maxs=a; //aaa już pamiętam po co to było, bo kazali to wypisać binarnie w odpowiedzi
- }
- if (a.length()==9) //c) //sprawdzamy czy jest dziewięciocyfrowa
- dziewiatki=dziewiatki+BinToDec(a); //i kazali policzyć ich sumę
- }
- // wypisanie odpowiedzi
- odpowiedzi << "a) Parzyste: " << parzyste << endl;
- odpowiedzi << "b) Największa liczba to " << max << "(Binarnie " << maxs << ")" << endl;
- odpowiedzi << "c) Suma dziewieciocyfrowych liczb binarnych: " << bitset<30>(dziewiatki) << endl;
- odpowiedzi.close(); //zamknięcie pliku
- system("pause");
- return 0;
- }
Add Comment
Please, Sign In to add comment