Java ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade)

Exercícios Resolvidos de Java - Um método recursivo que recebe uma String e retorna a quantidade de letras maiúsculas encontradas

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

Escreva um método recursivo que recebe uma palavra ou frase e retorna a quantidade de caracteres (letras) maiúsculos. Seu método deverá possuir a seguinte assinatura:

public static int contarMaiusculas(String frase){
  // sua implementação aqui
}
Veja que o método deverá funcionar para qualquer tamanho de string. Teste também com strings que contenham somente letras maiúsculas ou somente letras minúsculas.

Sua saída deverá ser parecida com:

Digite uma palavra ou frase: Arquivo de Códigos
A palavra ou frase contém 2 letras maiúsculas
Resposta/Solução:

Veja a resolução comentada deste exercício usando Java console:

Observação importante: Este código criará uma cadeia de chamadas recursivas. Cada chamada ao método contarMaiusculas() receberá uma cópia menor da palavra ou frase fornecida. Quando a última chamada recursiva do método receber uma string vazia, a cadeia começa a retornar. Note que os valores acumulados nas várias chamadas ao método vão sendo acumulados na variável quantidade.

package exercicio;

import java.util.Scanner;

public class Exercicio {
  public static void main(String[] args) {
    // cria um novo objeto da classe Scanner
    Scanner entrada = new Scanner(System.in);
    
    // solicita uma palavra ou frase ao usuário
    System.out.print("Digite uma palavra ou frase: ");
    // lê a palavra ou frase
    String frase = entrada.nextLine();
    
    int quantMaiusculas = contarMaiusculas(frase);
    System.out.println("A palavra ou frase contém " + quantMaiusculas +
      " letras maiúsculas");
  }
  
  // método recursivo que recebe uma palavra ou frase e retorna
  // a quantidade de letras maiúsculas
  public static int contarMaiusculas(String frase){
    /* Este código criará uma cadeia de chamadas recursivas. Cada
     * chamada ao método contarMaiusculas() receberá uma cópia menor
     * da palavra ou frase fornecida. Quando a última chamada recursiva do
     * método receber uma string vazia, a cadeia começa a retornar. Note
     * que os valores acumulados nas várias chamadas ao método vão sendo
     * acumulados na variável quantidade
    */ 
    int quantidade = 0;
    
    // o tamanho da string é maior que 0?
    if(frase.length() > 0){
      if(Character.isUpperCase(frase.charAt(0))){
        quantidade = 1 + contarMaiusculas(frase.substring(1));      
      }
      else{
        quantidade = contarMaiusculas(frase.substring(1));    
      }
    }
   
    return quantidade;
  }
}



C# ::: Windows Forms ::: ListBox

Como excluir um item de uma ListBox do C# Windows Forms baseado em seu valor usando a função Remove() da propriedade ListBox.Items

Quantidade de visualizações: 667 vezes
Nesta dica mostrarei como remover um item de uma ListBox do C# Windows Forms usando a função Remove() da propriedade Items da classe ListBox. Note que, se o item fornecido ao método Remove() não estiver na lista, nada acontecerá.

Veja o trecho de código:

private void button2_Click(object sender, EventArgs e){
  // exclui o elemento com o valor "Curitiba"
  listBox1.Items.Remove("Curitiba");
}



C++ ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como retornar o tamanho de um array em C++ - Curso de C++ - Vetores e matrizes em C++

Quantidade de visualizações: 11129 vezes
Muitas vezes precisamos saber a quantidade de elementos em vetor (array). Em C++, isso pode ser feito com o uso da função sizeof(). O que fazemos é obter a quantidade de bytes contidos em todo o vetor e depois dividimos pela quantidade de bytes no primeiro elemento. Veja o código:

#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
  // declara e inicializa um array de 5 inteiros
  int valores[5] = {43, 12, 8, 4, 102};
 
  // obtém a quantidade de elementos na matriz
  int quant = sizeof(valores) / sizeof(valores[0]);
 
  // exibe o resultado
  cout << "Quant. elementos : " << quant << endl;
 
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

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

Quant. elementos : 5


C++ Builder ::: VCL - Visual Component Library ::: TEdit

Como obter a quantidade de caracteres em um TEdit usando a função GetTextLen() do C++ Builder

Quantidade de visualizações: 6209 vezes
Em algumas ocasiões nós precisamos descobrir a quantidade de caracteres contidos em uma caixa de texto do tipo TEdit. Para isso podemos usar o método GetTextLen() do C++ Builder, definido originalmente na classe TControl. Esta função retorna um valor inteiro contendo o tamanho do texto da caixa de texto.

Veja um exemplo do uso do método GetTextLen() no trecho de código a seguir:

void __fastcall TForm3::Button2Click(TObject *Sender)
{
  // vamos obter a quantidade de caracteres no TEdit
  int tamanho = Edit1->GetTextLen();

  // vamos mostrar o resultado
  ShowMessage("O Edit contém " + IntToStr(tamanho) + " caracteres.");
}

Ao executar este exemplo você terá um resultado parecido com:

O Edit contém 5 caracteres.


Java ::: Coleções (Collections) ::: ArrayList

Java Collections para iniciantes - Arrays (vetores) ou a ArrayList? Qual devo usar?

Quantidade de visualizações: 16269 vezes
Uma das perguntas mais frequentes que os usuários do nosso site nos fazem é aquela sobre o uso de simples arrays (vetores e matrizes) ou objetos da classe ArrayList. Se o número de elementos for fixo ou você precisar de muita eficiência ao lidar com tipos primitivos, então arrays podem ser a melhor escolha.

Porém, muitos problemas envolvendo o armazenamento de dados requerem estruturas de dados que possam ser redimensionadas de acordo com a necessidade do algorítmo. Neste caso, uma ArrayList (ou qualquer uma das outras classes Collections) pode ser a escolha certa.

Veja um trecho de código para ficar mais fácil o entendimento:

package arquivodecodigos;
 
public class Estudos{
  public static void main(String args[]){
    int valores[] = {4, 12, 8, 5, 13};
    System.out.println("Primeiro elemento no vetor: " 
      + valores[0]);
  }
}

Ao executar este código nós teremos o seguinte resultado:

Primeiro elemento no vetor: 4

Como podemos ver neste exemplo, um array (nesse caso um vetor) possui um tamanho fixo, ou seja, o compilador não nos permite reduzir ou aumentar a quantidade de elementos em um vetor ou matriz criado a partir da notação de arrays. Assim, apesar de todas as facilidades que os arrays trazem consigo, este pode ser um empecilho para o tipo de aplicação que queremos desenvolver em um determinado momento.

A classe ArrayList, por outro lado, possui tamanho variado. Isso quer dizer que seu tamanho é aumentado ou reduzido de acordo com as necessidades do seu código.

Uma outra questão que diferencia arrays de ArrayList, é que não podemos armazenar tipos primitivos em um objeto da classe ArrayList. Se precisarmos fazer isso, o tipo primitivo deve ser colocado em uma classe encapsuladora, por exemplo, a classe Integer. Em algumas situações o compilador faz isso nos bastidores, e esta operação é chamada de auto-boxing.


C ::: Dicas & Truques ::: Arquivos e Diretórios

Como testar se um arquivo existe usando a linguagem C

Quantidade de visualizações: 14296 vezes
Muitas vezes precisamos saber se um determinado arquivo existe antes de efetuarmos alguma operação. O trecho de código abaixo mostra como você pode implementar uma função file_exists() em C que pode ser usada em seus programas. O segredo aqui é tentar abrir o arquivo passado como argumento para a função. Se o arquivo for aberto com sucesso, sabemos que ele existe e a função retorna o valor 1 (true), do contrário retorna 0 (false):

#include <stdio.h>
#include <stdlib.h>

/*
  Implementação de uma função file_exists() em C. Se
  o arquivo existir o valor 1 (true) será retornado. Caso
  contrário a função retornará 0 (false).
*/
int file_exists(const char *filename)
{
  FILE *arquivo;

  if(arquivo = fopen(filename, "r"))
  {
    fclose(arquivo);
    return 1;
  }
  return 0;
}

int main(int argc, char *argv[])
{
  // testa se o arquivo existe
  if(file_exists("c:\\testes.txt")){
    printf("O arquivo existe no local especificado.\n");
  }
  else
    printf("O arquivo NAO existe no local especificado.\n");

  printf("\n\n");
  system("PAUSE");
  return 0;
}



Java ::: Dicas & Truques ::: Strings e Caracteres

Como inverter uma string em Java usando o método reverse() da classe StringBuffer

Quantidade de visualizações: 246 vezes
Nesta dica mostrarei como podemos usar o método reverse() da classe StringBuffer ou StringBuilder para inverter a ordem dos caracteres de uma palavra, frase ou texto em Java. Note como convertemos uma String em um StringBuffer, fazemos a inversão da frase e depois convertemos novamente o StringBuffer em um objeto String.

Veja o código completo para o exemplo:

package estudos;

public class Estudos {
  public static void main(String[] args){
    // vamos criar uma string
    String frase = "JAVA É BOM DEMAIS";
    // vamos mostrar a frase original
    System.out.println("String original: " + frase);
    
    // agora vamos criar um objeto StringBuffer
    StringBuffer temp = new StringBuffer(frase);
    // vamos inverter a string agora
    temp.reverse();
    // e agora mostramos o resultado
    frase = temp.toString();
    System.out.println("String invertida: " + frase);    
  }
}

Ao executar este código Java nós teremos o seguinte resultado:

String original: JAVA É BOM DEMAIS
String invertida: SIAMED MOB É AVAJ


Delphi ::: Dicas & Truques ::: Data e Hora

Como adicionar ou subtrair dias de uma data em Delphi usando a função IncDay()

Quantidade de visualizações: 25195 vezes
Em algumas situações precisamos adicionar ou subtrair dias de uma determinada data. Em Delphi isso pode ser feito com o auxílio da função IncDay() da unit DateUtils. Este função aceita um TDateTime e a quantidade de dias que queremos acrescentar ao TDateTime fornecido como argumento. O retorno será um novo TDateTime com a quantidade de dias acrescida.

Veja um trecho de código no qual adicionamos 4 dias à data atual:

procedure TForm1.Button1Click(Sender: TObject);
var
  hoje: TDateTime;
begin
  // não esqueça de adicionar DateUtils ao seus uses

  // vamos obter a data de hoje
  hoje := Now;

  // vamos exibir a data de hoje
  ShowMessage('Hoje é: ' + DateToStr(hoje));

  // vamos adicionar 4 dias à data de hoje
  hoje := IncDay(hoje, 4);

  // vamos exibir o resultado
  ShowMessage('Daqui a 4 dias será: ' + DateToStr(hoje));
end;

É possível também usar a função IncDay() para substrair dias de uma data. Para isso só precisamos fornecer uma quantidade negativa de dias. Veja:

procedure TForm1.Button1Click(Sender: TObject);
var
  hoje: TDateTime;
begin
  // não esqueça de adicionar DateUtils ao seus uses

  // vamos obter a data de hoje
  hoje := Now;

  // vamos exibir a data de hoje
  ShowMessage('Hoje é: ' + DateToStr(hoje));

  // vamos subtrair 5 dias da data de hoje
  hoje := IncDay(hoje, -5);

  // vamos exibir o resultado
  ShowMessage('Há 5 dias era: ' + DateToStr(hoje));
end;

O valor padrão para o segundo argumento de IncDay() é 1.

Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.


C# ::: Dicas & Truques ::: Data e Hora

Como calcular a diferença de anos, meses ou dias entre duas datas em C# usando a função Subtract() da classe DateTime

Quantidade de visualizações: 21445 vezes
Esta dica mostra como obter a diferença de anos, meses ou dias entre duas datas. O truque aqui é usar o método Subtract() da estrutura DateTime. Este método recebe um objeto DateTime, subtrai seus valores do DateTime atual e retorna um objeto TimeSpan, usada para representar um intervalo de tempo. Veja o código completo:

using System;

namespace Estudos {
  class Program {
    static void Main(string[] args) {
      // vamos obter a diferença em anos, meses ou dias entre
      // duas datas
      DateTime data_inicial = new DateTime(2008, 4, 10);  // 10/04/2008
      DateTime data_final = new DateTime(2008, 5, 15);  // 15/05/2008

      // obtém a diferença
      TimeSpan dif = data_final.Subtract(data_inicial);

      // exibe o resultado
      System.Console.WriteLine("Diferença em:\nAnos: " +
        (dif.Days / 365) + "\nMeses: " + (dif.Days / 30) +
        "\nDias: " + dif.Days);

      Console.WriteLine("\n\nPressione uma tecla para sair...");
      Console.ReadKey();
    }
  }
}

Ao executar este código C# nós teremos o seguinte resultado:

Diferença em:
Anos: 0
Meses: 1
Dias: 35

Tome cuidado. Este método pode lançar uma exceção do tipo ArgumentOutOfRangeException se os valores fornecidos estiverem fora das faixas permitidas.


C# ::: Windows Forms ::: Formulários e Janelas

Como definir a cor de fundo de um formulário C# Windows Forms usando a propriedade BackColor

Quantidade de visualizações: 9341 vezes
A cor de fundo de um formulário Windows Forms pode ser definida em tempo de design ou execução usando-se a propriedade BackColor. Em tempo de design só precisamos clicar no formulário, acionar a janela de propriedades e escolher a cor de fundo desejada.

Em tempo de execução, a cor de fundo pode ser definida com um código parecido com:

private void button1_Click(object sender, EventArgs e){
  // vamos definir a cor de fundo para o formulário
  this.BackColor = Color.LightSalmon;
}

É possível obter o valor da propriedade BackColor do formulário da seguinte forma:

private void button1_Click(object sender, EventArgs e){
  // vamos obter o valor da propriedade BackColor
  Color corFundo = this.BackColor;

  // vamos mostrar o resultado
  MessageBox.Show("A cor de fundo é: " + corFundo.Name);
}


Carregar Publicações Anteriores


Nossas 20 dicas & truques de programação mais populares

Você também poderá gostar das dicas e truques de programação abaixo

Nossas 20 dicas & truques de programação mais recentes

Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site

Últimos Exercícios Resolvidos

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



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