Ir ao conteúdo
  • Cadastre-se

Exercício de laço de repetição


pedrokra

Posts recomendados

Olá pessoal, infelizmente não estou entendendo nada sobre laços de repetição e tenho um exercício da faculdade pra fazer, será que tem como vocês me ajudarem a fazer ele? Eu sei que no final das contas ele vai acabar saindo pronto mas gostaria de enteder ele!

"Um determinado material radioativo perde metade de sua massa a cada 50 segundos. Dada a massa inicial, em gramas, fazer um algorítimo que determine o tempo necessário para que essa massa se torne menor do que 0,5 gramas. Escreva a massa inicial, a massa final e o tempo calculado em horas, minutos e segundos."

Exemplo já calculado no programa feito de forma correta:

Entrada:

100

Saída:

MASSA INICIAL = 100.00

MASSA FINAL = 0.39

TEMPO = 0H 6M 40S"

A única coisa relevante que eu sei é que a saída vai ser + ou - assim:

printf("MASSA INICIAL = %.2f", massainicial);

printf("MASSA FINAL = %.2f", massafinal);

O Tempo eu prefiro lutar com ele até conseguir então gostaria de que só me explicassem ele caso eu tente, tente, tente e não consiga até vir aqui pedir ajuda - neste mesmo tópico.

Link para o comentário
Compartilhar em outros sites

Não precisa de laço de repetição pra fazer esse exercício. A resposta é dada pela formula:

t = 50*(log(massainicial/0,5)/log(2))

Como cheguei nessa formula? Veja se vai entender, é uma conta meio longa, mas com certeza correta, clica aí no mostrar se quiser ver:



Mas a massafinal tem que ser menor que 0,5, então substituir por esse valor:

0,5 = massainicial*2^-(t/50)
0,5/massainicial = 2^-(t/50)

Para facilitar as operações, chamemos t/50 de "x", e 0,5/massainicial de "a":

Então 0,5/massainicial = 2^-(t/50), vira:

a = 1/2^(x)

Desenvolvendo:

a*2^x = 1
2^x = 1/a

Chamaremos novamente 1/a de "b", Então, 2^(x) = 1/a vai virar:
2^x = b

Para achar X, precisamos aplicar logaritmo:
log b = x
2

Só que a calculadora e o código em C não calcula log pra bases diferente de 10, então temos que aplicar a regra de mudança de base:

x = log (B) / log (2)

Pronto, chegamos ao "final" da conta, só que agora temos que voltar as variáveis x e b para as originais, no lugar de X a gente volta a colocar t/50:

t/50 = log (B) / log (2)

A gente volta a chamar b de 1/a:

t/50 = log(1/a) / log(2)

Agora volta a chamar a de 0,5/massainicial:

t/50 = log(1/(0,5/massainicial)) / log(2)

Perceba que 1/(0,5/massainicial) é igual a massainicial/0,5, então vamos escrever dessa forma:

t/50 = log(massainicial/0,5) / log(2)

Vamos passar agora o 50 pro outro lado (como está dividindo, vai multiplicando)

t = 50* (log (massainicial/0,5) / log (2))

Este é o final da formula que eu te apresentei.
massafinal = massainicial/2^(t/50)

Permita-me dizer ainda que essa resposta fornecida por voce como padrão de correta contem alguns erros. Primeiro, o material não se degrada somente nos intervalos de tempo, seria algo como falar a massa é constante, e após 50 segundos do nada desaparece 50% da massa. A degradação é contínua, sendo assim, voce consegue uma massa final de 0,49999999 que já é menor que 0,5. Esse tempo citado (ocorre um pocado depois do instante que o valor chega de fato a um valor menor que 0,5).

Segundo e mais importante, além desse erro, teve um outro que é até bem comum, até mesmo se for seu professor quem calculou ele pode ter errado.

O calculo correto para essa formula dá um tempo de 382,1928 segundos (até aí ele acertou a conta, com uma pequena diferença em função dele ter calculado a função de forma discontinua, quando ela é clarametne contínua). Mas um genio inventou de dividir por 60 (pra ter em minutos) e obteve a resposta: 6,3698 e foi aqui que ele cometeu o outro erro, achou que era 6 minutos e 36,98 segundos. Mas não é! Pra achar o valor em segundos, é necessário uma regra de 3, afinal a base de tempo não é decimal ou percentual 6,3698 minutos não é 6 minutos e 36,98 segundos. A conta correta é:

1 minuto = 60 segundos

0,3698 minutos = x

X = 60*0,3698 = 22,1888

Então a resposta correta é t = 6 minutos e 22 segundos e 189 milésimos de segundo (arredondando para mais), ou se voce quiser arredondar pare segundos, ficaria 6 minutos e 23 segundos.

Agora que o problema é apenas inserir valores e jogar na formula fica por sua conta né?

Se foi seu professor que te passou os valores corretos, explique pra ele porque está errado.

_________________________________________________________

Se ainda assim quiser fazer com for, é só variar o t de 0 a 999999999 segundos, e jogar o valor de t na seguinte formula:

massafinal = massainicial/2^(t/50);

Ai voce verifica se a massa final é menor que 0,5.

Só que o incremento no tempo TEM QUE SER DE 1 EM 1 SEGUNDO! A pessoa que te passou aquela resposta fez errado, fez com o tempo incrementando de 50 em 50, o que acaba passando direto do valor correto. Além disso depois que voce dividir por 60 pra achar o valor em minutos, voce tem que pegar a parte quebrada e voltar a multiplicar por 60 para ter os segundos.

Só que fazer com for, vai deixar o programa mais lerdo e gastar processamento a toa (é uma forma "burra" pra se resolver esse problema).

