Crie um programa(código) na linguagem scilab para resolver a questão a seguir: Uma bactéria divide-se ao meio a cada segundo. Escreva uma função que, dada uma quantidade de bactérias, calcule quantos segundos são necessários para se obter pelo menos aquela quantidade de bactérias.
Passo 1
Beleza, vamos lá! O enunciado fala sobre uma bactéria que se divide em duas a cada segundo. Nosso objetivo aqui é criar um código em Scilab que, dado um número de bactérias desejado, descubra quantos segundos são necessários para chegar, pelo menos, a essa quantidade. A gente vai precisar entender um pouco sobre crescimento exponencial e como usar funções básicas no Scilab para resolver isso.
Passo 2
Primeiro, vamos pensar no crescimento das bactérias. Se começamos com uma bactéria e ela se divide a cada segundo, o número de bactérias dobra a cada segundo. Então, após 1 segundo teremos 2 bactérias, após 2 segundos teremos 4, depois 8, e assim por diante.
Passo 3
Para generalizar, a quantidade de bactérias após $ t $ segundos é dada por:
Queremos encontrar o menor valor de $ t $ tal que:
Passo 4
Para descobrir $ t $, vamos usar o logaritmo na base 2. A equação fica:
Isso nos dá um valor de $ t $ que pode não ser inteiro, então vamos precisar arredondar para cima, já que não dá para ter fração de segundo nesse contexto.
Passo 5
No Scilab, podemos calcular o logaritmo usando a função
log
, que por padrão é o logaritmo natural. Para mudar a base, usamos a relação:Depois, usamos a função
ceil
para arredondar para o próximo número inteiro.Passo 6
Agora, vamos juntar tudo isso em uma função no Scilab. A função vai receber a quantidade desejada de bactérias e retornar o número mínimo de segundos necessários.
Passo 7
Segue o código completo da função:
function t = tempo_para_bacterias(qtd)
// Verifica se a quantidade é pelo menos 1
if qtd < 1 then
disp("A quantidade deve ser pelo menos 1.");
t = -1;
return
end
// Calcula o logaritmo na base 2
log2_qtd = log(qtd) / log(2);
// Arredonda para cima para obter um número inteiro de segundos
t = ceil(log2_qtd);
endfunction
Resposta
Pronto! Agora, ao chamar a função
tempo_para_bacterias
passando a quantidade desejada de bactérias, ela retornará o número mínimo de segundos necessários para alcançar pelo menos essa quantidade. Por exemplo:tempo = tempo_para_bacterias(10);
disp(tempo); // Vai mostrar 4, já que 2^4 = 16 ≥ 10