Jump to content
jonhhy

soma dos quadrados(elevados a dois)

Recommended Posts

jonhhy

boas, o programa é este:

#include <stdio.h>
#include <math.h>
int main (void)
{
int l1,l2,l3;
float soma; puts("escreve os valores para os lados");
scanf ("%d%d%d",&l1,&l2,&l3);
soma = l1*l1 + pow(2.0,l2) +l3*l3;
printf("a soma dos quadrados é %i exatamente:\n",&
soma);
}

e traz o erro de dar valores incrivelmente grande e negativos (até ao momento).

qual o erro consequente do programa?

agradenço desde já a vossa ajuda :)

Share this post


Link to post
Share on other sites
Rui Carlos

Em primeiro lugar, no printf não precisas do &, e devias ter %f em vez de %i (ou então passa a usar inteiros em todo o lado).

Depois, lê a documentação da função pow (ou então não a uses).

SYNOPSIS

#include <math.h>

double

pow(double x, double y);

long double

powl(long double x, long double y);

float

powf(float x, float y);

DESCRIPTION

The pow() functions compute x raised to the power y.

  • Vote 1

Share this post


Link to post
Share on other sites
thoga31

Tira o & do printf, isso só é preciso no scanf. O scanf precisa do endereço (função do &) e o printf não.


Knowledge is free!

Share this post


Link to post
Share on other sites
HappyHippyHippo

eu estou mais curioso em saber porque razão estás a ignorar as mensagens do compilador ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
jonhhy

Em primeiro lugar, no printf não precisas do &, e devias ter %f em vez de %i (ou então passa a usar inteiros em todo o lado).

Depois, lê a documentação da função pow (ou então não a uses).

já percebi porque a minha stora diz pra não usar-mos o pow para inteiros(com isso ñ sei bem onde quer chegar, mas no meu ver referia-se ao espaço ocupado e ele deve fazer algum tipo de mudança de tipos para qur funcione...)

pois como o tipo da variável a ser usada é do tipo double: ela costuma dizer que se fizer-mos desta forma ela diz:"estamos a usar um canhão para matar-mos uma mosca".

já agora Rui Carlos,

obrigado pelo post deu para perceber o que tinha mudar. MAs eu com float's consegui usar a função pow:

#include <stdio.h>
#include <math.h>
int main (void)
{
float l1,l2,l3;
float soma; puts("escreve os valores para os lados");
scanf ("%f%f%f",&l1,&l2,&l3);
soma = pow(l1,2) + pow(l2,2) + pow(l3,2);
printf("a soma dos quadrados é %f exatamente:\n",soma);
}

:thumbsup:

o resultado parece correto!

Share this post


Link to post
Share on other sites
Rui Carlos

Até com inteiros podes usar o pow, só convém é usá-lo correctamente. É que pow(2.0,l2) é diferente de pow(l2,2).

(Já agora, em geral é melhor usar double em vez de float.)

  • Vote 1

Share this post


Link to post
Share on other sites
HappyHippyHippo

pois como o tipo da variável a ser usada é do tipo double: ela costuma dizer que se fizer-mos desta forma ela diz:"estamos a usar um canhão para matar-mos uma mosca".

depende ...

efectuar o calculo de algo como 123^123 não é muito bonito sem usar algo como a função pow

no entanto, como estás a calcular a potencia de 2, isso é facilmente resolvido pela matemática:

x^2 = x * x

como fizeste no teu primeiro código.

além disso, tens de perceber que o computador tem um canhão específico para fazer esse tipo de coisas, chamasse ALU.

no final de contas, existe um pró e um contra no uso da função pow para inteiros:

pro - legibilidade >> é muito mais fácil ler código escrito dessa forma

contra - elevação do tipo de dados implícita >> como estás a chamar uma função que requer doubles ao qual lhe dás inteiros, os dados são convertidos para o tipo double para se poder efectuar a chamada correctamente. e isso tem um ínfimo overhead.

na minha opinião, usa a função pow que é para isso que ela é usada.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.