Você está aqui: C++ ::: Dicas & Truques ::: Geometria, Trigonometria e Figuras Geométricas |
Como calcular a apótema de um polígono regular de N lados em C++Quantidade de visualizações: 515 vezes |
Uma das formas mais comuns de se obter a área de um polígono regular é usando a seguinte fórmula: \[\text{A} = \frac{1}{2} \cdot \text{p} \cdot \text{a} \] Onde: p: Perímetro, ou seja, a soma dos comprimentos de todos os lados. a: Apótema, isto é, uma parte que une o centro do polígono ao meio de qualquer lado que esteja perpendicular. Agora que já estamos alinhados, saiba que calcular a apótema de um polígono regular "na mão" é fácil, já que só precisamos medir a distância de dois lados opostos e dividir por dois ou traçar linhas cruzadas e medir a distância de um dos lados até a interseção dessas linhas. No entanto, em programação a coisa já é um pouco mais complicada. Nesta dica mostrarei como podemos realizar esta tarefa em C++. Para isso usaremos alguns truques de trigonometria. Comece analisando a seguinte imagem: ![]() Note que temos um pentágono com cada lado medindo 4 metros. Recorde que um pentágono é um polígono regular de 5 lados. Para deixar a dica mais didática eu coloquei também uma linha azul representando a apótema do polígono e as linhas cruzadas. Veja agora o código C++ que recebe a quantidade de lados do polígono, o comprimento dos lados e retorna a apótema: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> #include <math.h> // vamos definir uma constante para o valor de PI #define PI 3.1415 using namespace std; // função que calcula e retorna a apótema de um // polígono regular double calcular_apotema(int lados, int comprimento){ // a quantidade de lados e o comprimento deles // não podem ser negativos if (lados < 0 || comprimento < 0){ return -1; } // calculamos a apótema return (comprimento / (2 * tan((180 / lados) * PI / 180))); } // função principal do programa int main(int argc, char *argv[]){ int lados, comprimento; // vamos ler a quantidade de lados cout << "Informe a quantidade de lados: "; cin >> lados; // vamos ler o comprimento dos lados cout << "Informe o comprimento dos lados: "; cin >> comprimento; // e agora calculamos a apótema dos polígono double apotema = calcular_apotema(lados, comprimento); // e mostramos o resultado cout << "A apótema do polígono é: " << apotema << endl; cout << "\n" << endl; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executar este código C++ nós teremos o seguinte resultado: Informe a quantidade de lados: 5 Informe o comprimento dos lados: 4 A apótema do polígono é: 2.7527638409423476 |
![]() |
C++ ::: Dicas & Truques ::: Arquivos e Diretórios |
Como renomear um diretório em C++ usando a função rename()Quantidade de visualizações: 8065 vezes |
Em algumas situações nossos códigos C++ precisam renomear diretórios. Isso pode ser feito com o auxílio da função rename() ou _rename(), disponível no header io.h or stdio.h (trazido da linguagem C). Veja a assinatura desta função:int rename(const char *oldname, const char *newname); Se o diretório for renomeado com sucesso a função retornará o valor 0. O retorno será -1 se um erro ocorrer. Neste caso a variável global errno será definido como um dos seguintes valores: a) EINVAL - Invalid argument - Os nomes dos diretórios contém caracteres inválidos; b) ENOENT - No such file or directory - O caminho do diretório é inválido; c) EACCESS - Acesso negado - Algum outro programa está usando este diretório e mantém controle sobre o mesmo. Veja um trecho de código no qual renomeamos um diretório: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> using namespace std; int main(int argc, char *argv[]){ // vamos renomear este diretório char dir_antigo[] = "C:\\Dev-Cpp\\estudos"; char dir_novo[] = "C:\\Dev-Cpp\\estudos2"; // vamos testar se o diretório for renomeado com sucesso if(rename(dir_antigo, dir_novo) != 0){ cout << "Erro: " << strerror(errno) << endl; } else{ cout << "Diretório renomeado com sucesso" << endl; } system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } É possível usar a versão Unicode de rename() ou _rename(). O método _wrename, também presente em io.h or stdio.h é útil quando precisamos internacionalizar nossas aplicações. Veja o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> using namespace std; int main(int argc, char *argv[]){ // vamos renomear este diretório wchar_t dir_antigo[] = L"C:\\Dev-Cpp\\estudos"; wchar_t dir_novo[] = L"C:\\Dev-Cpp\\estudos2"; // vamos testar se o diretório for renomeado com sucesso if(_wrename(dir_antigo, dir_novo) != 0){ cout << "Erro: " << strerror(errno) << endl; } else{ cout << "Diretório renomeado com sucesso" << endl; } system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executar este código C++ nós teremos o seguinte resultado: Diretório renomeado com sucesso |
C++ ::: STL (Standard Template Library) ::: Vector C++ |
Como retornar uma referência ao primeiro elemento de um vector C++ usando a função front()Quantidade de visualizações: 6539 vezes |
O primeiro elemento em um contêiner STL vector do C++ pode ser acessado por meio da função front(). Como esta função é sobrecarregada, temos duas opções:reference front(); const_reference front() 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 primeiro elemento do vector // Note que front() pode ser usada dos dois lados // de uma operação de atribuição int valor = valores.front(); cout << "Primeiro elemento: " << valor << endl; // vamos alterar o valor do primeiro elemento valores.front() = 102; // vamos testar o resultado cout << "Primeiro elemento: " << valores.front() << endl; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Note que aqui nós usamos: int valor = valores.front(); int& valor = valores.front(); valor = 102; 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.front(); // o primeiro elemento é 54 valores.front() = 20; cout << "Primeiro elemento: " << valor << endl; Aqui nós acessamos o valor do primeiro elemento, guardarmos-o na variável valor e atribuímos o valor 20 à valores.front(). Porém, ao imprimirmos a variável valor o seu conteúdo ainda é 54. De fato, o que gostaríamos é que uma alteração em valores.front() afetasse também a variável valor. Assim: int& valor = valores.front(); // o primeiro elemento é 54 valores.front() = 20; cout << "Primeiro elemento: " << valor << endl; ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- const int& valor = valores.front(); // o primeiro elemento é 54 valores.front() = 20; valor = 300; // esta linha não compila cout << "Primeiro elemento: " << valor << endl; Agora o efeito que queríamos é alcançado. Alterações em valores.front() 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 ::: Arrays e Matrix (Vetores e Matrizes) |
Como inicializar os valores dos elementos de um vetor C++ usando valores randômicos - RevisadoQuantidade de visualizações: 9562 vezes |
Esta dica mostra como atribuir números aleatórios aos elementos de um array (vetor). Veja que cada elemento recebe um valor randômico na faixa de 0 a 100:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> using namespace std; int main(int argc, char *argv[]) { // declara uma matriz de 10 elementos int valores[10]; // vamos inicializar os elementos da matriz // usando valores aleatórios de 0 a 100 srand(time(NULL)); for(int i = 0; i < 10; i++){ valores[i] = rand() % 100; } // exibe o resultado for(int i = 0; i < 10; i++){ cout << "Índice: " << i << " - Valor: " << valores[i] << endl; } system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executarmos este código nós teremos um resultado parecido com: Indice: 0 - Valor: 46 Indice: 1 - Valor: 11 Indice: 2 - Valor: 28 Indice: 3 - Valor: 74 Indice: 4 - Valor: 49 Indice: 5 - Valor: 50 Indice: 6 - Valor: 27 Indice: 7 - Valor: 98 Indice: 8 - Valor: 11 Indice: 9 - Valor: 81 |
C++ ::: Win32 API (Windows API) ::: Edit Control |
Como definir a cor de fundo para um Edit Control em tempo de execução usando C++ e a API do WindowsQuantidade de visualizações: 10116 vezes |
O processo de definir a cor de fundo para um Edit Control em tempo de execução usando apenas C++ e a API do Windows é um pouco complicado. A técnica apresentada aqui pode não ser a mais eficiente, mas funciona mesmo (testado como VC++ 2005 e Windows XP). Note que estarei usando as funções CreateSolidBrush(), GetDlgCtrlID(), SetBkMode() e SetBkColor() da WinAPI. 1 - Comece adicionando as linhas na parte de variáveis globais de sua aplicação: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- HBRUSH hbrushEditBox = CreateSolidBrush(RGB(255, 255, 255)); HDC hdcEdit; int id_edit_control; HWND edit_window; 2 - Modifique ou adicione um case para a mensagem WM_CTLCOLOREDIT da seguinte forma: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- case WM_CTLCOLOREDIT: hdcEdit = (HDC)wParam; edit_window = HWND(lParam); id_edit_control = GetDlgCtrlID(edit_window); if(id_edit_control == IDC_EDIT1){ SetBkMode(hdcEdit, TRANSPARENT); SetBkColor(hdcEdit,(LONG)hbrushEditBox); return (LONG)hbrushEditBox; } return (LRESULT)CreateSolidBrush(RGB(255, 255, 255)); 3 - A cor de fundo do Edit Control com ID IDC_EDIT1 será modificada para vermelho quando clicarmos no botão com o ID IDC_BUTTON1. Veja o case para este botão (dentro do case WM_COMMAND): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- case IDC_BUTTON1: // ID do botão // Define uma nova cor de fundo para o Edit Control // com o ID IDC_EDIT1 // Vermelho como cor de fundo hbrushEditBox = CreateSolidBrush(RGB(255, 0, 0)); // Atualiza o Edit Control InvalidateRect(GetDlgItem(hwnd, IDC_EDIT1), 0, TRUE); break; |
C++ ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular MDC em C++ - C++ para matemáticaQuantidade de visualizações: 36790 vezes |
Como calcular MDC em C++ Atualmente a definição de Máximo Divisor Comum (MDC) pode ser assim formalizada: Sejam a, b e c números inteiros não nulos, dizemos que c é um divisor comum de a e b se c divide a (escrevemos c|a) e c divide b (c|b). Chamaremos D(a,b) o conjunto de todos os divisores comum de a e b. O trecho de código abaixo mostra como calcular o MDC de dois números informados: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> using namespace std; int MDC(int a, int b){ int resto; while(b != 0){ resto = a % b; a = b; b = resto; } return a; } int main(int argc, char *argv[]){ int x, y; cout << "Este programa permite calcular o MDC\n"; cout << "Informe o primeiro valor: "; cin >> x; cout << "Informe o segundo valor: "; cin >> y; cout << "\nO Máximo Divisor Comum de " << x << " e " << y << " é " << MDC(x, y) << endl; system("PAUSE"); return EXIT_SUCCESS; } Ao executar este código C++ nós teremos o seguinte resultado: Este programa permite calcular o MDC Informe o primeiro número: 12 Informe o segundo número: 9 O Máximo Divisor Comum de 12 e 9 é 3 |
Desafios, Exercícios e Algoritmos Resolvidos de C++ |
Veja mais Dicas e truques de C++ |
Dicas e truques de outras linguagens |
Quem Somos |
![]() Entre em contato comigo para, juntos, vermos em que posso contribuir para resolver ou agilizar o desenvolvimento de seus códigos.
|
![]() Não basta ter um site. É necessário ter um site que é localizado e converte usuários em clientes. Se sua página não faz isso, Fale comigo e vamos fazer uma analise e conseguir resultados mais satisfatórios..
|
Linguagens Mais Populares |
1º lugar: Java |
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 |