Você está aqui: Cards de Hidrostática |
||
|
||
|
|
||
Python ::: Dicas & Truques ::: Aplicativos e Outros |
Como calcular a distância entre dois pontos na terra em PythonQuantidade de visualizações: 1541 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 Python completo:
# vamos importar o módulo Math
import math
# função que recebe dois pontos na terra e retorna a distância
# entre eles em quilômetros
def calcularDistancia(lat1, lat2, lon1, lon2):
raio_terra = 6378.137 # raio da terra em quilômetros
# o primeiro passo é converter as latitudes e longitudes
# para radianos
lon1 = math.radians(lon1)
lon2 = math.radians(lon2)
lat1 = math.radians(lat1)
lat2 = math.radians(lat2)
# agora aplicamos a Fórmula de Haversine
dlon = lon2 - lon1
dlat = lat2 - lat1
a = math.pow(math.sin(dlat / 2), 2) + math.cos(lat1) * math.cos(lat2) \
* math.pow(math.sin(dlon / 2),2)
c = 2 * math.asin(math.sqrt(a))
# e retornamos a distância
return(c * raio_terra)
# método principal
def main():
# vamos solicitar a latitude e longitude das duas localizações
lat1 = float(input("Informe a primeira latitude: "))
lon1 = float(input("Informe a primeira longitude: "))
lat2 = float(input("Informe a segunda latitude: "))
lon2 = float(input("Informe a segunda longitude: "))
# vamos calcular a distância entre os dois pontos em Kms
distancia = calcularDistancia(lat1, lat2, lon1, lon2)
# mostramos o resultado
print("A distância entre os dois pontos é: {0} kms".format(distancia))
if __name__== "__main__":
main()
Ao executar este código Python 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# ::: Namespace System.Drawing ::: Graphics |
C# Windows Forms - Como passar um objeto da classe Graphics como argumento para um método e usá-lo para desenhar na superfície do formulárioQuantidade de visualizações: 6488 vezes |
Em algumas situações gostaríamos de escrever um método que recebe um objeto da classe Graphics como argumento e usar este objeto para alguma tarefa, por exemplo, desenhar na superfície do formulário. Nesta dica eu mostro como isso é possível. Comece escrevendo o seguinte método:
// um método que recebe um objeto da classe Graphics
private void desenhar(ref Graphics g){
// vamos desenhar uma linha horizontal de 300 pixels na
// cor preta e espessura de 1 pixel
g.DrawLine(new Pen(Color.Black, 1), new Point(20, 80),
new Point(320, 80));
// vamos liberar o objeto Graphics
g.Dispose();
}
Note que, na definição do parâmetro do método nós usamos a palavra-chave ref. Isso foi necessário porque queremos que o objeto Graphics seja passado por referência, uma vez que o estamos liberando dentro do corpo do método com uma chamada ao método Dispose(). Veja agora como obter o objeto Graphics relacionado ao formulário atual e passá-lo ao método desenhar():
private void button1_Click_1(object sender, EventArgs e){
// vamos obter o objeto Graphics relacionado ao formulário atual
Graphics graphics = this.CreateGraphics();
// vamos passar o objeto Graphics para o método desenhar
desenhar(ref graphics);
}
|
Portugol ::: Desafios e Lista de Exercícios Resolvidos ::: Laços de Repetição |
Exercícios Resolvidos de Portugol - A concessionária de veículos "CARANGO VELHO" está vendendo os seus veículos com descontos. Faça um algoritmo PortugolQuantidade de visualizações: 1087 vezes |
|
Pergunta/Tarefa: A concessionária de veículos "CARANGO VELHO" está vendendo os seus veículos com descontos. Faça um algoritmo Portugol que calcule e exiba o valor do desconto e o valor a ser pago pelo cliente de vários carros. O desconto deverá ser calculado de acordo com o ano do veículo. Até o ano 2000 o desconto é 12%, e acima de 2000 o desconto é de 7%. Seu código deverá solicitar o valor do carro e o seu ano e aplicar o desconto correspondente. Além disso o sistema deverá perguntar se deseja continuar calculando descontos até que a resposta seja: "(N) Não". Informar o total de carros com ano até 2000 e o total geral a ser pago pelo cliente. Sua saída deve ser parecida com: Informe o valor do carro sem desconto: 25000 Informe o ano do carro: 2010 Desconto concedido: 1750 Valor do carro com desconto: 23250 Deseja adicionar mais carros? [S, N]: S Informe o valor do carro sem desconto: 30500 Informe o ano do carro: 1985 Desconto concedido: 3660 Valor do carro com desconto: 26840 Deseja adicionar mais carros? [S, N]: S Informe o valor do carro sem desconto: 16800 Informe o ano do carro: 1990 Desconto concedido: 2016 Valor do carro com desconto: 14784 Deseja adicionar mais carros? [S, N]: N Total de carros com ano até 2000: 2 Total geral a pagar: 64874 Veja a resolução comentada deste exercício usando Portugol Webstudio:
programa {
funcao inicio() {
// variáveis usadas na resolução do problema
real valor_carro, valor_desconto, valor_carro_desconto
real total_geral
inteiro ano
inteiro total_carros_ano_2000
caracter resposta
// vamos inicializar os valores de algumas variáveis
total_geral = 0
total_carros_ano_2000 = 0
// repete até que o usuário informe o valor "N"
faca {
// vamos ler o valor do carro sem desconto
escreva("\nInforme o valor do carro sem desconto: ")
leia(valor_carro)
// vamos ler o ano do carro
escreva("Informe o ano do carro: ")
leia(ano)
// o ano é menor ou igual a 2000
se (ano <= 2000) {
valor_desconto = valor_carro * (12.0 / 100.0)
// vamos somar mais este carro
total_carros_ano_2000 = total_carros_ano_2000 + 1
}
senao {
valor_desconto = valor_carro * (7.0 / 100.0)
}
// calculamos o valor do carro com o desconto
valor_carro_desconto = valor_carro - valor_desconto
escreva("Desconto concedido: ", valor_desconto)
escreva("\nValor do carro com desconto: ", valor_carro_desconto)
// somamos mais este valor ao total geral
total_geral = total_geral + valor_carro_desconto
// perguntamos se o usuário deseja adicionar mais carros
escreva("\nDeseja adicionar mais carros? [S, N]: ")
leia(resposta)
} enquanto((resposta != 'N') e (resposta != 'n'))
// mostramos os resultados
escreva("\nTotal de carros com ano até 2000: ", total_carros_ano_2000)
escreva("\nTotal geral a pagar: ", total_geral)
}
}
|
Python ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercício Resolvido de Python - Escreva um programa Python que leia os elementos de um vetor A de dez elementos inteiros e construa outro vetor BQuantidade de visualizações: 499 vezes |
|
Pergunta/Tarefa: Escreva um programa Python que leia os elementos de um vetor A de dez elementos inteiros e construa outro vetor B com seus elementos distribuídos da seguinte forma: Vetor A = [8, 5, 4, 1, 2, 3, 4, 6, 9, 7] Vetor B = [24, 10, 12, 2, 6, 6, 12, 12, 27, 14] Note que os elementos do vetor B seguem um padrão. Se o elemento do vetor A estiver em uma posição par, então o elemento do vetor B será o triplo do elemento do vetor A. Caso contrário o elemento do vetor B será o dobro do elemento do vetor A. Neste exercício a primeira posição/índice dos vetores é assumida como sendo zero. Em algumas linguagens de programação o primeiro índice é um e não zero. Sua saída deverá ser parecida com: Informe o valor do 1.o elemento: 8 Informe o valor do 2.o elemento: 5 Informe o valor do 3.o elemento: 4 Informe o valor do 4.o elemento: 1 Informe o valor do 5.o elemento: 2 Informe o valor do 6.o elemento: 3 Informe o valor do 7.o elemento: 4 Informe o valor do 8.o elemento: 6 Informe o valor do 9.o elemento: 9 Informe o valor do 10.o elemento: 7 Elementos do vetor A: 8, 5, 4, 1, 2, 3, 4, 6, 9, 7 Elementos do vetor B: 24, 10, 12, 2, 6, 6, 12, 12, 27, 14 Veja a resolução comentada deste exercício em Python:
# função principal do programa
def main():
# vamos declarar e construir dois vetores de 10 inteiros
vetor_a = [0 for x in range(10)]
vetor_b = [0 for x in range(10)]
# agora vamos pedir para o usuário informar os valores
# dos elementos do vetor A
for i in range(len(vetor_a)):
vetor_a[i] = int(input("Valor do %d.o elemento: " % ((i + 1))))
# vamos construir o vetor B
for i in range(len(vetor_b)):
# o índice atual é par?
if i % 2 == 0:
vetor_b[i] = vetor_a[i] * 3
else:
vetor_b[i] = vetor_a[i] * 2
# vamos mostrar os elementos do vetor A
print("\nElementos do vetor A:\n")
for i in range(len(vetor_a)):
print("%d, " % vetor_a[i], end=' ')
# vamos mostrar os elementos do vetor B
print("\n\nElementos do vetor B:\n")
for i in range(len(vetor_b)):
print("%d, " % vetor_b[i], end=' ')
if __name__== "__main__":
main()
|
Delphi ::: Dicas & Truques ::: MIDI Musical Instrument Digital Interface, Mapeamento e sequenciamento MIDI, Entrada e saída MIDI |
Como abrir e fechar um dispositivo de saída MIDI usando DelphiQuantidade de visualizações: 11583 vezes |
Quando queremos executar sons MIDI no Windows, a primeira tarefa a ser realizada é abrir o dispositivo de saída MIDI. Isso é feito com uma chamada à função midiOutOpen() da API do Windows. Veja sua assinatura (em C):MMRESULT midiOutOpen( LPHMIDIOUT lphmo, UINT_PTR uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwCallbackInstance, DWORD dwFlags ); Esta função está traduzida na unit MMSystem.pas do Delphi da seguinte forma: function midiOutOpen(lphMidiOut: PHMIDIOUT; uDeviceID: UINT; dwCallback, dwInstance, dwFlags: DWORD): MMRESULT; stdcall; Antes de continuarmos, vamos entender os parâmetros desta função: lphmo - Este é um ponteiro para um HMIDIOUT (que é simplemente um Integer). Este ponteiro é preenchido com um handle identificando o dispositivo de saída MIDI aberto. Este handle é usado para identificar o dispositivo nas demais chamadas de saída MIDI. uDeviceID - Identificador do dispositivo de saída MIDI a ser aberto. O valor 0 aqui é seguro, visto que este identifica o primeiro dispositivo na lista de dispositivos de saída. Veja minha dica "Como obter uma lista dos dispositivos de saída MIDI no sistema" para mais informações. dwCallback - Um ponteiro para uma função de callback, um handle de evento, um identificador de thread ou um handle para uma janela ou thread chamada durante o playback do MIDI para processar mensagens relacionadas ao processo de playback. Se não houver nada a ser processado, podemos definir o valor 0 para este parâmetro. Dê uma olhada na minha dica relacionada à função MidiOutProc(). dwCallbackInstance - Dados de instância do usuário passados para a função de callback. Este parâmetro não é usado em callbacks de janela e thread. É seguro manter seu valor como 0. dwFlags - Flag de callback para abrir o dispositivo. Por enquanto vamos manter seu valor como CALLBACK_NULL. Veja minhas outras dicas sobre o assunto para aprofundar mais neste parâmetro. Agora que aprendemos mais sobre os parâmetros da função midiOutOpen(), vamos ver como usá-la para abrir um dispositivo de saída MIDI e tocar a nota DÓ média (aquela no meio da escala de notas possíveis). Veja o código completo para a unit:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MMSystem;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
dispositivo: HMIDIOUT; // dispositivo de saída MIDI
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var
erro: Word;
begin
erro := midiOutOpen(@dispositivo, 0, 0, 0, CALLBACK_NULL);
// houve erro na abertura do dispositivo de saída MIDI?
if (erro <> 0) then
begin
ShowMessage('Não foi possível abrir o dispositivo MIDI. Erro: ' + IntToStr(erro));
end
else
begin
ShowMessage('Dispositivo MIDI aberto com sucesso.');
// vamos tocar uma nota para nos certificarmos de que o dispositivo
// realmente foi aberto e está funcionando
// vamos tocar a nota DÓ média e com velocidade máxima
midiOutShortMsg(dispositivo, rgb($90, 60, 127));
// vamos deixar a nota soar um pouco
sleep(1000);
// vamos silenciar a nota
midiOutShortMsg(dispositivo, rgb($80, 60, 0));
// finalmente vamos fechar o dispositivo MIDI
midiOutClose(dispositivo);
end;
end;
end.
O primeiro passo foi declarar uma variável do tipo HMIDIOUT: dispositivo: HMIDIOUT; Este é o dispositivo de saída que será usado nas demais chamadas MIDI, incluindo a função midiOutClose(), usada para fechar o dispositivo: midiOutClose(dispositivo); Na API do Windows está função está declarada da seguinte forma: MMRESULT midiOutClose( HMIDIOUT hmo ); Na unit MMSystem.pas do Delphi está função está traduzida da seguinte forma: function midiOutClose(hMidiOut: HMIDIOUT): MMRESULT; stdcall; Veja que só precisamos fornecer o nome da variável representando o dispositivo de saída MIDI aberto no momento para que a função se encarregue de fechá-lo. |
Desafios, Exercícios e Algoritmos Resolvidos de Delphi |
Veja mais Dicas e truques de Delphi |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |




