Você está aqui: C++ ::: Dicas & Truques ::: Geometria, Trigonometria e Figuras Geométricas |
Como calcular o coeficiente angular de uma reta em C++ dados dois pontos no plano cartesianoQuantidade de visualizações: 1319 vezes |
O Coeficiente Angular de uma reta é a variação, na vertical, ou seja, no eixo y, pela variação horizontal, no eixo x. Sim, isso mesmo. O coeficiente angular de uma reta tem tudo a ver com a derivada, que nada mais é que a taxa de variação de y em relação a x. Vamos começar analisando o seguinte gráfico, no qual temos dois pontos distintos no plano cartesiano: ![]() Veja que o segmento de reta AB passa pelos pontos A (x=3, y=6) e B (x=9, y=10). Dessa forma, a fórmula para obtenção do coeficiente angular m dessa reta é: \[\ \text{m} = \frac{y_2 - y_1}{x_2 - x_1} = \frac{\Delta y}{\Delta x} = tg \theta \] Note que __$\Delta y__$ e __$\Delta x__$ são as variações dos valores no eixo das abscissas e no eixo das ordenadas. No triângulo retângulo que desenhei acima, a variação __$\Delta y__$ se refere ao comprimento do cateto oposto e a variação __$\Delta y__$ se refere ao comprimento do cateto adjascente. Veja agora o trecho de código na linguagem C++ que solicita as coordenadas x e y dos dois pontos, efetua o cálculo e mostra o coeficiente angular m da reta que passa pelos dois pontos: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> #include <cstdlib> using namespace std; int main(int argc, char *argv[]){ // coordenadas dos dois pontos float x1, y1, x2, y2; // guarda o coeficiente angular float m; // x e y do primeiro ponto cout << "Coordenada x do primeiro ponto: "; cin >> x1; cout << "Coordenada y do primeiro ponto: "; cin >> y1; // x e y do segundo ponto cout << "Coordenada x do segundo ponto: "; cin >> x2; cout << "Coordenada y do segundo ponto: "; cin >> y2; // vamos calcular o coeficiente angular m = (y2 - y1) / (x2 - x1); // mostramos o resultado cout << "O coeficiente angular é: " << m << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executar este código C++ nós teremos o seguinte resultado: Coordenada x do primeiro ponto: 3 Coordenada y do primeiro ponto: 6 Coordenada x do segundo ponto: 9 Coordenada y do segundo ponto: 10 O coeficiente angular é: 0.666667 Pressione qualquer tecla para continuar... Veja agora como podemos calcular o coeficiente angular da reta que passa pelos dois pontos usando o Teorema de Pitágoras. Note que agora nós estamos tirando proveito da tangente do ângulo Theta (__$\theta__$), também chamado de ângulo Alfa ou Alpha (__$\alpha__$): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> #include <cstdlib> #include <math.h> using namespace std; int main(int argc, char *argv[]){ // coordenadas dos dois pontos float x1, y1, x2, y2; // guarda os comprimentos dos catetos oposto e adjascente float cateto_oposto, cateto_adjascente; // guarda o ângulo tetha (em radianos) e a tangente float tetha, tangente; // x e y do primeiro ponto cout << "Coordenada x do primeiro ponto: "; cin >> x1; cout << "Coordenada y do primeiro ponto: "; cin >> y1; // x e y do segundo ponto cout << "Coordenada x do segundo ponto: "; cin >> x2; cout << "Coordenada y do segundo ponto: "; cin >> y2; // vamos obter o comprimento do cateto oposto cateto_oposto = y2 - y1; // e agora o cateto adjascente cateto_adjascente = x2 - x1; // vamos obter o ângulo tetha, ou seja, a inclinação da hipetunesa // (em radianos, não se esqueça) tetha = atan2(cateto_oposto, cateto_adjascente); // e finalmente usamos a tangente desse ângulo para calcular // o coeficiente angular tangente = tan(tetha); // mostramos o resultado cout << "O coeficiente angular é: " << tangente << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executar este código você verá que o resultado é o mesmo. No entanto, fique atento às propriedades do coeficiente angular da reta: 1) O coeficiente angular é positivo quando a reta for crescente, ou seja, m > 0; 2) O coeficiente angular é negativo quando a reta for decrescente, ou seja, m < 0; 3) Se a reta estiver na horizontal, ou seja, paralela ao eixo x, seu coeficiente angular é zero (0). 4) Se a reta estiver na vertical, ou seja, paralela ao eixo y, o coeficiente angular não existe. |
![]() |
C++ ::: STL (Standard Template Library) ::: Vector C++ |
Como retornar uma referência ao último elemento de um vector C++ usando a função back()Quantidade de visualizações: 7018 vezes |
O último elemento de um contêiner STL vector pode ser acessado por meio da função back(). Como esta função é sobrecarregada, temos duas opções:reference back(); const_reference back() const; ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> #include <vector> using namespace std; int main(int argc, char *argv[]){ // um vector vazio que conterá inteiros vector<int> valores; // vamos inserir três elementos valores.push_back(54); valores.push_back(13); valores.push_back(87); // vamos obter o valor do último elemento do vector // Note que back() pode ser usada dos dois lados // de uma operação de atribuição int valor = valores.back(); cout << "Último elemento: " << valor << endl; // vamos alterar o valor do último elemento valores.back() = 102; // vamos testar o resultado cout << "Último elemento: " << valores.back() << endl; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executar este código C++ nós teremos o seguinte resultado: Último elemento: 87 Último elemento: 102 Note que aqui nós usamos: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- int valor = valores.back(); para guardar o valor do último elemento na variável valor. Poderíamos também usar: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- int& valor = valores.back(); valor = 102; Agora valor é uma referência direta ao último elemento do vector. Desta forma, qualquer alteração no valor da variável valor afetará também o último elemento do vector. Observe agora o seguinte trecho de código: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- int valor = valores.back(); // o último elemento é 87 valores.back() = 20; cout << "Último elemento: " << valor << endl; Aqui nós acessamos o valor do último elemento, guardarmos-o na variável valor e atribuímos o valor 20 à valores.back(). Porém, ao imprimirmos a variável valor o seu conteúdo ainda é 87. De fato, o que gostaríamos é que uma alteração em valores.back() afetasse também a variável valor. Assim: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- int& valor = valores.back(); // o último elemento é 87 valores.back() = 20; cout << "Último elemento: " << valor << endl; Mas, como evitar alterações diretas na variável valor? Podemos declarar valor como uma referência constante, ou seja, usar a segunda versão da função back(), a saber const T&, que retorna uma referência constante. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- const int& valor = valores.back(); // o último elemento é 87 valores.back() = 20; valor = 300; // esta linha não compila cout << "Último elemento: " << valor << endl; Agora o efeito que queríamos é alcançado. Alterações em valores.back() afetam a variável valor, mas, não podemos alterar valor diretamente, já que esta variável é uma referência constante agora. |
C++ ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas |
Como calcular o seno de um número ou ângulo em C++ usando a função sin()Quantidade de visualizações: 3095 vezes |
Em geral, quando falamos de seno, estamos falando do triângulo retângulo de Pitágoras (Teorema de Pitágoras). A verdade é que podemos usar a função seno disponível nas linguagens de programação para calcular o seno de qualquer número, mesmo nossas aplicações não tendo nenhuma relação com trigonometria. No entanto, é sempre importante entender o que é a função seno. Veja a seguinte imagem: ![]() Veja que temos um triângulo retângulo com as medidas já calculadas para a hipotenusa e os dois catetos, assim como os ângulos entre eles. Assim, o seno é a razão entre o cateto oposto (oposto ao ângulo theta) e a hipotenusa, ou seja, o cateto oposto dividido pela hipotenusa. Veja a fórmula: \[\text{Seno} = \frac{\text{Cateto oposto}}{\text{Hipotenusa}} \] Então, se dividirmos 20 por 36.056 (na figura eu arredondei) nós teremos 0.5547, que é a razão entre o cateto oposto e a hipotenusa (em radianos). Agora, experimente calcular o arco-cosseno de 0.5547. O resultado será 0.9828 (em radianos). Convertendo 0.9828 radianos para graus, nós obtemos 56.31º, que é exatamente o ângulo em graus entre o cateto oposto e a hipotenusa na figura acima. Pronto! Agora que já sabemos o que é seno na trigonometria, vamos entender mais sobre a função sin() da linguagem C++. Esta função, disponível no header math.h, recebe um valor numérico e retorna um valor, também numérico) entre -1 até 1 (ambos inclusos). Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> #include <math.h> #include <cstdlib> using namespace std; int main(int argc, char *argv[]){ cout << "Seno de 0 = " << sin(0) << "\n"; cout << "Seno de 0 = " << sin(1) << "\n"; cout << "Seno de 0 = " << sin(2) << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executar este código C++ nós teremos o seguinte resultado: Seno de 0 = 0 Seno de 0 = 0.841471 Seno de 0 = 0.909297 Note que calculamos os senos dos valores 0, 1 e 2. Observe como os resultados conferem com a curva da função seno mostrada abaixo: ![]() |
C++ ::: Win32 API (Windows API) ::: Arquivos e Diretórios |
Arquivos e diretórios em C++ - Como escrever em arquivos usando a função WriteFile() da API do WindowsQuantidade de visualizações: 9118 vezes |
A função WriteFile() da Win32 API é útil quando precisamos escrever em arquivos. Esta função foi projetada para escritas síncronas e assíncronas, enquanto WriteFileEx() é somente para escritas assíncronas. Veja o protótipo desta função: BOOL WINAPI WriteFile( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped ); Antes de escrevermos em um arquivo, é importante entendermos o significado dos parâmetros da função WriteFile(): a) HANDLE hFile - Este é o handle para o arquivo no qual queremos escrever. Este handle deve ser criado com os direitos de acesso de escrita GENERIC_WRITE. b) LPCVOID lpBuffer - Um ponteiro para o buffer que contém os dados que serão escritos no arquivo. c) DWORD nNumberOfBytesToWrite - O número de bytes a serem escritos no arquivo. d) LPDWORD lpNumberOfBytesWritten - Um ponteiro para uma variável que receberá o número de bytes escritos. A função WriteFile() define o valor desta variável como zero antes de fazer seu trabalho ou verificação de erro. d) LPOVERLAPPED lpOverlapped - Um ponteiro para um estrutura OVERLAPPED. Esta estrutura é exigida se o handle para o arquivo for obtido usando FILE_FLAG_OVERLAPPED para o parâmetro dwFlagsAndAttributes da função CreateFile(). Geralmente usamos NULL para este parâmetro. Veja um trecho de código no qual usamos a função WriteFile() para escrever duas linhas em um arquivo texto: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <cstdlib> #include <iostream> #include <windows.h> using namespace std; int main(int argc, char *argv[]){ // dados a serem escritos no arquivo CHAR frase[80]; DWORD nOut; // bytes escritos // nome do arquivo CHAR arquivo[] = "C:\\testes.txt"; // vamos abrir o arquivo para escrita. // se o arquivo não existir nós vamos criá-lo. HANDLE hArquivo = CreateFile(arquivo, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hArquivo == INVALID_HANDLE_VALUE){ cout << "Erro ao abrir o arquivo: " << GetLastError() << endl; } else{ // arquivo aberto com sucesso. Vamos escrever // dados a serem escritos no arquivo CHAR frase1[80] = "Programar em C++ é bom demais\r\n"; CHAR frase2[80] = "E a Win32 é da hora!!!!"; DWORD nOut; // bytes escritos // vamos escrever a primeira frase WriteFile(hArquivo, frase1, strlen(frase1), &nOut, NULL); cout << nOut << " bytes foram escritos. " << endl; // vamos escrever a segunda frase WriteFile(hArquivo, frase2, strlen(frase2), &nOut, NULL); cout << nOut << " bytes foram escritos. " << endl; } // vamos fechar o handle CloseHandle(hArquivo); system("PAUSE"); return EXIT_SUCCESS; } |
Desafios, Exercícios e Algoritmos Resolvidos de C++ |
Veja mais Dicas e truques de C++ |
Dicas e truques de outras linguagens |
JavaScript - Como obter o código da tecla pressionada em um elemento HTML usando o evento onkeypress do JavaScript JavaScript - Como calcular o coeficiente angular de uma reta em JavaScript dados dois pontos no plano cartesiano |
Códigos Fonte |
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |