## Recommended Posts

boas!

é o seguinte, estou a fazer um trabalho final em matlab, e o enunciado é o seguinte:

Especifique a função S = gera(n,a,c,g,t)

que retorna uma sequência aleatória de n caracteres do conjunto {‘A’,‘C’,‘G’,‘T’}, cuja

probabilidade de ocorrência em S é aproximadamente a,c,g e t, respectivamente. Como é óbvio

se a sequência é composta apenas pelas letras ‘A’, ‘C’, ‘G’ e ‘T’ deverá ser a+c+g+t = 1.

(basicamente, gera um vector S com n caracteres do conjunto de letras A, C, G e T, cada uma com probabilidade de "aparecer" num dado elemento do vector de a, c, g e t respectivamente.)

eu já tenho um algoritmo +- definido, estou só com problemas com a operação matemática na coisa. O meu algoritmo é o seguinte ( se estiver errado, também estou aberto a sugestões):

```funcion S=gera(n, a, c, g, t)
%(testes e ciclos para proteger o programa de inputs inválidos)
for i=1:n
x=rand() %coloca em x um valor aleatório entre 0 e 1
for i=1:n
if ( ////OPERACAO\\\\ ) % faz uma qualquer operação para determinar qual letra põe
S(i)=A
if ( ////OPERACAO\\\\ )
S(i)=C
if ( ////OPERACAO\\\\ )
S(i)=G
if ( ////OPERACAO\\\\ )
S(i)=T
endif
endfor
endfunction [/codebox]```

o problema é que já andei a volta com isto com caneta e papel imenso tempo e nao consigo descortinar que operação (que de certeza que é simples) ponho ali para o ciclo decidir se numa casa i do vector mete A, C, G ou T

alguem com mais jeito que eu para a coisa me dá uma mãozinha?

##### Share on other sites

Se bem entendi tu queres fazer um rand() e com esse valor fazer correponder a letra.

Agora o que eu não entendo é "e se o rand() der um valor diferente de todos os que lá estão?"

Podes sempre achar um valor à sorte, fazer a diferença entre as probablidades das letras e atribuir a letra da menor diferença...

Mas tb não entendi bem o k keres :S

##### Share on other sites

Se bem entendi, podias colocar nas condições:

for i=1:n

if ( x < a )

S(i)=A

else if ( x < (a+c))

S(i)=C

else if ( x < (a+c+g) )

S(i)=G

else

S(i)=T

endif

##### Share on other sites

Se bem entendi, podias colocar nas condições:

for i=1:n

if ( x < a )

S(i)=A

else if ( x < (a+c))

S(i)=C

else if ( x < (a+c+g) )

S(i)=G

else

S(i)=T

endif

eu ja tinha tentado um algoritmo parecido mas pu-lo de parte porque não me parecia certo, mas afinal parece que dá mesmo. thanks :clap:

## Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account. ×   Pasted as rich text.   Paste as plain text instead

Only 75 emoji are allowed.

×   Your previous content has been restored.   Clear editor

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