Guest User

Untitled

a guest
Dec 15th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.09 KB | None | 0 0
  1.  
  2. #include "iostream"    //obsługa ekranu
  3. #include "fstream"   //obsługa plików
  4. #include "string"    //to dlatego, że Visual Studio jest ułomne, nieistotne, w Dev działałoby bez tego
  5.  
  6. #include "bitset" //użyte do konwersji do dwójkowego
  7. using namespace std;
  8.  
  9.  
  10. int BinToDec(string s)        //konwertuje tekst z zerami i jedynkami na system dziesiętny
  11. {  
  12.     //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)
  13.  
  14.     int liczba=0;   // to będzie wynik, na razie zero
  15.     int potega=1;   // to się będzie powiększać w razie potrzeby
  16.     for (int i=1; i<s.length(); i++)    // powtarzać od 1 do długości napisu
  17.     {
  18.         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
  19.                                                           // nie muszę chyba przypominać, że każdy string jest tablicą znaków (char)?
  20.    
  21.         potega++; //kolejna potęga,  
  22.     }
  23.    
  24.     return liczba;  //oddajemy wynik
  25. }
  26.  
  27. int main()
  28. {
  29.     string a;   //pomocnicze do odczytywania
  30.     int parzyste = 0;  //liczenie parzystych dlatego najpierw zero
  31.     int max =0;    //szukanie największej
  32.     string maxs;   //pomocnicze do tej największej
  33.     int dziewiatki=0;  //do punktu c
  34.  
  35.     ifstream liczby("liczby.txt");       //no mam nadzieję, że to to już jest oczywiste...
  36.     ofstream odpowiedzi("zadanie6.txt");
  37.  
  38.     if(!liczby)     //sprawdzanie czy plik istnieje, formułka z podręcznika
  39.     {
  40.         cout << "Nima pliku." << endl;
  41.         system("pause");
  42.         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....
  43.     }
  44.     while(!liczby.eof())   //dopóki plik się nie skończy
  45.     {  
  46.         liczby >> a;  //pokazujemy strzałeczką >>, że chcemy przelać literki z wiaderka liczby do wiaderka a
  47.          
  48.    
  49.         if (a[a.length()-1]=='0') // a)  liczba binarna jest parzysta, jeżeli kończy się na zero, dlatego wystarczy sprawdzić ostatni znak
  50.                                   // -1 jest bo jest, o chyba wiem, czemu się nie kompilowało, w Dev jest inna obsługa stringów...
  51.             parzyste++;           //trzeba policzyć
  52.  
  53.         if(BinToDec(a)>max)  //b)   typowe szukanie maksimum, tyle tylko, że zamieniamy na dziesiętne, bo łatwiej takimi operować
  54.         {                     // jeżeli a większe od max to a staje się nowym max
  55.             max=BinToDec(a);      
  56.             maxs=a;           //aaa już pamiętam po co to było, bo kazali to wypisać binarnie w odpowiedzi
  57.         }
  58.         if (a.length()==9)  //c)       //sprawdzamy czy jest dziewięciocyfrowa
  59.             dziewiatki=dziewiatki+BinToDec(a);    //i kazali policzyć ich sumę
  60.    
  61.     }
  62.     // wypisanie odpowiedzi
  63.     odpowiedzi << "a) Parzyste: " << parzyste << endl;
  64.     odpowiedzi << "b) Największa liczba to " << max << "(Binarnie "  << maxs << ")" << endl;
  65.     odpowiedzi << "c) Suma dziewieciocyfrowych liczb binarnych: " << bitset<30>(dziewiatki)  << endl;
  66.  
  67.     odpowiedzi.close();  //zamknięcie pliku
  68.     system("pause");
  69.     return 0;
  70. }
Add Comment
Please, Sign In to add comment