cmath - Mais matemática com C++
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 .
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 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
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 para calcular
E na linha 12 usamos a função para calcular
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 para calcular o cosseno de . Na linha 11 calculamos o arco-seno de usando a função .
Já na linha 12 a gente usou uma expressão . Pela precedência, primeiro o C++ calcula as funções, nesse caso , e depois calcula a divisão . 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 para facilitar.
Na linha 10 usamos a função para calcular o logaritmo natural de .
Na linha 11 usamos a função para calcular o logaritmo de na base .
Na linha 12 usamos a função para calcular o logaritmo de na base .
Outras funções comuns
Algumas outras funções da biblioteca cmath podem ser úteis.
Vamos ver um exemplo com as funções , e
Na linha 11 usamos a função para calcular valor absoluto da variável .
Na linha 12 usamos a função para calcular o maior valor entre as variáveis e . Com a função podemos calcular o menor entre as variáveis, como feito na linha 13
A diferença entre as funções , , e 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
Fonte do Exercício.
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 e precisaremos tirar a raiz quadrada então usaremos a função . Mas lembre-se: pra usar essa função vamos precisar incluir a biblioteca matemática usando .
Como entrada temos os valores dos catetos, vamos chamar de variáveis e e vamos precisar calcular a hipotenusa, que vamos chamar de variável . 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 e . E também vamos declarar as nossas variáveis:
Passo 2
Agora vamos usar as funções para imprimir instruções pro usuário, e a função para receber valores das variáveis e do usuário:
Passo 3
Com os valores recebidos podemos calcular nossa hipotenusa.
Pra elevar um número usamos a função . Nesse caso o nosso número é a variável , e a potência é o número , pois queremos elevar ao quadrado:
E fazemos a mesma coisa pra variável
Usando o operador somamos as duas potências.
Pra tirar a raiz quadrada usamos a função . Nesse caso, o nosso “número” é toda a expressão escrita anteriormente:
E claro, não podemos esquecer de guardar esse resultada na variável
Agora é só escrever isso no C++:
Passo 4
Agora é só a gente usar o pra imprimir o valor da hipotenusa:
]
E tudo pronto, questão no ponto!
Resposta
Exercício Resolvido #2
Elaboração Própria
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 do tipo pra gente poder receber qualquer valor real de ângulo.
Pra calcular o seno, cosseno, e tangente, vamos usar a biblioteca para acessar as funções trigonométricas. Então temos que usar 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
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 e recebemos o valor do usuário usando
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 .
Passo 4
Agora vamos fazer os cálculos. Pra isso vamos usar as funções , e . Pra deixar o código mais limpo, vamos inserir as funções trigonométricas diretamente dentro do
Resposta
Exercício Resolvido #3
Elaboração Própria
Dada as funções
Faça um programa que receba o valor de e calcule
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 .
Vamos precisar de três variáveis: uma variável para receber o valor do usuário. Uma variável para guardar o resultado de . E uma variável para guardar o resultado de . Para assumir valores reais, essas variáveis devem ser do tipo .
Passo 2
Logo em seguida, vamos usar a função para solicitar que o usuário insira o valor de , e a usamos a função para ler o valor inserido.
Passo 3
Hora da matemágica!
Pra facilitar nossa vida, primeiro vamos calcular o . Com a função a gente calcula o valor absoluto . E com a função podemos calcular o logaritmo na base 10. Colocando no C++ fica dessa forma:
Agora que já temos o valor da variável , podemos aplicar esse valor no cálculo da . Usando a função podemos elevar o número 5 ao valor contido da variável . E depois é só dividir o resultado por . 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
Elaboração Própria
Dada as funções
Faça um programa que receba o valor de , e mostre pro usuário o valor de de 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 .
Vamos precisar de 4 variáveis:
- variável , para receber o valor do usuário.
- variável , para guardar o resultado de
- variável , para guardar o resultado de
- variável , onde guardaremos o maior resultado
Para ter alta precisão, todas essas variáveis devem ser do tipo .
Logo em seguida, vamos usar a função para solicitar que o usuário insira o valor de , e a função para ler o valor inserido.
Passo 2
Primeiro vamos calcular . Para calcular o cosseno usamos a função e para calcular usamos a função . Juntando as duas funções temos:
Para calcular , usamos a função para obter o seno, e função para obter . Colocamos uma função dentro da outra e teremos:
E pra finalizar, a gente usa a função 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
Elaboração Própria
Calcule o momento de inércia , e de um cone, sabendo que:
Receba do usuário o valor da massa , do raio e da altura .
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: , , que serão recebidas do usuário, e as a , e que serão calculadas. Todas serão do tipo 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++:
Convertendo para as fórmulas do C++ vamos obter:
Já o momento de Inércia em é:
Que no C++ fica:
Passo 3
E pra fechar a questão, vamos usar o para exibir os valores na tela:
Resposta
Exercício Resolvido #6
Adaptado de IFPR - Gil Eduardo de Andrade – Prática 03
Faça um programa em C que solicite dois valores inteiros. Depois calcule a raiz quadrada do segundo elevado ao primeiro:
Passo 1
E aí pessoal. Essa é uma questão direta, vamos precisar receber valores e calcular .
Então vamos declarar as duas variáveis inteiras e . Mas também uma outra variável do tipo chamada para guardar o resultado obtido.
Passo 2
Belezinha. Agora vamos receber os valores do usuário. Como sempre, vamos utilizar os comandos e para isso:
Passo 3
Com os valores em mãos, podemos efetuar os cálculos.
Precisamos resolver a expressão:
Traduzindo isso para C++ teremos:
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 mais uma vez:
E com isso terminamos o exercício.
Resposta
Exercício Resolvido #7
Adaptado de UFOP - Constantes e bibliotecas - Túlio Toffolo & Puca Huachi
Crie um programa que lê a hipotenusa 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 enquanto o cateto oposto terá tamanho
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 .
Então de cara vamos precisar de quatro variáveis do tipo , a variável para armazenar o ângulo, para armazenar a hipotenusa, e e para guardar o valor dos catetos.
Também precisaremos do valor de , então vamos criar uma constante chamada que armazena o valor
Passo 2
Agora temos que receber os valores do usuário. Com e 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:
No código teremos:
Para o cálculo dos catetos vamos usar as funções e presentes na biblioteca
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 e presentes na biblioteca
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
IFC – Exercícios complementares
Escreva uma função que calcule e retorne a distância entre dois pontos e ).
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: e são as posições do primeiro ponto, e são as posições do segundo ponto, e 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
Passo 2
Agora vamos receber as entradas do usuário. Utilizando e 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 :
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:
Traduzindo para código C++ termos:
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