Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD e VBA
PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO

C ::: Dicas & Truques ::: Recursão (Recursividade)

Como calcular o fatorial de um número em C usando recursividade

Quantidade de visualizações: 16334 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 exemplificação por ser relativamente fácil de se entender todas as etapas do processo. O código abaixo mostra uma função recursiva em C 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.

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

// cabeçalho da função fatorial recursiva
int fatorial(int n);

// função principal do programa
int main(int argc, char *argv[]){
  setlocale(LC_ALL,""); // para acentos do português 
    
  // vamos calcular o fatorial de 5
  int res = fatorial(5);

  // exibe o resultado
  printf("O fatorial de 5 é: %d", res);
  
  printf("\n\n");
  system("PAUSE");	
  return 0;
}

// função recursiva para calcular o fatorial
// de um determinado número
int fatorial(int n){
  if(n == 0){
    return 1;
  }
  else{
    return n * fatorial(n - 1);
  }
}

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

O fatorial de 5 é: 120


CSS ::: Dicas & Truques ::: Media Queries

CSS3 - O que são CSS media queries e como usá-las em suas páginas web para criar designs responsivos

Quantidade de visualizações: 1856 vezes
Os desenvolvedores web acostumados com o CSS2 com certeza vão se lembrar das media types e como as usávamos, ou ainda usamos, para definir o tipo de mídia para a qual uma determinada folha de estilo será aplicada. Com media types é possível, por exemplo, oferecer estilos diferentes dependendo se o tipo de mídia for all, screen ou print, ou seja, todos os tipos (all), somente tela (screen), ou impressão (print).

O CSS3 trouxe ainda mais comodidade por meio das media queries, que, na verdade, são uma extensão das media types. Com as media queries é possível aplicar uma folha de estilo CSS baseado não somente no tipo de mídia, mas também baseado nas características do navegador web, tais como largura e altura do viewport (a área disponível para exibição dos elementos da página web), a largura e altura do dispositivo, sua orientação e resolução, etc.

Veja, por exemplo, como podemos aplicar uma imagem de fundo diferente na página HTML dependendo do tamanho da tela:



E aqui o código completo para a página HTML e as definições CSS:

<html>
<head>
<title>Estudando CSS3</title>

<meta name="viewport" content="width=device-width, initial-scale=1">
 
<style>
/* demais resoluções */
body{
  background-image: url("horizontal.jpg");
  background-repeat: no-repeat;
}

/* max-width (largura máxima)  */
@media screen and (max-width: 600px) {
  body{
    background-image: url("vertical.jpg");
    background-repeat: no-repeat;
  }
} 
</style>

</head>
<body>
 
</body>
</html>

Este exemplo é bem simples, mas dará a você uma idéia de como iniciar hoje o mesmo o uso das media queries em CSS. Note que, se a resolução for no máximo 600px, a página terá como fundo a imagem "vertical.jpg". Se a página for aberta em outras resoluções, a imagem de fundo será "horizontal.jpg".

Abra o exemplo no seu navegador e experimente redimensionar a janela. Veja como a imagem de fundo é trocada automaticamente ao atingir a resolução que definimos para o atributo max-width da media query. Esta técnica é muito utilizada quando queremos criar uma página web responsiva, ou seja, com design responsivo.


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Listas Ligadas

Exercícios Resolvidos de Java - Como inserir no final de uma lista ligada em Java - Escreva um programa Java que pede para o usuário informar vários

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

Este exercício Java demonstra como inserir um nó no final de uma lista ligada. Escreva um programa Java que cria uma lista ligada, ou seja, uma lista dinamicamente encadeada, e pede para o usuário informar vários valores inteiros, colocando os valores sempre no final da lista.

Seu código deverá interromper a leitura dos valores quando o usuário informar o valor -1. Quando isso acontecer, mostre todos os valores contidos na lista ligada, na mesma ordem que foram inseridos (o último valor lido será o último da lista).

Sua saída deve ser parecida com:

Inserindo valores no final da lista

Informe o valor (-1 para sair): 3
Informe o valor (-1 para sair): 9
Informe o valor (-1 para sair): 1
Informe o valor (-1 para sair): 5
Informe o valor (-1 para sair): 2
Informe o valor (-1 para sair): -1

Valores na lista: 3 -> 9 -> 1 -> 5 -> 2 -> null
Resposta/Solução:

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

package estudos;
  
import java.util.Scanner;

// classe interna usada para representar um
// nó na lista ligada
class No {
  int valor; // valor do nó
  No proximo; // aponta para o novo nó
 
  // construtor da classe No
  No(int valor, No proximo) {
    this.valor = valor;
    this.proximo = proximo;
  }
}

public class Estudos { 
  public static void main(String args[]){
    // para ler a entrada do usuário
    Scanner entrada = new Scanner(System.in);
    
    // vamos criar uma referência para o início da lista
    No inicio = null;
    
    // agora vamos pedir para o usuário informar
    // valores inteiros. O valor -1 sai do laço
    int valor;
    System.out.println("Inserindo valores no final da lista\n");
    do {
      System.out.print("Informe o valor (-1 para sair): ");
      valor = Integer.parseInt(entrada.nextLine());
      if (valor != -1) {
        inicio = inserirFinal(inicio, valor);
      }
    } while(valor != -1);
    
    // vamos exibir os valores na lista ligada
    System.out.print("\nValores na lista: ");
    exibirLista(inicio);
  }
  
  // função que permite adicionar um nó no final da
  // lista ligada
  public static No inserirFinal(No inicio, int valor) {
    // vamos apontar para o nó inicial
    No atual = inicio;
    // criamos um novo nó
    No novo = criarNo(valor);
 
    // a lista ligada ainda está vazia?
    if (atual == null){
      // inicio recebe o novo nó
      inicio = novo;
    }    
    else { // temos um ou mais nós na lista ligada
      // vamos localizar o último nó
      while (atual.proximo != null) {
        atual = atual.proximo;
      }
      
      // encontramos o último nó. Agora vamos inserir
      // o novo nó depois dele
      atual.proximo = novo;
    }
    
    // e retornamos o início da lista
    return inicio;
  }
  
  // função usada para construir e retornar um novo nó
  public static No criarNo(int valor) {
    // cria o novo nó
    No no = new No(valor, null);
    // retorna o nó criado
    return no;
  }
  
  // função usada para percorrer a lista ligada e
  // exibir os valores contidos em seus nós
  public static void exibirLista(No inicio) {
    // vamos apontar para o início da lista
    No temp = inicio;
    
    // a lista está vazia?
    if (temp == null) {
      System.out.println("A lista está vazia.");
    }
    else {
      // esse laço se repete enquanto tempo for
      // diferente de null
      while (temp != null) {
        // vamos mostrar o valor desse nó
        System.out.print(temp.valor + " -> ");
        // avança para o próximo nó
        temp = temp.proximo;
      }
    
      // mostra o final da lista
      System.out.println("null");
    }
  }
}



PHP ::: Dicas & Truques ::: Programação Orientada a Objetos

Programação Orientada a Objetos em PHP - Como criar e usar variáveis estáticas em PHP

Quantidade de visualizações: 10451 vezes
Como já vimos em outras dicas desta seção, uma classe possui propriedades (variáveis) e métodos. Dessa forma, cada instância (cópia ou objeto) desta classe possui suas próprias cópias das variáveis declaradas na classe.

Veja a seguinte declaração de uma classe Produto:

<?
  // classe Produto com duas variáveis privadas e seus
  // correspondentes métodos mutatórios e acessórios
  class Produto{
    private $nome;
    private $preco;

    public function setNome($nome){
      $this->nome = $nome;
    }

    public function getNome(){
      return $this->nome;
    }

    public function setPreco($preco){
      $this->preco = $preco;
    }

    public function getPreco(){
      return $this->preco;
    }
  }
?>

Aqui cada instância da classe Produto terá suas próprias variáveis $nome e $preco.

Há, porém, situações nas quais gostaríamos que uma determinada variável pertencesse à classe e não à cada instância individual. Um bom exemplo disso seria uma variável que registra a quantidade de instâncias que temos de uma classe ou a técnica de se atribuir um identificador único a cada instância da classe.

Variáveis estáticas em PHP podem ser criadas por meio do uso da palavra-chave static. É comum tais variáveis serem declaradas com o modificador public, o que as torna acessíveis fora da classe na qual estas estão declaradas. Veja um exemplo:

<?
  // classe Produto com duas variáveis privadas e seus
  // correspondentes métodos mutatórios e acessórios
  class Produto{
    private $nome;
    private $preco;
    
 
    // uma variável estática que permite contar as instâncias
    // desta classe
    public static $contador = 0;

    // construtor da classe Produto
    function __construct(){
      // vamos incrementar o contador aqui
      self::$contador++;
    }
  }

  // vamos criar duas instâncias da classe Produto
  $p1 = new Produto();
  $p2 = new Produto();

  // vamos obter o valor do contador de instâncias
  echo "Até este momento já criamos " . Produto::$contador .
    " instâncias da classe Produto"; 
?>

Este código possui alguns pontos interessantes e merece uma análise bem detalhada. Perceba que, dentro da classe, uma variável estática é acessada usando-se self e não $this, como fazemos com as variáveis de instâncias. Outra observação interessante é em relação ao acesso da variável estática fora da classe. Aqui nós usamos o nome da classe seguida por um par de dois pontos "::" e não por meio de referências às suas instâncias individuais. Finalmente observe o construtor da classe. A cada instância construída nós acessamos a variável estática e incrementamos seu valor em 1.

É importante observar que variáveis estáticas não podem ser acessadas por meio de referências às instâncias da classe usando o operador "->". Assim, o trecho de código abaixo:

// vamos tentar alterar o valor da variável estática por meio
// de uma referência a uma das instâncias da classe Produto
$p1->contador = 5;

não provoca erros mas, também não traz o resultado esperado.


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

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


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 Apenas R$ 32,90

Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica.


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