voce faz faculdade de engenharia né? Cansei de ter que fazer exercícios parecidos uauahau.

Link para o comentário
Compartilhar em outros sites

É que é assim cara, na faculdade onde eu estudo eles possuem um sistema de avaliação de exercicios, eu simplesmente faço o upload e aguardo o sistema dizer se o meu exercicio está correto ou não - de acordo com o que o Professor pediu pra fazer.

O que você fez tá certo mesmo - tmbm faria ele assim xD - só que tenho que fazer ele usando o laço de repetição, awe q entra o meu problema.

Eu entendo o conceito do acumulador e do contador mas não consigo ver como vou usar isso pra resolver esse exercicio. =X

O Valor de entrada e saída (no caso 100 e 100, 0.39...) tem que bater no meu programa, ela é dada pra mim testar e se funcionar é sinal de que o sistema de correção vai dizer que está certa ;)

Eu faço Sistemas de Informação, não preciso nem dizer que sou calouro né? kkkkkkkkkkkk

Link para o comentário
Compartilhar em outros sites

Ok, pra fazer dar errado como voce precisa (sério, as instituições de ensino precisam mudar seus métodos), basta fazer o que eu falei:

Se ainda assim quiser fazer com for, é só variar o t de 0 a 999999999 segundos, e jogar o valor de t na seguinte formula:

massafinal = massainicial/2^(t/50);

Ai voce verifica se a massa final é menor que 0,5.

Aí voce incrementa o i de 50 em 50, e no finl da resposta voce divide por 60 pra ter em minutos e "segundos".

Mais que isso não posso fazer cara, pois já "te dei de mão beijada", falta só voce transformar isso em código. Se voce precisar de mais que isso, leia nas apostilas, livros ou veja um exemplo aqui pelo forum.

Link para o comentário
Compartilhar em outros sites

Meu "progresso" até agora

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
//VARIAVEIS
int i;
float massainicial, massafinal, exp;
//ENTRADA
scanf("%f", &massainicial);

exp=0;
//LACO DE REPETICAO é EXECUTADO ENQUANTO A CONDICAO é VERDADEIRA
for(i=0; i<9999; i++)
{
//PARA QUE O VALOR DE EXP SE INICIE NA PRIMEIRA EXECUCAO COMO 1
exp=exp+i;

//FORMULA DA MEIA VIDA, O EXP é O EXPOENTE
massafinal=((massainicial)/(pow(2,exp)));

//VERIFICACAO SE A MASSAFINAL é MENOR QUE 0.5
if(massafinal<0.5)
{
printf("\n%.2f", massafinal);
}

}

//SO PRA MIM SABER SE A EXECUCAO FOI FORA DO LACO, QUANDO EU VISUALIZAR O PROGRAMA "PÓS-EXECUCAO"
printf("\nEXECUCAO FORA DO LACO");

return 0;
}

Ainda estou tentando fazer o programa calcular a massa final pra depois pensar lá na questão do tempo final.

Link para o comentário
Compartilhar em outros sites

Obrigado Ghost Killer!

Consegui entender o funcionamento e o exercício deu certo!

Obrigado mesmo!

----------------------------------

Edit: Mais uma dúvida.

Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou não de um

novo produto lançado no mercado. Para isso, forneceu o sexo do entrevistado e sua resposta ( sim

ou não). Sabe-se que foram entrevistadas 2000 pessoas, fazer um algorítimo que calcule e escreva:

• O número de pessoas que responderam Sim;

• O número de pessoas que responderam Não;

• A porcentagem de pessoas do sexo feminino que responderam Sim;

• A porcentagem de pessoas do sexo masculino que responderam Não;

Os dados testados no sistema de correção online:

Entrada

15 (entrevistados)

MASCULINO

SIM

FEMININO

NAO

MASCULINO

NAO

FEMININO

NAO

FEMININO

NAO

FEMININO

SIM

MASCULINO

NAO

MASCULINO

NAO

FEMININO

NAO

MASCULINO

SIM

FEMININO

NAO

MASCULINO

SIM

FEMININO

NAO

MASCULINO

SIM

MASCULINO

SIM

Saída

SIM = 6

NAO = 9

FEMININO - SIM = 14.29

MASCULINO - NAO = 37.50

Meu problema é como vou fazer o cálculo do "feminino - sim" e "masculino - nao" =X

Meu código:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main ()

{
char sexo[50],resposta[50];
float sim,nao,psim,pnao,cont,porcm,porcf;
int qtd,qtdm,qtdf,qtdmn,qtdfs;
sim=0;
nao=0;
psim-0;
pnao=0;
qtdm=0;
qtdf=0;
qtdmn=0;
qtdfs=0;
scanf("%d", &qtd);
for(cont=0; cont<qtd; cont++)
{
scanf("%s %s", &sexo, &resposta);
if(strcmp(resposta,"SIM")==0)
{
sim++;
}
else
{
nao++;
}
if(strcmp(resposta,"FEMININO")==0)
{
qtdf++;
if(strcmp(resposta,"SIM")==0)
qtdfs++;
}
if(strcmp(resposta,"MASCULINO")==0)
{
qtdm++;
if(strcmp(resposta,"NAO")==0)
qtdmn++;
}
}
if (cont>0)
porcf = ((float)qtdfs/(float)qtdf)*100;
else
porcf = 0;
if (cont>0)
porcm = ((float)qtdmn/(float)qtdm)*100;
else
porcm = 0;
printf("SIM = %.0f\n",sim);
printf("NAO = %.0f\n",nao);
printf("FEMININO - SIM = %.2f\n",porcf);
printf("MASCULINO - NAO = %.2f\n",porcm);
system("PAUSE");
return 0;
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!