Java ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercícios Resolvidos de Java - Como resolver o problema da Torre de Hanói recursivamenteQuantidade de visualizações: 2900 vezes |
|
Pergunta/Tarefa: Torre de Hanói, ou The Towers of Hanoi, é um "quebra-cabeça" que consiste em uma base contendo três pinos, em um dos quais são dispostos alguns discos uns sobre os outros, em ordem crescente de diâmetro, de cima para baixo. O problema consiste em passar todos os discos de um pino para outro qualquer, usando um dos pinos como auxiliar, de maneira que um disco maior nunca fique em cima de outro menor em nenhuma situação. O número de discos pode variar sendo que o mais simples contém apenas três. A solução da Torre de Hanói (The Towers of Hanoi) pode ser feita recursivamente da seguinte forma: O caso base (parada da recursão) é quando n = 1. Se n = 1 nós podemos simplesmente mover o disco de A para B, sem precisar passar pelo pino C. Quando n > 1 nós podemos dividir o problema original em três sub-problemas e resolvê-los sequencialmente. 1) Mova os primeiros n - 1 discos de A para C com a ajuda do pino B; 2) Mova o disco n de A para B; 3) Mova n - 1 discos do pino C para o pino B com a ajuda do pino A. Além de resolver o problema, seu programa deverá informar quantas chamadas recursivas foram feitas. Sua saída deverá ser parecida com: ![]() Resposta/Solução: Veja a resolução comentada deste exercício usando Java console: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
package arquivodecodigos;
import java.util.Scanner;
public class Estudos {
static int quantChamadasRecursivas = 0; // registra as chamadas recursivas
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
// vamos ler a quantidade de discos a serem usados na simulação
System.out.print("Informe a quantidade de discos: ");
int discos = Integer.parseInt(entrada.nextLine());
// resolve o problema recusivamente
System.out.println("\nOs movimentos para resolver o problema foram:\n");
moverDiscos(discos, 'A', 'B', 'C');
System.out.println("\nForam feitas " + quantChamadasRecursivas +
" chamadas recursivas");
System.out.println();
}
// método recursivo que resolve o problema da Torre de Hanói
public static void moverDiscos(int n, char daTorre, char paraTorre,
char torreAux) {
quantChamadasRecursivas++; // registra mais uma chamada recursiva
if(n == 1){ // condição de parada
System.out.println("Movendo o disco " + n + " de " + daTorre + " para " +
paraTorre);
}
else{ // faz mais uma chamada recursiva
moverDiscos(n - 1, daTorre, torreAux, paraTorre);
System.out.println("Movendo o disco " + n + " de " + daTorre + " para " +
paraTorre);
moverDiscos(n - 1, torreAux, paraTorre, daTorre);
}
}
}
|
Ruby ::: Dicas & Truques ::: Arquivos e Diretórios |
Como criar um diretório em Ruby usando a função FileUtils.mkdir()Quantidade de visualizações: 8354 vezes |
|
O trecho de código a seguir mostra como criar um diretório em Ruby usando o método mkdir() da classe FileUtils. Esta função recebe uma string contendo o nome e caminho do diretório a ser criado. Veja o código Ruby completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- require "fileutils" # nome e caminho do diretório a ser criado diretorio = "C:\\estudos_ruby\\escola" # cria o diretório if FileUtils.mkdir diretorio puts "Diretório criado com sucesso" else puts "Não foi possível criar o diretório" end Ao executar este código Ruby nós teremos o seguinte resultado: Diretório criado com sucesso Veja que, se o diretório não puder ser criado, a seguinte mensagem de erro será exibida: C:/ruby/lib/ruby/1.8/fileutils.rb:243:in `mkdir': File exists - estudos (Errno:: EEXIST) from C:/ruby/lib/ruby/1.8/fileutils.rb:243:in `fu_mkdir' from C:/ruby/lib/ruby/1.8/fileutils.rb:172:in `mkdir' from C:/ruby/lib/ruby/1.8/fileutils.rb:171:in `each' from C:/ruby/lib/ruby/1.8/fileutils.rb:171:in `mkdir' from estudos.rb:7 |
Delphi ::: Dicas & Truques ::: Bilbiotecas Estáticas (obj) e Dinâmicas (DLLs) |
Apostila Delphi para iniciantes - Como criar sua primeira DLL usando DelphiQuantidade de visualizações: 19042 vezes |
|
Em dicas anteriores você aprendeu o que é um DLL e sua importância para a programação no ambiente Windows. Nesta dica mostrarei como criar uma DLL bem simples e usá-la a partir de um programa Delphi. Para isso siga atentamente os passos abaixo: 1) Vá em File -> New -> Other; 2) Selecione Delphi Projects e escolha DLL Wizard; 3) Neste momento o DLL Wizard criará o esqueleto do código fonte da DLL. Note que o código desta unit é bem parecido com aquele da unit de uma aplicação. A diferença principal é o uso da palavra-chave library em vez de program: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
library Project2;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
SysUtils,
Classes;
{$R *.res}
begin
end.
Salve esta unit como MinhaDLL.dproj em um diretório de sua preferência. Em seguida vamos criar uma rotina que receberá dois valores inteiros e retornará sua soma. Veja a modificação no código: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
library MinhaDLL;
function Somar(a, b: Integer): Integer; stdcall;
begin
Result := a + b; // retorna a soma
end;
{ vamos exportar (export) a função Somar }
exports
Somar;
begin
end.
Nossa DLL está pronta. Agora vá no menu Project -> Build MinhaDLL (ou pressione Shift+F9). Se tudo correu bem você terá um arquivo chamado MinhaDLL.dll no diretório no qual você salvou o projeto. O próximo passo é aprender a carregar esta DLL a partir de seus programas Delphi. Veja mais dicas nesta seção para aprender como isso é feito. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Portugol ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Controle |
Exercícios Resolvidos de Portugol - Escreva um programa que leia o ano de nascimento de um rapaz e mostre a sua situação em relação ao alistamento militarQuantidade de visualizações: 303 vezes |
|
Pergunta/Tarefa: Escreva um programa que leia o ano de nascimento de um rapaz e mostre a sua situação em relação ao alistamento militar. - Se estiver antes dos 18 anos, mostre em quantos anos faltam para o alistamento. - Se já tiver depois dos 18 anos, mostre quantos anos já se passaram do alistamento. Sua saída deverá ser parecida com: Informe o ano atual: 2025 Informe o ano do seu nascimento: 1980 Você tem 45 anos. Já se passaram 27 anos do alistamento militar. Informe o ano atual: 2025 Informe o ano do seu nascimento: 2007 Você tem 18 anos. Você já tem idade suficiente para fazer o alistamento militar. Informe o ano atual: 2025 Informe o ano do seu nascimento: 2009 Você tem 16 anos. Faltam 2 anos para você fazer o alistamento militar. Veja a resolução comentada deste exercício usando Portugol Web Studio: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
programa {
funcao inicio() {
// variáveis usadas na resolução do problema
inteiro ano_nasc, ano_atual, idade, anos_faltam, anos_passaram
// vamos pedir para o usuário informar o ano atual
escreva("Informe o ano atual: ")
leia(ano_atual)
// vamos pedir para o usuário informar o ano de nascimento
escreva("Informe o ano do seu nascimento: ")
leia(ano_nasc)
// vamos calcular a idade do usuário
idade = ano_atual - ano_nasc
// vamos calcular os anos que faltam para o alistamento
anos_faltam = 18 - idade
// vamos calcular os anos que já se passaram do alistamento
anos_passaram = idade - 18
// vamos mostrar os resultados
se (idade < 18) {
escreva("\nVocê tem " + idade + " anos.")
escreva("\nFaltam " + anos_faltam +
" anos para você fazer o alistamento militar.")
}
senao se (idade == 18) {
escreva("\nVocê tem " + idade + " anos.")
escreva("\nVocê já tem idade para o alistamento militar.")
}
senao {
escreva("\nVocê tem " + idade + " anos.")
escreva("\nJá se passaram " + anos_passaram +
" anos do alistamento militar.")
}
}
}
|
Nossas 20 dicas & truques de programação mais populares |
|
JavaScript - Como remover elementos duplicados de um array em JavaScript usando as funções filter() e indexOf() do objeto Array |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
|
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |








