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

Como calcular fatorial em Delphi usando recursividade

Quantidade de visualizações: 12983 vezes
O fatorial de um determinado número, representado por n! equivale a multiplicar este número por seus antecessores. Assim, o fatorial de 4 (4!) pode ser calculado da seguinte forma:

4 x 3 x 2 x 1 = 24

Sempre que falamos de recursão, o cálculo de fatorial nos auxilia na exemplicação por ser relativamente fácil de se entender todas as etapas do processo. O código abaixo mostra uma função recursiva em Delphi que calcula o fatorial de qualquer número. Tenha cuidado. Calcular o fatorial de um número maior que 10 pode tornar sua máquina extremamente lenta, além de, muitas vezes, não retornar os resultados esperados.

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

// função recursiva para calcular o fatorial
// de um determinado número
function fatorial(n: Integer): Integer;
begin
  if n = 0 then
    Result := 1
  else
    Result := n * fatorial(n - 1);
end;

// vamos chamar a função recursiva
// a partir do Click de um botão
procedure TForm1.Button1Click(Sender: TObject);
var
  res: Integer;
begin
  // vamos calcular o fatorial de 5
  res := fatorial(5);

  // vamos mostrar o resultado
  ShowMessage('O fatorial de 5 é: ' + IntToStr(res));
end;

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

Link para compartilhar na Internet ou com seus amigos:

Delphi ::: VCL - Visual Component Library ::: TStringGrid

Como definir a altura padrão das linhas em um TStringGrid do Delphi usando a propriedade DefaultRowHeight

Quantidade de visualizações: 10738 vezes
A propriedade DefaultRowHeight é útil quando queremos obter ou definir a altura padrão das linhas de um TStringGrid. Por padrão, o valor desta propriedade é 24 pixels.

Veja no trecho de código abaixo como o valor desta propriedade é obtido:

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

procedure TForm1.Button1Click(Sender: TObject);
begin
  // vamos obter a altura padrão das linhas
  // do TStringGrid
  Memo1.Lines.Add('A altura padrão das linhas do TStringGrid é: ' +
    IntToStr(StringGrid1.DefaultRowHeight));
end;

Ao executar este trecho de código você terá o seguinte resultado:

A altura padrão das linhas do TStringGrid é: 24.

Podemos definir a altura padrão das linhas do TStringGrid em tempo de design ou execução simplemente definindo um valor inteiro para sua propriedade DefaultRowHeight. Veja:

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

procedure TForm1.Button1Click(Sender: TObject);
begin
  // vamos definir a altura padrão das linhas
  // do TStringGrid
  StringGrid1.DefaultRowHeight := 50;
end;

Quando novas linhas são adicionadas por meio da propriedade RowCount, suas alturas serão aquelas da propriedade DefaultRowHeight.


Delphi ::: VCL - Visual Component Library ::: TListBox

Como obter o índice do item selecionado em uma ListBox do Delphi usando a propriedade ItemIndex da classe TListBox

Quantidade de visualizações: 14837 vezes
Muitas vezes precisamos saber o índice do item atualmente selecionado em uma ListBox. Para isso podemos obter o valor da propriedade ItemIndex. Esta propriedade retorna um valor inteiro correspondente ao índice do item selecionado. O primeiro item da lista possui o índice 0. Se nenhum item estiver selecionado, ItemIndex retorna -1. Veja o exemplo:

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

procedure TForm1.Button2Click(Sender: TObject);
var
  indice: Integer;
begin
  // vamos obter o índice do item selecionado na ListBox
  indice := ListBox1.ItemIndex;

  // mostra o resultado
  ShowMessage('O índice do item selecionado é: '
    + IntToStr(indice));
end;

Note que esta propriedade não se aplica às ListBoxes de seleção múltipla.

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


Delphi ::: Dicas & Truques ::: Rotinas de Conversão

Como converter uma string em um valor numérico de ponto-flutuante (com parte fracionária) em Delphi usando as funções StrToFloat(), TryStrToFloat() e StrToFloatDef()

Quantidade de visualizações: 24777 vezes
Em algumas situações precisamos converter strings em valores numéricos do tipo ponto-flutuante, ou seja, números que contenham uma parte fracionária. Isso acontece quando recebemos valores de caixas de texto e precisamos usuá-los em cálculos.

Vamos começar com a função StrToFloat() da unit SysUtils. Esta função recebe uma string representando um valor de ponto-flutuante válido e retorna um valor de ponto-flutuante. Veja o exemplo:

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

procedure TForm1.Button1Click(Sender: TObject);
var
  valor1, valor2, soma: Double;
begin
  // vamos receber as strings dos TEdits e converter
  // seus valores para números de ponto-flutuante
  // note que em Delphi, um valor de ponto-flutuante
  // é informado em caixas de texto usando vírgula. Ex: 7,3
  valor1 := StrToFloat(Edit1.Text);
  valor2 := StrToFloat(Edit2.Text);

  // vamos obter a soma dos dois valores
  soma := valor1 + valor2;

  // vamos exibir o resultado. Note o uso de FloatToStr() para
  // converter o valor fracionário em string
  ShowMessage('A soma é: ' + FloatToStr(soma));
end;

Note que, se a string sendo convertida possuir um valor de ponto-flutuante inválido, uma exceção do tipo EConvertError será lançada. Podemos evitar isso usando a função TryStrToFloat(). Esta função recebe dois argumentos: a string a ser convertida e a variável do tipo Extended, Double ou Single que receberá o valor. O resultado será true se a conversão for feita com sucesso e false em caso contrário. Veja:

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

procedure TForm1.Button1Click(Sender: TObject);
var
  valor: Double;
begin
  // vamos tentar converter o valor da caixa de texto
  // em um valor de ponto-flutuante
  if TryStrToFloat(Edit1.Text, valor) then
    ShowMessage('Conversão efetuada com sucesso.')
  else
    ShowMessage('Erro na conversão');
end;

Há ainda uma terceira possibilidade: usar a função StrToFloatDef(). Esta função funciona exatamente da mesma forma que StrToFloat(), exceto que agora, se houver um erro de conversão, um valor de ponto-flutuante padrão será retornado. Veja:

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

procedure TForm1.Button1Click(Sender: TObject);
var
  valor: Double;
begin
  // vamos converter o valor da caixa de texto
  // em um valor de ponto-flutuante. Se a conversão não puder
  // ser feita o valor 10,50 será atribuído à varial valor
  valor := StrToFloatDef(Edit1.Text, 10.50);

  // vamos exibir o resultado
  ShowMessage(FloatToStr(valor));
end;

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


Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil

Processos e técnicas construtivas de instalações elétricas e hidráulicas

O projetista deve prezar pela compatibilização de projetos, de modo que os dispositivos elétricos e hidráulicos não se sobreponham aos elementos estruturais e arquitetônicos. Analise as afirmativas a seguir, referentes à compatibilização de projetos e à sua relação com as instalações elétricas.

I. As instalações elétricas aparentes devem, sempre, ser executadas com eletrodutos flexíveis, pois estes são mais adequados à geometria do substrato quando comparados aos eletrodutos rígidos.

II. A realização de cortes e rasgos em paredes de alvenaria, muito comum no cotidiano da engenharia, pode prejudicar o desempenho e a durabilidade do elemento de vedação e do ambiente interno da edificação.

III. As instalações elétricas podem ser executadas de forma aparente, sob a laje de concreto, sendo recobertas, em seguida, por forros suspensos de gesso, de modo a manter a instalação escondida.

IV. As instalações elétricas podem ser executadas no interior de paredes drywall; contudo, essa técnica resulta em elevado desperdício de material, em virtude dos cortes e rasgos nas placas de gesso acartonado.

Assinale a alternativa que apresenta somente a(s) afirmativa(s) correta(s).

A) Apenas a afirmativa I está correta.

B) Apenas a afirmativa III está correta.

C) Apenas as afirmativas II e III estão corretas.

D) Apenas as afirmativas I, II e IV estão corretas.

E) As afirmativas I, II, III e IV estão corretas.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em

Domínios de Deformações

O dimensionamento de uma seção transversal de um elemento linear concreto armado, sujeito a solicitações normais, de acordo com a NBR 6118 - "Projeto de estruturas de concreto" - é realizado com base em hipóteses básicas.

A respeito dessas hipóteses, analise as informações a seguir, indicando V para as verdadeiras e F para as falsas:

( ) A distribuição das deformações ocorre de forma não linear ao longo da altura da seção.

( ) As deformações nas barras de armadura são idênticas às deformações do concreto que as envolve.

( ) Admite-se que todas as tensões de tração existentes serão resistidas pelo concreto e pela armadura.

( ) Adota-se o diagrama parábola-retângulo idealizado para o concreto comprimido.

Assinale a alternativa que contém a sequência correta:

A) V - V - F - F.

B) V - F - F - F.

C) F - V - F - V.

D) F - V - V - V.

E) V - F - F - V.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil

Alvenaria: Técnicas construtivas

Durante o levantamento, devemos aferir o nivelamento e o prumo de uma parede em blocos cerâmicos:

A) Somente se houver um embarrigamento ou desnivelamento visível.

B) Ao levantar 1,0 m a parede.

C) Somente na última fiada.

D) A cada fiada executada.

E) A cada 3 fiadas executadas.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Java

Analise o seguinte código Java

int a = 3 / 0;
System.out.println(a);

Qual é o resultado de sua execução?

A) Infinity

B) NaN

C) Uma exceção java.lang.ArithmeticException: / by zero

D) 0
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Hidrologia

O método racional é muito utilizado na determinação de vazão máxima de projeto para pequenas bacias hidrográficas.

Uma bacia hidrográfica com área de 100 ha, coeficiente de escoamento médio de 0,6, recebeu uma precipitação intensa de 120 mm/h, resultando em uma vazão de pico de 20 m3/s.

Qual a vazão de pico para a mesma bacia hidrográfica se ocorresse uma precipitação de 90 mm/h.

A) 30 m3/s.

B) 20 m3/s.

C) 10 m3/s.

D) 5 m3/s.

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

Desafios, Exercícios e Algoritmos Resolvidos de Delphi

Veja mais Dicas e truques de Delphi

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á 41 usuários muito felizes estudando em nosso site.