cmath - Mais matemática com C++

Ver Todos os Exercícios

Teoria

E aí pessoal, aqui é o Juan do Responde Aí, e hoje vamos falar sobre a biblioteca cmath.

Matemática++

Até agora a gente viu as operações aritméticas básicas. Mas e onde estão as potências? Cadê as raízes, trigonometrias e logaritmos?

Não se preocupe, a Biblioteca Padrão do C++ fornece tudo isso dentro do header < c m a t h > .

A cmath é uma biblioteca herdada da Linguagem C, e que fornece pra gente funções trigonométricas, hiperbólicas, exponenciais, potenciação, e muito mais.

Pra usar a biblioteca cmath a gente utiliza # i n c l u d e < c m a t h > no começo do nosso código. E da mesma forma que a biblioteca iostream a gente precisa incluir o namespace da biblioteca padrão usando u s i n g   n a m e s p a c e   s t d ;

E pronto! Agora podemos usar várias funções matemáticas que o C++ fornece pra gente.

Agora vamos falar sobre algumas das principais funções presentes na cmath.

Potenciação

As duas principais funções de potenciação presentes na biblioteca cmath são a pow e a sqrt

Para usar essas funções basta escrever o nome da função e dentro dos parêntesis colocar os valores que você quer calcular.

Na linha 11 a gente usou a função p o w ( x , y ) para calcular x y

E na linha 12 usamos a função s q r t ( x ) para calcular x

Trigonometria

As funções trigonométricas estão disponíveis também. Atenção, o C++ usa radianos.

Usamos essas funções da mesma forma: basta escrever o nome da função e dentro dos parêntesis colocar os valores que você quer calcular.

Vamos ver alguns exemplos:

As funções trigonométricas trabalham em radianos, então é sempre bom definir uma variável contendo o valor de π . E pra evitar que você altere o valor sem querer use o modificador const para criar uma constante inalterável, como fizemos na linha 08

Na linha 10 usamos a função c o s para calcular o cosseno de π 4 . Na linha 11 calculamos o arco-seno de ½ usando a função a s i n .

Já na linha 12 a gente usou uma expressão 1 / t a n ⁡ ( P I / 6 ) . Pela precedência, primeiro o C++ calcula as funções, nesse caso t a n ⁡ ( P I / 6 ) , e depois calcula a divisão 1 / t a n . Dessa forma obtemos a cotangente.

Funções exponenciais e logarítmicas

As principais funções exponenciais e logarítmicas disponíveis são:

Vamos resolver alguns exemplos:

Na linha 8 vamos declarar uma constante com o valor de e para facilitar.

Na linha 10 usamos a função l o g para calcular o logaritmo natural de e .

Na linha 11 usamos a função l o g 2 para calcular o logaritmo de 8 na base 2 .

Na linha 12 usamos a função l o g 10 para calcular o logaritmo de 100 na base 10 .

Outras funções comuns

Algumas outras funções da biblioteca cmath podem ser úteis.

Vamos ver um exemplo com as funções a b s ( x ) , f m a x ( x , y ) e f m i n ( x , y )

Na linha 11 usamos a função a b s para calcular valor absoluto da variável y .

Na linha 12 usamos a função f m a x para calcular o maior valor entre as variáveis x e y . Com a função f m i n podemos calcular o menor entre as variáveis, como feito na linha 13

A diferença entre as funções r o u n d ( x ) , c e i l ( x ) , f l o o r x e t r u n c ( x ) pode não ficar clara de primeira. Então vamos fazer o seguinte exemplo pra esclarecer:

O código pode ter ficado um pouco feio. Mas calma, que ele não assusta. São apenas muitos valores sendo impressas em uma mesma linha pra gerar essa tabela.

Saca só: O round efetua os arredondamentos de acordo com as regras matemáticas. O trunc simplesmente ignora os valores após o ponto decimal. O floor sempre busca diminuir o valor, mesmo quando esse valor já é negativo. E o ceil sempre aumenta o valor.

E por hoje é isso galera. Pra entender melhor, vamos fazer uns exercícios de fixação.

Potenciação

Trigonometria

Funções exponenciais e logarítmicas

Outras funções comuns

Exercícios Resolvidos

Exercício Resolvido #1

Escreva um programa que calcule a hipotenusa de um triângulo retângulo. Peça pro usuário o valor dos catetos.

Passo 1

Mãos a obra, pessoal. Tranquilidade que essa é uma questão bem direta:

Pra calcular a hipotenusa, nós vamos precisar elevar ao quadrado, então usaremos a função p o w e precisaremos tirar a raiz quadrada então usaremos a função s q r t . Mas lembre-se: pra usar essa função vamos precisar incluir a biblioteca matemática usando # i n c l u d e   < c m a t h > .

Como entrada temos os valores dos catetos, vamos chamar de variáveis a e b e vamos precisar calcular a hipotenusa, que vamos chamar de variável c . Note que esses valores podem ser qualquer número real. Então vamos declarar como tipo float.

Então vamos escrever a estrutura básica do nosso programa: vamos incluir as bibliotecas < c m a t h > e < i o s t r e a m > . E também vamos declarar as nossas variáveis:

Passo 2

Agora vamos usar as funções c o u t para imprimir instruções pro usuário, e a função c i n para receber valores das variáveis a e b   do usuário:

Passo 3

Com os valores recebidos podemos calcular nossa hipotenusa.

Pra elevar um número usamos a função p o w ( n u m e r o ,     p o t e n c i a ) . Nesse caso o nosso número é a variável a , e a potência é o número 2 , pois queremos elevar ao quadrado:

p o w ( a , 2 )

E fazemos a mesma coisa pra variável b

p o w ( b , 2 )

Usando o operador + somamos as duas potências.

p o w a , 2 + p o w ( b , 2 )

Pra tirar a raiz quadrada usamos a função s q r t ( n u m e r o ) . Nesse caso, o nosso “número” é toda a expressão escrita anteriormente:

s q r t   p o w a , 2 + p o w b , 2  

E claro, não podemos esquecer de guardar esse resultada na variável c

c = s q r t   p o w a , 2 + p o w b , 2  

Agora é só escrever isso no C++:

Passo 4

Agora é só a gente usar o c o u t pra imprimir o valor da hipotenusa:

]

E tudo pronto, questão no ponto!

Resposta

Exercício Resolvido #2

Faça um programa que receba um ângulo (em graus) e calcule o seno, cosseno, e tangente do ângulo.

Passo 1

A entrada desse programa é um ângulo em graus. Então vamos criar uma variável t h e t a   do tipo f l o a t pra gente poder receber qualquer valor real de ângulo.

Pra calcular o seno, cosseno, e tangente, vamos usar a biblioteca < c m a t h > para acessar as funções trigonométricas. Então temos que usar # i n c l u d e < c m a t h > no começo do código.

Porém, as funções trigonométricas do C++ trabalham em radianos. Para converter graus em radianos vamos precisar do valor de π . Uma boa prática é declarar uma constante que contenha o valor de π . Vamos usar um valor com quatro casas decimais c o n s t   f l o a t   p i = 3.1415

Então vamos escrever a primeira parte do nosso código:

Passo 2

Certo! Agora vamos receber os valores do usuário. Pra isso mandamos uma mensagem pro usuário usando a função c o u t e recebemos o valor do usuário usando c i n

Passo 3

Mas lembre-se. O ângulo foi dado em graus, e o C++ trabalha com radianos. Então vamos converter. Basta multiplicar por π e dividir por 180 .

Passo 4

Agora vamos fazer os cálculos. Pra isso vamos usar as funções s i n , c o s e t a n . Pra deixar o código mais limpo, vamos inserir as funções trigonométricas diretamente dentro do c o u t

Resposta

Exercício Resolvido #3

Dada as funções

f : R → R ∴ f x = 5 x 2

g : R → R ∴ g x = log 10 ⁡ | x |

Faça um programa que receba o valor de x e calcule f g x

Passo 1

Vamos nessa pessoal! De cara, dá pra ver que essa questão vai requisitar um monte de matemática. Então vamos logo incluir a biblioteca # i n c l u d e   < c m a t h > .

Vamos precisar de três variáveis: uma variável x para receber o valor do usuário. Uma variável g para guardar o resultado de g ( x ) . E uma variável f para guardar o resultado de f ( x ) . Para assumir valores reais, essas variáveis devem ser do tipo f l o a t .

