Você está aqui: C++ ::: Dicas & Truques ::: Recursão (Recursividade)

Como somar os elementos de um vetor em C++ usando uma função recursiva - Linguagem C++ para iniciantes

Quantidade de visualizações: 230 vezes
Em algumas ocasiões ficamos imaginando o que pode ser feito com os métodos e funções recursivas. A resposta é: praticamente tudo.

Veja abaixo um programa C++ completo no qual eu mostro como escrever uma função recursiva que recebe um array e mostra a soma de seus elementos (lembre-se de que um array é o mesmo que vetor, ou seja, uma matriz de uma linha e várias colunas):

----------------------------------------------------------------------
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 somar todos os elementos de um array
int somar(int indice, int tamanho, int vetor[]){
  // o caso base...hora de encerrar a recursividade
  if(indice == (tamanho - 1)){
    return vetor[indice];
  }
  else{
    // ainda não é o caso base? vamos fazer uma nova chamada à função somar()
    return vetor[indice] + somar(indice + 1, 10, vetor);
  }
}

// função principal do programa
int main(int argc, char *argv[]){
  // vamos declarar um array de 10 elementos
  int valores[10];
  int soma;

  // vamos pedir ao usuário para informar os valores para o vetor
  for(int i = 0; i < 10; i++){
    cout << "Informe o valor do elemento " << i << ": ";
    cin >> valores[i]; 
  }

  // vamos efetuar uma chamada à função recursiva somar();
  // nota que estamos passando o índice inicial, o tamanho do
  // array e o array em si
  soma = somar(0, 10, valores);
  cout << "\nA soma dos elementos é: " << soma << endl;
  
  cout << "\n\n";
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

Ao executarmos este código C++ nós teremos o seguinte resultado:

Informe o valor do elemento 0: 7
Informe o valor do elemento 1: 3
Informe o valor do elemento 2: 1
Informe o valor do elemento 3: 3
Informe o valor do elemento 4: 8
Informe o valor do elemento 5: 9
Informe o valor do elemento 6: 4
Informe o valor do elemento 7: 3
Informe o valor do elemento 8: 2
Informe o valor do elemento 9: 6

A soma dos elementos é: 46

Link para compartilhar na Internet ou com seus amigos:

C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Laços

Exercício Resolvido de C++ - Escreva um programa em C++ para ler dois números inteiros M e N e, a seguir, imprimir os números pares

Quantidade de visualizações: 532 vezes
Pergunta/Tarefa:

Escreva um programa em C++ para ler dois números inteiros M e N e, a seguir, imprimir os números pares existentes no intervalo [M, N] e imprimir a multiplicação desses números (os pares). Observe que os valores M e N devem ser fornecidos pelo usuário.

Nota: por se tratar de intervalo fechado [M, N], os números M e N devem ser incluídos na amostra. Além disso, seu código deve assegurar que M seja menor que N.

Sua saída deverá ser parecida com:

Informe o valor de M: 3
Informe o valor de N: 9
Números pares no intervalo [M, N]: 4, 6, 8,
Multiplicação dos números pares no intervalo [M, N]: 192
Resposta/Solução:

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 <string>
#include <iostream>

using namespace std;

int main(int argc, char *argv[]){
  // variáveis usadas na resolução do problema
  int m, n, i, multiplicacao = 1;
  
  // vamos pedir para o usuário informar os valores de M e N
  cout << "Informe o valor de M: ";
  cin >> m;
  cout << "Informe o valor de N: ";
  cin >> n;
  
  // M é menor que N?
  if(m >= n){
    cout << "M deve ser menor que N";
  }
  else{
    // mostra os números pares no intervalo
    cout << "Números pares no intervalo [M, N]: ";
    for(i = m; i <= n; i++){
      if(i % 2 == 0){
	cout << i << ", ";
	// aproveitamos para calcular a multiplicação dos números
	// pares no intervalo informado
	multiplicacao = multiplicacao * i;
      } 
    }
		
    // mostramos a multiplicação
    cout << "\nMultiplicação dos números pares no intervalo [M, N]: " <<
      multiplicacao << endl;
  }
  
  cout << "\n\n";
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS; 
}



C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Controle

Exercício Resolvido de C++ - Como testar se um ano é bissexto em C++ - Um programa que lê um ano com quatro dígitos e informa se ele é bissexto ou não

Quantidade de visualizações: 344 vezes
Pergunta/Tarefa:

Chama-se ano bissexto o ano ao qual é acrescentado um dia extra, ficando ele com 366 dias, um dia a mais do que os anos normais de 365 dias, ocorrendo a cada quatro anos (exceto anos múltiplos de 100 que não são múltiplos de 400). Isto é feito com o objetivo de manter o calendário anual ajustado com a translação da Terra e com os eventos sazonais relacionados às estações do ano. O último ano bissexto foi 2012 e o próximo será 2016.

Um ano é bissexto se ele for divisível por 4 mas não por 100, ou se for divisível por 400.

Escreva um programa C++ que pede ao usuário um ano com quatro dígitos e informa se ele é bissexto ou não.

Sua saída deverá ser parecida com:

Informe o ano: 2024
O ano informado é bissexto.
Resposta/Solução:

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 <iostream>

using namespace std;

// função principal do programa
int main(int argc, char *argv[]){
  // variáveis usadas para resolver o problema
  int ano;
  
  // vamos solicitar que o usuário informe um ano
  cout << "Informe o ano: ";
  cin >> ano;
	
  // vamos verificar se o ano informado é bissexto
  if(((ano % 4 == 0) && (ano % 100 != 0)) || (ano % 400 == 0)){
    cout << "O ano informado é bissexto.";  
  }
  else{
    cout << "O ano informado não é bissexto.";  
  }
  
  cout << "\n" << endl;
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}



C++ ::: Dicas & Truques ::: Programação Orientada a Objetos

Programação Orientada a Objetos em C++ - Como criar e usar métodos estáticos em suas classes C++

Quantidade de visualizações: 14555 vezes
Como já vimos em outras dicas desta seção, uma classe C++ possui propriedades (variáveis) e métodos (funções). Veja a seguinte declaração de uma classe Produto:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

// definição da classe Produto
class Produto{
  public:
    void setNome(string);
    string getNome();
    void setPreco(double);
    double getPreco();
  
  private:
    string nome;
    double preco;
};

Aqui cada instância da classe Produto terá suas próprias variáveis nome e preco e os métodos que permitem acesso e alteração destas variáveis também estão disponíveis a cada instância.

Há, porém, situações nas quais gostaríamos que um determinado método estivesse atrelado à classe e não à cada instância individual. Desta forma, é possível chamar um método de uma classe sem a necessidade da criação de instâncias da mesma.

Métodos estáticos em C++ podem ser criados por meio do uso da palavra-chave static. É comum tais métodos serem declarados com o modificador public, o que os torna acessíveis fora da classe na qual estes foram declarados. Veja um exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

// classe Pessoa com duas variáveis privadas e 
// um método estático
class Pessoa{
  public:  
    // um método estático que permite verificar a validade
    // de um número de CPF
    static bool isCPFValido(string);
  
  private:
    string nome;
    int idade;
};

// implementação da classe Pessoa
bool Pessoa::isCPFValido(string cpf){
  // alguns cálculos aqui
  return true;
}

int main(int argc, char *argv[]){
  // vamos efetuar uma chamada ao método isCPFValido() sem
  // criar uma instância da classe Pessoa
  if(Pessoa::isCPFValido("12345")){
    cout << "CPF Válido" << endl;
  }
  else{
    cout << "CPF inVálido" << endl;
  }
    
  system("PAUSE");
  return EXIT_SUCCESS;
}

Aqui nós temos os códigos da definição e implementação da classe Pessoa em apenas um arquivo (main.cpp). Em uma aplicação real é interessante colocar estas partes em arquivos separados (.h e .cpp). Note que o método estático isCPFValido() foi declarado assim:

static bool isCPFValido(string);

Desta forma, podemos chamá-la a partir de código externo à classe sem a necessidade de criar uma nova instância da mesma. Veja:

if(Pessoa::isCPFValido("12345")){}

É importante notar que métodos estáticos não possuem acesso a variáveis e métodos não estáticos da classe, tampouco ao ponteiro this (que só existe quando criamos instâncias da classe). Assim, o trecho de código abaixo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

bool Pessoa::isCPFValido(string cpf){
  // alguns cálculos aqui
  
  // vamos acessar a variável não estática nome
  nome = "Osmar J. Silva";
  
  return true;
}

vai gerar o seguinte erro de compilação:

invalid use of member `Pessoa::nome' in static member function.

Se usarmos this->nome a mensagem de erro de compilação será:

`this' is unavailable for static member functions.

Métodos estáticos são úteis quando precisamos criar classes que atuarão como suporte, nas quais poderemos chamar funções (métodos) auxiliares sem a necessidade de criar novas instâncias a cada vez que estas funções forem necessárias.


Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais

Instalações prediais de combate a incêndio

A aspersão de água por meio de chuveiros automáticos é uma técnica eficiente para combater o princípio de incêndio. A norma NBR 10897, que estabelece os parâmetros mínimos para o projeto e a instalação de sistemas de proteção contra incêndio por chuveiros automáticos, classifica os sistemas de chuveiros automáticos em quatro tipos básicos.

Analise os tipos de sistemas de chuveiros automáticos listados a seguir e associe-os com as suas respectivas características:

1) Sistema de ação prévia

2) Sistema de tubo seco

3) Sistema de dilúvio

4) Sistema de tubo molhado

( ) É indicado para locais em que não há risco de congelamento da água na tubulação.

( ) É caracterizado pelo tempo prolongado entre a abertura do chuveiro automático e a descarga de água.

( ) Demanda um sistema suplementar de detecção, que deve ser instalado na mesma área dos chuveiros automáticos.

( ) Os chuveiros ficam abertos e funcionam apenas quando a água entra na tubulação após o acionamento de uma válvula.

Assinale a alternativa que apresenta a sequência correta:

A) 1, 2, 3, 4.

B) 4, 3, 2, 1.

C) 3, 2, 1, 4.

D) 2, 3, 4, 1.

E) 4, 2, 1, 3.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em

Dimensionamento de lajes maciças à flexão

O comportamento estrutural das lajes maciças depende da altura (h) da seção transversal. Quanto maior a altura, maior o momento de inércia da seção e, por consequência, maior a sua capacidade em resistir a deformações.

Considere a seção transversal de uma laje maciça, conforme apresentado na figura a seguir.



Sendo o aço empregado CA-50 e o cobrimento nominal igual a 3,0cm, calcule o valor do momento fletor máximo atuante na laje, considerando uma área de armadura de 0,4729cm2.

A) Mmáx = 1,66kN.m.

B) Mmáx = 1,47kN.m.

C) Mmáx = 1,37kN.m.

D) Mmáx = 1,25kN.m.

E) Mmáx = 1,19kN.m.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Hidrologia

Cálculo da vazão de dimensionamento de uma galeria de águas pluviais

FEMPERJ-2012-TCE-RJ: A vazão de dimensionamento de uma galeria de águas pluviais que drena uma área densamente urbanizada de 10 hectares, considerando-se uma chuva de projeto com intensidade de 60 mm/hora, duração igual ao tempo de concentração da bacia e coeficiente de escoamento superficial igual a 0,90, através do Método Racional, é:

A) 150 m3/s

B) 0,150 l/s

C) 1,5 m3/s

D) 150 l/s

E) 15 m3/s
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em JavaScript

Analise o seguinte código JavaScript

var a = new Array(1, 2, 3);
for (var i in a) {
  window.alert("a[i] = " + a[i]);
}

Quantas vezes o diálogo alert será exibido?

A) 3 vezes (uma vez para cada elemento do array).

B) 4 vezes (uma vez para cada elemento e um alert adicional para a propriedade length do array).

C) 3 ou 4 vezes, dependendo do navegador.

D) O laço for...in não existe em JavaScript e vai provocar um erro.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Python

Qual das formas abaixo é usada para criar uma LIST em Python?

A) valores = {5, 1, 9, 4}

B) valores = [5, 1, 9, 4]

C) valores = (5, 1, 9, 4)

D) valores = [5.. 1.. 9.. 4]

E) valores = list[5, 1, 9, 4]
Verificar Resposta Estudar Cards Todas as Questões

Desafios, Exercícios e Algoritmos Resolvidos de C++

Veja mais Dicas e truques de C++

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
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
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
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
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 38 usuários muito felizes estudando em nosso site.