mas tb nao deu certo, será que eu devo usar um for dentro do for?? alguém sabe como fazer isso?? acho que estou errando na lógica do raciocínio…
sgtbreitner
Não sei se pode ajudar a entender o meu problema, no Deitel 6 ed, na página 133, tem um exemplo com a mesma idéia, mas ele não muda o valor inicial, neste exemplo seria como se eu quisesse mexer no deposito. Alguma idéia por ai??
sgtbreitner
ninguém?
Vini_Fernandes
Cara, para imprimir o calculo de 100 em 100 anos faça o seguinte:
Outra coisa, nao entendi porque os totais deveriam diminuir. Explique-se melhor!
Ate mais
sgtbreitner
É um controle de população, eurasia, estasia e oceania são continentes, e a cada 100 anos, ocorre um desastre que diminui pela metade a população, e a partir disto deve-se analisar o processo, vou testar seu código p ver como fica! Vlw pela ajuda!!!
sgtbreitner
Bem galera, esta quase saindo!!
fiz isso aki agora:
ele progride certo até o ano 100, no ano 100 a população diminui pela metade, e no ano 110, ela está normal, como se não fizesse diferença a queda pela metade!! o código ficou assim:
o programa não está usando o valor da queda de população... alguma idéia do que fazer? vlw!
renamed
isso acontece pq vc nao usa as variaveis anteriores para calcular o proximo incremento do for… a população é calculada sem levar em consideração a população anterior, apenas as constantes e o valor de I na interação.
ok?
sgtbreitner
Então, vi isso tb, só não estou conseguindo fazer o programa empregar as variáveis anteriores, alguém tem algum exemplo simples de como posso fazer isso?
achei que assim teria a população antiga para o novo incremento, mas nao rolou
renamed
cara, ai vc terá que recorrer à sua lógica… como é calculado o crescimento da população nesses países? Se não for considerando a população anterior não faz muito sentido, concorda?
Como está o texto do enunciado?
sgtbreitner
Putz, glória aos Deuses do Java e da Sun, acho que deu certo aki:
Só precisas de três variáveis de população, uma para cada continente. Para que ter populacaoEurasia e totalEurasia (tal como para os outros continentes)?
Isto está bem: populacaoEurasia = populacaoEurasia/2;
Isto não está, já que não estás a actualizar a população mas sim a guardar um valor numa variável e que nunca vai ser usadodouble totalEurasia = populacaoEurasia * Math.pow(1 + 0.02, i);
O correcto seria:populacaoEurasia = populacaoEurasia * Math.pow(1 + 0.02, i);
sgtbreitner
cara, ai vc terá que recorrer à sua lógica… como é calculado o crescimento da população nesses países? Se não for considerando a população anterior não faz muito sentido, concorda?
Como está o texto do enunciado?
vc tem razão, a lógica da coisa estava errada, o enunciado é assim: tenho 3 continentes com populaões iniciais de 1000, 5000 e 10000, o crescimento é de 2%, 1% e 0.5% anual, calcular e imprimir em intervalos de 10 anos a evolução da população até o ano 1000.
b. a cada 100 anos há um desastre que diminui a população pela metade, qual a nova evolução?
sgtbreitner
pmlm:
Só precisas de três variáveis de população, uma para cada continente. Para que ter populacaoEurasia e totalEurasia (tal como para os outros continentes)?
Isto está bem: populacaoEurasia = populacaoEurasia/2;
Isto não está, já que não estás a actualizar a população mas sim a guardar um valor numa variável e que nunca vai ser usadodouble totalEurasia = populacaoEurasia * Math.pow(1 + 0.02, i);
O correcto seria:populacaoEurasia = populacaoEurasia * Math.pow(1 + 0.02, i);
Pelo que eu entendi ai, se eu fizer assim, quando executar o loop, os valores iniciais da população já estarão divididos por 2, sendo que eles só devem ser divididos a cada 100 anos, é isso mesmo?
sgtbreitner
pmlm:
Só precisas de três variáveis de população, uma para cada continente. Para que ter populacaoEurasia e totalEurasia (tal como para os outros continentes)?
Isto está bem:
populacaoEurasia = populacaoEurasia/2;
Isto não está, já que não estás a actualizar a população mas sim a guardar um valor numa variável e que nunca vai ser usado
e deu loop infinito. acho que nao entendi o que vc quis dizer
sgtbreitner
Bem pessoal, tenho que ir para a aula, agradeço todas as dicas e espero dentro em breve poder contribuir com outras pessoas também! Mais tarde eu posto outra dúvida sobre loops de outro exercício! abs!
vou deixar aqui o codigo fonte que acredito estar certo:
Cara, uma ultima modificacao do seu codigo. Voce nao precisa calcular os coeficientes em todas as iteraçoes, eh perda de tempo (apenar de seu programa ser simples), entao inclua o calculo dos coeficientes dentro da condicao if, como a seguir:
Veja que o System.out.printf esta dentro da clausula IF, pois do contrario voce vai imprimir populacao == 0 ate 90 anos e de repente voce tera mais de 7.000.000 no ano 100, o que eh impossivel, pois uma populaçao nao pode surgir do NADA!..rsr
t+
renamed
Vini Fernandes:
Cara, uma ultima modificacao do seu codigo. Voce nao precisa calcular os coeficientes em todas as iteraçoes, eh perda de tempo (apenar de seu programa ser simples), entao inclua o calculo dos coeficientes dentro da condicao if, como a seguir:
Vini, não é perda de tempo… na sua abordagem a população só cresce a cada 100 anos e nunca diminui com desastres.
pmlm
doublepopulacaoEurasia=1000;doublepopulacaoEstasia=5000;doublepopulacaoOceania=10000;System.out.printf("%5s%30s%30s%30s\n","ano","Eurasia","Estasia","Oceania");//pelo enunciado deve calcular para todos os anos, mesmo mostrando só de 10 em 10 anos // e começa a calcular no ano 1, já que o ano 0 é o dos dados iniciaisfor(inti=1;i<=1000;i++){populacaoEurasia=populacaoEurasia*1.02;populacaoEstasia=populacaoEstasia*1.01;populacaoOceania=populacaoOceania*1.005;if(i%100==0){//acontece desastre populacaoEurasia=populacaoEurasia/2;populacaoEstasia=populacaoEstasia/2;populacaoOceania=populacaoOceania/2;}if(i%10==0){//De 10 em 10 anos mostra a populaçãoSystem.out.printf("%5d%,30.2f%,30.2f%,30.2f\n",i,populacaoEurasia,populacaoEstasia,populacaoOceania);}}
Vini_Fernandes
renamed , meu codigo e o do sgtbreitner sao equivalentes, porem, o meu evita que ele faça os calculos do coeficiente em um momento que nao interessa, por exemplo: suponha i == 55, mas i nao eh multiplo de 100, entao para que calcular o coeficiente? Interessa apenas aqueles em que i % 100 == 0. Se o calculo do coeficiente consumisse 10 minutos teriamos um alto custo de processamento. Foi isso o que quis dizer…rsrs
Além do mais, exibir uma saida de 10 em 10 anos que nao mostra alteracao do tamanho da populacao eh bem esquisito. Repentinamente do ano 90 a populacao pula de 0 para 7.000.000 no ano 100! Isso eh pra la de estranho…rsrs
t+
renamed
Vini Fernandes:
renamed , meu codigo e o do sgtbreitner sao equivalentes, porem, o meu evita que ele faça os calculos do coeficiente em um momento que nao interessa, por exemplo: suponha i == 55, mas i nao eh multiplo de 100, entao para que calcular o coeficiente? Interessa apenas aqueles em que i % 100 == 0. Se o calculo do coeficiente consumisse 10 minutos teriamos um alto custo de processamento. Foi isso o que quis dizer…rsrs
Além do mais, exibir uma saida de 10 em 10 anos que nao mostra alteracao do tamanho da populacao eh bem esquisito. Repentinamente do ano 90 a populacao pula de 0 para 7.000.000 no ano 100! Isso eh pra la de estranho…rsrs
t+
Eae kra…
Na verdade, ele precisa calcular porque para saber a população do ano 100, por exemplo, ele precisa saber a do ano 99, e pra saber a do ano 99, a do ano 98, e assim por diante…
Do jeito que você propôs, teremos a mesma população durante 100 anos, porque ele só calculará qnd i for múltiplo de 100, entendeu o que eu quis dizer?
Vini_Fernandes
renamed, voce tem razao! Pensei na saida do codigo apenas de 100 em 100 anos!..rsrs. Foi mal!!