Passo 2

Logo em seguida, vamos usar a função c o u t para solicitar que o usuário insira o valor de x , e a usamos a função c i n para ler o valor inserido.

Passo 3

Hora da matemágica!

Pra facilitar nossa vida, primeiro vamos calcular o g x = log 10 ⁡ | x | . Com a função a b s a gente calcula o valor absoluto | x | . E com a função l o g 10 podemos calcular o logaritmo na base 10. Colocando no C++ fica dessa forma:

Agora que já temos o valor da variável g , podemos aplicar esse valor no cálculo da f g x = 5 g x 2 . Usando a função p o w podemos elevar o número 5 ao valor contido da variável g . E depois é só dividir o resultado por 2 . Mas pra evitar erros, é melhor usar um par de parêntesis redundante. Colocamos no C++ desse jeito:

Passo 4

E pra finalizar, é so imprimir o resultado de maneira legal pro usuário:

E pronto, exercício no ponto!

Resposta

Exercício Resolvido #4

Dada as funções

f : R → R ∴ f x = 2 cos ⁡ x

g : R → R ∴ g x = e sen ⁡ x

Faça um programa que receba o valor de x , e mostre pro usuário o valor de f ( x ) , de   g ( x ) e diga qual é o maior valor.

Passo 1

Pois é galera, essa é uma questão que vai precisar de um monte de matemática. Então vamos logo importar nossa biblioteca, escrevendo # i n c l u d e   < c m a t h > .

Vamos precisar de 4 variáveis:

  • variável x , para receber o valor do usuário.
  • variável g , para guardar o resultado de g ( x )
  • variável f , para guardar o resultado de f ( x )
  • variável m a i o r , onde guardaremos o maior resultado

Para ter alta precisão, todas essas variáveis devem ser do tipo d o u b l e .

Logo em seguida, vamos usar a função c o u t para solicitar que o usuário insira o valor de x , e a função c i n para ler o valor inserido.

Passo 2

Primeiro vamos calcular f ( x ) . Para calcular o cosseno usamos a função c o s e para calcular 2 x usamos a função e x p 2 . Juntando as duas funções temos:

Para calcular g ( x ) , usamos a função s i n para obter o seno, e função e x p para obter e x . Colocamos uma função dentro da outra e teremos:

E pra finalizar, a gente usa a função f m a x para calcular o maior valor entre dois.

Passo 3

Por último, é só imprimir o resultado de maneira legal pro usuário:

E prontinho!

Resposta

Exercício Resolvido #5

Calcule o momento de inércia I x , I y e I z de um cone, sabendo que:

Receba do usuário o valor da massa ( m ) , do raio ( r ) e da altura ( h ) .

Passo 1

Vamos incluir a biblioteca cmath> para gente ter acesso as funções de matemática do C++

A questão é bem direta. De cara vamos declarar seis variáveis: m , r , h que serão recebidas do usuário, e as a I x , I y e I z que serão calculadas. Todas serão do tipo d o u b l e pois precisão é muito importante no cálculo de momentos de inércia.

E claro, vamos aproveitar e já receber os valores do usuário:

Passo 2

Agora its math time:

Vamos aplicar as formulas do momento de inércia no C++:

I x = I z = 3 5 m ⋅ r 2 4 + h 2

Convertendo para as fórmulas do C++ vamos obter:

Já o momento de Inércia em I z é:

I z = 3 m r 2 10

Que no C++ fica:

Passo 3

E pra fechar a questão, vamos usar o c o u t para exibir os valores na tela:

Resposta

Exercício Resolvido #6

Faça um programa em C que solicite dois valores inteiros. Depois calcule a raiz quadrada do segundo elevado ao primeiro: y x

Passo 1

E aí pessoal. Essa é uma questão direta, vamos precisar receber valores e calcular y x .

Então vamos declarar as duas variáveis inteiras x e y . Mas também uma outra variável do tipo f l o a t chamada r e s u l t para guardar o resultado obtido.

Passo 2

Belezinha. Agora vamos receber os valores do usuário. Como sempre, vamos utilizar os comandos c o u t e c i n para isso:

