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
Lista de Exercícios Resolvidos: Java | Python | VisuAlg | Portugol | C | C# | VB.NET | C++
Você está aqui: Delphi ::: Dicas & Truques ::: Recursão (Recursividade)

Obtendo o número ou a sequencia de Fibonacci recursivamente usando Delphi

Quantidade de visualizações: 17983 vezes
Uma sequencia de números de Fibonacci é definida como a seguir:

Fib(n) = n | se n < 2
Fib(n) = Fib(n - 2) + Fib(n - 1) | caso contrário

A definição estabelece que, se os primeiros dois números são 0 e 1, então qualquer número na sequencia é a soma de seus dois predecessores. Mas esses predecessores são, por sua vez, somas de seus predecessores, e assim por diante, até o início da sequencia. Desta forma, a sequencia produzida pela definição é:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377...

Se quisermos, por exemplo, calcular o Fibonacci de 6, teríamos apenas que somar seus dois predecessores, a saber, 3 e 5, resultando em 8. Mas antes, é preciso calcular o Fibonacci de 3 e também de 5. É aqui que o uso da recursão ou recursividade nos auxilia bastante.

Veja uma função fibonacci() recursiva que calcula o Fibonacci de 6. Note a condição de parada da cadeia de chamadas (que deve ocorrer quando n for menor que 2):

// função recursiva para calcular o Fibonacci
// de um determinado número
function fibonacci(n: Integer): Integer;
begin
  if n < 2 then
    Result := n
  else
    Result := fibonacci(n - 2) + fibonacci(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 fibonacci de 6
  res := fibonacci(6);

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

Execute o código e veja o resultado. Mas, tenha cuidado ao tentar obter o Fibonacci de um número muito grande devido à recursividade excessiva. Isso ocorre porque, para calcular Fibonacci(6) nós precisamos calcular Fibonacci(5), Fibonacci(4), Fibonacci(3), Fibonacci(2), Fibonacci(1) e Fibonacci(0) primeiro. No entanto, para calcular Fibonacci(4), temos que novamente calcular Fibonacci(3), Fibonacci(2), Fibonacci(1) e Fibonacci(0) novamente. Veja no trecho de código a seguir como podemos obter uma lista de todas as chamadas:

// função recursiva para calcular o Fibonacci
// de um determinado número
function fibonacci(n: Integer; memo: TMemo): Integer;
begin
  // vamos registar esta chamada
  memo.Lines.Add('Fibonacci(' + IntToStr(n) + ')');

  if n < 2 then
    Result := n
  else
    Result := fibonacci(n - 2, memo) + fibonacci(n - 1, memo);
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 fibonacci de 6 e registrar
  // a cadeia de chamadas em um TMemo
  res := fibonacci(6, Memo1);

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

Execute o código e verá a seguinte árvore de chamadas:

Fibonacci(6)
Fibonacci(4)
Fibonacci(2)
Fibonacci(0)
Fibonacci(1)
Fibonacci(3)
Fibonacci(1)
Fibonacci(2)
Fibonacci(0)
Fibonacci(1)
Fibonacci(5)
Fibonacci(3)
Fibonacci(1)
Fibonacci(2)
Fibonacci(0)
Fibonacci(1)
Fibonacci(4)
Fibonacci(2)
Fibonacci(0)
Fibonacci(1)
Fibonacci(3)
Fibonacci(1)
Fibonacci(2)
Fibonacci(0)
Fibonacci(1)

De fato é uma cadeia de chamadas muito grande para calcularmos apenas o Fibonacci de 6. Se precisássemos calcular o Fibonacci de 200, o número de chamadas chegaria à casa dos milhões. Não tente! Pode haver estouro da pilha do sistema operacional.

Podemos combinar a função recursiva que vimos no início da dica com um laço for para obter os 10 primeiros termos da sequencia de Fibonacci. Veja:

// função recursiva para calcular o Fibonacci
// de um determinado número
function fibonacci(n: Integer): Integer;
begin
  if n < 2 then
    Result := n
  else
    Result := fibonacci(n - 2) + fibonacci(n - 1);
end;

// vamos chamar a função recursiva para calcular
// os 10 primeiros termos da sequencia de Fibonacci
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  res: String;
begin
  res := '';

  for i := 0 to 9 do
    begin
      res := res + IntToStr(fibonacci(i)) + '  ';
    end;

  ShowMessage(res);
end;

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

Link para compartilhar na Internet ou com seus amigos:

C ::: Dicas & Truques ::: Strings e Caracteres

Como escrever uma função is_numeric() em C que verifica se uma string contém apenas dígitos de 0 a 9

Quantidade de visualizações: 9774 vezes
Em algumas situações precisamos verificar se uma string contém apenas dígitos de 0 a 9, ou seja, é um valor numérico inteiro válido. Para isso podemos usar a função personalizada em C que mostro nesta dica. Veja que o segredo é passar todos os caracteres individualmente para a função isdigit(). Veja o código:

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

// função personalizada que permite verificar se uma
// string contém apenas dígitos de 0 a 9
int is_numeric(const char *str){
  int res = 1; // passou no teste

  // vamos percorrer todos os caracteres da string
  // e testar se cada um é um dígito. Se não
  // for nós marcamos res como 0 e retornamos
  while(*str){
    if(!isdigit(*str)){
      res = 0;
      break;
    }

    // vamos passar para o próximo caractere
    str++;
  }

  return res;
}

int main(int argc, char *argv[]){
  char valor[20]; // vamos guardar o valor digitado aqui

  // vamos ler o valor informado pelo usuário
  printf("Digite qualquer coisa e tecle ENTER: ");
  gets(valor);

  // vamos verificar se o usuário informou uma string
  // que contém apenas dígitos de 0 a 9
  if(is_numeric(valor))
    printf("Voce informou uma string numerica");
  else
    printf("Voce NAO informou uma string numerica");

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

E, antes que perguntem como é possível verificar se a string contém um valor fracionário válido, a seguinte alteração pode ser feita:

int is_numeric(const char *str){
  int res = 1; // passou no teste

  // vamos percorrer todos os caracteres da string
  // e testar se cada um é um dígito ou uma vírgula. Se não
  // for nós marcamos res como 0 e retornamos
  while(*str){
    if((!isdigit(*str)) and (*str != ',')){
      res = 0;
      break;
    }

    // vamos passar para o próximo caractere
    str++;
  }

  return res;
}



Java ::: Classes e Componentes ::: JList

Java Swing - Como obter o valor selecionado em um JList usando o método getSelectedValue()

Quantidade de visualizações: 12776 vezes
Nesta dica eu mostro como chamar o método getSelectedValue() de um controle JList para obter o valor do item selecionado na mesma. No exemplo nós exibimos o item selecionado em uma mensagem JOptionPane ao clicarmos em um botão JButton.

Veja o código completo para o exemplo:

package arquivodecodigos;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class Estudos extends JFrame{
  JList lista;  
 
  public Estudos() {
    super("A classe JList");
     
    Container c = getContentPane();
    c.setLayout(new FlowLayout(FlowLayout.LEFT));
     
    // Cria os itens da lista
    String nomes[] = {"Carlos", "Marcelo", "Fabiana",
      "Carolina", "Osmar"};
 
    // Cria a JList
    lista = new JList(nomes);
  
    // Define a seleção única para a lista
    lista.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
    // Um botão que permite obter o valor do item selecionado
    JButton btn = new JButton("Obter valor selecionado");
    btn.addActionListener(
      new ActionListener(){
        public void actionPerformed(ActionEvent e){
          String valor = (String)(lista.getSelectedValue());
 
          JOptionPane.showMessageDialog(null, 
            "O valor selecionado é: " + valor);
        }
      }
    );
 
    // Adiciona a lista à janela
    c.add(new JScrollPane(lista));
 
    // Adiciona o botão à janela
    c.add(btn);  
 
    setSize(350, 250);
    setVisible(true);
  }
   
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

Ao executar esta aplicação Java Swing nós teremos o seguinte resultado:




Java ::: Fundamentos da Linguagem ::: Tipos de Dados

Apostila de Java para iniciantes - Como usar o tipo de dados int da linguagem Java

Quantidade de visualizações: 12094 vezes
O tipo de dados int pode ser usado quando queremos armazenar valores inteiros na faixa ?2.147.483.648 até 2.147.483.647 (acima de dois milhões). Veja um exemplo:

public class Estudos{
  static int valor = 1500; 
  
  public static void main(String args[]){
    System.out.println("O valor da variável é: "
      + valor);
    System.exit(0);
  }
}

O tipo de dados int pode ser convertido (sem a necessidade de cast) para os seguintes tipos:

int -> long -> float -> double

Se precisarmos converter o tipo int para os tipos char, byte ou short, teremos que lançar mão de uma coerção (cast). Veja:

short valor2 = (short)(valor);



C++ ::: Dicas & Truques ::: Strings e Caracteres

Como acessar os caracteres de uma string C++ individualmente usando um iterador

Quantidade de visualizações: 10897 vezes
Nesta dica mostrarei como podemos usar um iterador para percorrer todos os caracteres de uma palavra, frase ou texto em C++. Para isso nós vamos combinar um iterator e as funções begin() e end().

Veja o código C++ completo para o exemplo:

#include <string>
#include <iostream>
 
using namespace std;
 
// função principal do programa C++ 
int main(int argc, char *argv[]){
  // vamos declarar um objeto da classe string
  string palavra("FACULDADE");
  
  // agora criamos um iterador para a string
  string::iterator it;
   
  // e usamos um laço for para percorrer o iterador
  // do início ao fim 
  for(it = palavra.begin(); it < palavra.end(); it++){
    // e mostramos os caracteres individuais
    cout << *it << "\n";
  } 
     
  cout << "\n" << endl;	    
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

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

F
A
C
U
L
D
A
D
E


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

Como escrever em um arquivo um caractere de cada vez usando a função fputc() da linguagem C

Quantidade de visualizações: 9067 vezes
Em algumas situações precisamos escrever em um arquivo um caractere de cada vez. Para isso podemos usar a função fputc() do header stdio.h. Esta função recebe o caractere a ser escrito e um ponteiro para o objeto FILE que identifica o arquivo no qual queremos escrever. Se o caractere for escrito com sucesso, o indicador de posição interna do arquivo é adiantado para a inserção do próximo caractere.

Veja um exemplo no qual escrevemos o alfabeto maiúsculo em um arquivo chamado alfabeto.txt:

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

int main(int argc, char *argv[]){
  FILE *arquivo;
  char letra;

  // vamos abrir o arquivo para escrita
  arquivo = fopen("alfabeto.txt", "w");
  if(arquivo != NULL){
    for(letra = 'A'; letra <= 'Z'; letra++){
      fputc((int)letra, arquivo);
    }
    fclose(arquivo);
  }

  puts("Tentei escrever no arquivo. Veja se funcionou.");

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

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

Tentei escrever no arquivo. Veja se funcionou.

Em seguida, se olharmos o conteúdo do arquivo "alfabeto.txt" veremos que o conteúdo foi escrito da forma que imaginamos.


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

Anúncio Patrocinado
Chat de Sexo - Site para adultso - Maiores de 18 anos. Converse com pessoas de todo o Brasil, de forma discreta e anônima


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