Jump to content
Fórum Script Brasil
  • 0

Ajuda com Programação Orientada a Objeto


isaiasbd

Question

Não estou conseguindo fazer o programa principal, o exercício pede:

Exercício:

Um protozoário é um animal simples, porém completo. A partir do seu nascimento, cada protozoário tem um número ****** único, conhecido como individualidade, que nunca pode mudar e nunca poderá ser associado a outro protozoário. O genótipo de um protozoário é composto por 10 genes, sendo que cada um pode ter valores de 0 a 3. Um protozoário pode se reproduzir por replicação ou por cópula com outro protozoário*. Um protozoário nascido através da replicação de outro é uma cópia idêntica do pai, exceto por sua individualidade. Já se for gerado por cópula, receberá os genes randomicamente de cada indivíduo, com uma chance de 50% do gene vir de um ou de outro. De vez em quando (em 7% dos casos), pode haver mutação no genótipo, que altera um único gene no protozoário.

Modele a classe Protozoario, que deve possuir os seguintes métodos:

a) public Protozoario(): cria um protozoário com o genótipo [0,0,0,0,0,0,0,0,0,0];

public Protozoario(int[] genotipo): cria um protozoário com o genótipo fornecido;

c) public void mutate(): causa uma mutação no genótipo;

d) public Protozoario getClone(): retorna um novo protozoário criado por replicação;

e) public void print(): imprime uma representação do protozoário;

f) Permita que o usuário saiba quantos objetos protozoários estão em memória em um dado momento.

Eu n estou conseguindo fazer o programa principal, alguém poderia ajudar?

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

const int MaxElementos = 512; // máximo de protozoários

// definicao dos genes

enum Gene { //aminoácidos reais representados de 0 a 3

Adenina = 0,

Citosina = 1,

Guanina = 2,

Timina = 3

};

// classe Principal aqui

class Protozoario

{

private:

int Serial;

Gene Genotipo[10];

public:

Protozoario();

Protozoario(Gene genotipo[10]);

void print();

void mutate();

Protozoario getClone();

Protozoario GetCopula(Protozoario Parceiro);

};

namespace RunTime {

int LastSerial = 0;

int NovoSerial()

{

// se quiser randômico é só implementar, porém tome cuidado:

// cada serial é único

return ++LastSerial;

}

Gene NovoGene()

{

srand(time(NULL));

int select = rand() % 4;

switch(select) {

case 0: return Adenina; break; // uma aminoácido

case 1: return Citosina; break; // uma aminoácido

case 2: return Guanina; break; // uma aminoácido

case 3: return Timina ; break; // uma aminoácido

}

return Adenina; // Se algo der errado, retorna Adenina

}

// lista de ponteiros para os protozoários criados

Protozoario *Lista[MaxElementos];

} // RunTime namespace

#endif

Protozoario::Protozoario()

{

this->Serial = RunTime::NovoSerial();

for(int n = 0; n != 10; n++) {

this->Genotipo[n] = Adenina;

}

}

Protozoario::Protozoario(Gene genotipo[10])

{

this->Serial = RunTime::NovoSerial();

for(int n = 0; n != 10; n++) {

this->Genotipo[n] = genotipo[n]; //cópia do genótipo como parâmetro

}

// 7% dos casos tem uma mutação

srand(time(NULL));

int esp = rand() % 100;

if(esp < 7) {

this->mutate();

}

}

Protozoario Protozoario::getClone()

{

Protozoario temp;

temp.Serial = RunTime::NovoSerial();

for(int n = 0; n != 10; n++) {

temp.Genotipo[n] = this->Genotipo[n];

}

return temp;

}

// retorna um protozoário através de combinação

Protozoario Protozoario::GetCopula(Protozoario Parceiro)

{

Protozoario ret; // retorno

bool est = false;

srand(time(NULL));

ret.Serial = RunTime::NovoSerial();

// para os genes aleatórios

for(int n = 0; n != 10; n++) {

est = rand() % 2; // idealiza a randomização de true ou false

if(est == true) {

ret.Genotipo[n] = this->Genotipo[n];

} else {

ret.Genotipo[n] = Parceiro.Genotipo[n];

}

}

// 7% dos casos tem uma mutação

srand(time(NULL));

int esp = rand() % 100;

if(esp < 7) {

ret.mutate();

}

return ret;

}

void Protozoario::mutate()

{

srand(time(NULL));

int GeneAlvo = rand() % 10; // ponteiro-alvo para o gene que se modificará

Gene Antigo = this->Genotipo[GeneAlvo];

Gene Novo;

do {

Novo = RunTime::NovoGene();

} while(Antigo == Novo);

this->Genotipo[GeneAlvo] = Novo;

}

void Protozoario::print()

{

int g;

// expressão de saída:

// Protozoário

// Serial: 0

// Genotipo: 0120103012

printf("Protozoario:\nSerial: %i\nGenotipo: ", this->Serial);

for(int n = 0; n != 10; n++) {

switch(this->Genotipo[n]) {

case Adenina : g = 0; break;

case Citosina: g = 1; break;

case Guanina : g = 2; break;

case Timina : g = 3; break;

}

printf("%i", g);

}

printf("\n");

}

Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.5k
×
×
  • Create New...