![]() |
|||||
|
C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercício Resolvido de C++ - Um método recursivo que calcula o número de Fibonacci para um dado índiceQuantidade de visualizações: 738 vezes |
Pergunta/Tarefa: Observe a série de números Fibonacci abaixo: Série: 0 1 1 2 3 5 8 13 21 34 55 89 Índice: 0 1 2 3 4 5 6 7 8 9 10 11 Este algoritmo consiste em, dado um determinado índice, retornar o número de Fibonacci correspondente. Recursivamente, o cálculo pode ser feito da seguinte forma: fib(0) = 0; fib(1) = 1; fib(indice) = fib(indice - 2) + fib(indice - 1); sendo o indice >= 2 Os casos nos quais os índices são 0 ou 1 são os casos bases (aqueles que indicam que a recursividade deve parar). Seu método deverá possuir a seguinte assinatura: int fibonacci(int indice){ // sua implementação aqui } Informe o índice: 6 O número de Fibonacci no índice informado é: 8 Veja a resolução comentada deste exercício usando C++: #include <string> #include <iostream> using namespace std; // assinatura da função recursiva int fibonacci(int indice); int main(int argc, char *argv[]){ // variáveis usadas na resolução do problema int indice; // vamos solicitar o índice do número de Fibonacci cout << "Informe o índice: "; // lê o índice cin >> indice; // calcula o número de Fibonacci no índice informado cout << "O número de Fibonacci no índice informado é: " << fibonacci(indice) << endl; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } // função recursiva que o número de Fibonacci em um determinado índice int fibonacci(int indice){ if(indice == 0){ // caso base; interrompe a recursividade return 0; } else if(indice == 1){ // caso base; interrompe a recursividade return 1; } else{ // efetua uma nova chamada recursiva return fibonacci(indice - 1) + fibonacci(indice - 2); } } |
PHP ::: PHP + MySQL ::: MySQL (mysql) |
Como criar um arquivo de conexão PHP + MySQL e incluí-lo nas demais páginas PHP do seu projeto - Atualizado - Somente PHP 5.6 e anterioresQuantidade de visualizações: 13350 vezes |
É sempre uma boa idéia centralizar todos os parâmetros da conexão PHP + MySQL em apenas um arquivo e usar require() para incluí-lo nas demais páginas da aplicação. Se fizermos isso, não precisaremos efetuar alterações em todas as páginas caso o nome de usuário ou senha da conexão seja alterada. 1 - Comece criando o arquivo PHP que contém os parâmetros de conexão. Uma boa idéia é usar um método que retorne uma conexão com o banco de dados. Veja o código para conexao.php: <? function obter_conexao_php_mysql(){ // Parâmetros de conexão $server = "localhost"; $usuario = "root"; $senha = "osmar1234"; $base = "estudos"; // Tenta efetuar a conexão $conexao = mysql_connect($server, $usuario, $senha); // Testa se a conexão foi efetuada com sucesso if(!$conexao) die('Falha ao conectar: ' . mysql_error()); // conexão efetuada com sucesso. Podemos definir qual // base de dados será usada $db_selected = mysql_select_db($base, $conexao); // testa se a base foi selecionada com sucesso. if(!$db_selected) die("Falha ao selecionar o banco: " . mysql_error()); return $conexao; } function fechar_conexao_php_mysql($conn){ mysql_close($conn); } ?> Agora este arquivo de conexão pode ser importado para as demais página da seguinte forma: <? require("conexao.php"); // obtém a conexão com o banco MySQL $conexao = obter_conexao_php_mysql(); /* Outros códigos de manipulação dos dados no banco de dados vão aqui */ // fecha a conexão fechar_conexao_php_mysql($conexao); ?> Atenção usuários Windows + XAMPP: Se você estiver recebendo a mensagem abaixo, certifique-se de que a linha extension=php_mysql.dll Está descomentada no seu PHP.ini. Fatal error: Uncaught Error: Call to undefined function mysql_connect() in conexao.php:10 Stack trace: #0 conexao.php(32): obter_conexao_php_mysql() #1 {main} thrown in conexao.php on line 10 Se você estiver usando uma versão do PHP superior a 5.6, este erro também ocorrerá e você terá que voltar sua aplicação para um PHP mais anterior ou mudar seus códigos de conexão para PDO ou MySQL Improved Extension (mysqli). |
C ::: Dicas & Truques ::: Matemática e Estatística |
Como arredondar um valor de ponto-flutuante para cima usando a função ceil() da linguagem CQuantidade de visualizações: 14782 vezes |
A função ceil() da linguagem C é usada quando precisamos arredondar um valor de ponto-flutuante (com casas decimais) para cima. Esta função retorna o menor valor integral maior que o valor fornecido a ela. Note que, mesmo o retorno sendo um inteiro, ele virá encapsulado em um double. Para entender o funcionamento desta função, vamos considerar o valor 4.5. Ao aplicarmos a função ceil() a este valor, o retorno será 5.0. Isso pode ser comprovado no trecho de código abaixo: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf("O valor 4.5 arredondado para cima e %f", ceil(4.5)); printf("\n\n"); system("pause"); return 0; } Ao executarmos este código teremos o seguinte resultado: O valor 4.5 arredondado para cima é 5.000000. |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Sistemas Digitais - Manipulação de Bits |
Exercícios Resolvidos de Java - Como fazer o complemento de 1 de um número binário em Java - Solução usando manipulação de stringsQuantidade de visualizações: 469 vezes |
Pergunta/Tarefa: Em Sistemas Digitais e na manipulação de bits, o complemento de 1 de um número binário é realizado de forma direta invertendo-se os "0s" e "1s", ou seja, todo zero (0) vira um (1) e todo um (1) vira zero (0). Dessa forma, se tivermos o número binário 11001, seu complemento de 1 será 00110. Escreva um programa Java que pede para o usuário informar um número binário e exiba o seu complemento de um. Para esta solução você deverá usar exclusivamente manipulação de strings. Sua saída deve ser parecida com: Informe um número binário: 1011001 O complemento de 1 é: 0100110 Veja a resolução comentada deste exercício usando Java: package estudos; import java.util.Scanner; public class Estudos { public static void main(String[] args) { // para ler a entrada do usuário Scanner entrada = new Scanner(System.in); // vamos solicitar um número binário System.out.print("Informe um número binário: "); String binario = entrada.nextLine(); // vamos converter a string em um arrays de chars char digitos[] = binario.toCharArray(); // agora percorremos todos os dígitos do número binário // e trocamos os "0s" por "1s" e vice-versa for(int i = 0; i < digitos.length; i++){ if(digitos[i] == '0'){ digitos[i] = '1'; } else{ digitos[i] = '0'; } } // convertemos de novo para string String complemento1 = String.valueOf(digitos); // e mostramos o resultado System.out.println("O complemento de 1 é: " + complemento1); } } |
Dart ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas |
Como calcular o cosseno de um ângulo em Dart usando o método cos() da biblioteca Math - Calculadora de cosseno em DartQuantidade de visualizações: 884 vezes |
Em geral, quando falamos de cosseno, estamos falando do triângulo retângulo de Pitágoras (Teorema de Pitágoras). A verdade é que podemos usar a função cosseno disponível nas linguagens de programação para calcular o cosseno de qualquer número, mesmo nossas aplicações não tendo nenhuma relação com trigonometria. No entanto, é sempre importante entender o que é a função cosseno. Veja a seguinte imagem: ![]() Veja que temos um triângulo retângulo com as medidas já calculadas para a hipotenusa e os dois catetos, assim como os ângulos entre eles. Assim, o cosseno é a razão entre o cateto adjascente e a hipotenusa, ou seja, o cateto adjascente dividido pela hipotenusa. Veja a fórmula: \[\text{Cosseno} = \frac{\text{Cateto adjascente}}{\text{Hipotenusa}} \] Então, se dividirmos 30 por 36.056 (na figura eu arredondei) nós teremos 0.8320, que é a razão entre o cateto adjascente e a hipotenusa (em radianos). Agora, experimente calcular o arco-cosseno de 0.8320. O resultado será 0.5881 (em radianos). Convertendo 0.5881 radianos para graus, nós obtemos 33.69º, que é exatamente o ângulo em graus entre o cateto adjascente e a hipotenusa na figura acima. Pronto! Agora que já sabemos o que é cosseno na trigonometria, vamos entender mais sobre a função cos() da linguagem Dart. Esta método, que faz parte da biblioteca Math, recebe um valor numérico e retorna um valor, também numérico) entre -1 até 1 (ambos inclusos). Veja: // vamos importar a biblioteca dart:math import "dart:math"; void main(){ print("Cosseno de 0 = " + cos(0).toString()); print("Cosseno de 1 = " + cos(1).toString()); print("Cosseno de 2 = " + cos(2).toString()); } Ao executar este código Dart nós teremos o seguinte resultado: Cosseno de 0 = 1.0 Cosseno de 1 = 0.5403023058681398 Cosseno de 2 = -0.4161468365471424 Note que calculamos os cossenos dos valores 0, 1 e 2. Observe como os resultados conferem com a curva da função cosseno mostrada abaixo: ![]() |
Python ::: Dicas & Truques ::: Data e Hora |
Como adicionar dias à uma data em Python usando a função timedelta() da classe datetimeQuantidade de visualizações: 9066 vezes |
Nesta dica mostrarei como é possível usar o método timedelta() da classe datetime do Python para adicionar um determinado número de dias a uma data. O truque aqui é fornecer apenas o dia para o método timedelta(), obter o resultado e somá-lo com a data que já temos. Veja o código completo para o exemplo: import datetime # função principal do programa def main(): # dias a serem adicionados quant_dias = 2 # Obtém a data de hoje hoje = datetime.date.today() print("Hoje é:", hoje) # Adiciona dias à data dias = datetime.timedelta(days=quant_dias) hoje = hoje + dias # Exibe o resultado print("Daqui à", quant_dias, "dias será", hoje) if __name__== "__main__": main() Ao executarmos este código Python nós teremos o seguinte resultado: Hoje é: 2021-03-11 Daqui à 2 dias será 2021-03-13 |
PHP ::: Dicas & Truques ::: Arquivos e Diretórios |
Como criar diretórios usando PHP - Como usar a função mkdir() da linguagem PHP para criar diretórios - RevisadaQuantidade de visualizações: 25214 vezes |
Diretórios podem ser criados com a função mkdir() do PHP. Esta função recebe o nome do diretório a ser criado, um modo que define as permissões de acesso ao diretório e um valor boolean que define se os diretórios fornecidos no primeiro parâmetro serão criados recursivamente. O valor padrão para o modo de acesso é 0777 (todos têm permissão de leitura, escrita e execução) e false para a criação de diretórios recursivamente. Veja um trecho de código no qual criamos um diretório no diretório public_html: <? // nome do diretório $diretorio = "/site/public_html/minhas_imagens"; // cria o diretório com a permissão 0777 if(mkdir($diretorio)) echo "Diretório criado com sucesso."; else echo "Não foi possível criar o diretório."; ?> Antes de criar um diretório, é preciso que você verifique se o diretório dentro do qual o novo diretório será criado apresenta as permissões adequadas, do contrário você terá a seguinte mensagem de erro: Warning: mkdir() [function.mkdir]: Permission denied in /site/public_html/testes.php on line 8 Não foi possível criar o diretório. Veja agora como criar um diretório contendo dois sub-diretórios recursivamente: <? // cria o diretório imagens contendo o subdiretório "fotos" // e este conterá o sub-diretório // "recentes" $diretorio = "/site/public_html/imagens/fotos/recentes"; // cria o diretório com a permissão 0777 if(mkdir($diretorio, 0777, true)) echo "Diretório criado com sucesso."; else echo "Não foi possível criar o diretório."; ?> Esta dica foi revisada, atualizada e testada com o PHP 8. |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como concatenar strings em C usando a função strcat() - Aprenda a programar na linguagem CQuantidade de visualizações: 42397 vezes |
Concatenar strings é a operação de anexar uma string a outra. Em C, isso é feito com o auxílio da função strcat(), disponível no header string.h. Esta função recebe a string de destino, a string de origem, anexa a string de destino no final da string de origem e retorna um ponteiro para o resultado final. Veja um exemplo no qual usamos esta função para concatenar três strings:#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char frase1[100] = "Gosto"; strcat(frase1, " muito de "); strcat(frase1, " programar em C"); // exibe o resultado printf("%s\n\n", frase1); system("PAUSE"); return 0; } Veja que a string de destino deve ser declarada com um tamanho suficiente para acomodar as strings que serão anexadas a ela. Veja agora um exemplo que usa o ponteiro retornado pela função strcat() para inicializar um ponteiro do tipo char: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // declara e inicializa duas strings char frase1[100] = "Gosto muito de "; char frase2[15] = "programar em C"; char *res = strcat(frase1, frase2); // exibe o resultado printf("%s\n\n", res); system("PAUSE"); return 0; } |
Python ::: wxPython ::: Janelas, Diálogos, Formulários e Painéis do wxPython |
Como definir o ícone para uma janela wx.Frame do wxPythonQuantidade de visualizações: 7361 vezes |
Nesta dica mostrarei como usar a função SetIcon() da classe wx.TopLevelWindow para definir o ícone da janela de nossa aplicação wxPython. Observe que, se o ícone não for encontrado, uma mensagem de erro será exibida. Veja o código completo para o exemplo: # vamos importar a biblioteca Wx import wx # vamos criar uma classe que herda de wxFrame class MinhaJanela(wx.Frame): def __init__(self): # chamamos o construtor da super classe wx.Frame.__init__(self, None, -1, "Cadastro de Clientes", size=(350, 200)) # Define o ícone para a janela self.SetIcon(wx.Icon("icone.ico", wx.BITMAP_TYPE_ICO)) if __name__ == "__main__": app = wx.App() janela = MinhaJanela() janela.Show(True) app.MainLoop() |
MySQL ::: Dicas & Truques ::: Joins (Junções) |
Como usar joins no MySQLQuantidade de visualizações: 11238 vezes |
As junções (joins) são ferramentas presentes na maioria dos bancos de dados que suportam SQL e são usadas quando precisamos recuperar dados de uma ou mais tabelas com base em suas relações lógicas. Desta forma, é possível combinar os registros de tais tabelas de forma a construir um "super-registro", que nos permitirá exibir relatórios mais elaborados. Para o bom entendimento de junções, vamos considerar duas tabelas: filmes e generos. Aqui nós temos uma cardinalidade de 1 x N. Um filme possui um gênero, enquanto um gênero pode abranger vários filmes. Vamos começar criando estas duas tabelas (comece com a tabela generos, já que esta não depende da tabela de filmes): Comando DLL CREATE TABLE para a tabela generos: CREATE TABLE generos( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, nome VARCHAR(45) NOT NULL, PRIMARY KEY(id) ) ENGINE = InnoDB; Veja agora o comando SQL para a criação da tabela de filmes: Comando DLL CREATE TABLE para a tabela filmes: CREATE TABLE filmes( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, titulo VARCHAR(45) NOT NULL, genero INTEGER UNSIGNED NOT NULL, PRIMARY KEY(id), CONSTRAINT fk_filmes_generos FOREIGN KEY fk_filmes_generos(id) REFERENCES generos(id) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB; Veja que a tabela filmes contém uma chave estrangeira referenciando a chave primária da tabela generos. Isso nos permite "atrelar" um filme ao seu gênero. Vá em frente e insira alguns dados em ambas as tabelas. Primeiro cadastre alguns gêneros e em seguida alguns filmes. Vejamos agora a importância dos joins. Observe o resultado de um comando DML SELECT na tabela filmes: SELECT * FROM filmes; id titulo genero 1 EFEITO BORBOLETA 6 2 O PENTELHO 1 3 VIAGEM MALDITA 3 Nesta query o gênero é retornado como um valor inteiro, ou seja, o valor do campo id da tabela generos. Em muitos casos este não é o comportamento que queremos. Em vez do id do gênero nós gostaríamos de exibir seu nome. Isso pode ser conseguido da seguinte forma: SELECT filmes.id, filmes.titulo, generos.nome FROM filmes, generos WHERE filmes.genero = generos.id; id titulo genero 1 EFEITO BORBOLETA FICÇÃO 2 O PENTELHO COMÉDIA 3 VIAGEM MALDITA TERROR Nesta query eu usei o nome completo da tabela antes do nome dos campos a serem retornados. Na prática, é comum darmos apelidos às tabelas. Veja: SELECT f.id, f.titulo, g.nome FROM filmes f, generos g WHERE f.genero = g.id; Neste exemplo, não usamos as palavras-chaves INNER JOIN, LEFT JOIN, RIGHT JOIN, etc. A junção está "escondida" na cláusula SELECT. Esta técnica é conhecida como "junção implícita" ou "implicit join". Veja como o mesmo resultado pode ser obtido usando a junção INNER JOIN: SELECT f.id, f.titulo, g.nome FROM filmes f INNER JOIN generos g ON f.genero = g.id; Veja minhas outras dicas sobre junções para aprender mais sobre INNER JOIN, LEFT JOIN, RIGHT JOIN, OUTER JOIN, FULL JOIN, etc. |
Nossas 20 dicas & truques de programação mais populares |
Python - Como testar se um ponto está dentro de um círculo em Python - Desenvolvimento de Games com Python |
Você também poderá gostar das dicas e truques de programação abaixo |
JavaScript - JavaScript para iniciantes - Como converter uma string em um valor numérico usando o método Number() do JavaScript Delphi - Como obter e exibir todos os itens selecionados em uma TListBox do Delphi de seleção múltipla 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 |