C++ ::: Dicas & Truques ::: Recursão (Recursividade) |
Como calcular fatorial em C++ usando recursividadeQuantidade de visualizações: 10047 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 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 <iostream>
using namespace std;
// 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);
}
int main(int argc, char *argv[]){
// vamos calcular o fatorial de 5
int res = fatorial(5);
// exibe o resultado
cout << "O fatorial de 5 é: " << res << endl;
system("PAUSE"); // pausa o programa
return EXIT_SUCCESS;
}
|
MySQL ::: Dicas & Truques ::: Chaves, Índices e Restrições de Integridade Referencial |
Como criar chaves estrangeiras no MySQL - Como criar Foreign Keys em tabelas do MySQLQuantidade de visualizações: 90391 vezes |
|
O que é chave estrangeira (foreign key)? O papel da chave estrangeira é manter uma referência a um registro presente em outra tabela. Imagine o seguinte cenário. Temos uma tabela livros e uma tabela autores. Neste cenário, um autor pode escrever vários livros e um livro pode ser escrito somente por um determinado autor. Aqui temos uma relação 1:N, ou seja, um para muitos: um autor pode escrever zero, um ou vários livros. Comece analisando a tabela autores: Field Type Null Key Default Extra id int(10) unsigned NO PRI - auto_increment nome varchar(45) NO - email varchar(45) NO - CREATE TABLE autores( id int(10) unsigned NOT NULL auto_increment, nome varchar(45) NOT NULL, email varchar(45) NOT NULL, PRIMARY KEY(id) )ENGINE=InnoDB; Analise agora a tabela livros: Field Type Null Key Default Extra id int(10) unsigned NO PRI - auto_increment titulo varchar(45) NO - paginas int(10) unsigned NO - id_autor int(10) unsigned NO - CREATE TABLE livros( id INTEGER UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, titulo VARCHAR(45) NOT NULL, paginas INTEGER UNSIGNED NOT NULL, id_autor INTEGER UNSIGNED NOT NULL, PRIMARY KEY(id) )ENGINE = InnoDB; O campo id é do tipo int, auto-incremento e foi marcado como chave primária. Dessa forma, o campo id identifica unicamente cada livro. O campo id_autor é do tipo int e sua função é guardar o id do autor que escreveu um determinado livro. Ao trazer o valor do campo id da tabela autores para o campo id_autor da tabela livros nós estamos relacionando as duas tabelas. O campo id_autor, neste cenário, é a chave estrangeira, pois seu valor sempre refletirá o valor do campo id da tabela autores (a única exceção é quando queremos deixar, temporariamente, um livro sem autor). Lembre-se, em uma relação 1:N, a chave estrangeira, em geral, ficará no lado N da relação. Integridade Referencial (Restrições de Chave Estrangeira) - Referential Integrity (Foreign Key Constraints) Imagine agora que você inseriu alguns registros na tabela autores e na tabela livros. Todas as vezes que o valor do campo id_autor na tabela livros for igual ao valor do campo id na tabela autores nós estaremos criando um relação autor-livro. É possível, a qualquer momento, listar um livro e saber de imediato o id do seu autor (isso permite fazer um join com a tabela autores para obter os dados do respectivo autor). Mas, o que acontecerá se excluirmos um registro na tabela autores e, mais tarde, descobrirmos que o campo id_autor da tabela livros guardava uma referência para o autor excluído? Teremos a quebra da integridade referencial. Para evitar tais situações, é responsabilidade do programador escrever códigos de verificações para prevenir estas ocorrências. Os bancos de dados, e principalmente o MySQL, possuem mecanismos para reforçar esta proteção: restrições de chave estrangeira. As restrições de chave estrangeira asseguram duas situações possíveis: 1) Não permitir que um autor seja excluído quando qualquer livro possuir uma referência a ele; 2) Se o autor for excluído, todos os livros que o referenciam também o serão. Definindo a chave estrangeira na tabela livros usando o atributo CONSTRAINT FOREIGN KEY REFERENCES Vamos agora reescrever o comando DDL CREATE TABLE para a tabela livros de forma a aplicar as restrições de chaves estrangeiras. Veja a nova versão: CREATE TABLE livros( id INTEGER UNSIGNED NOT NULL DEFAULT NULL AUTO_INCREMENT, titulo VARCHAR(45) NOT NULL, paginas INTEGER UNSIGNED NOT NULL, id_autor INTEGER UNSIGNED NOT NULL, PRIMARY KEY(id), CONSTRAINT livros_autores FOREIGN KEY(id_autor) REFERENCES autores(id) )ENGINE = InnoDB; A estrutura da tabela livros será alterada para aquela mostrada abaixo: Field Type Null Key Default Extra id int(10) unsigned NO PRI - auto_increment titulo varchar(45) NO - paginas int(10) unsigned NO - id_autor int(10) unsigned NO MUL - ErrorNr. 1451: Cannot delete or update a parent row: a foreign key constraint fails (`estudos/livros`, CONSTRAINT `livros_autores` FOREIGN KEY (`id_autor`) REFERENCES `autores` (`id`)) Em mais dicas desta seção você aprenderá a usar as cláusulas ON DELETE e ON UPDATE e as ações RESTRICT, SET NULL, CASCADE e NO ACTION. Todas estas cláusulas e ações são usadas para reforçar a integridade referencial de suas bases de dados. |
Java ::: Pacote java.awt.event ::: KeyEvent |
Java Swing - Como detectar as teclas Insert ou Delete usando o método getKeyCode() da classe KeyEvent do JavaQuantidade de visualizações: 3537 vezes |
|
Em algumas situações nós precisamos detectar o pressionamento das teclas Insert ou Delete. Para isso podemos usar o método getKeyCode() da classe KeyEvent e testar se o código equivale a uma das constantes KeyEvent.VK_INSERT (Ins) ou KeyEvent.VK_DELETE (Del). Veja um trecho de código no qual testamos se alguma destas duas teclas foi pressionada:
package estudos;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Janela extends JFrame implements KeyListener{
public Janela(){
super("Eventos do Teclado");
Container c = getContentPane();
FlowLayout layout = new FlowLayout(FlowLayout.LEFT);
c.setLayout(layout);
// vamos adicionar o objeto listener
addKeyListener(this);
setSize(350, 250);
setVisible(true);
}
@Override
public void keyPressed(KeyEvent e){
// a tecla Insert foi pressionada?
if(e.getKeyCode() == KeyEvent.VK_INSERT){
JOptionPane.showMessageDialog(null, "A tecla Insert foi pressionada");
}
// a tecla Enter Delete pressionada?
else if(e.getKeyCode() == KeyEvent.VK_DELETE){
JOptionPane.showMessageDialog(null, "A tecla Delete foi pressionada");
}
else{
JOptionPane.showMessageDialog(null, "Outra tecla foi pressionada");
}
}
@Override
public void keyReleased(KeyEvent e){
// sem implementação
}
@Override
public void keyTyped(KeyEvent e){
// sem implementação
}
public static void main(String args[]){
Janela j = new Janela();
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
É importante observar que as teclas Insert e Delete podem ser detectadas somente nos eventos keyPressed e keyReleased. |
Python ::: Dicas & Truques ::: Tupla (Tuple) |
Python para iniciantes - Como usar o tipo de dados tuple da linguagem PythonQuantidade de visualizações: 9557 vezes |
|
Uma tupla (tuple) é similar a uma lista (list), com a exceção de que uma tupla não pode ser modificada, ou seja, é imutável. Veja como criar uma tupla contendo cinco elementos: # Cria uma tupla valores = 4, 76, 2, 98, 4 # Exibe o valor do segundo elemento print valores[1] # Exibe todos os elementos for valor in valores: print valor, Veja agora o que acontece quando tentamos alterar o valor de um dos elementos da tupla:
valores[4] = 50
Traceback (most recent call last):
File "tuplas.py", line 19, in <module>
valores[4] = 50
TypeError: 'tuple' object does not support item assignment
Contudo, a variável do tipo tupla pode ser alterada para apontar para uma tupla diferente. Veja: # Cria duas tuplas valores = 4, 76, 2, 98, 4 letras = 'A', 'B', 'C' # Atribue os elementos de letras a valores valores = letras # Exibe o resultado print valores É comum colocar os elementos de uma tupla entre parênteses. Assim, a tupla abaixo é perfeitamente legal: valores = (4, 76, 2, 98, 4) Embora não muito provável, se precisarmos criar uma tupla de apenas um elemento, devemos inserir uma vírgula após ele. Veja: valores = (4,) Tuplas podem conter elementos de diferentes tipos de dados. Veja: # Cria uma tupla contendo tipos diferentes # de dados cliente = (3, "Osmar J. Silva", "Goiânia", "GO", 35) # Exibe o valor do 4º elemento estado = cliente[3] print estado |
Nossas 20 dicas & truques de programação mais populares |
|
Delphi - Como usar a propriedade Eof para verificar se estamos no último registro do TClientDataSet do Delphi C - Como calcular a massa de um corpo dada sua energia cinética e sua velocidade usando a linguagem C |
Você também poderá gostar das dicas e truques de programação abaixo |
|
JavaScript - Como retornar o código ASCII ou Unicode associado a um caractere em JavaScript usando a função charCodeAt() C# - Como adicionar ou subtrair meses de uma data em C# usando o método AddMonths() da estrutura DateTime JavaScript - Como acessar as mídias do usuário em JavaScript usando a função getUserMedia() da interface MediaDevices |
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 |



