Você está aqui: Cards de AutoCAD Civil 3D |
||
|
||
|
|
||
Java ::: Dicas & Truques ::: Ordenação e Pesquisa (Busca) |
Como implementar a ordenação Quicksort em Java - Apostila de Java para iniciantesQuantidade de visualizações: 562 vezes |
|
A ordenação Quicksort é um dos algorítmos de ordenação mais encontrados em aplicações reais de programação. No Delphi esta ordenação é encontrada no objeto TList. No Java podemos encontrá-lo no método Arrays.sort(). Na linguagem C a ordenação Quicksort é implementada na função qsort() da biblioteca padrão. O algoritmo de ordenação Quicksort é do tipo dividir para conquistar (divide-and-conquer principle). Neste tipo de algoritmo o problema é dividido em sub-problemas e a solução é concatenada quando as chamadas recursivas atingirem o caso base. O vetor (ou array) a ser ordenado é dividido em duas sub-listas por um elemento chamado pivô, resultando em uma lista com elementos menores que o pivô e outra lista com os elementos maiores que o pivô. Esse processo é repetido para cada chamada recursiva. Sim, a ordenação Quicksort faz uso extensivo de recursividade, razão pela qual devemos ter muito cuidado para não estourar a pilha do sistema. Existem muitos estudos sobre o pivô ideal para a ordenação Quicksort. Nessa dica adotarei o último elemento do array ou sub-array como pivô. Em vetores não ordenados essa estratégia, em geral, resulta em uma boa escolha. Vamos ao código Java então? Veja um programa Java completo demonstrando o uso da ordenação Quicksort para um array de 10 elementos inteiros:
package estudos;
import java.util.Scanner;
public class Estudos {
public static void main(String[] args) {
// vamos declarar um array de 10 elementos
int valores[] = new int[10];
// para ler a entrada do usuário
Scanner entrada = new Scanner(System.in);
// vamos pedir ao usuário para informar os valores para o vetor
for(int i = 0; i < valores.length; i++){
System.out.print("Informe o valor do elemento " + i + ": ");
valores[i] = Integer.parseInt(entrada.nextLine());
}
// vamos mostrar o array informado
System.out.println("\nO array informado foi:\n");
for(int i = 0; i < valores.length; i++){
System.out.print(valores[i] + " ");
}
// vamos ordenar o vetor usando a ordenação Quicksort
quickSort(valores, 0, valores.length - 1);
System.out.println("\n\nO array ordenado é:\n");
for(int i = 0; i < valores.length; i++){
System.out.print(valores[i] + " ");
}
System.out.println("\n\n");
}
// função de implementação da ordenação Quicksort
public static void quickSort(int vetor[], int inicio, int fim) {
// o início é menor que o fim?
if (inicio < fim) {
// vamos obter o novo índice da partição
int indiceParticao = particionar(vetor, inicio, fim);
// efetuamos novas chamadas recursivas
quickSort(vetor, inicio, indiceParticao - 1);
quickSort(vetor, indiceParticao + 1, fim);
}
}
// função que retorna o índice de partição
private static int particionar(int vetor[], int inicio, int fim) {
// para guardar o pivô
int pivot = vetor[fim];
int i = (inicio - 1);
for (int j = inicio; j < fim; j++) {
if (vetor[j] <= pivot) {
i++;
// fazemos a troca
int temp = vetor[i];
vetor[i] = vetor[j];
vetor[j] = temp;
}
}
// efetua a troca
int temp = vetor[i + 1];
vetor[i + 1] = vetor[fim];
vetor[fim] = temp;
return i + 1;
}
}
Ao executar este código Java nós teremos o seguinte resultado: Informe o valor do elemento 0: 7 Informe o valor do elemento 1: 2 Informe o valor do elemento 2: 43 Informe o valor do elemento 3: 1 Informe o valor do elemento 4: 9 Informe o valor do elemento 5: 6 Informe o valor do elemento 6: 22 Informe o valor do elemento 7: 3 Informe o valor do elemento 8: 37 Informe o valor do elemento 9: 5 O array informado foi: 7 2 43 1 9 6 22 3 37 5 O array ordenado é: 1 2 3 5 6 7 9 22 37 43 |
Firebird ::: Dicas & Truques ::: Strings e Caracteres |
Como converter o valor de um campo do tipo CHAR ou VARCHAR em letras minúsculas usando a função LOWER() do FirebirdQuantidade de visualizações: 8734 vezes |
|
A função LOWER() do Firebird é usada quando precisamos converter o valor de um campo do tipo CHAR ou VARCHAR em letras minúsculas. A partir do Firebird 2 esta função consegue transformar em minúsculas até mesmo os caracteres não pertencentes ao conjunto ASCII (non-ASCII), mesmo se o collation padrão (binary) estiver sendo usado. Veja um exemplo de como usar esta função em uma query SQL DML SELECT FROM: SELECT NOME NORMAL, LOWER(NOME) MINUSCULAS FROM CLIENTES WHERE ID = 1; Ao executarmos esta query teremos o seguinte resultado: NORMAL MINUSCULAS OSMAR J. SILVA osmar j. silva A função LOWER() pode ser usada em DSQL (Dynamic SQL), ESQL (Embedded SQL) e PSQL (Stored procedure and trigger language). |
Java ::: Dicas & Truques ::: Data e Hora |
Java para iniciantes - Como usar a classe Date em suas aplicações JavaQuantidade de visualizações: 14403 vezes |
A classe Date pertence ao pacote java.util, e, embora muitos de seus métodos estejam em desuso (Deprecated), ainda encontraremos muito código Java que usa esta classe para trabalhar com datas e horas. Veja sua posição na hierarquia de classes Java:java.lang.Object java.util.Date Esta classe implementa as interfaces Serializable, Cloneable e Comparable<Date> e suas subclasses conhecidas são Date, Time, Timestamp (todas do pacote java.sql). As informações abaixo podem ser encontradas na documentação da classe Date. A classe Date representa um momento específico no tempo, com uma precisão de milisegundos. Antes do JDK 1.1, esta classe tinha duas funções adicionais. Ela permitia a interpretação de datas como valores de ano, mês, dia, hora, minuto e segundo. Também permitia a formatação e parsing de strings de datas. Infelizmente, a API para estas funções não facilitava a internacionalização. Assim, a partir do JDK 1.1, a classe Calendar deve ser usada para converter entre campos de datas e horas e a classe DateFormat deve ser usada para formatar e fazer o parsing de strings de datas. Os métodos correspondentes a estas funções estão em desuso (Deprecated) na classe Date. Embora a classe Date tenha sido projetada para refletir a hora universal coordenada (Coordinated Universal Time - UTC), ela pode não ser capaz de fazer isso corretamente, dependendo do sistema no qual a Java Virtual Machine esteja sendo executada. A grande maioria dos sistemas operacionais modernos assume que 1 dia = 24 × 60 × 60 = 86400 segundos em todos os casos. No UTC, contudo, de dois em dois anos, aproximadamente, há um segundo extra, chamado de "leap second" (a mesma idéia do ano bissexto). O leap second é sempre adicionado como o último segundo do dia e sempre nos dias 31 de dezembro ou 30 de junho. Por exemplo, o último minuto do ano de 1995 teve 61 segundos, graças ao segundo extra que foi adicionado. A maioria dos relógios dos computadores não são precisos o suficiente para refletir a distinção do leap second. Alguns padrões de computadores são definidos em termos da hora de Greenwich (Greenwich mean time - GMT), que é o equivalente ao Universal Time (UT). GMT é o nome "civil" para o padrão, UT é o nome "científico" para o mesmo padrão. A distinção entre UTC e UT é que UTC é baseado em um relógio atômico e UT é baseado em observações astronômicas, o que para todos os propósitos práticos não traz diferença significativa. Devido à rotação da terra não ser uniforme (ela desacelera ou acelera de formas complicadas), O UT nem sempre flui uniformente. Segundos extras (Leap seconds) são inseridos conforme necessário no UTC de forma a mantê-lo dentro dos 0.9 segundos do UT1, que é uma versão do UT com algumas correções aplicadas. Há outros sistemas de datas e horas também; por exemplo, a escala de tempo pelo sistema de posicionamento global baseado em satélite (satellite-based global positioning system - GPS) é sincronizado com o UTC mas não é ajustado para os segundos extras. Em todos os métodos da classe Date que aceitam ou retornam valores de ano, mês, dia, hora, minuto e segundos, as seguintes representações são usadas:
|
C++ ::: Desafios e Lista de Exercícios Resolvidos ::: STL Vector C++ |
Exercícios Resolvidos de C++ - Escreva um programa C++ que retorna os elementos em um vector que são estritamente menores que seus vizinhos adjacentes da esquerda e da direitaQuantidade de visualizações: 408 vezes |
|
Pergunta/Tarefa: Escreva um programa C++ que retorna os elementos em um vector que são estritamente menores que seus vizinhos adjacentes da esquerda e da direita. Seu código deverá pedir para o usuário informar 10 valores inteiros, guardá-los em um vector e então calcular e exibir o resultado. Sua saída deverá ser parecida com: Informe o 1.o valor: 8 Informe o 2.o valor: 4 Informe o 3.o valor: 9 Informe o 4.o valor: 3 Informe o 5.o valor: 1 Informe o 6.o valor: 6 Informe o 7.o valor: 2 Informe o 8.o valor: 7 Informe o 9.o valor: 3 Informe o 10.o valor: 8 Conteúdo do vector: 8 4 9 3 1 6 2 7 3 8 Os elementos menores que seus vizinhos adjascentes são: 4 1 2 3 Veja a resolução comentada deste exercício usando C++:
// vamos fazer os includes ncessários
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
// função para encontrar os elementos no vector que são menores
// que seus vizinhos adjacentes
vector<int> verificar(vector<int> valores) {
// vamos inicializar um vector vazio para guardar os elementos
// que passarem na condição
vector<int> temp;
// vamos percorrer o vector recebido como argumento
for(int i = 1; i < valores.size() - 1; i++) {
// o elemento atual é menor que o elemento anterior e posterior a ele?
if(valores[i] < valores[i - 1] && valores[i] < valores[i + 1]) {
// vamos adicionar no vector temporário
temp.push_back(valores[i]);
}
}
// retornamos o vector temporário
return temp;
}
// função principal do programa
int main(int argc, char *argv[]) {
// vamos criar o vector que guardará os valores informados
// pelo usuário
vector<int> numeros;
int valor;
// vamos ler 10 números inteiros
for (int i = 0; i < 10; i++) {
cout << "Informe o " << (i + 1) << ".o valor: ";
cin >> valor;
numeros.push_back(valor);
}
// vamos mostrar o conteúdo do vector original
cout << "\nConteúdo do vector: ";
for (int n: numeros) {
cout << n << " ";
}
// agora vamos testar os números que são menores que seus
// vizinhos adjascentes
vector<int> resultado = verificar(numeros);
cout << "\n\nOs elementos menores que seus vizinhos adjascentes são:\n\n";
for (int n: resultado) {
cout << n << " ";
}
cout << "\n\n";
return EXIT_SUCCESS;
}
|
Python ::: Pillow Python Imaging Library ::: Image |
Como abrir uma imagem no Pillow do Python usando a função open() do objeto ImageQuantidade de visualizações: 1775 vezes |
|
A função open() do objeto Image da biblioteca Pilow do Python é muito útil quando queremos abrir uma imagem para fins de edição ou exibição. Em sua forma mais simples este método exige apenas o caminho e nome da imagem e retorna um objeto PIL Image. Veja um trecho de código no qual usamos a função open() para abrir a imagem e, em seguida, usamos a função show() para exibir a imagem no visualizador de imagens padrão definido em nossa máquina:
# vamos importar a biblioteca Pilow
from PIL import Image
# método principal
def main():
# vamos abrir uma imagem
imagem = Image.open("Mulher.png")
# vamos exibir a imagem no visualizador padrão
imagem.show("Foto a partir do Pilow")
if __name__== "__main__":
main()
Note que o método show() do objeto Image é usado, na maioria das vezes, com o propósito de depuração de nossos códigos, já que ele cria um arquivo temporário e o envia ao visualizador padrão. Dessa forma nós podemos editar a imagem na memória e enviar para o visualizador todas as vezes que quisermos ver algum resultado. |
Desafios, Exercícios e Algoritmos Resolvidos de Python |
Veja mais Dicas e truques de Python |
Dicas e truques de outras linguagens |
|
Python - Datas e horas em Python - Como obter a hora como um decimal no intervalo 00-12 (formato 12 horas) |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |




