Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arquivos e Diretórios |
Exercícios Resolvidos de Java - Um programa que recebe um caminho e nome de um arquivo e retorna apenas o caminho, sem o nome e extensão do arquivoQuantidade de visualizações: 7618 vezes |
Pergunta/Tarefa: Escreva um método Java que recebe um caminho e nome de arquivo na forma: "C:\temporario\Java\dica.txt" e retorne apenas o caminho do arquivo, sem o nome e extensão do arquivo. Assim, para o caminho acima, o retorno deve ser apenas: "C:\temporario\Java" Eis a assinatura do método a ser criado: public static String getCaminho(String caminho); Resposta/Solução: Veja a resolução comentada deste exercício usando Java console: package estudos; import java.io.File; public class Main { public static void main(String[] args) { // define um caminho e nome de arquivo String caminho = "C:\\temporario\\Java\\dica.txt"; // vamos retornar apenas o caminho do arquivo, ou seja, retirar o // nome do arquivo String caminhoFinal = getCaminho(caminho); // vamos mostrar o resultado System.out.println("O caminho do arquivo é: " + caminhoFinal); } public static String getCaminho(String caminho){ // vamos obter o índice da última ocorrência do separador de caminho int pos = caminho.lastIndexOf(File.separatorChar); if (pos > -1) { return caminho.substring(0, pos); } // por padrão vamos retornar uma string vazia return ""; } } Uma variação deste exercício é a criação de um método que recebe o caminho e nome do arquivo e retorne apenas o nome do arquivo, seguido por sua extensão. |
Delphi ::: Win32 API (Windows API) ::: Processos |
Como usar o Delphi para verificar se um determinado processo do Windows está sendo executadoQuantidade de visualizações: 19821 vezes |
Em algumas situações precisamos verificar se um determinado processo está sendo executado, ou seja, gostaríamos de saber se o executável "programa.exe" está carregado na memória e efetuar alguma tarefa se o teste resultar satisfatório. Nesta dica eu mostro como isso pode ser feito. O primeiro passo é acrescentar a unit TlHelp32 na cláusula uses do seu formulário. Esta unit contém algumas funções, tipos e definições úteis para se trabalhar com processos acessando a API do Windows. Uma vez importada a unit TlHelp32, coloque a função abaixo na seção implementation de seu formulário: // função personalizada que permite verificar se um determinado // processo está sendo executado function isProcessRunning(exeFileName: string): Boolean; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); Result := False; while Integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then begin Result := True; end; ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end; Agora, para testar a função, coloque o código abaixo no evento Click de um botão: procedure TForm3.Button1Click(Sender: TObject); begin if isProcessRunning('notepad.exe') then ShowMessage('O processo está sendo executado') else ShowMessage('O processo NÃO está sendo executado'); end; Aqui nós estamos testando se o processo "notepad.exe" está sendo executado. Uma melhoria neste código seria listar todos os processos em execução ou listar as cópias em execução de um mesmo processo. |
Python ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercício Resolvido de Python - Como percorrer todos os elementos de um vetor de inteiros e exibir a soma de seus valoresQuantidade de visualizações: 929 vezes |
Pergunta/Tarefa: Considere o seguinte vetor de inteiros: // um vetor de inteiros contendo sete elementos valores = [4, 5, 1, 8, 2, 2, 10] A soma dos valores do vetor é: 32 Resposta/Solução: # método principal def main(): # um vetor de inteiros contendo sete elementos valores = [4, 5, 1, 8, 2, 2, 10] # o primeiro passo é criar uma variável que vai receber a soma # dos valores dos elementos soma = 0 # agora vamos usar uma laço for para percorrer todos os elementos # do vetor, obter o valor do elemento atual e adicionar ao valor atual # da variável soma for valor in valores: soma = soma + valor # vamos exibir a soma dos valores do vetor print("A soma dos valores do vetor é: {0}".format(soma)) if __name__== "__main__": main() |
Delphi ::: Classes, Controles e Componentes ::: TRegistry (Registro do Windows) |
Como verificar se uma chave já existe no registro do Windows usando a função KeyExists() da classe TRegistry do DelphiQuantidade de visualizações: 17129 vezes |
Em algumas situações nós gostaríamos de verificar se uma determinada chave já existe no registro do Windows, talvez antes de criá-la, excluí-la ou tentar ler algum de seus valores. O método KeyExists() da classe TRegistry pode ser usado para esta finalidade. Este método recebe uma string representando a chave a ser pesquisada e retorna um valor Boolean indicando a existência da chave. Veja o trecho de código abaixo: procedure TForm3.Button5Click(Sender: TObject); var reg: TRegistry; begin // uses Registry // vamos criar uma instância da classe TRegistry reg := TRegistry.Create; // a chave raiz padrão é HKEY_CURRENT_USER mas, por via das dúvidas // vamos reafirmar isso reg.RootKey := HKEY_CURRENT_USER; // vamos verificar a existência de uma chave a partir da chave raiz if reg.KeyExists('Arquivo de Códigos') then begin ShowMessage('A chave pesquisada existe.'); end else begin ShowMessage('A chave pesquisada não existe.'); end; // vamos liberar o registro reg.Free; end; Aqui nós estamos verificando a existência da chave "Arquivo de Códigos" a partir da chave raiz HKEY_CURRENT_USER. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Java ::: Projetos Java Completos - Códigos Fonte Completos Java ::: Jogos (Games) |
Como criar o jogo Pedra, Papel, Tesoura em Java - Jogo completo em Java com código comentadoQuantidade de visualizações: 6805 vezes |
Faça o download do código-fonte Pedra, Papel, Tesoura em Java Nesta dica mostrarei como criar o famoso joguinho Pedra, Papel, Tesoura na linguagem Java. Trata-se de um código bem simples e que vou comentar linha a linha, para que você extraia todo o conteúdo necessário para deixar a sua lógica de programação ainda mais afiada. Nesta versão eu mostrarei como jogar Pedra, Papel, Tesoura contra o computador. Depois de entender todo o código você não terá dificuldade para implementar uma versão que lhe permitirá jogar contra seus amigos. Antes de vermos o código, eis uma imagem do jogo em execução: ![]() Quais técnicas de programação vou aprender com o código desse jogo? O joguinho Pedra, Papel, Tesoura é ótimo para estudantes de programação que está iniciando em Java e que gostariam de aprimorar sua lógica de programação, afinal, se você desenvolver uma boa lógica de programação, você conseguirá desenvolver soluções em qualquer linguagem. Além de entender como funciona o desenvolvimento de jogos em Java, você reforçará o seu conhecimento de laços, estrutura condicional if...else, entrada e saída e fluxo e desvio do algorítmo. Veja, por exemplo, um trecho de código no qual testamos se o jogador escolheu Pedra, Papel ou Tesoura, e também a escolha feita pelo computador: // o jogador escolheu Pedra? else if(jogador == 1){ // o computador escolheu Papel? if(computador == 2){ System.out.println("Você perdeu. Papel embrulha Pedra"); vitoriasComputador++; // aumenta as vitórias do computador } else{ // o computador escolheu Tesoura System.out.println("Você ganhou. Pedra amassa Tesoura"); vitoriasJogador++; // aumenta as vitórias do jogador } } // o jogador escolheu Papel? else if(jogador == 2){ // o computador escolheu Tesoura? if(computador == 3){ System.out.println("Você perdeu. Tesoura corta Papel"); vitoriasComputador++; // aumenta as vitórias do computador } else{ // o ocmputador escolheu Pedra System.out.println("Você ganhou. Papel embrulha Pedra"); vitoriasJogador++; // aumenta as vitórias do jogador } } Os links para você baixar todas as versões deste projeto estão abaixo: 1) PEDPAPTESJC - Jogo Pedra, Papel, Tesoura em Java Console - NetBeans IDE - Faça o download do código-fonte Pedra, Papel, Tesoura em Java. 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. |
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: 444 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. |
Ruby ::: Dicas & Truques ::: Strings e Caracteres |
Como retornar o tamanho de uma string em Ruby usando a função sizeQuantidade de visualizações: 8437 vezes |
Em várias situações nós precisamos obter e retornar a quantidade de caracteres em uma palavra, frase ou texto em Ruby. Para isso nós podemos usar a função size, que retorna um inteiro contendo a quantidade de caracteres na string. Veja um exemplo de seu uso: # vamos declarar uma string frase = "Gosto de PHP" # vamos mostrar a string puts "A frase é: " + frase # vamos obter a quantidade de caracteres # na string tamanho = frase.size # exibe o resultado puts "A frase contém " + tamanho.to_s + " caracteres" Ao executar este código Ruby nós teremos o seguinte resultado: A frase é: Gosto de PHP A frase contém 12 caracteres |
Java ::: Fundamentos da Linguagem ::: Estruturas de Controle |
Java para iniciantes - Como usar o laço do-while da linguagem JavaQuantidade de visualizações: 52975 vezes |
O laço do-while é uma variação do laço while. A diferença é que, no laço do-while a condição de continuidade é testada após a execução do bloco de códigos desejado. Isso nos faz crer que este laço é executado no mínimo uma vez. Veja sua sintáxe:do{ // bloco de instruções }while(condição); Se a condição testada for verdadeira, o laço continua sua execução. Do contrário a execução do programa segue a partir do ponto onde o laço se encontra. Veja um exemplo: import javax.swing.JOptionPane; public class Estudos{ public static void main(String[] args) { int valor; int soma = 0; // Lê continuamente até o usuário informar 0 do{ // efetua a próxima leitura String str = JOptionPane.showInputDialog(null, "Informe um valor inteiro:\n(ou 0 para sair)", "Estudos", JOptionPane.QUESTION_MESSAGE); valor = Integer.parseInt(str); soma += valor; }while(valor != 0); JOptionPane.showMessageDialog(null, "A soma é: " + soma, "Estudos", JOptionPane.INFORMATION_MESSAGE); } } Use o laço do-while quando você tiver instruções dentro do laço que precisem ser executadas no mínimo uma vez. |
Python ::: Dicas & Truques ::: Data e Hora |
Datas e horas em Python - Como obter a hora como um decimal no intervalo 00-12 (formato 12 horas)Quantidade de visualizações: 7538 vezes |
Este exemplo mostra como obter a hora como um decimal no intervalo 00-12 (formato 12 horas) usando o método strftime() da classe datetime com o sinalizador "%I". Veja o código completo para a dica: from datetime import datetime def main(): # Obtém um datetime da data e hora atual hoje = datetime.today() # Exibe a hora atual como um decimal print(hoje.strftime("A hora é: %I")) if __name__== "__main__": main() Ao executar este código Python nós teremos o seguinte resultado: A hora é: 10 |
Portugol ::: Desafios e Lista de Exercícios Resolvidos ::: Portugol Básico |
Exercícios Resolvidos de Portugol - Como calcular salário líquido em Portugol - Calculando o salário líquido de um professorQuantidade de visualizações: 1595 vezes |
Pergunta/Tarefa: Escreva um algoritmo Portugol ou VisuAlg que calcule o salário líquido de um professor. Seu programa deverá solicitar que o usuário informe o valor da hora aula (como real), o número de horas trabalhadas no mês (como inteiro) e o percentual de desconto do INSS (como real). Em seguida mostre o salário líquido. Sua saída deverá ser parecida com: Informe o valor da hora aula: 28 Informe o número de horas trabalhadas no mês: 12 Informe o percentual de desconto do INSS: 8 Salário Bruto: R$ 336,00 Total de Descontos: R$ 26,88 Salário Líquido: R$ 309,12 Veja a resolução comentada deste exercício usando Portugol (na versão Portugol Webstudio): // Cálculo de Salário Bruto e Líquido em Portugol programa { funcao inicio() { // variáveis usadas para resolver o problema real valor_hora_aula inteiro horas_trabalhadas real percentual_desconto_inss real salario_bruto real salario_liquido real total_desconto // vamos ler o valor do hora aula escreva("Informe o valor da hora aula: ") leia(valor_hora_aula) // vamos ler o número de horas trabalhadas no mês escreva("Informe o número de horas trabalhadas no mês: ") leia(horas_trabalhadas) // vamos ler o percentual de desconto do INSS escreva("Informe o percentual de desconto do INSS: ") leia(percentual_desconto_inss) // vamos calcular o salário bruto salario_bruto = valor_hora_aula * horas_trabalhadas // agora calculamos o total do desconto total_desconto = (percentual_desconto_inss / 100) * salario_bruto // finalmente calculamos o salário líquido salario_liquido = salario_bruto - total_desconto // mostramos o resultado escreva("\nSalário Bruto: R$ ", salario_bruto) escreva("\nTotal de Descontos: R$ ", total_desconto) escreva("\nSalário Líquido: R$ ", salario_liquido) } } |
Nossas 20 dicas & truques de programação mais populares |
Você também poderá gostar das dicas e truques de programação abaixo |
AutoCAD VBA - Como criar uma linha no AutoCAD usando Autocad VBA e a função AddLine() do objeto ModelSpace C - Como calcular a transposta de uma matriz em C - Curso de C para Geometria Analítica e Álgebra Linear Java - Como definir a cor para o contexto de desenho usando o método setColor() da classe Graphics do 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 |