Você está aqui: Teste de Conhecimento em Python |
|
![]() |
Java ::: Fundamentos da Linguagem ::: Modificadores |
Como usar o modificador synchronized da linguagem JavaQuantidade de visualizações: 23743 vezes |
O modificador synchronized tem seu uso e importância destacados quando várias threads (fluxos de execução) estão sendo executadas em um programa. Tais threads podem tentar acessar métodos de uma ou mais classes ao mesmo tempo. No entanto, pode ser necessário planejarmos o sistema de forma que determinados métodos possam ser acessados por somente uma thread de cada vez, talvez para garantir a integridade de valores das diversas variáveis envolvidas no processo. É aqui que o modificador synchronized é usado. Ao marcarmos um método como synchronized, o sistema de execução Java garantirá que apenas uma thread de cada vez acesse tal método. Se outras threads tentarem fazer o mesmo, elas serão colocadas em espera até que a thread atual finalize seu trabalho e libere o método. Um exemplo de aplicação do modificador synchronized pode ser visto em uma classe Pilha. Como sabemos, esta estrutura de dados possui métodos para inserir um novo item no topo da pilha e para removê-lo do topo (lembra? LIFO: Last In First Out). Ora, para evitar que uma thread remova o elemento do topo ao mesmo tempo em que outra está tentando inserir, tais métodos devem ser marcados como synchronized. Isso evitará que os dados sejam corrompidos. |
JavaScript ::: Dicas & Truques ::: Strings e Caracteres |
Como remover os espaços no final de uma string em JavaScript usando uma função trim_final() personalizadaQuantidade de visualizações: 3 vezes |
Há muitos anos eu precisava remover espaços no final de uma string em JavaScript e percebi que o objeto String, na época, não oferecia a função trim(). Não me restou opção a não ser sentar e escrever o código na mão mesmo. Hoje em dia não precisamos mais dele, mas fica aí para que você entenda a lógica empregada na resolução do problema. Veja a página HTML completa com o exemplo: <!doctype html> <html> <head> <title>Strings em JavaScript</title> </head> <body> <script type="text/javascript"> // função personalizada que remove os espaços // no final de uma string function trim_final(string){ // primeiro definimos o código do espaço var espaco = String.fromCharCode(32); // obtemos o tamanho da string var tamanho = string.length; // e criamos uma string temporária var temp = ""; // a string está vazia? if(tamanho < 0){ return ""; } // uma variável temporária para percorrermos // a string de trás para frente var temp2 = tamanho - 1; while(temp2 > -1){ if(string.charAt(temp2) == espaco){ // não faz nada } else{ temp = string.substring(0, temp2 + 1); break; } // decrementamos a variável temp2 temp2--; } return temp; } // vamos testar a função trim_final() var frase = "Gosto muito de JavaScript "; document.write("Com espaços no final: " + frase + "#" + "<br>"); // vamos remover os espaços no final da string frase = trim_final(frase); document.write("Sem espaços no final: " + frase + "#" + "<br>"); </script> </body> </html> Ao executar este código JavaScript nós teremos o seguinte resultado: Com espaços no final: Gosto muito de JavaScript # Sem espaços no final: Gosto muito de JavaScript# |
Delphi ::: Dicas & Truques ::: Imagens e Processamento de Imagens |
Como carregar uma imagem JPG, convertê-la em Bitmap e desenhá-la no formulário usando DelphiQuantidade de visualizações: 18207 vezes |
Em algumas situações nós precisamos carregar uma imagem JPG, convertê-la em Bitmap e desenhá-la em nosso formulário. Nesta dica eu mostro como isso pode ser feito. Vamos começar lendo a imagem JPG a partir do diretório da aplicação:procedure TForm3.Button1Click(Sender: TObject); var bmp: TBitmap; jpg: TJPEGImage; begin // uses Jpeg; // não esqueça // vamos criar o bitmap bmp := TBitmap.Create; // vamos criar o JPG jpg := TJPEGImage.Create; try // vamos carregar a imagem JPG jpg.LoadFromFile('foto.jpg'); // vamos convertê-la para Bitmap bmp.Assign(jpg); // vamos desenhar o bitmap no formulário // começando nas coordenadas x = 0; y = 0 a partir // do canto superior esquerdo da área cliente do formulário Form3.Canvas.Draw(0, 0, bmp); finally Jpg.Free; Bmp.Free; end; end; Veja que a técnica consiste em carregar a imagem JPG e convertê-la em Bitmap usando o método Assign() da classe TBitmap. Em seguida só precisamos usar o método Draw() do Canvas do formulário para desenhar a imagem já convertida. Caso você precise carregar a imagem JPG em tempo de execução, basta colocar um TOpenPictureDialog no formulário e alterar o código do evento Click do botão para: procedure TForm3.Button1Click(Sender: TObject); var bmp: TBitmap; jpg: TJPEGImage; begin // uses Jpeg; // não esqueça if OpenPictureDialog1.Execute then begin // vamos criar o bitmap bmp := TBitmap.Create; // vamos criar o JPG jpg := TJPEGImage.Create; try // vamos carregar a imagem JPG jpg.LoadFromFile(OpenPictureDialog1.FileName); // vamos convertê-la para Bitmap bmp.Assign(jpg); // vamos desenhar o bitmap no formulário // começando nas coordenadas x = 0; y = 0 a partir // do canto superior esquerdo da área cliente do formulário Form3.Canvas.Draw(0, 0, bmp); finally Jpg.Free; Bmp.Free; end; end; end; Vamos complicar um pouco mais? Que tal uma função que carrega a imagem JPG, faz a conversão para Bitmap e retorna o Bitmap para o chamador? Veja: function jpg2bitmap(const imagem: String): TBitmap; var bmp: TBitmap; jpg: TJPEGImage; begin // uses Jpeg; // não esqueça // vamos criar o bitmap bmp := TBitmap.Create; // vamos criar o JPG jpg := TJPEGImage.Create; try // vamos carregar a imagem JPG jpg.LoadFromFile(imagem); // vamos convertê-la para Bitmap bmp.Assign(jpg); except bmp := nil; end; // vamos retornar o bitmap resultante Jpg.Free; Result := bmp; end; procedure TForm3.Button1Click(Sender: TObject); var bmp: TBitmap; begin // vamos obter o Bitmap a partir da função personalizada bmp := jpg2bitmap('foto2.jpg'); // a imagem Bitmap foi obtida com sucesso? if bmp <> nil then begin // vamos desenhar o bitmap no formulário // começando nas coordenadas x = 0; y = 0 a partir // do canto superior esquerdo da área cliente do formulário Form3.Canvas.Draw(0, 0, bmp); bmp.Free; end else ShowMessage('Não foi possível obter o Bitmap'); end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Listas Ligadas |
Exercícios Resolvidos de Java - Como inserir um nó em qualquer posição de uma lista ligada em Java - Escreva um programa Java que cria uma lista dinamicamente encadeadaQuantidade de visualizações: 526 vezes |
Pergunta/Tarefa: Escreva um programa Java que cria uma lista dinamicamente encadeada (lista singularmente encadeada) e pede para o usuário inserir 5 elementos do tipo inteiro. Em seguida peça para o usuário informar um índice e um novo elemento e insira tal elemento no índice informado. Faça a validação dos índices para que ele não saia da faixa permitida. Sua saída deve ser parecida com: Inserindo 5 valores na lista Informe o 1.o valor: 8 Informe o 2.o valor: 2 Informe o 3.o valor: 4 Informe o 4.o valor: 7 Informe o 5.o valor: 3 Valores na lista: 8 -> 2 -> 4 -> 7 -> 3 -> null Inserindo um elemento no índice k Informe o índice desejado: 2 Informe o valor do nó: 9 Valores na lista: 8 -> 2 -> 9 -> 4 -> 7 -> 3 -> null Na saída podemos ver que o índice 2 corresponde ao terceiro elemento da lista ligada. Por isso o valor 4 foi empurrado para a frente para abrir espaço para o valor 9. Se o índice 0 fosse informado, o número 8 seria empurrado para a frente e o nó com valor 9 passaria a ser o início da lista ligada. Veja a resolução comentada deste exercício usando Java: package estudos; import java.util.Scanner; // classe interna usada para representar um // nó na lista ligada class No { int valor; // valor do nó No proximo; // aponta para o novo nó // construtor cheio da classe No public No(int valor, No proximo) { this.valor = valor; this.proximo = proximo; } // construtor vazio da classe No public No() { this.valor = 0; this.proximo = null; } } public class Estudos { public static void main(String args[]){ // para ler a entrada do usuário Scanner entrada = new Scanner(System.in); // vamos criar uma referência para o início da lista No inicio = null; // vamos inserir 5 valores inteiros na lista ligada int valor; System.out.println("Inserindo 5 valores na lista\n"); for (int i = 0; i < 5; i++) { System.out.print("Informe o " + (i + 1) + ".o valor: "); valor = Integer.parseInt(entrada.nextLine()); // vamos inserir este valor no final da lista inicio = inserirFinal(inicio, valor); } // vamos exibir os valores na lista ligada System.out.print("\nValores na lista: "); exibirLista(inicio); // vamos inserir um novo elemento no índice informado System.out.println("\nInserindo um elemento no índice k\n"); System.out.print("Informe o índice desejado: "); int indice = Integer.parseInt(entrada.nextLine()); // o índice é válido? if ((indice < 0) || (indice > tamanhoLista(inicio) - 1)) { System.out.println("O índice é inválido."); } else { // vamos inserir o novo nó no índice indicado System.out.print("Informe o valor do nó: "); valor = Integer.parseInt(entrada.nextLine()); inicio = inserirIndice(inicio, indice, valor); // vamos exibir os valores na lista ligada System.out.print("\nValores na lista: "); exibirLista(inicio); } } // função que permite adicionar um nó em uma determinada // posição da lista ligada public static No inserirIndice(No inicio, int indice, int valor) { // vamos apontar para o nó inicial No atual = inicio; // criamos um novo nó No novo = criarNo(valor); // a lista ligada ainda está vazia? if (atual == null){ // inicio recebe o novo nó inicio = novo; } else if (indice == 0) { // o índice é igual a 0? vamos inserir // o nó no início da lista ligada novo.proximo = inicio; inicio = novo; } else { // vamos procurar o local adequado para inserção // primeiro criamos um nó temporário No temp = new No(); // apontamos o nó temporário para o início da lista temp = inicio; // e percorremos os nós até encontrar a posição // de inserção for(int i = 1; i < indice; i++) { if (temp != null) { // passa para o próximo nó temp = temp.proximo; } } // concluimos a inserção novo.proximo = temp.proximo; temp.proximo = novo; } // e retornamos o início da lista return inicio; } // função que permite adicionar um nó no final da // lista ligada public static No inserirFinal(No inicio, int valor) { // vamos apontar para o nó inicial No atual = inicio; // criamos um novo nó No novo = criarNo(valor); // a lista ligada ainda está vazia? if (atual == null){ // inicio recebe o novo nó inicio = novo; } else { // temos um ou mais nós na lista ligada // vamos localizar o último nó while (atual.proximo != null) { atual = atual.proximo; } // encontramos o último nó. Agora vamos inserir // o novo nó depois dele atual.proximo = novo; } // e retornamos o início da lista return inicio; } // função usada para construir e retornar um novo nó public static No criarNo(int valor) { // cria o novo nó No no = new No(valor, null); // retorna o nó criado return no; } // função usada para percorrer a lista ligada e // exibir os valores contidos em seus nós public static void exibirLista(No inicio) { // vamos apontar para o início da lista No temp = inicio; // a lista está vazia? if (temp == null) { System.out.println("A lista está vazia."); } else { // esse laço se repete enquanto tempo for // diferente de null while (temp != null) { // vamos mostrar o valor desse nó System.out.print(temp.valor + " -> "); // avança para o próximo nó temp = temp.proximo; } // mostra o final da lista System.out.println("null"); } } // função que retorna a quantidade de nós na lista ligada public static int tamanhoLista(No inicio) { int tamanho = 0; // vamos apontar para o início da lista No temp = inicio; // a lista está vazia? if (temp == null) { return 0; } else { // esse laço se repete enquanto tempo for // diferente de null while (temp != null) { // vamos incrementar o tamanho tamanho++; // avança para o próximo nó temp = temp.proximo; } } return tamanho; } } |
Python ::: Desafios e Lista de Exercícios Resolvidos ::: Python Básico |
Exercícios Resolvidos de Python - Como calcular salário líquido em Python - Calculando o salário líquido de um professorQuantidade de visualizações: 902 vezes |
Pergunta/Tarefa: Escreva um programa Python 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 float), o número de horas trabalhadas no mês (como inteiro) e o percentual de desconto do INSS (como float). Em seguida mostre o salário líquido, formatado de acordo com a moeda brasileira em vigor (na resolução eu usei o Real). Dica: Use locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8'). 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 Python: import locale # função principal do programa def main(): locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8') # vamos ler o valor do hora aula valor_hora_aula = float(input("Informe o valor da hora aula: ")) # vamos ler o número de horas trabalhadas no mês horas_trabalhadas = int(input("Informe o número de horas trabalhadas no mês: ")) # vamos ler o percentual de desconto do INSS percentual_desconto_inss = float(input("Percentual de desconto do 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 print("Salário Bruto: R$ {0}".format(locale.currency(salario_bruto, grouping=True, symbol=None))) print("Total de Descontos: R$ {0}".format(locale.currency(total_desconto, grouping=True, symbol=None))) print("Salário Líquido: R$ {0}".format(locale.currency(salario_liquido, grouping=True, symbol=None))) if __name__== "__main__": main() |
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Python |
Veja mais Dicas e truques de Python |
Dicas e truques de outras linguagens |
C# - C# Windows Forms para iniciantes - Como limpar todo o conteúdo de um controle TextBox via código |
Quem Somos |
![]() Entre em contato comigo para, juntos, vermos em que posso contribuir para resolver ou agilizar o desenvolvimento de seus códigos.
|
![]() Não basta ter um site. É necessário ter um site que é localizado e converte usuários em clientes. Se sua página não faz isso, Fale comigo e vamos fazer uma analise e conseguir resultados mais satisfatórios..
|
Linguagens Mais Populares |
1º lugar: Java |
Códigos Fonte |
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |