Dart ::: Dicas & Truques ::: Aplicativos e Outros

Como calcular a distância entre dois pontos na terra em Dart

Quantidade de visualizações: 1668 vezes
Nesta dica mostrarei como calcular a distância em quilômetros entre dois pontos na terra dadas suas latitudes e longitudes. Neste exemplo eu coloquei o valor de 6378.137 para o raio da terra, mas você pode definir para o valor que achar mais adequado.

O cálculo usado neste código se baseia na Fórmula de Haversine, que determina a distância do grande círculo entre dois pontos em uma esfera, dadas suas longitudes e latitudes.

Veja o código Dart completo:

// Vamos importar a biblioteca dart:io
import "dart:io";

// vamos importar a biblioteca dart:math
import "dart:math";

void main(){
  // vamos ler as latitudes e longitudes das duas
  // localizações
  stdout.write("Informe a primeira latitude: ");
  double lat1 = double.parse(stdin.readLineSync());
  stdout.write("Informe a primeira longitude: ");
  double lon1 = double.parse(stdin.readLineSync());
  stdout.write("Informe a segunda latitude: ");
  double lat2 = double.parse(stdin.readLineSync());
  stdout.write("Informe a segunda longitude: ");
  double lon2 = double.parse(stdin.readLineSync());
  
  // vamos calcular a distância entre os dois pontos em Kms
  double distancia = calcularDistancia(lat1, lat2, lon1, lon2);
    
  // mostramos o resultado
  print("Distância entre os dois pontos: ${distancia} kms");
}

// função que recebe dois pontos na terra e retorna a distância
// entre eles em quilômetros
double calcularDistancia(double lat1,
  double lat2, double lon1, double lon2){
    
  double raio_terra = 6378.137; // raio da terra em quilômetros
    
  // o primeiro passo é converter as latitudes e longitudes
  // para radianos
  lon1 = grausParaRadianos(lon1);
  lon2 = grausParaRadianos(lon2);
  lat1 = grausParaRadianos(lat1);
  lat2 = grausParaRadianos(lat2);
 
  // agora aplicamos a Fórmula de Haversine
  double dlon = lon2 - lon1;
  double dlat = lat2 - lat1;
  double a = pow(sin(dlat / 2), 2) + cos(lat1) * cos(lat2)
    * pow(sin(dlon / 2),2);
             
  double c = 2 * asin(sqrt(a));
 
  // e retornamos a distância    
  return(c * raio_terra);
}

// função que permite converter graus em radianos
double grausParaRadianos(double graus){
  return graus * (pi /  180);
}

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

Informe a primeira latitude: -16.674551
Informe a primeira longitude: -49.303598
Informe a segunda latitude: -15.579321
Informe a segunda longitude: -56.10009
A distância entre os dois pontos é: 736.9183827638687kms

Neste exemplo eu calculei a distância entre as cidades de Goiânia-GO e Cuibá-MT.

A latitude é a distância ao Equador medida ao longo do meridiano de Greenwich. Esta distância mede-se em graus, podendo variar entre 0o e 90o para Norte(N) ou para Sul(S). A longitude é a distância ao meridiano de Greenwich medida ao longo do Equador.


C# ::: Dicas & Truques ::: Arquivos e Diretórios

Como criar um diretório em C# usando a função Create() da classe DirectoryInfo

Quantidade de visualizações: 146 vezes
Nesta dica mostrarei como podemos usar o método Create() da classe DirectoryInfo do C# para criar um novo diretório. Note que informei o caminho e nome do diretório a ser criado diretamente no construtor da classe DirectoryInfo, mas você também pode pedir para o usuário informar estes dados.

Veja o código completo para o exemplo:

using System;
using System.IO;

namespace Estudos {
  class Principal {
    static void Main(string[] args) {
      // vamos criar uma nova instância da classe DirectoryInfo
      DirectoryInfo dir = new
        DirectoryInfo(@"C:\estudos_csharp\imagens");
      
      // vamos tentar criar o diretório
      try {
        dir.Create();
        Console.WriteLine("Diretório criado com sucesso.");
      }
      catch (Exception e) {
        Console.WriteLine("Não foi possível criar o diretório: {0}", e.ToString());
      }
      
      Console.WriteLine("\nPressione uma tecla para sair...");
      Console.ReadKey();
    }
  }
}

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

Diretório criado com sucesso.


C# ::: Dicas & Truques ::: Arquivos e Diretórios

Como renomear ou mover arquivos em C# usando a função Move() da classe File

Quantidade de visualizações: 16542 vezes
O método Move() da classe File é útil quando precisamos renomear ou mover arquivos. Este método recebe os caminhos e nomes antigo e novo do arquivo a ser renomeado ou movido de diretório. Veja um trecho de código no qual mostramos como renomear um arquivo texto (sem movê-lo para um diretório diferente):

static void Main(string[] args){
  // não esqueça
  // using System.IO;
  
  // caminho e nome atual do arquivo
  string antigo = "C:\\estudos_csharp\\arquivo.txt";
  
  // caminho e novo nome do arquivo
  string novo = "C:\\estudos_csharp\\arquivo2.txt";

  // vamos renomear o arquivo
  File.Move(antigo, novo);
  Console.WriteLine("Arquivo renomeado com sucesso.");

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



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

Como testar se um diretório existe em Ruby usando a função File.exist()

Quantidade de visualizações: 6669 vezes
Em algumas situações nós precisamos testar a existência de um diretório na linguagem Ruby. Para isso nós podemos usar a função File.exist?(), que nos retorna um valor True se o diretório existir e False em caso contrário.

Veja o código Ruby completo para o exemplo:

# nome e caminho do diretório a ser testado
diretorio = "C:\\estudos_ruby\\escola"

if File.exist? diretorio
  puts "O diretório existe"
else
  puts "O diretório não existe"
end

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

O diretório existe


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

Como remover parte de uma string em C++ usando a função erase()

Quantidade de visualizações: 17420 vezes
Em algumas situações nós precisamos remover parte de uma palavra, frase ou texto em C++. Para isso nós podemos usar a função erase().

Esta função é usada para remover parte de uma string, consequentemente diminuindo seu tamanho. Veja a sua assinatura:

string& erase(size_t pos = 0, size_t n = npos);
Veja que temos que informar a posição inicial (pos) e a quantidade de caracteres que serão removidos (npos). A string sem a substring removida é retornada ao chamador do método.

Veja o código C++ completo para o exemplo:

#include <string>
#include <iostream>

using namespace std;

int main(int argc, char *argv[]){
  // vamos criar uma string
  string frase("Gosto de MySQL");
   
  // Antes da remoção
  cout << "Antes da remocao: " << frase << endl;
	
  // vamos remover "My"
  string nova_frase = frase.erase(9, 2);
  
  // e mostramos o resultado
  cout << "Depois da remocao: " << nova_frase << endl;
	  
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

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

Antes da remoção: Gosto de MySQL
Depois da remoção: Gosto de SQL


C# ::: Dicas & Truques ::: Tipos de Dados

Como usar os tipos de dados byte e sbyte da linguagem C#

Quantidade de visualizações: 15310 vezes
O tipo de dados byte é usado quando queremos armazenar valores inteiros na faixa de 0 a 255, ou seja, valores inteiros apenas positivos. Veja um exemplo de declaração e definição de uma variável deste tipo:

// uma variável do tipo byte
byte valor = 45;

O tipo byte (que possui 8 bits não sinalizados) é um apelido C# para o tipo System.Byte da plataforma .NET. Note que quando inicializamos uma variável do tipo byte com um literal inteiro, este valor é convertido implicitamente de int para byte. Se o valor sendo definido for maior que a faixa permitida, o programa não compilará. Veja:

// valor fora da faixa suportada pelo tipo byte
byte valor = 290;

Ao tentarmos compilar esta linha teremos o seguinte erro:

Constant value '290' cannot be converted to a 'byte'

Quando se trata de conversões implícitas, um valor do tipo byte pode ser convertido, sem a necessidade de cast, para os tipos short, ushort, int, uint, long, ulong, float, double ou decimal. Veja:

// variável do tipo byte
byte valor = 28;

// variável do tipo float
float valor2 = valor;

O caminho oposto não é verdade, ou seja, não é possível atribuir uma variável do tipo short à uma variável do tipo byte. Veja:

// variável do tipo short
short valor = 50;

// variável do tipo byte
byte valor2 = valor;

// mensagem de erro de compilação
Cannot implicitly convert type 'short' to 'byte'. 
An explicit conversion exists (are you missing a cast?)

Esta conversão não é possível, ainda que o valor contido na variável do tipo short esteja na faixa aceitável pelo tipo byte. Neste caso, um cast (conversão explícita) se faz necessário:

// variável do tipo short
short valor = 50;

// variável do tipo byte
byte valor2 = (byte)valor;

Resumindo, nenhum outro tipo de dados em C# pode ser convertido para o tipo byte implicitamente. Se quiser fazê-lo, use uma conversão explícita (cast).

O tipo sbyte, por sua vez, pode armazenar valores inteiros na faixa de -128 até 127 e possui 8 bits sinalizados. Este tipo é um apelido C# para o tipo de dados System.SByte da plataforma .NET. Veja um exemplo de seu uso:

static void Main(string[] args){
  // variável do tipo sbyte
  sbyte valor = -45;

  // exibe o resultado
  Console.WriteLine("O valor da variável é: " + valor);

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

Note que, a exemplo de byte, o tipo sbyte também é governado por algumas regras de conversão e atribuição de valores literais. Há uma conversão implícita de sbyte para os tipos short, int, long, float, double e decimal. A conversão de qualquer outro tipo de dados para o tipo sbyte só pode ser feita por meio de cast (conversão explícita).


JavaScript ::: DOM (Document Object Model) ::: window Object (Objeto window)

Como usar o objeto window em suas aplicações HTML + JavaScript

Quantidade de visualizações: 8930 vezes
O objeto window representa a janela do browser, uma janela em um frame ou janela de diálogo contendo um documento HTML. Este objeto fornece várias informações a respeito da janela (name, navigator, location, history, etc.), permite acesso ao documento contido na janela e suporta vários métodos úteis (alert(), confirm(), addEventListener(), attachEvent(), etc).

Veja uma página HTML na qual temos um código JavaScript que acessa a janela atual e usa seu método alert() para exibir uma mensagem ao usuário:

<html>
<head>
<title>Estudos JavaScript</title>
</head>
<body>

<script type="text/javascript">
  // vamos exibir uma mensagem ao usuário
  window.alert("JavaScript é muito bacana!");
</script>

</body>
</html>

O objeto window pode também representar uma janela contida em um frame ou em um elemento iframe, ou ainda em uma janela secundária (criada com os métodos open(), showModalDialog() ou showModelessDialog()). Eis algumas observações que devem ser bem memorizadas:

a) Se a janela estiver contida em um frame ou elemento iframe, ela é uma janela filha da janela que contém o elemento frame. Para obter a janela mãe só precisamos usar a propriedade parent da janela filha. Veja:

<script type="text/javascript">
  // vamos obter a janela mãe
  var janela_mae = window.parent;
</script>

b) Se a janela for aberta por meio dos métodos open(), showModalDialog() ou showModelessDialog(), então a janela que a criou pode ser acessada por meio da propriedade opener.

Os membros da janela atual podem ser acessados diretamente, sem a necessidade de passarmos pelo objeto window, ou seja, podemos usar alert() em vez de window.alert(), ainda que a última forma é a preferida.

O objeto window está disponível para acesso a partir de qualquer ponto de nossos códigos JavaScript. Assim, devemos nos esforçar ao máximo para não termos variáveis com o mesmo nome das propriedades e métodos deste objeto.

Dica escrita e testada no Internet Explorer (IE 8) e no Firefox 3.6.


Python ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Controle

Exercícios Resolvidos de Python - Ler os lados de um triângulo e informar se ele é isósceles, escaleno ou equilátero

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

Um triângulo é uma forma geométrica (polígono) composta de três lados, sendo que cada lado é menor que a soma dos outros dois lados. Assim, para que um triângulo seja válido, é preciso que seus lados A, B e C obedeçam à seguinte regra:

A < (B + C), B < (A + C) e C < (A + B).

Escreva um programa Python que leia os três lados de um triângulo e verifique se tais valores realmente formam um triângulo. Se o teste for satisfatório, informe se o triângulo é isósceles (dois lados iguais e um diferente), escaleno (todos os lados diferentes) ou equilátero (todos os lados iguais).

Sua saída deverá ser parecida com:

Informe o primeiro lado do triângulo: 30
Informe o segundo lado do triângulo: 40
Informe o terceiro lado do triângulo: 60
O triângulo é escaleno
Resposta/Solução:

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

# método principal
def main():
  # vamos ler o primeiro lado do triângulo
  lado_a = int(input("Informe o primeiro lado do triângulo: "))
  
  # vamos ler o segundo lado do triângulo
  lado_b = int(input("Informe o segundo lado do triângulo: "))

  # vamos ler o terceiro lado do triângulo
  lado_c = int(input("Informe o terceiro lado do triângulo: "))
    
  # os lados informados formam um triângulo?
  if((lado_a < (lado_b + lado_c)) and (lado_b < (lado_a + lado_c)) 
    and (lado_c < (lado_a + lado_b))):
    # é um triângulo equilátero (todos os lados iguais)?
    if((lado_a == lado_b) and (lado_b == lado_c)):
      print("O triângulo é equilátero")  
    else:
      # é isósceles (dois lados iguais e um diferente)?
      if((lado_a == lado_b) or (lado_a == lado_c) or (lado_c == lado_b)):
        print("O triângulo é isósceles")  
      else:
        # é escaleno
        print("O triângulo é escaleno")
  else:
    print("Os lados informados não formam um triângulo.")
  
if __name__== "__main__":
  main()



C++ ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como usar vetores e matrizes (arrays) na linguagem C++

Quantidade de visualizações: 37999 vezes
Vetores e matrizes, também chamados de arrays em programação, são grupos consecutivos de locais na memória que possuem o mesmo tipo de dados, ou seja, um vetor ou matriz em C++ pode conter apenas elementos do mesmo tipo.

Um vetor é uma matriz de um coluna e várias linhas, enquanto uma matriz é a matriz propriamente dita, ou seja, que possui várias linhas e várias colunas.

Veja um trecho de código no qual temos um vetor contendo 5 elementos do tipo int:

#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
  // declara e inicializa a matriz
  int valores[5] = {65, 3, 8, 41, 12};
 
  // exibe os elementos da matriz
  for(int i = 0; i < 5; i++){
    cout << "Posição: " << i <<
      " - Valor: " << valores[i] << endl;
  }
 
  system("PAUSE"); // pausa o programa
  return 0;
}

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

Posição: 0 - Valor: 65
Posição: 1 - Valor: 3
Posição: 2 - Valor: 8
Posição: 3 - Valor: 41
Posição: 4 - Valor: 12
Pressione qualquer tecla para continuar. . .

Aqui nós usamos a técnica de declarar e inicializar o vetor em uma mesma linha. Em seguida usamos um laço para percorrer todos os elementos. Veja que os elementos do vetor são acessados usando um índice que começa em 0 e vai até a quantidade de elementos menos 1.

Veja agora um trecho de código que declara um vetor e inicializa seus elementos usando um laço for:

#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
  // declara a matriz
  int valores[5];
 
  // inicializa os elementos usando um laço
  for(int i = 0; i < 5; i++){
    valores[i] = 2 * i;
  }
 
  // exibe os elementos da matriz
  for(int i = 0; i < 5; i++){
    cout << "Posição: " << i <<
      " - Valor: " << valores[i] << endl;
  }
 
  system("PAUSE"); // pausa o programa
  return 0;
}

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

Posição: 0 - Valor: 0
Posição: 1 - Valor: 2
Posição: 2 - Valor: 4
Posição: 3 - Valor: 6
Posição: 4 - Valor: 8
Pressione qualquer tecla para continuar. . .

É importante notar que, se não inicializados, os valores dos elementos de um vetor poderão guardar valores aleatórios. Jamais confie que eles terão o valor 0 por padrão.


Delphi ::: VCL - Visual Component Library ::: TEdit

Como obter a quantidade de caracteres no texto de um TEdit do Delphi usando a função SendMessage() da API do Windows e a mensagem WM_GETTEXTLENGTH

Quantidade de visualizações: 11082 vezes
Em algumas ocasiões gostaríamos de obter o tamanho do texto de um TEdit usando apenas as funções da API do Windows. Para isso podemos usar a função SendMessage() em combinação com a mensagem WM_GETTEXTLENGTH.

A função SendMessage() da API do Windows possui a seguinte assinatura em C/C++:

LRESULT SendMessage(          
  HWND hWnd,
  UINT Msg,
  WPARAM wParam,
  LPARAM lParam
);

No arquivo Windows.pas podemos encontrar o protótipo e corpo desta função convertidos para Object Pascal:

// Protótipo
{$EXTERNALSYM SendMessage}
function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; 
  lParam: LPARAM): LRESULT; stdcall;

// Implementação
function SendMessage; external user32 name 'SendMessageW';

Quando usamos a mensagem WM_GETTEXTLENGTH para obter a quantidade de caracteres no texto de um TEdit, o retorno da função SendMessage() é um valor inteiro contendo a quantidade de caracteres na caixa de texto. Os parâmetros wParam e lParam não são usados, ou seja, podemos fornecer o valor 0 para os mesmos. Veja:

procedure TForm1.Button1Click(Sender: TObject);
var
  tamanho: Integer;
begin
  // vamos obter a quantidade de caracteres na caixa de texto
  tamanho := SendMessage(Edit1.Handle, WM_GETTEXTLENGTH, 0, 0);

  // vamos exibir o resultado
  ShowMessage('O edit contém ' + IntToStr(tamanho) + ' caracteres.');
end;

Ao executar este exemplo teremos uma mensagem com um conteúdo parecido com:

O edit contém 10 caracteres.

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á 18 usuários muito felizes estudando em nosso site.