Glaucco 1 Denunciar post Postado Agosto 28, 2008 dev-C++ Ajuda por favor. 1º) Faça um programa em C que receba(leia) três números, calcule e mostre(escreva) a média aritmética entre elas. #include <stdio.h> #include <stdlib.h> main() { int a, b, c; double media; printf("Digite o primeiro numero"); scanf("%d", &a); printf("Digite o segundo numero"); scanf("%d", &b); printf("Digite o terceiro numero"); scanf("%d", &c); media = (a + b + c) / 3 printf("A media dos numeros e", media); ta dando erro aqui <<<<<<<<<< pq ??? como eu resolvo esse erro? system("pause"); { Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Agosto 28, 2008 Substitua aquela linha por essa: printf("A media dos numeros e %f \n", media); Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 28, 2008 Se você não usar um type casting, a media vai dar errada...dividindo inteiro por inteiro, o resultado é inteiro, independente do tipo usado na variável media. Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Agosto 28, 2008 Nem sempre. Exemplo: 9/2 = 4,5 Se você não usar um type casting, a media vai dar errada...dividindo inteiro por inteiro, o resultado é inteiro, independente do tipo usado na variável media. Compartilhar este post Link para o post Compartilhar em outros sites
Giovanni Ritchie 0 Denunciar post Postado Agosto 29, 2008 Nem sempre. Exemplo: 9/2 = 4,5 Se você não usar um type casting, a media vai dar errada...dividindo inteiro por inteiro, o resultado é inteiro, independente do tipo usado na variável media. O groove tem razao. 4,5 não é inteiro ..... por isso é melhor usar cast mesmo- Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 29, 2008 Pode provar isso? Nem sempre se, o resultado for um valor "redondo". Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Agosto 29, 2008 kkk Calma ai que confusão. O groove disse isso: Se você não usar um type casting, a media vai dar errada...dividindo inteiro por inteiro, o resultado é inteiro, independente do tipo usado na variável media. Eu disse que o número resultante nem sempre é inteiro. Não precisa de cast porque o cast se torna automático nesse caso já que double é maior que int. Se fosse o contrário precisaria. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Agosto 29, 2008 #include <stdio.h> int main() { int A=9,B=2; printf("%d \t %lf\n",A/B,A/B); return 0; } linux-0khy> ./a.out 4 -0.000000 #include <stdio.h> int main() { int A=9,B=2; printf("%d \t %f\n",A/B,A/(B*1.0)); return 0; } linux-0khy> ./a.out 4 4.500000 #include <stdio.h> int main() { float A=9,B=2; printf("%d \t %f\n",A/B,A/B); return 0; } linux-0khy> ./a.out 0 0.000000 #include <stdio.h> int main() { int A=9,B=2; printf("%d \t %f\n",A/B,(float)A/B); return 0; } linux-0khy> ./a.out 4 4.500000 Compartilhar este post Link para o post Compartilhar em outros sites
Glaucco 1 Denunciar post Postado Agosto 29, 2008 Pode coloca como resolvido. Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 29, 2008 Eu disse que o número resultante nem sempre é inteiro. Não precisa de cast porque o cast se torna automático nesse caso já que double é maior que int. Se fosse o contrário precisaria. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Bom, o debug da Isis responde tudo já, mas como o cast se torna automático? Não se trata de ser maior ou menor e sim que isso é uma especificação da linguagem, se dividir inteiro por inteiro é impossível retonar um float...se puder nos mostrar de onde tirou essa informação, pois fiquei curioso :) Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Agosto 29, 2008 Acho que o casting que ele falou eh tipo o upcasting de java.Não sei como explicar mas é algo como subconjuntos de um domínio. Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 29, 2008 Hm, mas isso não é java. Vamos ver o que ele diz. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Agosto 30, 2008 Eu sei que não é java. Mas isso não significa que a idéia não seja análoga. Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Agosto 30, 2008 Pois é, estou confundindo as bolas mesmo. O casting que falei é do Java mesmo. Mals Eu sei que não é java. Mas isso não significa que a idéia não seja análoga. Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Agosto 30, 2008 Fiz uns testes aqui e virou uma bangunça só. Vejam esse código: #include <stdio.h> #include <stdlib.h> int main() { float A=9,B=2,c; int d; c = 10/3; d = 10/3; printf("%f\n",c); printf("%d \t %f \t %d\n",A/B,A/B,d); system("pause"); return 0; } 3.000000 0 0.000000 1074921472 Pressione qualquer tecla para continuar. . . Alguém consegue explicar isso? Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 30, 2008 Kandrade, isso é problema no printf velho, agora não sei porque...fiz separado, veja: #include <stdio.h> #include <stdlib.h> int main() { float A=9,B=2,c; int d; c = 10/3; d = 10/3; printf("%f\n",c); printf("\n%d",d); printf("\n%d",A/B); printf("\n%f",A/B); system("pause"); return 0; }Só não entendi tb ali onde divido A/B e mostro como int, fica zero o resultado, não deveria pegar a primera casa antes da vírgula? Compartilhar este post Link para o post Compartilhar em outros sites
Glaucco 1 Denunciar post Postado Agosto 30, 2008 Pessoal não to entendendo nada. Pode por como resolvido. Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Brito 12 Denunciar post Postado Agosto 30, 2008 Axo que pelo valor ser real e ter alocado uma variavél int ele pega tipo lixo de memoria e joga na saida, semelhante a vetores quando erramos na indexação que vem um monte de lixo. abs Pessoal não to entendendo nada. Pode por como resolvido. Se ler os topicos entenderá, surgiu uma nova questão referente a sua dúvida. Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 31, 2008 kisuke, acho que não tem nada a ver isso, pois fiz os printf separados ali e retornou outros valores, os "corretos". Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Agosto 31, 2008 pior que tem cara de ser bug no printf mesmo.da uma olhada: #include <stdio.h> int main() { float A=9,B=2,c; int d; c = 10/3; d = 10/3; printf("%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n",c,c,c,c,c,c,c,c); printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",d,d,d,d,d,d,d,d); printf("%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",c,c,c,c,c,c,c,c); printf("%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n",d,d,d,d,d,d,d,d); return 0; } isis@linux-0khy:~/src> ./cast 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 C como float 3 3 3 3 3 3 3 3 D como int 0 1074266112 0 1074266112 0 1074266112 0 1074266112 C como int 0.000000 0.000000 0.000000 0.000000 3.000000 3.000000 3.000000 3.000000 D como float #include <stdio.h> int main() { float A=9,B=2,c; int d; c = 10/3; d = 10/3; int i=0; for(i=0;i<7;i++) printf("%f\t",c); puts(""); for(i=0;i<7;i++) printf("%d\t",d); puts(""); for(i=0;i<7;i++) printf("%d\t",c); puts(""); for(i=0;i<7;i++) printf("%f\t",d); return 0; } isis@linux-0khy:~/src> ./cast 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3 3 3 3 3 3 3 0 0 0 0 0 0 0 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 3.000000 #include <stdio.h> int main() { float A=9,B=2,c; int d; c = 10/3; d = 10/3; printf(" %d \t%f \t D=%d \t D=%d \t D=%d \t %f \t %f \t %f \t %f \t%f\n",A/B,A/B,d,d,d,d,d,d,d,d); return 0; } isis@linux-0khy:~/src> ./cast 0 0.000000 D=1074921472 D=3 D=3 0.000000 0.000000 0.000000 -0.040965 262144.007830 #include <stdio.h> int main() { float A=9,B=2,c; int d; c = 10/3; d = 10/3; printf("%f\n",A/B); printf(" %d \t%f \t D=%d \t D=%d \t D=%d \t %f \t %f \t %f \t %f \t%f\n",A/B,A/B,d,d,d,d,d,d,d,d); return 0; } isis@linux-0khy:~/src> ./cast 4.500000 0 0.000000 D=1074921472 D=3 D=3 0.000000 0.000000 0.000000 2.000000 0.000000 Será que rola uma entrada no bugzilla da libc? Compartilhar este post Link para o post Compartilhar em outros sites