Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico |
Exercícios Resolvidos de Java - Um programa que lê três números e os classifica e exibe em ordem crescenteQuantidade de visualizações: 6896 vezes |
Pergunta/Tarefa: Escreva um programa Java que pede ao usuário três números inteiros. Em seguida, ordene os três valores em ordem crescente e os exiba. Sua saída deverá ser parecida com: Informe o primeiro valor: 7 Informe o segundo valor: 4 Informe o terceiro valor: 6 Os números ordenados em ordem crescente são: 4 6 7 Veja a resolução comentada deste exercício usando Java console: package estudos; import java.util.Scanner; public class Estudos { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); // vamos pedir que o usuário informe três números inteiros System.out.print("Informe o primeiro valor: "); int num1 = Integer.parseInt(entrada.nextLine()); System.out.print("Informe o segundo valor: "); int num2 = Integer.parseInt(entrada.nextLine()); System.out.print("Informe o terceiro valor: "); int num3 = Integer.parseInt(entrada.nextLine()); // o primeiro número é maior que o segundo? vamos trocá-los if(num1 > num2){ int temp = num1; num1 = num2; num2 = temp; } // o segundo número é maior que o terceiro? vamos trocá-los if(num2 > num3){ int temp = num2; num2 = num3; num3 = temp; } // depois da segunda troca o número 1 é novamente maior que o número 2? if(num1 > num2){ int temp = num1; num1 = num2; num2 = temp; } // mostra o resultado System.out.println("Os números ordenados em ordem crescente são: "); System.out.println(num1 + " " + num2 + " " + num3); System.out.println("\n"); } } |
Java ::: Java para Engenharia ::: Geometria Analítica e Álgebra Linear |
Como calcular o produto escalar entre dois vetores usando Java - Geometria Analítica e Álgebra Linear usando JavaQuantidade de visualizações: 3457 vezes |
O produto escalar (em inglês: dot product) entre dois vetores é um número real que relaciona o comprimento desses dois vetores e o ângulo formado por eles. É importante notar que alguns autores se referem ao produto escalar como produto interno. Obtém-se o produto escalar entre dois vetores, no R2, ou três vetores, no R3, por meio da fórmula a seguir (assumindo dois vetores __$\vec{u} = (a, b)__$ e __$\vec{v} = (c, d)__$ no R2). \[\vec{u} \cdot \vec{v} = a \cdot c + b \cdot d \] Vamos agora a um exemplo prático. Veja a imagem abaixo, na qual temos dois vetores, com suas coordenadas e magnitudes (módulo, comprimento ou norma): ![]() Note que ambos os vetores possuem como origem as coordenadas (0, 0). O primeiro vetor possui as coordenadas finais (4, 10) e magnitude 11, e o segundo vetor possui as coordenadas finais (11, 6) e magnitude 13. Magnitude é o tamanho do vetor, ou seja, seu comprimento, seu módulo ou norma. Veja agora o código Java completo que lê as coordenadas dos dois vetores e calcula e mostra o produto escalar entre eles: package arquivodecodigos; import java.util.Scanner; public class Estudos{ public static void main(String[] args){ Scanner entrada = new Scanner(System.in); // x e y do primeiro vetor System.out.print("Coordenada x do primeiro vetor: "); float x1 = Float.parseFloat(entrada.nextLine()); System.out.print("Coordenada y do primeiro vetor: "); float y1 = Float.parseFloat(entrada.nextLine()); // x e y do segundo ponto System.out.print("Coordenada x do segundo vetor: "); float x2 = Float.parseFloat(entrada.nextLine()); System.out.print("Coordenada y do segundo vetor: "); float y2 = Float.parseFloat(entrada.nextLine()); // vamos calcular o produto escalar float pEscalar = (x1 * x2) + (y1 * y2); // mostramos o resultado System.out.println("O produto escalar é: " + pEscalar); } } Ao executar este código Java nós teremos o seguinte resultado: Coordenada x do primeiro vetor: 4 Coordenada y do primeiro vetor: 10 Coordenada x do segundo vetor: 11 Coordenada y do segundo vetor: 6 O produto escalar é: 104.0 |
PHP ::: Dicas & Truques ::: Gráficos e Cores |
Como obter o tipo de uma imagem usando a função getimagesize() do PHPQuantidade de visualizações: 10262 vezes |
Muitas vezes precisamos saber o tipo de uma imagem antes de processá-la. Nestes casos podemos usar a função getimagesize() da linguagem PHP e obter o tipo da imagem no terceiro valor retornado. Este valor é um número inteiro correspondente a algumas das constantes IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG, etc. Veja um exemplo: <?php // nome e local da imagem $imagem = "/home/xxxx/xxxx/public_html/imagem.jpg"; // vamos obter o tipo da imagem...ele estará no terceiro // elemento da lista list($largura, $altura, $tipo) = getimagesize($imagem); // testamos o tipo de imagem if($tipo == IMAGETYPE_JPEG) echo "O tipo da imagem é JPG ou JPEG"; else if($tipo == IMAGETYPE_GIF) echo "O tipo da imagem é GIF"; else if($tipo == IMAGETYPE_PNG) echo "O tipo da imagem é PNG"; else echo "O tipo da imagem não está entre os tipos testados"; ?> Ao executar este código você terá um resultado parecido com: O tipo da imagem é JPG ou JPEG |
C# ::: Coleções (Collections) ::: ArrayList |
Como criar um ArrayList de inteiros no C# e percorrer os elementos usando o laço foreachQuantidade de visualizações: 12932 vezes |
Nesta dica mostrarei um código C# direcionado aos programadores que querem aprender a usar a classe ArrayList em seus programas. Trata-se da criação de uma ArrayList de números inteiros. Depois de criada a lista nós vamos adicionar alguns elementos e depois vamos usar o laço foreach para exibir os valores adicionados. Veja o código completo: using System; using System.Collections; namespace Estudos { class Principal { static void Main(string[] args) { // Cria o ArrayList ArrayList lista = new ArrayList(); // Adiciona 5 inteiros lista.Add(30); lista.Add(2); lista.Add(98); lista.Add(1); lista.Add(7); // Percorre os elementos da ArrayList Console.WriteLine("Os elementos no ArrayList são:\n"); foreach (int valor in lista) { Console.Write("{0} ", valor); } Console.WriteLine("\nPressione uma tecla para sair..."); Console.ReadKey(); } } } Ao executar este código C# nós teremos o seguinte resultado: Os elementos no ArrayList são: 30 2 98 1 7 |
Java ::: Dicas & Truques ::: Threads |
Threads em Java - Como usar a interface Runnable da Java API em suas aplicaçõesQuantidade de visualizações: 17896 vezes |
A interface pública Runnable deve ser implementada em nossas classes quando queremos que instâncias destas possam ser executadas por uma thread. Esta interface está no pacote java.lang e entre as classes que a implementam podemos citar AsyncBoxView.ChildState, FutureTask, RenderableImageProducer, Thread e TimerTask. Esta interface apresenta apenas um método, a saber: public void run(); Este interface foi idealizada para fornecer um protocolo comum para objetos que têm como objetivo executar determinadas porções de código enquanto ativos. Por exemplo, Runnable é implementada pela classe Thread. Estar ativa significa que uma thread foi iniciada e ainda não finalizou sua tarefa. Além disso, a interface Runnable fornece meios para que uma classe esteja ativa sem fazer sub-classe de Thread. Uma classe que implementa Runnable pode ser executada sem fazer sub-classe de Thread criando-se uma instância de Thread e fornecendo tal classe como alvo. Na maioria dos casos, a interface Runnable deve ser usada se estivermos planejando apenas sobrescrever o método run() e nenhum outro método da classe Thread. Isso é importante, uma vez que não devemos extender classes a menos que tenhamos a intenção de modificar ou extender o comportamento fundamental da classe. Veja uma aplicação na qual temos uma classe que implementa Runnable. Note como criamos instâncias de Thread e fornecemos nossa classe como alvo: // criamos uma classe que servirá como thread class MinhaThread implements Runnable{ private String nome; public MinhaThread(String nome){ this.nome = nome; } public void run(){ for(int i = 1; i <= 20; i++){ System.out.println(nome + ": " + i); } } } public class Estudos{ public static void main(String[] args){ // vamos criar duas threads MinhaThread mt1 = new MinhaThread("Thread 1"); Thread t1 = new Thread(mt1); t1.start(); MinhaThread mt2 = new MinhaThread("Thread 2"); Thread t2 = new Thread(mt2); t2.start(); System.exit(0); } } |
QGIS ::: PyQGIS API ::: Aplicações com código fonte completo |
Como listar os 5 municípios goianos com maior área em uma camada do QGIS usando PyQGIS - Código Python completoQuantidade de visualizações: 439 vezes |
Este código completo mostra uma aplicação QGIS na qual usei PyQGIS para resolver um desafio muito interessante, e complexo. Acredito que servirá de base para muitos códigos interessantes envolvendo QGIS, Python e PyQGIS. Comecei fazendo o download do shapefile do Estado de Goiás, contendo seus 246 municípios no site do IBGE. Em seguida carreguei o shapefile no QGIS usando um objeto QgsVectorLayer. Note que criei uma classe Municipio para guardar cada um dos municípios encontrados no shapefile. E, para agrupar os objetos da classe Municipio eu criei uma lista chamada municipios. Para acessar cada um dos municipios, ou seja, cada uma das 246 feições da camada, eu usei a função getFeatures() da classe QgsVectorLayer. Então, ao percorrer cada uma dessas feições, eu obtive seus atributos, por meio da função attributes(), e os usei para criar os objetos da classe Municipio. Uma vez obtida a lista de municípios, o passo seguinte foi classificar a lista por ordem crescente de área (a área dos municípios). Um laço for me permitiu listar apenas os 5 municípios com maiores áreas e, além de registrar o somatório de seus áreas, obter os seus códigos para selecioná-los na camada, usando a função selectByExpression(). O desafio final foi mostrar as labels, ou seja, os rótulos de cada um dos municípios no mapa do QGIS, porém, eu queria mostrar os rótulos apenas dos 5 municípios com as maiores áreas. Para resolver o desafio, lancei mão da função setFilterExpression(). Veja o código completo para o exemplo: # uma classe para guardar cada um dos municípios # do Estado de Goiás class Municipio: # método construtor def __init__(self, codigo, nome, estado, area): self.codigo = codigo self.nome = nome self.estado = estado self.area = area # para guardar os municípios municipios = [] # vamos criar um novo objeto QgsVectorLayer com o local # do nosso shapefile camada = QgsVectorLayer("C:\\GOIAS\\GO_Municipios_2022.shp", "Municípios do Estado de Goiás", "ogr") # vamos testar se a camada é válida if not camada.isValid(): print("Não foi possível carregar a camada %s" % camada.name()) else: # vamos percorrer todas as feições da camada # e obter os seus atributos feicoes = camada.getFeatures() for f in feicoes: # vamos obter os atributos desta feição atributos = f.attributes() # e criamos um novo objeto da classe Municipio municipio = Municipio(atributos[0], atributos[1], atributos[2], atributos[3]) # adicionamos este município na lista municipios.append(municipio) # agora vamos ordenar a lista por área da maior para # a menor municipios = sorted(municipios, key=lambda municipio:municipio.area, reverse=True) # vamos adicionar a camada à relação de camadas QgsProject.instance().addMapLayer(camada) # vamos calcular a área ocupada pelos 5 maiores municípios # do Estado de Goiás area_5_maiores = 0 for i in range(5): area_5_maiores = area_5_maiores + municipios[i].area # agora vamos selecionar os 5 maiores municípios na # camada do QGIS codigos = "" for i in range(5): codigos = codigos + municipios[i].codigo + ", " codigos = codigos[0:len(codigos) - 2] camada.selectByExpression('"CD_MUN" IN (' + codigos + ')') # e mostramos os resultados print("Os 5 maiores municípios do Estado de Goiás são:\n") for i in range(5): print("{0}) {1} - Área: {2} km2".format(i + 1, municipios[i].nome, municipios[i].area)) print("\nÁrea ocupada pelos 5 maiores municípios: {0} km2".format( area_5_maiores)) # finalmente vamos exibir os nomes dos municípios. Essa foi # a parte mais desafiadora do código, pois eu queria mostrar # somente os rótulos dos cinco maiores municípios settings = QgsPalLayerSettings() settings.isExpression = True settings.placement = QgsPalLayerSettings.Line settings.placement = QgsPalLayerSettings.Horizontal # mostra o nome do município settings.fieldName = "NM_MUN" format = QgsTextFormat() format.setColor(QColor('Black')) settings.setFormat(format) settings.enabled = True # cria e adiciona uma nova regra root = QgsRuleBasedLabeling.Rule(QgsPalLayerSettings()) rule = QgsRuleBasedLabeling.Rule(settings) rule.setDescription("5 Maiores Municípios do Estado de Goiás") # define o campo que será usado no filtro. Note que somente # serão listados os rótulos dos municípios com área maior ou # igual ao quinto elemento da lista municípios campo_area = "AREA_KM2" rule.setFilterExpression(f"\"{campo_area}\" >= {municipios[4].area}") root.appendChild(rule) # define as configurações do rótulo camada.setLabelsEnabled(True) rules = QgsRuleBasedLabeling(root) camada.setLabeling(rules) # redesenha a camada no canvas do QGIS camada.triggerRepaint() Ao executar este código QGIS, Python e PyQGIS nós teremos o seguinte resultado: Os 5 maiores municípios do Estado de Goiás são: 1) Niquelândia - Área: 9846.293 km2 2) Mineiros - Área: 9042.844 km2 3) Caiapônia - Área: 8627.961 km2 4) Rio Verde - Área: 8374.255 km2 5) Nova Crixás - Área: 7308.681 km2 Área ocupada pelos 5 maiores municípios: 43200.03399999999 km2 Para fins de compatibilidade este código foi escrito e testado no QGIS 3.34.5-Prizren. |
HTML5 ::: Referência Tags/Elementos HTML5 ::: Tag/Elemento <Video> |
Como usar a tag/elemento <video> do HTML5 em suas aplicações webQuantidade de visualizações: 1750 vezes |
A tag/elemento <video> do HTML5 é usada quando queremos incorporar um vídeo em nossos documentos HTML sem incluir plugs adicionais, tais como o Flash Player. Contudo, o suporte a este elemento pode variar de navegador para navegador (faça testes com seus navegadores alvos antes). Em geral, navegadores que dão suporte ao elemento <video> suportam os seguintes formatos de vídeo: MP4, Ogg e WebM. Veja um documento HTML que carrega um vídeo MP4: <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Como usar a tag video do HTML5</title> </head> <body> <video controls="controls" src="filme.mp4"> Seu browser não dá suporte ao elemento video do HTML5. </video> </body> </html> Quando você abrir esta página HTML, você verá um vídeo na tela já com os controles para iniciar, pausar, e parar a execução (contanto que você tenha informado um endereço válido para o vídeo). Note que não especificamos o tamanho do vídeo na página, o que fará com que o elemento <video> tenha as dimensões do vídeo que foi carregado. |
C# ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercícios Resolvidos de C# - Como verificar quantas vezes um valor é encontrado em um vetor - Como usar vetores e matrizes em C#Quantidade de visualizações: 406 vezes |
Pergunta/Tarefa: Escreva um programa C# que declara, constrói e inicializa um vetor de 10 inteiros. Em seguida peça para que o usuário informe um valor a ser pesquisado. Faça uma varredura no vetor e informe quantas vezes o valor pesquisado é encontrado: // declara, constrói e inicializa um vetor de 10 inteiros int[] valores = {4, 21, 9, 8, 12, 21, 4, 4, 1, 10}; Informe um valor: 4 O valor foi encontrado: 3 vezes Informe um valor: 8 O valor foi encontrado: 1 vezes Informe um valor: 3 O valor foi encontrado: 0 vezes Veja a resolução comentada deste exercício usando C#: using System; namespace Estudos { class Principal { // função principal do programa C# static void Main(string[] args) { // declara, constrói e inicializa um vetor de 10 inteiros int[] valores = { 4, 21, 9, 8, 12, 21, 4, 4, 1, 10 }; // vamos ler um valor inteiro Console.Write("Informe um valor: "); int pesquisa = Int32.Parse(Console.ReadLine()); // vamos verificar quantas vezes o valor informado está // contido no vetor int repeticoes = 0; for (int i = 0; i < valores.Length; i++) { if (valores[i] == pesquisa) { repeticoes++; // encontrou? vamos contar esta ocorrência } } // vamos mostrar o resultado Console.WriteLine("O valor foi encontrado: " + repeticoes + " vezes"); Console.WriteLine("\n\nPressione uma tecla para sair..."); Console.ReadKey(); } } } |
C# ::: Dicas & Truques ::: Arquivos e Diretórios |
Como retornar a data e hora da criação de um diretório em C# usando a função GetCreationTime() da classe DirectoryQuantidade de visualizações: 115 vezes |
Nesta dica mostrarei como usar o método GetCreationTime() da classe Directory do C# para obter e retornar a data e hora da criação de um diretório. Note que o retorno de uma chamada a este método é um objeto da classe DateTime. Veja o código completo para o exemplo: using System; using System.IO; namespace Estudos { class Principal { static void Main(string[] args) { // caminho e nome do diretíro string diretorio = @"C:\estudos_csharp\imagens"; DateTime data = Directory.GetCreationTime(diretorio); Console.WriteLine("Diretório criado em: {0}", data); Console.WriteLine("\nPressione uma tecla para sair..."); Console.ReadKey(); } } } Ao executar este código C# nós teremos o seguinte resultado: Diretório criado em: 17/07/2022 22:09:12 |
Java ::: Dicas & Truques ::: MIDI Musical Instrument Digital Interface, Mapeamento e sequenciamento MIDI, Entrada e saída MIDI |
Java para músicos - Como escrever um MIDI Player em Java (código bem simples e fácil de entender)Quantidade de visualizações: 13970 vezes |
Nesta dica apresento uma aplicação completa para um MIDI Player em Java. Trata-se de uma aplicação console que você pode estudar e implementar a mesma idéia em Java Swing ou JavaFX. Para executar o código abaixo, você só precisa definir o caminho e nome de um arquivo MIDI (extensão .mid). Veja o código completo e divirta-se: package arquivodecodigos; import javax.sound.midi.*; import java.io.*; public class Estudos{ public static void main(String args[]) { // nome do arquivo MIDI String arquivo = "amazing_grace.mid"; if(!arquivo.endsWith(".mid")) { System.out.println("Este não parece ser um arquivo MIDI válido."); System.exit(1); } File midiFile = new File(arquivo); if(!midiFile.exists() || midiFile.isDirectory() || !midiFile.canRead()) { System.out.println("Não foi possível acessar o arquivo indicado."); System.exit(1); } try{ Sequencer seq = MidiSystem.getSequencer(); seq.setSequence(MidiSystem.getSequence(midiFile)); seq.open(); seq.start(); while(true){ if(seq.isRunning()){ try{ Thread.sleep(1000); } catch(InterruptedException ignore){ break; } } else{ break; } } seq.stop(); seq.close(); } catch(MidiUnavailableException mue){ System.out.println("Dispositivo de MIDI indisponível"); } catch(InvalidMidiDataException imde){ System.out.println("Dados MIDI Inválidos"); } catch(IOException ioe){ System.out.println("Erro de I/O"); } } } |
Nossas 20 dicas & truques de programação mais populares |
C++ - Como criar uma classe C++ completa, incluindo os arquivos de definição .h e implementação .cpp |
Você também poderá gostar das dicas e truques de programação abaixo |
AutoCAD Civil 3D .NET C# - Como retornar a quantidade de estacas de um alinhamento do Civil 3D usando a função GetStationSet() da classe Alignment da AutoCAD Civil 3D .NET API CSS - Como definir uma imagem de fundo para a página HTML em CSS usando a propriedade background-image JavaScript - Como calcular o coeficiente angular de uma reta em JavaScript dados dois pontos no plano cartesiano |
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 |