Você está aqui: C++ ::: Dicas & Truques ::: Recursão (Recursividade) |
Como inverter uma string em C++ usando uma função recursivaQuantidade de visualizações: 662 vezes |
Nesta dica vamos novamente falar de recursão e recursividade em C++, ou seja, funções que chamam a si mesmas. Dessa vez vamos escrever uma função recursiva que inverte a ordem dos caracteres de uma palavra, frase ou texto. Veja o código C++ completo para 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; // função recursiva para inverter uma string void inverter_string(string& str, int n, int i){ // caso base? if (n <= i){ return; } // troca os dois caracteres de lugar swap(str[i], str[n]); // e chama a função mais uma vez inverter_string(str, n - 1, i + 1); } // função principal do programa int main(int argc, char *argv[]){ // vamos criar uma nova string string frase = "Gosto de programar em C++"; cout << "String original: " << frase << endl; // agora vamos inverter a string inverter_string(frase, frase.length() - 1, 0); // e mostramos o resultado cout << "String invertida: " << frase << endl; cout << "\n" << endl; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executar este código C++ nós teremos o seguinte resultado: String original: Gosto de programar em C++ String invertida: ++C me ramargorp ed otsoG |
![]() |
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: 6621 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++ ::: Desafios e Lista de Exercícios Resolvidos ::: Laços |
Exercícios Resolvidos de C++ - Como calcular e exibir os 50 primeiros números primos em C++Quantidade de visualizações: 9679 vezes |
Pergunta/Tarefa: Um inteiro é um número primo se ele for divisível somente por 1 e por ele mesmo. Assim, 2, 3, 5 e 7 são primos, enquanto 4, 6, 8 e 9 não são. Note que o número 1 não é primo. Escreva um programa C++ que usa um laço for, while ou do...while para calcular e exibir os 50 primeiros números primos. A saída do programa deverá ser parecida com: 50 primeiros números primos: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 Veja a resolução comentada deste exercício em C++: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <cstdlib> #include <iostream> #include <iomanip> using namespace std; int main(int argc, char *argv[]){ int quantidade = 50; // quantidade de números primos int contador = 0; // quantidade de números primos encontrados int numero = 0; // inteiro inicial // Lembre-se! O número 1 não é primo cout << quantidade << " primeiros numeros primos:\n" << endl; // laço while será executado até encontrar os 50 primeiros números primos while(contador < quantidade){ bool primo = true; // se o valor de i for 7, a variável j do laço contará // de 2 até 7 / 2 (divisão inteira), ou seja, 3. Se o // módulo de 7 por qualquer um dos valores neste intervalo // for igual a 0, então o número não é primo for(int j = 2; j <= (numero / 2); j++){ if(numero % j == 0){ primo = false; // não é primo break; } } if((primo) && (numero > 1)){ cout << setw(6) << numero; contador++; // encontramos um número primo if(contador % 10 == 0){ cout << "\n"; } } numero++; } cout << "\n\n"; system("PAUSE"); return EXIT_SUCCESS; } |
C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercícios Resolvidos de C++ - Desafio do número ausente. Dado um vetor de números naturais 1..n, encontre o valor ausenteQuantidade de visualizações: 626 vezes |
Pergunta/Tarefa: Dado o vetor: int valores[] = {1, 8, 7, 2, 6, 5, 3}; Encontre o elemento ausente na sequência de valores do vetor, sabendo que o primeiro valor é 1 e o último elemento é 8. Perceba que o vetor não precisa estar ordenado. Além disso, o entrevistador se certificará de que os valores serão sempre positivos e não haverá valores repetidos. Sua saída deverá ser parecida com: O número ausente é: 4 Dica: Use a fórmula n * (n + 1) / 2 para facilitar a resolução do exercício. Veja a resolução comentada deste exercício usando C++: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <string> #include <iostream> using namespace std; int main(int argc, char *argv[]){ // vamos declarar um vetor de inteiros faltando // um valor na sequência (não necessariamente ordenada) // Note a ausência do número 4 int valores[] = {1, 8, 7, 2, 6, 5, 3}; int i, soma_n, ausente, soma_elementos; int quant = 8; // tamanho do vetor + 1 // o primeiro passo é obter a soma de 1..n elementos // natuais usando a fórmula n*(n+1)/2 soma_n = (quant * (quant + 1)) / 2; // agora vamos somar os elementos do vetor soma_elementos = 0; for(i = 0; i < 7; i++){ soma_elementos = soma_elementos + valores[i]; } // agora calculamos o valor ausente ausente = soma_n - soma_elementos; // vamos mostrar o resultado cout << "O número ausente é: " << ausente << endl; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } |
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de C++ |
Veja mais Dicas e truques de C++ |
Dicas e truques de outras linguagens |
GNU Octave - Como calcular a derivada de uma função usando a função diff() do GNU Octave - Regra do Tombo (ou Regra da Potência) |
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 |