Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  вфыв
Language: C/C++
Code:
# include <iostream>
using namespace std;

class Cats {
  int m_gender;  // 0 - she, 1 - he
  int m_claws; //00 - нет, 01 и 10 розовые, 11 - россомаха
  int m_tail;  //00 - нет, 01 и 10 обычный, 11 - радужный
  int m_happy_spot;  //00 - нет, 11 - есть, 01 и 10 - нет, но является носительницей гена отсутствия
public: 
  Cats();
  Cats(int gender, int claws, int tail, int happy_spot);
  bool operator==(Cats another_cat);
  Cats & operator=(Cats cat);
  void print_Cat();
  void print_Cat_for_table();
//  int get_next_Generation(Cats dad, Cats * next_gen, int * next_g_numb, int cats_in_array);
  void get_next_Generation(Cats dad);

};

Cats::Cats() {
  m_gender = 0;
  m_claws = 0;
  m_tail = 0;
  m_happy_spot = 0;
}

Cats::Cats(int gender, int claws, int tail, int happy_spot) {
  m_gender = gender;
  m_claws = claws;
  m_tail = tail;
  m_happy_spot = happy_spot;
}

bool Cats::operator==(Cats another_cat) {
  if (m_gender != another_cat.m_gender )
    return false;
  if (!(m_claws == 2 && another_cat.m_claws == 1) && !(m_claws == 1 && another_cat.m_claws == 2) && m_claws != another_cat.m_claws)
    return false;
  if (!(m_tail == 2 && another_cat.m_tail == 1) && !(m_tail == 1 && another_cat.m_tail == 2) && m_tail != another_cat.m_tail)
    return false;
  if (!(m_happy_spot == 2 && another_cat.m_happy_spot == 1) && !(m_happy_spot == 1 && another_cat.m_happy_spot == 2) && m_happy_spot != another_cat.m_happy_spot)
    return false;
  return true;
}

Cats & Cats::operator=(Cats cat) {
  m_gender = cat.m_gender;
  m_claws = cat.m_claws;
  m_tail = cat.m_tail;
  m_happy_spot = cat.m_happy_spot;
  return * this;
}

void Cats::print_Cat_for_table() {
  if (!m_gender) {
    switch (m_happy_spot) {
      case 0: cout << "ХаХа";break;
      case 1: cout << "ХАХа";break;      
      case 2: cout << "ХАХа";break;
      case 3: cout << "ХАХА";
    }
  }
  if (m_gender) {
    switch (m_happy_spot) {
      case 0: cout << "ХаY ";break;
      case 3: cout << "ХAY ";
    }
  }
  switch (m_claws) {
    case 0: cout << "аа"; break;
    case 1: cout << "Аа"; break;
    case 2: cout << "Аа"; break;
    case 3: cout << "АА"; 
  }
  switch (m_tail) {
    case 0: cout << "bb"; break;
    case 1: cout << "Bb"; break;
    case 2: cout << "Bb"; break;
    case 3: cout << "BB"; 
  }
//  cout << '\n';
}


void Cats::print_Cat() {
  if (!m_gender) {
    cout << "Кошка\n";
    switch (m_happy_spot) {
      case 0: cout << "Пятно: нет         ХаХа" << '\n';break;
      case 1: cout << "Пятно: есть        ХАХа" << '\n';break;      
      case 2: cout << "Пятно: есть        ХАХа" << '\n';break;
      case 3: cout << "Пятно: есть        ХАХА" << '\n';
    }
  }
  if (m_gender) {
    cout << "Кот\n";
    switch (m_happy_spot) {
      case 0: cout << "Пятно: нет         ХаY" << '\n';break;
      case 3: cout << "Пятно: есть        ХAY" << '\n';
    }
  }
  switch (m_claws) {
    case 0: cout << "Когти: нет         аа" << '\n'; break;
    case 1: cout << "Когти: розовые     Аа" << '\n'; break;
    case 2: cout << "Когти: розовые     Аа" << '\n'; break;
    case 3: cout << "Когти: россомаха   АА" << '\n'; 
  }
  switch (m_tail) {
    case 0: cout << "Хвост: нет             bb" << '\n'; break;
    case 1: cout << "Хвост: обычный     Bb" << '\n'; break;
    case 2: cout << "Хвост: обычный     Bb" << '\n'; break;
    case 3: cout << "Хвост: радужный    BB" << '\n'; 
  }
  cout << '\n';
}



int get_claws(int n, int ma_claws, int pa_claws) {
  int rez;
  if (!n) {
    rez = ma_claws & 2 | (pa_claws & 2) >> 1;
    return rez;
  }
  if (n == 1) {
    rez = ma_claws & 2 | pa_claws & 1;
    return rez;
  }
  if (n == 2) {
    rez = ma_claws & 1 | pa_claws & 2;
    return rez;  
  }
  if (n == 3) {
    rez = ma_claws & 1 | (pa_claws << 1) & 2;
    return rez;
  }
}

int get_tail(int n, int ma_tail, int pa_tail) {
  int rez;
  if (!n) {
    rez = ma_tail & 2 | (pa_tail & 2) >> 1;
//    cout << "i am here!!!";
    return rez;
  }
  if (n == 1) {
    rez = ma_tail & 2 | pa_tail & 1;
    return rez;
  }
  if (n == 2) {
    rez = ma_tail & 1 | pa_tail & 2;
    return rez;  
  }
  if (n == 3) {
    rez = ma_tail & 1 | (pa_tail << 1) & 2;
    return rez;
  }
}

int get_happy_spot(int n, int gender, int ma_spot, int pa_spot) {
  int rez;
  if (!gender) {
    if (!n) {
      rez = ma_spot & 2 | pa_spot & 1;
      return rez;
    }
    if (n) {
      rez = ma_spot & 1 | pa_spot & 2;
      return rez;
    }
  }
  if (gender) {
    if (!n) {
      rez = ma_spot & 2 | ma_spot & 2 >> 1;
      return rez;
    }
    if (n) {
      rez = ma_spot & 1 | (ma_spot << 1) & 2;
      return rez;
    }
  }
}

void Cats::get_next_Generation(Cats dad) {
//int Cats::get_next_Generation(Cats dad, Cats * next_gen, int * next_g_numb, int cats_in_array) {
  int i = 0;
  for (int gender = 0; gender <= 1; ++gender) {
    for (int claws = 0; claws < 4; ++claws) {
      for (int tail = 0; tail < 4; ++tail) {
        for (int spot = 0; spot <= 1; ++ spot) {
          Cats cat(gender,get_claws(claws,m_claws,dad.m_claws),get_tail(tail,m_tail,dad.m_tail),get_happy_spot(spot,gender,m_happy_spot,dad.m_happy_spot));
          cat.print_Cat_for_table();
          cout << " | ";
/*            int j;
            for (j=0; j < cats_in_array; j++) {
              if (cat == next_gen[j]) {
                ++next_g_numb[j];
                break;
              }
            }
/*            if (j == cats_in_array) {
              next_gen[j] = cat;
              ++cats_in_array;
            }
*/          ++i;
        }
      }
      cout << '\n';
    }
  }
  cout << i << '\n';
//  return cats_in_array;
}

int main() {
  int m_claws, m_tail, m_hs,d_claws, d_tail, d_hs;
  cin >> m_claws >> m_tail >> m_hs >> d_claws >> d_tail >> d_hs;
  Cats m(0, m_claws, m_tail, m_hs); //0 1 3
  Cats d(1, d_claws, d_tail, d_hs); // 3 1 0
  m.print_Cat();
  d.print_Cat();
//  Cats * next_gen;
//  int * next_g_numb;
//  next_gen = new Cats [32];
//  next_g_numb = new int [32]; 
//  Cats cat;
//  for (int i=0; i<32; ++i) {
//    next_gen[i] = cat;
//    next_g_numb = 0; 
//  }
//  int sum;
//  sum = m.get_next_Generation(d,next_gen,next_g_numb,0);
//  delete [] next_gen;
//  delete [] next_g_numb;
  m.get_next_Generation(d);
  return 0;
}
Comments: