bcs_ptx 0 Denunciar post Postado Abril 17, 2012 Fala raça, estou começando agora com c, oque tem de errado nesse código? ele conta enquanto a população A for menor que B, depois que a a ultrapassar a b ele mostra o numero de anos que foi necessário para alcançar a outra. valeu main(){ int total_a = 90; int total_b = 200; int ano = 0; while(total_a < total_B){ total_a = total_a * 0.3; total_b = total_b * 0.1; ano = ano + 1; } printf("%d %d %d", total_a, total_b, ano); } Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Abril 17, 2012 Dicas de boa prática: NUNCA omita o 'int' de uma função, use: int main() E coloque o 'return 0;'. Melhor ainda, use: int main(void) ------------------------ Prefira: int var = 2; var += 15; Ao invés de: int var = 2; var = var + 15; Além de ser mais fácil de ler, gera código mais otimizado (pelo o menos em compiladores mais antigos, talvez em compiladores modernos também). A mesma coisa serve pra *, /, -, %, etc. ------------------------ Prefira: int var = 2; ++var; Ao invés de: int var = 2; var += 1; Além de ser mais fácil de ler, gera código mais otimizado (pelo o menos em compiladores mais antigos, talvez em compiladores modernos também). ------------------------ Agora, você não pode fazer multiplicação com números decimais usando 'int', afinal, int significa intenger, ou inteiro, em português. Você tem que usar o tipo 'double' para isso (ou float, mas double é mais usado). Lembre-se também que C é uma lang case sensitive. Então, total_b é diferente de Total_b, que é diferente de TOTAL_B, que é diferente de tOtAl_B, que é diferente de total_B. Cada um desses que citei é uma variável diferente. Outra coisa, está faltando o #include para o printf(), que é o <stdio.h>. ------------------------- No final, ficaria isso: #include <stdio.h> int main(void) { double total_a = 90.0; double total_b = 200.0; int ano = 0; while( total_a < total_b ) { total_a *= 0.3; total_b *= 0.1; ++ano; } printf("%f %f %d", total_a, total_b, ano); return 0; } Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
bcs_ptx 0 Denunciar post Postado Abril 17, 2012 blza cara, mas isso me retorna 27.000000 e 20.000000 e 1, na real era para mostrar quantos anos levou para o a ultrapassar o b e qual o valor de a e b no final. Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Abril 17, 2012 Eu te dei dicas sobre como corrigir o seu programa nos erros do código. Se a resposta não é '1' (1 ano), então tem algum erro de lógica no seu programa. Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
bcs_ptx 0 Denunciar post Postado Abril 17, 2012 blza, valeu.abraços Compartilhar este post Link para o post Compartilhar em outros sites
Gerciley 14 Denunciar post Postado Abril 17, 2012 Amigo seu código não tem erro nenhum, os valores de saída estão certos faça o Chinês do seu código: a variável Total_a é menor que total_b isso satisfaz a expressão lógica certo? então ele entra no laço e faz as operações: total_a *= 0.3; total_b *= 0.1; ano++; feito isso total_a passa a valer 27 que é igual a 90 (valor inicial da variável) multiplicado por 0.3; a variavel total_b passa a valer 20 que é 200 (valor inicial da variável) multiplicado por 0.1, depois ele acrescenta 1 à variável ano e faz o teste novamente, verifica que total_a agora tem valor igual a 27 e total_b tem valor igual a 20 portanto a expressão total_a < total_b e falsa e não entra novamente no loop impreime os dados 27 e 20 e 1 pois passou apenas uma vez no loop; Espero ter sido claro e poder ter ajudado, qualquer duvida poste ai; Abraços... Compartilhar este post Link para o post Compartilhar em outros sites