Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
3.0 kB
5
Indexable
Never
 const char* PLEC[] = { "mezczyzna","kobieta" };
    const char* STOPIEN[] = { "I","II","III"};


    enum class Plec{
        mezczyzna, kobieta
    };

    enum class Stopien {
        I,II,III
    };

    struct Student {
        char imie[40];
        char nazwisko[60];
        Plec plec;
        Stopien stopien;
        int semestr;

    };

    void wypelnij(Student& s,const char* imie, const char* nazwisko,Plec plec,Stopien stopien,int semestr) {
        strcpy(s.imie, imie);
        strcpy(s.nazwisko, nazwisko);
        s.plec = plec;
        s.stopien = stopien;
        s.semestr = semestr;

    }

    void zapiszDoP(Student& s, const char* nameF) {
        uint8_t tsem, tstopien, tplec, maska3 = 7, kombinat;
        tsem = s.semestr & maska3;
        cout << bitset<8>(tsem) << "\tsem\n";
        tstopien = (int(s.stopien) + 1) << 3;
        cout << bitset<8>(tstopien) << "\tstopien\n";
        tplec = int(s.plec) << 5;
        cout << bitset<8>(tplec) << "\tplec\n";

        kombinat = tsem | tstopien | tplec;
        cout << bitset<8>(kombinat) << "\tplec\n";
        char tab[9];
        for (size_t i = 0; i < 8; i++)
        {
         

            tab[7 - i] = (kombinat & (1 << i)) ? '1' : '0';
        }
        tab[8] = '\0';
        cout << tab << endl;
        
        FILE* desp = fopen(nameF, "w");
        fprintf(desp, "%s; %s; %s;", s.nazwisko, s.imie,tab);

        fclose(desp);


    }

   void OdczytZP(Student& s,const char* nameP) {

       char tab[9];
       FILE* desp = fopen(nameP, "r");
       rewind(desp);

       fscanf(desp, "%s; %s; %s;", s.nazwisko, s.imie, tab);
   /*    fscanf(desp, " %s; ",s.imie);
       fscanf(desp, " %s; ",s.nazwisko);
       fscanf(desp, " %s; ",tab);*/

      /* if (fscanf(desp, " %[^;]; %[^;]; %[^;]; ", s.imie, s.nazwisko, tab) != 3) {
           printf("Blad odczytu danych z pliku\n");
           exit(1);
       }*/
    
       //tab[8] = '\0';
       fclose(desp);
       uint8_t kombinat=0;
       for (size_t i = 0; i < 8; i++)
       {
           if (tab[i] == '1') {

               kombinat |= (1 << (7 - i));
              
           }
       }
       uint8_t tsem, tstopien, tplec;
       tsem = kombinat & 7;
       tstopien = (kombinat & 0x18)>>3;
       tplec = (kombinat & 0x20) >> 5;
       s.stopien=static_cast<Stopien>(tstopien);
       s.plec = static_cast<Plec>(tplec);
       s.semestr = tsem;
     

        }


   ostream& operator<< (ostream& ekr,Student s) {
       ekr << s.imie << s.nazwisko << PLEC[int(s.plec)] << s.semestr << STOPIEN[int(s.stopien)];
       return ekr;
   }


    int main() {
      
        Student s;
        wypelnij(s, "marekl", "howski", Plec::kobieta, Stopien::I, 3);
        zapiszDoP(s,"b.txt");
        Student s2;
        OdczytZP(s2, "b.txt");

        uint8_t maska = 0x20;
        cout << bitset<8>(maska);

        cout <<"\n\n" << s2;
    }