C ::: Dicas & Truques ::: Recursão (Recursividade) |
Como somar os elementos de um vetor em C usando uma função recursiva - Linguagem C para iniciantesQuantidade de visualizações: 5453 vezes |
Em algumas ocasiões ficamos imaginando o que pode ser feito com os métodos e funções recursivas. A resposta é: praticamente tudo. Veja abaixo um programa C completo no qual eu mostro como escrever uma função recursiva que recebe um array e mostra a soma de seus elementos (lembre-se de que um array é o mesmo que vetor, ou seja, uma matriz de uma linha e várias colunas): #include <stdio.h> #include <stdlib.h> // função recursiva para somar todos os elementos de um array int somar(int indice, int tamanho, int vetor[]){ // o caso base...hora de encerrar a recursividade if(indice == (tamanho - 1)){ return vetor[indice]; } else{ // ainda não é o caso base? vamos fazer uma nova chamada à função somar() return vetor[indice] + somar(indice + 1, 10, vetor); } } // função principal do programa int main(int argc, char *argv[]){ // vamos declarar um array de 10 elementos int valores[10]; int i, soma; // vamos pedir ao usuário para informar os valores para o vetor for(i = 0; i < 10; i++){ printf("Informe o valor do elemento %d: ", i); scanf("%d", &valores[i]); } // vamos efetuar uma chamada à função recursiva somar(); // nota que estamos passando o índice inicial, o tamanho do // array e o array em si soma = somar(0, 10, valores); printf("\nA soma dos elementos è: %d", soma); printf("\n\n"); system("PAUSE"); return 0; } Ao executarmos este código C nós teremos o seguinte resultado: Informe o valor do elemento 0: 7 Informe o valor do elemento 1: 3 Informe o valor do elemento 2: 1 Informe o valor do elemento 3: 3 Informe o valor do elemento 4: 8 Informe o valor do elemento 5: 9 Informe o valor do elemento 6: 4 Informe o valor do elemento 7: 3 Informe o valor do elemento 8: 2 Informe o valor do elemento 9: 6 A soma dos elementos é: 46 |
Java ::: Projetos Java Completos - Códigos Fonte Completos Java ::: Jogos (Games) |
Como criar um Jogo da Velha em Java - Jogo completo com código fonte comentado - Versão consoleQuantidade de visualizações: 7222 vezes |
Faça o download do código-fonte Jogo da Velha em Java Sobre o Jogo da Velha em Java O Jogo da Velha, também conhecido como Tic-Tac-Toe, é um dos joguinhos mais fáceis de se programar em Java. Além disso, ele possibilita uma boa oportunidade de se entender matrizes, a estrutura switch, os laços for e while, assim como a estrutura básica presente em praticamente todos os games. O Jogo da Velha em Java Console Neste código fonte eu demonstro como o Jogo da Velha pode ser criado em Java usando o modo console, ou seja, em formato texto. Penso que o entendimento da lógica é mais fácil em modo console. Uma vez que você tenha aprendido todos os passos envolvidos, você poderá reproduzí-lo em modo gráfico sem muitas dificuldades. A versão do jogo apresentado nesta dica é um jogador humano, ou seja, você, contra o computador. Não coloquei inteligência artificial nem aprendizado de máquina nos movimentos do computador. Usei apenas jogadas sorteadas. Fica como desafio você implementar jogadas inteligentes por parte do computador como forma de deixar o jogo ainda mais interessante. Por enquanto o objetivo é só o aprendizado mesmo. Antes de continuarmos, veja uma imagem demonstrando o jogo: ![]() Me mostra um pouco do código Para mostrar a simplicidade do código, veja o método que registra a jogada do jogador humano: // este método registra a jogada do jogador humano private static void jogadaHumano(char[][] tabuleiro) { int jogada; // para registrar a jogada do jogador humano // repete até que a jogada seja válida while (true) { // lê a jogada do humano System.out.print("\nSua jogada (1 a 9): "); jogada = Integer.parseInt(entrada.nextLine()); // este movimento é válido? if (movimentoValido(tabuleiro, jogada)){ break; } else{ // não é válido System.out.println("O número " + jogada + " não é um movimento válido."); } } // vamos registrar esse movimento registrarMovimento(tabuleiro, jogada, 'X'); } Os links para você baixar todas as versões deste projeto estão abaixo: 1) JOGOVELHAJC - Jogo da Velha em Java Console - NetBeans IDE - Faça o Download. Não se esqueça: Uma boa forma de estudar o código é fazendo pequenas alterações e rodando para ver os resultados. Outra opção é começar um projeto Java do zero e ir adicionando trechos do código fonte para melhor entendimento de suas partes. |
C++ ::: Dicas & Truques ::: Arquivos e Diretórios |
Como excluir um diretório em C++ usando a função rmdir()Quantidade de visualizações: 8549 vezes |
Em algumas situações nossos códigos C++ precisam excluir diretórios. Isso pode ser feito com o auxílio da função _rmdir() ou rmdir(), disponível no header direct.h (trazido da linguagem C). Veja a assinatura desta função:int _rmdir(const char *pathname); a) ENOTEMPTY - Directory not empty - O diretório não está vazio e portanto não pode ser excluído; b) ENOENT - No such file or directory - O caminho do diretório é inválido; c) EACCESS - Acesso negado - Algum outro programa está usando este diretório e mantém controle sobre o mesmo. Veja um trecho de código C++ no qual excluímos um diretório: #include <iostream> #include <direct.h> using namespace std; int main(int argc, char *argv[]){ // vamos excluir este diretório char diretorio[] = "C:\\Dev-Cpp\\estudos"; // vamos testar se houve erro na exclusão do diretório if(rmdir(diretorio) == -1){ cout << "Erro: " << strerror(errno) << endl; } else{ cout << "Diretório excluído com sucesso" << endl; } system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } É possível usar a versão Unicode de _rmdir(), ou rmdir(). O método _wrmdir(), também presente em direct.h é útil quando precisamos internacionalizar nossas aplicações. Veja o exemplo: #include <iostream> #include <direct.h> using namespace std; int main(int argc, char *argv[]){ // vamos excluir este diretório wchar_t diretorio[] = L"C:\\Dev-Cpp\\estudos"; // vamos testar se houve erro na exclusão do diretório if(_wrmdir(diretorio) == -1){ cout << "Erro: " << strerror(errno) << endl; } else{ cout << "Diretório excluído com sucesso" << endl; } system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Laços de Repetição |
Exercício Resolvido de Java - Usando o laço do...while para pedir ao usuário para informar números inteiros e calcular a quantidade de números positivos, negativos, a soma e a médiaQuantidade de visualizações: 9626 vezes |
Pergunta/Tarefa: Escreva um programa Java que usa o laço do...while para ler números inteiros até que o valor lido seja igual a 0. Em seguida mostre a quantidade de valores positivos e negativos, a soma dos valores e a média aritmética (sem incluir o valor 0 na contagem e no cálculo da média). A média deverá ser exibida como um valor de ponto flutuante. Sua saída deverá ser parecida com a mostrada abaixo: Informe um número inteiro (0 para sair): 5 Informe um número inteiro (0 para sair): -4 Informe um número inteiro (0 para sair): 3 Informe um número inteiro (0 para sair): 8 Informe um número inteiro (0 para sair): -2 Informe um número inteiro (0 para sair): 0 Quantidade de números positivos: 3 Quantidade de números negativos: 2 A soma dos números lidos é: 10 A média aritmética é: 2.0 Veja a resolução comentada deste exercício usando Java console: package exercicios; import java.util.Scanner; public class Exercicios { public static void main(String[] args) { // vamos fazer a leitura usando a classe Scanner Scanner entrada = new Scanner(System.in); // declaração das variáveis int numero, quantLidos = 0, soma = 0; int quantPositivos = 0, quantNegativos = 0; // laço do...while que repetirá até que o usuário informe o valor 0 do { // lê o primeiro ou próximo número System.out.print("Informe um número inteiro (0 para sair): "); numero = Integer.parseInt(entrada.nextLine()); if(numero > 0){ // o número é positivo? quantPositivos++; } else if(numero < 0){ // o número é negativo? quantNegativos++; } // soma este número à soma já existente soma += numero; // aumenta a contagem dos números lidos if(numero != 0){ // não incluir o 0 para sair do programa na contagem quantLidos++; } } while(numero != 0); // condição de parada do laço if(quantLidos == 0){ System.out.println("Você não informou nenhum número."); } else{ System.out.println("Quantidade de números positivos: " + quantPositivos); System.out.println("Quantidade de números negativos: " + quantNegativos); System.out.println("A soma dos números lidos é: " + soma); System.out.println("A média aritmética é: " + ((soma * 1.0) / quantLidos)); // note a multiplicação de soma por 1.0 para gerar um valor de ponto flutuante // antes da divisão } } } |
Java ::: Dicas & Truques ::: Strings e Caracteres |
Como retornar a representação numérica de um caractere em Java fazendo um cast de char para intQuantidade de visualizações: 220 vezes |
Um cast forçado de char para int é uma das formas mais práticas para se obter a representação numérica de um caractere em Java. Tudo que precisamos fazer é usar o método charAt() da classe String para obtermos o caractere na posição desejada de um texto, frase ou palavra e, em seguida, convertê-lo (cast) para um int. Veja o código completo para o exemplo: package arquivodecodigos; // Este exemplo mostra como obter a representação // númerica de um caractere public class Estudos{ public static void main(String[] args){ String frase = "Programando em Java"; for(int i = 0; i < frase.length(); i++){ int valor = (int)frase.charAt(i); System.out.println(frase.charAt(i) + " = " + valor); } System.exit(0); } } Ao executar este código Java nós teremos o seguinte resultado: P = 80 r = 114 o = 111 g = 103 r = 114 a = 97 m = 109 a = 97 n = 110 d = 100 o = 111 = 32 e = 101 m = 109 = 32 J = 74 a = 97 v = 118 a = 97 |
JavaScript ::: Dicas & Truques ::: Formatação de datas, strings e números |
Como exibir apenas dois dígitos após o ponto decimal em JavaScript usando a função toFixed() do objeto NumberQuantidade de visualizações: 12731 vezes |
Nesta dica mostrarei como podemos usar a função toFixed() do objeto Number da linguagem JavaScript para convertermos um valor de ponto flutuante em uma string (em texto). Durante a conversão nós vamos especificar que queremos apenas dois dígitos depois do ponto decimal. Veja o código JavaScript completo para o exemplo: <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Estudos JavaScript</title> </head> <body> <script type="text/javascript"> // vamos obter o valor de // PI 3.141592653589793 var valor = Math.PI; document.write("PI: " + valor); // agora vamos converter o valor de PI para // string e arredondar para o número de // decimais desejados var res = valor.toFixed(2); document.write("<br>Resultado: " + res); </script> </body> </html> Ao executar este código JavaScript nós teremos o seguinte resultado: PI: 3.141592653589793 Resultado: 3.14 |
Java ::: Fundamentos da Linguagem ::: Passos Iniciais |
Aprenda a ler entrada do usuário usando a classe Scanner do Java - Como ler a entrada do usuário em Java usando um objeto da classe ScannerQuantidade de visualizações: 50370 vezes |
Podemos ler entrada do usuário em aplicações Java console usando a classe Scanner do JDK 5.0 e recentes. Esta classe está no pacote java.util. Para ler strings use o método nextLine(), para ler inteiros use nextInt() e assim por diante. Não é um boa idéia misturar nextLine() com nextInt(), nextFloat(), etc. Em caso de comportamento estranho, é melhor ler tudo usando nextLine() e fazer conversões usando Integer.parseInt(), por exemplo. Veja um código completo demonstrando o uso dessa classe: package arquivodecodigos; import java.util.*; public class Estudos{ public static void main(String[] args){ Scanner in = new Scanner(System.in); System.out.print("Qual é o seu nome? "); String nome = in.nextLine(); System.out.print("Qual sua idade? "); int idade = in.nextInt(); System.out.println("Olá, " + nome + ". Você tem " + idade + " anos."); } } Ao executar este código nós teremos o seguinte resultado: Qual é o seu nome? Osmar J. Silva Qual sua idade? 39 Olá, Osmar J. Silva. Você tem 39 anos. |
React Native ::: React Native - Componentes Visuais ::: Image |
Como exibir imagens e fotos em aplicações React Native usando o componente ImageQuantidade de visualizações: 1097 vezes |
O componente Image do React Native é usado quando queremos carregar imagens e exibí-las em nossas aplicações mobile. Este componente possibilita a exibição de diferentes tipos de imagens, incluindo imagens remotas (em um site, por exemplo), recursos estáticos, imagens em locais temporários e imagens a partir do armazenamento local, tais como imagens da câmera. Veja uma aplicação React Native completa que mostra como carregar uma imagem da internet e exibí-la em um componente Image. Note que a imagem a ser exibida é a logo do nosso site. Eis o código: import React, {Component} from 'react'; import {Image, View} from 'react-native'; type Props = {}; export default class App extends Component<Props> { render() { return ( <View style={{padding: 10, flexDirection: 'column'}}> <Image style={{width: 237, height: 49}} source={{uri: 'https://www.arquivodecodigos.com.br/logo2.jpg'}} /> </View> ); } } É importante observar que, quando a imagem estiver sendo carregada de uma rede (internet, por exemplo) ou via propriedade data, temos que, manualmente, indicar as dimensões da imagem a ser exibida. |
Delphi ::: Dicas & Truques ::: Ponteiros, Referências e Memória |
Como usar nil para testar ou indicar que um ponteiro Delphi não referencia nenhuma posição de memóriaQuantidade de visualizações: 15188 vezes |
O propósito dos ponteiros é nos permitir acessar e manipular os valores de outras variáveis. Isso é feito acessando-se diretamente o endereço de memória destas variáveis. Porém, há situações nas quais queremos testar se um determinado ponteiro está realmente apontando para um local na memória. Veja o seguinte trecho de código:procedure TForm1.Button1Click(Sender: TObject); var pvalor: ^integer; begin // vamos exibir o valor da variável referenciada pelo // ponteiro pvalor ShowMessage(IntToStr(pvalor^)); end; Ao executarmos este código nós teremos um valor aleatório sendo exibido (e um warning do tipo W1036 Variable 'pvalor' might not have been initialized. Isso acontece porque criamos um ponteiro para um Integer mas não indicamos o endereço da variável para a qual ele aponta, ou seja, até o momento este ponteiro é nulo (não aponta para nenhuma posição de memória). Mova a declaração do ponteiro para a seção interface e verá que código compilará mas teremos uma exceção do tipo EAccessViolation (Exception class EAccessViolation with message 'Access violation at address ... in module ...). Clássico erro de lógica. Estamos tentando acessar dados não existentes na memória. Esta situação pode ser evitada testando se o ponteiro ainda é nulo antes de tentarmos desreferenciá-lo. Veja: procedure TForm1.Button1Click(Sender: TObject); begin // vamos exibir o valor da variável referenciada pelo // ponteiro pvalor if pvalor = nil then ShowMessage('O ponteiro ainda é nulo.') else ShowMessage(IntToStr(pvalor^)); end; Note que movi a declaração do ponteiro para a secão interface, de forma a torná-la global. Isso evita que o ponteiro seja automaticamente inicializado (o que sempre acontece com as variáveis locais). Ao executar o código novamente você verá a mensagem indicando que o ponteiro ainda é nulo. Podemos também usar nil para, explicitamente, marcar um ponteiro como nulo, ou seja, definir que o ponteiro não aponta para nenhum local na memória. Comece declarando as variáveis abaixo na seção interface do formulário: valor: Integer; pvalor: ^Integer; Em seguida coloque o código abaixo no evento Click de um botão: procedure TForm1.Button1Click(Sender: TObject); begin // vamos atribuir um valor à variável valor valor := 14; // vamos "apontar" nosso ponteiro para o local de // memória da variável valor pvalor := @valor; // vamos exibir o valor da variável apontada por pvalor ShowMessage(IntToStr(pvalor^)); // vamos marcar pvalor como nulo pvalor := nil; // vamos causar um EAccessViolation já que pvalor // não aponta para nenhum local na memória agora ShowMessage(IntToStr(pvalor^)); end; Sempre que marcamos um ponteiro como nil, a memória até então ocupada por ele é liberada para uso por parte do sistema operacional ou demais programas. Este procedimento ajuda a evitar os vazamentos de memória (memory leak) tão frequentes em códigos que trabalham com memória alocada dinamicamente. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
C# ::: Windows Forms ::: CheckBox |
Como testar se uma CheckBox do C# Windows Forms está marcada ou desmarcadaQuantidade de visualizações: 22308 vezes |
Em algumas situações precisamos verificar se uma CheckBox do C# Windows Forms está marcada ou desmarcada. Para isso só precisamos acessar sua propriedade Checked. Esta propriedade retorna um valor true se a CheckBox estiver marcada e false em caso contrário. Veja o trecho de código abaixo (estou assumindo que você colocou um Button e uma CheckBox no seu formulário): private void button1_Click(object sender, EventArgs e){ // vamos verificar se a CheckBox está marcada ou desmarcada if(checkBox1.Checked) MessageBox.Show("A CheckBox está marcada"); else MessageBox.Show("A CheckBox está desmarcada"); } Se você quiser inverter o teste, ou seja, verificar primeiro se a CheckBox está desmarcada, poderá fazer algo assim: private void button1_Click(object sender, EventArgs e){ // vamos verificar se a CheckBox está marcada ou desmarcada if(!checkBox1.Checked) MessageBox.Show("A CheckBox está desmarcada"); else MessageBox.Show("A CheckBox está marcada"); } |
Nossas 20 dicas & truques de programação mais populares |
Dart - Como testar se um ponto está dentro de um círculo em Dart - Desenvolvimento de Games com Dart |
Você também poderá gostar das dicas e truques de programação abaixo |
Java - Como testar se um ponto está dentro de um círculo em Java - Desenvolvimento de Games com Java |
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 |