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: 3074 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


Delphi ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como declarar e inicializar uma matriz de Integer em Delphi

Quantidade de visualizações: 12366 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


Java ::: Dicas & Truques ::: Arquivos e Diretórios

Como excluir um diretório em Java usando o método delete() da classe File - Curso de Java para iniciantes

Quantidade de visualizações: 9733 vezes
Em algumas situações nós precisamos excluir um ou mais diretórios a partir de nossos códigos Java. Para isso nós podemos usar o método delete() da classe File, no pacote java.io.

Veja o código completo para o exemplo:

package arquivodecodigos;

import java.io.*;
 
public class Estudos{
  public static void main(String[] args){
    File diretorio = new File("c:\\java");
         
    if(diretorio.delete()){
      System.out.println("Diretorio excluido com sucesso.");
    }
    else{
      System.out.println("Não foi possivel excluir o diretorio");
    }
  }
}

Ao executarmos este código nós teremos o seguinte resultado (assumindo que você tem um diretório chamado "c:\\java"):

Diretorio excluido com sucesso.

Lembre-se de que o método delete() da classe File só permitirá a exclusão do diretório se este estiver vazio.


VB.NET ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Controle

Exercício Resolvido de VB.NET - Como testar se um ano é bissexto em VB.NET - Um programa que lê um ano com quatro dígitos e informa se ele é bissexto ou não

Quantidade de visualizações: 653 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 VB.NET 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.
Resposta/Solução:

Veja a resolução comentada deste exercício usando VB.NET console:

Imports System

Module Program
  ' função principal do programa VB.NET
  Sub Main(args As String())
    ' vamos solicitar que o usuário informe um ano
    Console.Write("Informe o ano: ")
    Dim ano As Integer = Int32.Parse(Console.ReadLine())

    ' vamos verificar se o ano informado é bissexto
    If (((ano Mod 4 = 0) And (ano Mod 100 <> 0)) Or (ano Mod 400 = 0)) Then
      Console.WriteLine("O ano informado é bissexto.")
    Else
      Console.WriteLine("O ano informado não é bissexto.")
    End If

    Console.WriteLine(vbCrLf & "Pressione qualquer tecla para sair...")
    ' pausa o programa
    Console.ReadKey()
  End Sub

End Module



C# ::: Dicas & Truques ::: Data e Hora

Como calcular os dias restantes para uma data em C# usando um objeto TimeSpan

Quantidade de visualizações: 9348 vezes
Em algumas ocasiões precisamos saber a quantidade de dias restantes para uma determinada data no futuro em C# (próximo Natal, próxima Páscoa, vencimento de uma duplicata, etc). O trecho de código abaixo mostra como isso pode ser feito. Veja que usamos o construtor da estrutura DateTime para construir a data no futuro e então subtraímos desta a data atual. Em seguida obtemos a quantidade de dias do TimeSpan resultante:

static void Main(string[] args){
  // vamos obter a quantidade de dias restantes para o Natal de
  // 2009
  DateTime data_futura = new DateTime(2009, 12, 25);  // 25/12/2009
  DateTime hoje = DateTime.Now;

  // obtém a quantidade de dias restantes
  TimeSpan dif = data_futura.Subtract(hoje);
  int restantes = dif.Days + 1; // dia de hoje na contagem

  // exibe o resultado
  System.Console.WriteLine("Faltam " + restantes + " dias para " +
    "o Natal de 2009");

  // pausa o programa
  Console.ReadKey();
}



C ::: Desafios e Lista de Exercícios Resolvidos ::: C Básico

Exercícios Resolvidos de C - Como testar se um número é potência de dois usando C

Quantidade de visualizações: 662 vezes
Pergunta/Tarefa:

Escreva um programa C contendo um método que recebe um número inteiro e retorna um valor boolean indicando se o valor informado é potência de dois.

Sua saída deverá ser parecida com:

Informe um valor inteiro: 8
O valor 8 é potência de dois
Informe um valor inteiro: 34
O valor 34 não é potência de dois
Informe um valor inteiro: 64
O valor 64 é potência de dois
Resposta/Solução:

Veja a resolução comentada deste exercício usando C:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

// função que recebe um número inteiro e informe se ele é
// potência de dois
int is_potencia_dois(int n){
  // usamos o operador AND de bits para verificar se n AND n-1
  // é igual a 0
  return (n > 0) && (n & (n - 1)) == 0;
}

int main(int argc, char *argv[]){
  // variáveis usadas para 
  int valor;
  
  setlocale(LC_ALL,""); // para acentos do português
 
  // vamos pedir para o usuário informar um valor inteiro
  printf("Informe um valor inteiro: ");
  scanf("%d", &valor);
    
  // vamos testar se o número informado é potência de dois
  if(is_potencia_dois(valor)){
    printf("O valor %d é potência de dois", valor);
  }
  else{
    printf("O valor %d não é potência de dois", valor);
  }
 
  printf("\n\n");
  system("PAUSE");	
  return 0;
}



Java ::: Fundamentos da Linguagem ::: Estruturas de Controle

Tutorial de Java - Como usar a instrução condicional if e if...else do Java

Quantidade de visualizações: 54103 vezes
Instruções if e if...else permitem executar trechos de códigos baseado em condições. Veja um exemplo:

public class Estudos{
  public static void main(String args[]){
    int valor = 5;
    
    if(valor > 3)
      System.out.println("Valor maior que 3");
  }
}

Neste programa, a instrução

System.out.println("Valor maior que 3");

será executada somente se o teste (valor > 3) for verdadeiro. Observe que a expressão de teste deverá sempre ser do tipo boolean (true ou false).

Neste exemplo temos apenas uma instrução a ser executada. Isso dispensa o uso das chaves ao redor do bloco de códigos. Se o bloco contiver mais de uma instrução, as chaves são necessárias. Veja:

public class Estudos{
  public static void main(String args[]){
    int valor = 5;
    
    if(valor > 3){
      System.out.println("Valor maior que 3");
      System.out.println("O valor é: " + valor);
    }
  }
} 

A instrução if...else (se...senão) é usada quando queremos fornecer um caminho alternativo ao código. Veja:

public class Estudos{
  public static void main(String args[]){
    int valor = 1;
    
    if(valor > 3)
      System.out.println("Valor maior que 3");
    else
      System.out.println("Valor menor que 3");
  }
}

Você pode ainda usar if...else if...else (se...senão se...senão). Veja:

public class Estudos{
  public static void main(String args[]){
    int valor = 3;
    
    if(valor > 3)
      System.out.println("Valor maior que 3");
    else if(valor < 3)
      System.out.println("Valor menor que 3");
    else
      System.out.println("Valor é igual a 3");
  }
} 



JavaScript ::: JavaScript para Engenharia ::: Geometria Analítica e Álgebra Linear

Como calcular a norma ou módulo de vetores nos espaços R2 e R3 usando JavaScript - Geometria Analítica e Álgebra Linear usando JavaScript

Quantidade de visualizações: 2516 vezes
Em Geometria Analítica e Álgebra Linear, a magnitude, norma, comprimento, tamanho ou módulo (também chamado de intensidade na Física) de um vetor é o seu comprimento, que pode ser calculado por meio da distância de seu ponto final a partir da origem, no nosso caso (0,0).

Considere o seguinte vetor no plano, ou seja, no espaço bidimensional, ou R2:

\[\vec{v} = \left(7, 6\right)\]

Aqui este vetor se inicia na origem (0, 0) e vai até as coordenadas (x = 7) e (y = 6). Veja sua plotagem no plano 2D:



Note que na imagem já temos todas as informações que precisamos, ou seja, o tamanho desse vetor é 9 (arredondado) e ele faz um ângulo de 41º (graus) com o eixo x positivo. Em linguagem mais adequada da trigonometria, podemos dizer que a medida do cateto oposto é 6, a medida do cateto adjacente é 7 e a medida da hipotenusa (que já calculei para você) é 9.

Note que já mostrei também o ângulo theta (__$\theta__$) entre a hipotenusa e o cateto adjacente, o que nos dá a inclinação da reta representada pelos pontos (0, 0) e (7, 6).

Relembrando nossas aulas de trigonometria nos tempos do colegial, temos que o quadrado da hipotenusa é a soma dos quadrados dos catetos, ou seja, o Teorema de Pitágoras:

\[a^2 = b^2 + c^2\]

Como sabemos que a potenciação é o inverso da radiciação, podemos escrever essa fórmula da seguinte maneira:

\[a = \sqrt{b^2 + c^2}\]

Passando para os valores x e y que já temos:

\[a = \sqrt{7^2 + 6^2}\]

Podemos comprovar que o resultado é 9,21 (que arredondei para 9). Não se esqueça da notação de módulo ao apresentar o resultado final:

\[\left|\vec{v}\right| = \sqrt{7^2 + 6^2}\]

E aqui está o código JavaScript que nos permite informar os valores x e y do vetor e obter o seu comprimento, tamanho ou módulo:

<html>
<head>
  <title>Estudos JavaScript</title>
</head>
 
<body>
 
<script type="text/javascript">
  // vamos declarar os valores x e y
  var x = 7;
  var y = 6;
  
  // vamos calcular a norma do vetor
  var norma = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
    
  // mostra o resultado
  document.writeln("A norma do vetor é: " + norma);
</script>
 
</body>
</html>

Ao executar este código JavaScript nós teremos o seguinte resultado:

A norma do vetor é: 9.219544457292887

Novamente note que arredondei o comprimento do vetor para melhor visualização no gráfico. Para calcular a norma de um vetor no espaço, ou seja, no R3, basta acrescentar o componente z no cálculo.


Python ::: Python para Engenharia ::: Física - Mecânica - Estática

Como calcular o centroide ou centro de gravidade de um triângulo em Python

Quantidade de visualizações: 1931 vezes
O centro de gravidade, ou centroide (centro geométrico), é o ponto no qual a massa de um triângulo se equilibra. Para ajudar a visualizar isso, imagine uma figura triangular suspensa sobre a ponta de um lápis. A figura vai se equilibrar se a ponta do lápis for posicionada em seu centro de gravidade. Encontrar o centroide pode ser necessário em vários projetos e aplicações de engenharia, e pode ser encontrado usando geometria simples.

Veja a seguinte figura:



Nesta figura nós temos os três vértices do triângulo devidamente registrados, assim como o ponto representando seu centroide. Assim, a fórmula do centroide do triângulo é:

\[x_c = \frac{x_1 + x_2 + x_3}{3}\]
\[y_c = \frac{y_1 + y_2 + y_3}{3}\]

Agora vamos ver como calcular o centro de gravidade do triângulo em Python. Para isso nós vamos pedir para o usuário informar as coordenadas dos três vértices do triângulo e, em seguida, vamos mostrar as coordenadas do ponto que representa o centroide. Veja:

# função principal do programa
def main():
  # vamos ler as coordenadas do primeiro vértice
  va_x = float(input("Informe o x do primeiro vértice: "))
  va_y = float(input("Informe o y do primeiro vértice: "))

  # vamos ler as coordenadas do segundo vértice
  vb_x = float(input("Informe o x do segundo vértice: "))
  vb_y = float(input("Informe o y do segundo vértice: "))

  # vamos ler as coordenadas do terceiro vértice
  vc_x = float(input("Informe o x do terceiro vértice: "))
  vc_y = float(input("Informe o y do terceiro vértice: "))
  
  # vamos calcular as coordenadas do centroide
  c_x = (va_x + vb_x + vc_x) / 3
  c_y = (va_y + vb_y + vc_y) / 3

  # vamos mostrar o resultado
  print("As coordenadas do centroide são: x={0}; y={1}".format(
    round(c_x, 2), round(c_y, 2))) 

if __name__== "__main__":
  main()

Ao executar este código Python nós teremos o seguinte resultado:

Informe o x do primeiro vértice: 3
Informe o y do primeiro vértice: 10
Informe o x do segundo vértice: 12
Informe o y do segundo vértice: 15
Informe o x do terceiro vértice: 14
Informe o y do terceiro vértice: 7
As coordenadas do centroide são: x=9.67; y=10.67


C# ::: Dicas & Truques ::: Strings e Caracteres

Como retornar um caractere a partir de seu código ASCII em C# usando o método ToChar() da classe Convert

Quantidade de visualizações: 297 vezes
A classe Convert, do namespace System, possui vários métodos que possibilitam a conversão entre tipos base. Um destes métodos nos permitem informar um número inteiro e obter o caractere ou letra correspondente.

Veja um techo de código no qual informamos o valor 65 e obtemos, como retorno, a letra "A":

using System;

namespace Estudos {
  class Program {
    static void Main(string[] args) {
      int codigo = 65;
      char letra = Convert.ToChar(codigo);

      Console.WriteLine("A letra para o código ASCII {0} é {1}", 
        codigo, letra);

      Console.WriteLine("\n\nPressione uma tecla para sair...");
      Console.ReadKey();
    }
  }
}

Ao executarmos este código C# nós teremos o seguinte resultado:

A letra para o código ASCII 65 é A

Carregar Publicações Anteriores


Nossas 20 dicas & truques de programação mais populares

Você também poderá gostar das dicas e truques de programação abaixo

Nossas 20 dicas & truques de programação mais recentes

Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site

Últimos Exercícios Resolvidos

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 32 usuários muito felizes estudando em nosso site.