Passo 3

Com os valores em mãos, podemos efetuar os cálculos.

Precisamos resolver a expressão:

y x

Traduzindo isso para C++ teremos:

s q r t (   p o w   y ,   x   )

Veja como fica no código:

Passo 4

Agora a parte mais difícil já passou. Tudo que nos resta é exibir o resultado pro usuário! Então, vamos utilizar o c o u t   mais uma vez:

E com isso terminamos o exercício.

Resposta

Exercício Resolvido #7

Crie um programa que lê a hipotenusa h de um triângulo retângulo e o ângulo α em graus. Este ângulo é formado pela hipotenusa com um dos catetos. Em seguida, imprima o valor dos três lados deste triângulo em ordem crescente.

Dica: lembre-se que o cateto adjacente ao ângulo α terá tamanho c 1   = c o s   α   × h enquanto o cateto oposto terá tamanho c 2   = s e n   α   × h

Passo 1

Vamos lá pessoal. A questão quer que a gente receba a hipotenusa e um ângulo, e com isso calcule os catetos.

No nosso cabeçalho vamos inserir a < c m a t h > .

Então de cara vamos precisar de quatro variáveis do tipo f l o a t , a variável a l p h a para armazenar o ângulo, h para armazenar a hipotenusa, e c 1 e c 2 para guardar o valor dos catetos.

Também precisaremos do valor de π , então vamos criar uma constante f l o a t chamada p i que armazena o valor 3.1415

Passo 2

Agora temos que receber os valores do usuário. Com c o u t e c i n solicitamos que o usuário insira um valor para o ângulo e outro para a hipotenusa.

Passo 3

Belezinha, já temos os valores, então podemos efetuar os cálculos.

Primeiro vamos precisar converter o ângulo de graus para radianos. Da trigonometria, sabemos que para converter usamos a fórmula:

r a d = g r a u s ⋅ π 180

No código teremos:

Para o cálculo dos catetos vamos usar as funções c o s ⁡ ( ) e s i n ⁡ ( ) presentes na biblioteca < c m a t h >

c 1   = c o s c o s   (   a l p h a   )   * h

c 2   = s i n s i n   (   a l p h a   )   * h

No código vamos ter:

Passo 4

Mas a questão não acabou ainda. Agora precisamos exibir os valores de forma crescente!

A hipotenusa sempre é o maior valor, então ela deve ser o último valor a ser exibido. Mas para decidir qual dos catetos é menor ou maior, podemos usar as funções m a x e m i n presentes na biblioteca < c m a t h >

Então primeiro cateto a ser exibido é o menor entre os dois:

O segundo valor a ser exibido é o maior cateto:

E por último exibimos a hipotenusa:

E pronto! A questão está concluída.

Resposta

Exercício Resolvido #8

Escreva uma função que calcule e retorne a distância entre dois pontos ( x 1 ,   y 1 ) e ( x 2 ,   y 2 ).

Passo 1

Certo, galera! Vamos resolver essa questão.

O exercício pede pra calcular a distância entre dois pontos. Então pra começar vamos precisar declarar 5 variáveis: x 1 e y 1 são as posições do primeiro ponto, x 2 e y 2 são as posições do segundo ponto, e d i s t será a variável que vai guardar o resultado.

Para garantir a precisão do cálculo, vamos criar todas essas variáveis como tipo d o u b l e

Passo 2

Agora vamos receber as entradas do usuário. Utilizando c o u t e c i n sucessivamente vamos solicitar os valores dos pontos 1 e 2.

Para deixar o programa mais fácil de usar, vamos utilizar algumas quebras de linha e o caractere especial “ \ t ” :

Passo 3

Agora é hora de calcular a distância entre os dois pontos. Lá das aulas de geometria a gente sabe que pra calcular a distância entre dois pontos usamos:

d = x 1 - x 2 2 + y 1 - y 2 2

Traduzindo para código C++ termos:

d i s t = s q r t ( p o w x 1 - x 2 ,   2 + s q r t ( p o w y 1 - y 2 ,   2

Veja no código

Passo 4

E pra finalizar é só a gente exibir o resultado pro nosso usuário.

Pra isso é só a gente usar o comando c o u t

Resposta