Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com Programação Orientada a Objeto


isaiasbd

Pergunta

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 para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...