Você está aqui: Cards de Hidrostática |
||
|
||
|
|
||
Python ::: Dicas & Truques ::: Ordenação e Pesquisa (Busca) |
Como usar a busca binária em Python - Pesquisa binária na linguagem PythonQuantidade de visualizações: 836 vezes |
|
A busca binária, ou pesquisa binária, é um algoritmo eficiente para encontrar um item em uma lista (vetor ou array) ordenada. Sim, os itens devem, obrigatoriamente, estar ordenados. O processo é bem simples. A busca binária começa a partir do meio da lista e compara o item nesta posição com o valor sendo pesquisado. Se o valor não for encontrado e for menor que o item no meio da lista, o algoritmo passa para a porção à esquerda da lista, eliminando, assim, metade dos elementos do vetor ou array (a porção maior que o valor pesquisado). Se o valor não for encontrado e for maior que o item no meio da lista, então a busca reinicia a partir da metade da sub-lista à direita (os itens maiores que o valor pesquisado). Essa divisão continua até que o valor seja encontrado ou não seja mais possível dividir a lista pela metade. Se um array ou vetor possuir 100 elementos e usarmos a busca binária nele, precisaremos efetuar no máximo 7 tentativas para encontrar o valor desejado. Se a lista possuir 4 bilhões de itens nós teremos que fazer no máximo 32 tentativas. Isso acontece porque a pesquisa binária é executada em tempo logarítmico, ou seja, log2 n, onde n é a quantidade de itens no vetor. Dessa forma, se tivemos 1.000 itens em um array, log2 1000 = 10 tentativas. Lembre-se de que, na programação log e log2 retornam resultados diferentes: log(10) = 2.302585092994046 enquanto log2(10) = 3.321928094887362. Na análise da busca binária nós usamos sempre log2. Vamos agora ver como podemos codificar a busca binária em Python. Veja o código a seguir:
# função principal do programa
def main():
# vamos criar uma lista ordenada de inteiros
valores = [3, 5, 7, 8, 9, 12, 43, 50, 52, 60]
print("Os valores da lista são: {0}".format(valores))
# vamos pedir o item a ser pesquisado
numero = int(input("Informe o número a ser pesquisado: "))
# agora vamos pesquisar o número no array usando a pesquisa
# binária
# a variável esquerda aponta para o primeiro elemento do vetor
esquerda = 0
# a variável direita aponta para o último elemento do vetor
direita = len(valores) - 1
# para indicar se o valor foi encontrado
encontrado = False
# enquanto houver mais de um elemento a ser comparado
while esquerda <= direita:
# obtemos o elemento na metade da lista
meio = (esquerda + direita) // 2
# fazemos a comparação
if numero == valores[meio]:
print("O número foi encontrado no índice {0}".format(
meio))
encontrado = True
break # sai do laço
# o item atual é maior que o valor pesquisado?
if valores[meio] > numero:
direita = meio - 1
# o item atual é menor que o valor pesquisado?
else:
esquerda = meio + 1
# o valor foi encontrado?
if not encontrado:
print("O valor pesquisado não foi encontrado")
if __name__== "__main__":
main()
Ao executar este código Python nós teremos o seguinte resultado: Os valores da lista são: [3, 5, 7, 8, 9, 12, 43, 50, 52, 60] Informe o número a ser pesquisado: 9 O número foi encontrado no índice 4 |
Java ::: Design Patterns (Padrões de Projeto) ::: Singleton Pattern |
Padrões de projeto para iniciantes - Como usar o padrão de projeto Singleton em suas aplicações JavaQuantidade de visualizações: 12233 vezes |
|
O padrão de projeto Singleton (ou Singleton Pattern) é um dos padrões de projeto mais conhecidos e implementado extensivamente nas linguagens que suportam programação orientada a objetos, tais como Java e C#. Nesta dica eu mostrarei como implementá-lo. Uma das situações nas quais usamos o padrão Singleton é quando queremos que somente uma instância de uma determinada classe seja criada e que esta esteja disponível para todas as demais classes do sistema. Um exemplo disso é uma classe responsável por registrar logs do sistema, uma classe responsável por obter conexões com o banco de dados, ou ainda uma classe que concentra dados de configuração da aplicação. Assim, a chave do padrão Singleton é um método estático, geralmente chamado de getInstance(), que retorna uma nova instância da classe se esta ainda não foi instanciada. Se a classe já tiver sido instanciada, o método getInstance() retorna a instância já existente. Vamos ver um exemplo deste padrão em Java. Observe o código a seguir: Código para Logger.java:
package estudos;
// Uma classe Singleton responsável por gravar
// logs no sistema
public class Logger {
// variável estática e privada que guarda a instância
// atual da classe
private static Logger instancia = null;
// Método estático que retorna uma instância já existente, ou
// cria uma nova instância
public static Logger getInstance() {
if (instancia == null) {
instancia = new Logger();
}
return instancia;
}
// Construtor privado para evitar que instâncias sejam
// criadas usando new
private Logger() {
// não precisamos fazer nada aqui
}
// método usado para registrar logs
public void registrarLog(String dados) {
System.out.println("Vou registrar o log: " + dados);
}
}
Veja agora como podemos chamar o método getInstance(), obter um objeto da classe Logger e "registrar um log": Código para Main.java:
package estudos;
public class Main {
public static void main(String[] args) {
// vamos registrar um novo log usando a classe Singleton
Logger.getInstance().registrarLog("Novo usuário cadastrado.");
}
}
Ao executar esta aplicação teremos a seguinte saída: Vou registrar o log: Novo usuário cadastrado. |
C ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Controle |
Exercício Resolvido de C - Como testar se um ano é bissexto em C - Um programa que lê um ano com quatro dígitos e informa se ele é bissexto ou nãoQuantidade de visualizações: 1250 vezes |
|
Pergunta/Tarefa: Chama-se ano bissexto o ano ao qual é acrescentado um dia extra, ficando ele com 366 dias, um dia a mais do que os anos normais de 365 dias, ocorrendo a cada quatro anos (exceto anos múltiplos de 100 que não são múltiplos de 400). Isto é feito com o objetivo de manter o calendário anual ajustado com a translação da Terra e com os eventos sazonais relacionados às estações do ano. O último ano bissexto foi 2012 e o próximo será 2016. Um ano é bissexto se ele for divisível por 4 mas não por 100, ou se for divisível por 400. Escreva um programa C que pede ao usuário um ano com quatro dígitos e informa se ele é bissexto ou não. Sua saída deverá ser parecida com: Informe o ano: 2024 O ano informado é bissexto. Veja a resolução comentada deste exercício usando C console:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(int argc, char *argv[]){
int ano;
setlocale(LC_ALL,""); // para acentos do português
// vamos solicitar que o usuário informe um ano
printf("Informe o ano: ");
scanf("%d", &ano);
// vamos verificar se o ano informado é bissexto
if(((ano % 4 == 0) && (ano % 100 != 0)) || (ano % 400 == 0)){
printf("\nO ano informado é bissexto.\n");
}
else{
printf("\nO ano informado não é bissexto.\n");
}
printf("\n\n");
system("pause");
return 0;
}
|
VB.NET ::: Dicas & Truques ::: Strings e Caracteres |
Como inverter uma string em VB.NET usando a função StrReverse()Quantidade de visualizações: 11008 vezes |
|
Em algumas situações nós precisamos inverter a ordem dos caracteres de uma palavra, frase ou texto em VB.NET. Para isso nós podemos usar a função StrReverse(). Veja um exemplo completo de seu uso:
Imports System
Module Program
Sub Main(args As String())
Dim frase As String = "Gosto de VB.NET"
' vamos mostrar a frase original
Console.WriteLine("A frase original é: " & frase)
' vamos inverter a string
frase = StrReverse(frase)
' mostramos a frase invertida
Console.WriteLine("A frase invertida é: " & frase)
Console.WriteLine(vbCrLf & "Pressione qualquer tecla para sair...")
' pausa o programa
Console.ReadKey()
End Sub
End Module
Ao executar este código VB.NET nós teremos o seguinte resultado: A frase original é: Gosto de VB.NET A frase invertida é: TEN.BV ed otsoG |
Python ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Controle |
Exercício Resolvido de Python - Um comerciante comprou um produto e quer vendê-lo com um lucro de 45% se o valor da compra for menorQuantidade de visualizações: 3868 vezes |
|
Algoritmos Resolvidos de Python - Um comerciante comprou um produto e quer vendê-lo com um lucro de 45% se o valor da compra for menor Pergunta/Tarefa: Um comerciante comprou um produto e quer vendê-lo com um lucro de 45% se o valor da compra for menor que R$ 20,00; caso contrário, o lucro será de 30%. Elabore um algoritmo que leia o valor do produto e imprima o valor de venda para o produto. Sua saída deverá ser parecida com: Informe o valor do produto: 85 O valor de venda é: 110.5 Veja a resolução comentada deste exercício usando Python: Código para principal.py:
# método principal
def main():
# valor ler o valor do produto
valor = float(input("Informe o valor do produto: "))
# vamos calcular o valor de venda
if valor < 20:
valor_venda = valor + (valor * (45.0 / 100))
else:
valor_venda = valor + (valor * (30.0 / 100))
print("O valor de venda é: {0}".format(valor_venda))
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 |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






