C ::: Dicas & Truques ::: Ordenação e Pesquisa (Busca) |
Ordenação e pesquisa em C - Como ordenar um vetor de inteiros usando a ordenação Insertion Sort (Ordenação por Inserção)Quantidade de visualizações: 3059 vezes |
A ordenação Insertion Sort, ou Ordenação por Inserção, possui uma complexidade de tempo de execução igual à ordenação Bubble Sort (Ordenação da Bolha), ou seja, O(n2). Embora mais rápido que o Bubble Sort, e ser um algorítmo de ordenação quadrática, a ordenação Insertion Sort é bastante eficiente para problemas com pequenas entradas, sendo o mais eficiente entre os algoritmos desta ordem de classificação, porém, nunca recomendada para um grande conjunto de dados. A forma mais comum para o entendimento da ordenação Insertion Sort é compará-la com forma pela qual algumas pessoas organizam um baralho num jogo de cartas. Imagine que você está jogando as cartas. Você está com as cartas na mão e elas estão ordenadas. Você recebe uma nova carta e deve colocá-la na posição correta da sua mão de cartas, de forma que as cartas obedeçam à ordenação. A cada nova carta adicionada à sua mão de cartas, a nova carta pode ser menor que algumas das cartas que você já tem na mão ou maior, e assim, você começa a comparar a nova carta com todas as cartas na sua mão até encontrar sua posição correta. Você insere a nova carta na posição correta, e, novamente, a sua mão é composta de cartas totalmente ordenadas. Então, você recebe outra carta e repete o mesmo procedimento. Então outra carta, e outra, e assim em diante, até não receber mais cartas. Esta é a ideia por trás da ordenação por inserção. Percorra as posições do vetor (array), começando com o índice 1 (um). Cada nova posição é como a nova carta que você recebeu, e você precisa inseri-la no lugar correto no sub-vetor ordenado à esquerda daquela posição. Vamos ver a implementação na linguagem C agora? Observe o seguinte código, no qual temos um vetor de inteiros com os elementos {4, 6, 2, 8, 1, 9, 3, 0, 11}: #include <stdio.h> #include <stdlib.h> // função que permite ordenar um vetor de inteiros // usando a ordenação Insertion Sort void insertionSort(int vetor[], int tam){ int i, temp, j; // este laço varre os elementos a partir do segundo // elemento, ou seja, o índice 1 for(i = 1; i < tam; i++){ // guardamos o elemento atual em temp temp = vetor[i]; for(j = i; ((j > 0) && (vetor[j - 1] > temp)); j--){ vetor[j] = vetor[j - 1]; // houve uma troca } vetor[j] = temp; // colocamos temp em seu devido lugar } } int main(int argc, char *argv[]){ int valores[] = {4, 6, 2, 8, 1, 9, 3, 0, 11}; int i, tamanho = 9; // imprime a matriz sem a ordenação puts("Sem ordenação:\n"); for(i = 0; i < 9; i++){ printf("%d ", valores[i]); } // vamos ordenar a matriz insertionSort(valores, tamanho); // imprime a matriz ordenada puts("\n\nOrdenada usando Insertion Sort:\n"); for(i = 0; i < 9; i++){ printf("%d ", valores[i]); } printf("\n\n"); system("PAUSE"); return 0; } Ao executar este código C nós teremos o seguinte resultado: Sem ordenação: 4 6 2 8 1 9 3 0 11 Ordenada usando Insertion Sort: 0 1 2 3 4 6 8 9 11 |
Python ::: Tkinter GUI Toolkit ::: Entry |
Como setar o foco em uma caixa de texto Entry do Tkinter usando a função focus_set()Quantidade de visualizações: 1218 vezes |
Em várias situações durante o processo de programação em Tkinter nós precisamos, via programação, trocar o foco de uma caixa de texto para outra. Isso pode ser feito com o auxílio da função focus_set(). No código abaixo nós temos uma janela Tkinter com duas caixas de texto Entry e um botão Button. Experimente digitar conteúdo nas duas caixas de texto e depois clicar no botão. Você verá que o foco é colocado novamente na primeira caixa de texto. Veja o código Python completo: # vamos importar o módulo Tkinter from tkinter import * from tkinter.ttk import * # variáveis globais caixa_texto_1 = None # método principal def main(): # acessamos a variável global global caixa_texto_1 # vamos criar o frame principal da aplicação Tkinter janela = Tk() # agora definimos o tamanho da janela janela.geometry("600x400") # criamos uma caixa de texto Entry de linha única caixa_texto_1 = Entry(janela, width=40) caixa_texto_1.grid(column=0, row=0, sticky=W, padx=15, pady=10) # criamos uma segunda caixa de texto Entry de linha única caixa_texto_2 = Entry(janela, width=40) caixa_texto_2.grid(column=0, row=1, sticky=W, padx=15, pady=0) # vamos criar um botão Button btn = Button(janela, text="Definir Foco", width=20, command=definir_foco) btn.grid(column=0, row=2, sticky=W, padx=15, pady=10) # entramos no loop da aplicação janela.mainloop() # função para definir o foco na primeira caixa de texto def definir_foco(): # definimos o foco na primeira caixa de texto Entry caixa_texto_1.focus_set() if __name__== "__main__": main() |
PHP ::: Dicas & Truques ::: Data e Hora |
PHP para iniciantes - Como obter a diferença em horas entre duas datas (e suas respectivas horas)Quantidade de visualizações: 68 vezes |
Nesta dica eu mostro como podemos usar as funções mktime() e gmdate() da linguagem PHP para obter e retornar a diferença em horas entre duas datas, e suas horas, é claro. Note que vamos fornecer duas datas diferentes (e suas horas) e vamos obter a diferença entre elas em segundos. Veja o código completo: <head> <title>Estudando PHP</title> </head> <body> <?php // data e hora inicial = 23/11/2006 - 13:23:15 $data_inicial = mktime(13, 23, 15, 11, 23, 2006); // data e hora final = 23/11/2006 - 10:23:15 $data_final = mktime(22, 23, 15, 11, 23, 2006); $segundos = $data_final - $data_inicial; echo "A diferença em horas entre as duas datas é: " . gmdate("H:i:s", $segundos); ?> </body> </html> Ao executar este código nós teremos o seguinte resultado: A diferença em horas entre as duas datas é: 09:00:00 |
VB.NET ::: VB.NET para Engenharia ::: Geometria Analítica e Álgebra Linear |
Como somar os elementos da diagonal principal de uma matriz em VB.NETQuantidade de visualizações: 283 vezes |
A Matriz quadrada é um tipo especial de matriz que possui o mesmo número de linhas e o mesmo número de colunas, ou seja, dada uma matriz Anxm, ela será uma matriz quadrada se, e somente se, n = m, onde n é o número de linhas e m é o número de colunas. Em geral as matrizes quadradas são chamadas de Matrizes de Ordem n, onde n é o número de linhas e colunas. Dessa forma, uma matriz de ordem 4 é uma matriz que possui 4 linhas e quatro colunas. Toda matriz quadrada possui duas diagonais, e elas são muito exploradas tanto na matemática quanto na construção de algorítmos. Essas duas diagonais são chamadas de Diagonal Principal e Diagonal Secundária. A diagonal principal de uma matriz quadrada une o seu canto superior esquerdo ao canto inferior direito. Veja: ![]() Nesta dica veremos como calcular a soma dos valores dos elementos da diagonal principal de uma matriz usando VB.NET. Para isso, só precisamos manter em mente que a diagonal principal de uma matriz A é a coleção das entradas Aij em que i é igual a j. Assim, tudo que temos a fazer é converter essa regra para código VB.NET. Veja um trecho de código VB.NET completo no qual pedimos para o usuário informar os elementos da matriz e em seguida mostramos a soma dos elementos da diagonal superior: Imports System Module Program ' função principal do programa VB.NET Sub Main(args As String()) ' vamos declarar e construir uma matriz de três linhas ' e três colunas Dim matriz(2, 2) As Integer ' guarda a soma dos elementos na diagonal principal Dim soma_diagonal As Integer = 0 For i As Integer = 0 To matriz.GetUpperBound(0) For j As Integer = 0 To matriz.GetUpperBound(1) Console.Write("Informe o valor para a linha " & i & " e coluna " _ & j & ": ") ' lê o número e guarda na linha e coluna especificadas matriz(i, j) = Integer.Parse(Console.ReadLine()) Next Next ' vamos mostrar a matriz da forma que ela foi informada Console.WriteLine(vbCrLf & "Valores na matriz: " & vbCrLf) For i As Integer = 0 To matriz.GetUpperBound(0) For j As Integer = 0 To matriz.GetUpperBound(1) Console.Write(matriz(i, j).ToString().PadLeft(5) & " ") Next ' passa para a próxima linha Console.WriteLine() Next ' vamos calcular a soma dos elementos da diagonal ' principal For i As Integer = 0 To matriz.GetUpperBound(0) For j As Integer = 0 To matriz.GetUpperBound(1) If i = j Then soma_diagonal = soma_diagonal + matriz(i, j) End If Next Next ' finalmente mostramos a soma da diagonal principal Console.WriteLine(vbCrLf & "A soma dos elementos da diagonal principal é: " _ & soma_diagonal) Console.WriteLine(vbCrLf & 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: Informe o valor para a linha 0 e coluna 0: 3 Informe o valor para a linha 0 e coluna 1: 7 Informe o valor para a linha 0 e coluna 2: 9 Informe o valor para a linha 1 e coluna 0: 2 Informe o valor para a linha 1 e coluna 1: 4 Informe o valor para a linha 1 e coluna 2: 1 Informe o valor para a linha 2 e coluna 0: 5 Informe o valor para a linha 2 e coluna 1: 6 Informe o valor para a linha 2 e coluna 2: 8 3 7 9 2 4 1 5 6 8 A soma dos elementos da diagonal principal é: 15 |
PHP ::: Dicas & Truques ::: Variáveis e Constantes |
Como verificar se uma variável contém um valor numérico válido - Usando a função is_numeric() do PHP - RevisadoQuantidade de visualizações: 22471 vezes |
Em várias situações nós precisamos verificar se uma variável ou constante possui um valor numérico válido. Para isso podemos usar a função is_numeric() da linguagem PHP. Esta função retorna um valor true se o argumento for um valor númerico válido e false em caso contrário. Veja um exemplo completo de seu uso: <? /* Este trecho de código mostra como usar a função is_numeric para verificar se o valor de uma variável é um valor numérico válido */ $valor = 34; // válido // $valor = "45,3"; // inválido // $valor = "45.4"; // válido // $valor = ".5"; // válido if(is_numeric($valor)) echo "$valor é um valor numérico válido"; else echo "$valor NÃO é um valor numérico válido"; ?> Ao executar este código nós teremos o seguinte resultado: 34 é um valor numérico válido Esta dica foi revisada e testada no PHP 8. |
VB.NET ::: Dicas & Truques ::: Strings e Caracteres |
Como inverter o conteúdo de uma string em VB.NET usando os métodos ToCharArray() e Reverse()Quantidade de visualizações: 7893 vezes |
Nesta dica mostrarei como podemos tirar proveito do método ToCharArray() da classe String e do método Reverse() da classe Array do VB.NET para inverter a ordem dos caracteres de uma palavra, frase ou texto. Note que criamos uma função personalizada InverterString() que recebe uma string, a inverte e devolve uma nova string com a ordem dos caracteres invertida. Veja o código completo para o exemplo: Imports System Module Program Sub Main(args As String()) ' vamos declarar uma string Dim frase As String = "Gosto de VB.NET" ' mostramos a frase original Console.WriteLine("Frase original: " & frase) ' inverte o conteúdo da string frase = InverterString(frase) ' mostramos a frase invertida Console.WriteLine("A frase invertidade é: " & frase) Console.WriteLine(vbCrLf & "Pressione qualquer tecla para sair...") ' pausa o programa Console.ReadKey() End Sub ' Função que recebe uma string e a devolve invertida Function InverterString(ByVal str As String) As String Dim invertida As String Dim arrChar() As Char = str.ToCharArray() Array.Reverse(arrChar) invertida = arrChar Return invertida End Function End Module Ao executar este código VB.NET nós teremos o seguinte resultado: Frase original: Gosto de VB.NET A frase invertidade é: TEN.BV ed otsoG |
Java ::: Coleções (Collections) ::: HashMap |
Como adicionar novos mapeamentos chave-valor a um HashMap do Java usando o método put()Quantidade de visualizações: 9610 vezes |
Novos mapeamentos chave-valor são adicionados a um HashMap da linguagem Java usando-se o método put(). Veja sua assinatura:public V put(K key, V value) Note que este método recebe a chave e o valor a ser inserido e retorna um objeto do mesmo tipo daquele fornecido no segundo argumento. Este retorno é muito útil para sabermos se o novo valor não sobrepôs um valor já existente. Se o retorno for null, o novo valor foi inserido. Caso contrário o retorno será o valor existente antes da sobreposição. Apenas tenha cuidado com valores null existentes como chaves ou valores. Nestes casos o retorno do método put não ajudará em nada. Veja um exemplo do uso do método put(): package estudos; import java.util.*; public class Estudos{ public static void main(String[] args){ // vamos criar uma instância de HashMap HashMap<Integer, String> clientes = new HashMap<Integer, String>(); // vamos adicionar três chaves e seus valores clientes.put(new Integer(1), "Osmar J. Silva"); clientes.put(new Integer(2), "Salvador Miranda de Andrade"); clientes.put(new Integer(3), "Marcos da Costa Santos"); // é possível também referenciar o valor adicionado // ao HashMap, uma vez que este é o retorno do métoto put() String nome = clientes.put(new Integer(2), "Carlos"); if(nome == null){ System.out.println("Novo valor inserido com sucesso"); } else{ System.out.println("Valor já existia. Houve sopreposição"); } System.exit(0); } } Ao executar este código Java nós teremos o seguinte resultado: Valor já existia. Houve sopreposição |
Delphi ::: Dicas & Truques ::: Data e Hora |
Como retornar a hora atual em Delphi usando as funções Time(), GetTime() e TimeToStr()Quantidade de visualizações: 19474 vezes |
Como retornar a hora atual em Delphi usando as funções Time(), GetTime() e TimeToStr() Em algumas situações precisamos obter a hora atual (apenas a hora, desconsiderando a data) do sistema. Em Delphi isso pode ser feito com o auxílio da função Time(), presente na unit SysUtils. Esta função não requer nenhum argumento e retorna a hora atual como um TDateTime. Veja o exemplo: procedure TForm1.Button1Click(Sender: TObject); var hora: TDateTime; begin // vamos obter a hora atual hora := Time(); // podemos também usar a função GetTime() //hora := GetTime(); // vamos exibir o resultado ShowMessage(TimeToStr(hora)); end; Ao executar este código Delphi nós teremos o seguinte resultado: 15:17:17 Note que podemos também obter a hora atual (sem a data) usando a função GetTime(), também na unit SysUtils. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
C# ::: Dicas & Truques ::: Strings e Caracteres |
Como substituir todos os espaços em uma string pelo caractere de underline em C# usando o método Replace() da classe StringQuantidade de visualizações: 8268 vezes |
Nesta dica de C# eu trago um trecho de código que mostra como substituir todos os espaços em uma string pelo caractere de sublinhado (underline). Para a realização desta tarefa nós vamos usar o método Replace() da classe String da linguagem C#. Veja o código completo para o exemplo: using System; namespace Estudos { class Program { static void Main(string[] args) { string frase = "Gosto muito de C#"; Console.WriteLine("Frase original: " + frase); // substitui os espaços por underline frase = frase.Replace(" ", "_"); Console.WriteLine("Depois da substituição: " + frase); Console.WriteLine("\n\nPressione uma tecla para sair..."); Console.ReadKey(); } } } Ao executar este código C# nós teremos o seguinte resultado: Frase original: Gosto muito de C# Depois da substituição: Gosto_muito_de_C# |
Delphi ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como declarar e inicializar uma matriz de Integer em DelphiQuantidade de visualizações: 12351 vezes |
Nesta dica eu mostrarei como declarar e inicializar uma matriz de inteiros (Integer) em Delphi. Mostrarei também como exibir o valor de cada elemento usando um laço For. Veja o código:procedure TForm3.Button1Click(Sender: TObject); var // vamos declarar uma matriz de 10 inteiros valores: array[1..10] of Integer; i: Integer; begin // vamos inicializar a matriz com os números pares de 2 até 20 for i := Low(valores) to High(valores) do begin valores[i] := i * 2; end; // vamos exibir os valores dos elementos for i := Low(valores) to High(valores) do begin Memo1.Lines.Add(IntToStr(valores[i])); end; end; Ao executar este código teremos o seguinte resultado: 2 4 6 8 10 12 14 16 18 20 |
Nossas 20 dicas & truques de programação mais populares |
Python - Exercícios Resolvidos de Python - Como converter de binário para decimal em Python usando o laço for |
Você também poderá gostar das dicas e truques de programação abaixo |
JavaScript - Como obter o código da tecla pressionada em um elemento HTML usando o evento onkeypress do JavaScript |
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 |