FórumGdH

Página Inicial do Guia do Hardware

Registrar FAQ Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Voltar   FórumGdH > Profissional > Programação, scripts, web e banco de dados
Bem-vindo ao FórumGdH
Não se esqueça de se registrar, é grátis . Nós temos 754.120 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.

Resposta
 
Opções do Tópico
Antigo 25-10-2004, 13:23   #1 (permalink)
spynet
Membro Senior
 
Registrado em: Sep 2002
Localização: SP
Mensagens: 373
Reputação: 20 spynet está indo no caminho certo
Enviar mensagem via ICQ para spynet
Padrão Calcula distancia entre cidades

Olá pessoal, blz??
Preciso desenvolver um sistema que calcula distancia entre cidades como tem no link abaixo:

http://www.dnit.gov.br/rodovias/distancias/distancias.asp

Mais nao sei nem por onde começar, pq preciso fazer em .txt pq o servidor nao suporta .mdb

Qual seria a lógica do calculo???
Pq se alguem tiver um exemplo ae que possa me ajudar agradeceria.

[]s,
Adilson
__________________
=================================
Shopmedia Corporative Internet & System
http://www.shopmedia.com.br
=================================
spynet está offline   Responder com Quote
Antigo 25-10-2004, 14:36   #2 (permalink)
rodrigozk
Novo Membro
 
Registrado em: Sep 2004
Mensagens: 113
Reputação: 16 rodrigozk está indo no caminho certo
Enviar mensagem via ICQ para rodrigozk Enviar mensagem via MSN para rodrigozk
Padrão

Fica dificil dizer qual a lógica foi utilizada, as vezes não foi nem lógica, e sim repetitivos comandos do tipo:
Se campo a = Americana E Se Campo b = São Paulo
Imprima 133km

Para você fazer isso, você pode achar no Mapa Rodoviário, uma tabela com distâncias entre as principais cidades brasileiras.


Bem, de todo jeito da pra você fazer uma lógica sim, por exemplo, criar uma matriz e inserir as cidades nela, e então calcular a distância entre os pontos da matriz. Vou explicar melhor. Pense que você tem uma tabela e a tabela tem vários pontos, que por sua vez são cidades. Para você achar a distância da cidade, você teria apenas que calcular a distância entre dois pontos da tabela(no caso a matriz). Se você disser a linguagem de programação que irá usar, talvez eu possa te ajudar mais, até dando um exemplo(eu sei programar em C). Mas de todo jeito aí fica a lógica, se não entender, poste outra mensagem
rodrigozk está offline   Responder com Quote
Antigo 25-10-2004, 15:20   #3 (permalink)
spynet
Membro Senior
 
Registrado em: Sep 2002
Localização: SP
Mensagens: 373
Reputação: 20 spynet está indo no caminho certo
Enviar mensagem via ICQ para spynet
Padrão

E ae blz??
Até entendi o que vc quiz dizer, mais acontece que teremos varias cidades de Origem e varias de Destino, e por isso que estou me complicando... .pq se tivessemos somente uma de Origem poderia ser a Matriz... e para ver a distancia das demais era facil.. .faria gravar no txt assim:
Sao Paulo;Santos;80
Porque na hora de ver a distancia ja teriamos na tela:
Sao Paulo até Santos = 80 km por ex....
Mais aí que o bicho pega.... pq teremos varias cidades que irao ateh Santos..
Bom... terei que fazer em .asp e usar .txt para armazenar dados, pq o bendito servidor que está hospedado nao pode utilizar .mdb.

Abraços e obrigado!
Adilson
__________________
=================================
Shopmedia Corporative Internet & System
http://www.shopmedia.com.br
=================================
spynet está offline   Responder com Quote
Antigo 25-10-2004, 15:29   #4 (permalink)
fdbelo
Tô em todas
 
Registrado em: Jul 2001
Localização: Ludwigsburg - Alemanha
Mensagens: 1.927
Reputação: 24 fdbelo está indo no caminho certo
Enviar mensagem via ICQ para fdbelo Enviar mensagem via MSN para fdbelo
Padrão

Mas você não vai ter todas as distâncias entre as cidades? Se tiver, é só armazenar isso no txt. Se for para calcular a distância através da posição x e y de cada ponto, é só utilizar formula para distância entre dois pontos.
__________________
|Dell Inspiron 6400|Intel Core 2 Duo T7200 (2GHz) |2GB DDR-2 RAM|120GB HD (5.400)|15.4" Wide True Life (1280x800)|Bluetooth integrado, bateria 9 células e mais umas coisinhas |

Folding@Home Member!
fdbelo está offline   Responder com Quote
Antigo 25-10-2004, 15:55   #5 (permalink)
Matheus Villela
Membro Senior
 
Registrado em: Sep 2003
Mensagens: 306
Reputação: 18 Matheus Villela está indo no caminho certo
Padrão

Faz um struct com nome da cidade e suas posições.

Aí faz um array com todas as cidades e suas posições usando o struct.

Um switch pra ver qual cidade foi selecionada, onde caso seja a segunda cidade a cidade antes selecionada seja pulada e pronto, você vai ter quais são as cidades, aí é só fazer um triângulo de pitágoras e partir pro abraço :P

Você pode até ter ao invés de um switch um for ou qualquer coisa assim, talvez tenham métodos melhores pra correlacionar os nomes das cidades mas esse acho que resolve

Resumindo vc tem algo assim:

cidades[0].nome = "cidade A";
cidades[0].x = 10;
cidades[0].y = 20;

cidades[1].nome = "cidade B";
cidades[1].x = 20;
cidades[1].y = 30;

cidades[2].nome = "cidade C";
cidades[2].x = 30;
cidades[2].y = 40;

int cidade[2];
int i;
for(i = 0; i < 2; i++)
switch(pega valor que foi entrado pelo user e retorne tudo minusculo)
case "cidade a":
cidade[i] = 0;
break;

case "cidade b":
cidade[i] = 1;
break;

case "cidade c":
cidade[i] = 2;
break;

default:
ação pra cidade errada
break;

if (cidade[1] == cidade[2])
codigo pra dizer que as cidades saum iguais

calcula distancia, algo como:
(cidades[cidade[1]].x)^2 + (cidades[cidade[1]].y)^2 - ((cidades[cidade[2]].x)^2 + (cidades[cidade[2]].y)^2)


O código aí acima tá longe de ser algo correto, só rascunho mesmo, se eu fosse fazer a forma que me veio à mente foi essa, devem existir outras formas melhores mas tá aí uma que imaginei
Matheus Villela está offline   Responder com Quote
Antigo 25-10-2004, 16:13   #6 (permalink)
fdbelo
Tô em todas
 
Registrado em: Jul 2001
Localização: Ludwigsburg - Alemanha
Mensagens: 1.927
Reputação: 24 fdbelo está indo no caminho certo
Enviar mensagem via ICQ para fdbelo Enviar mensagem via MSN para fdbelo
Padrão

Só corrigindo, a fórmula pra calcular a distância entre dois pontos é [(x1-x2)^2+(y1-y2)^2]^1/2
__________________
|Dell Inspiron 6400|Intel Core 2 Duo T7200 (2GHz) |2GB DDR-2 RAM|120GB HD (5.400)|15.4" Wide True Life (1280x800)|Bluetooth integrado, bateria 9 células e mais umas coisinhas |

Folding@Home Member!
fdbelo está offline   Responder com Quote
Antigo 25-10-2004, 16:47   #7 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Citação:
Faz um struct com nome da cidade e suas posições.

Aí faz um array com todas as cidades e suas posições usando o struct.
Isso é inviável!!! Só o estado de Minas Gerais tem mais de mil municípios... imagine o tamanho que vai ter uma matriz de mil por mil? um milhão vezes o tamanho da struct!!! e o tempo pra consultar, preencher, atualizar essa tabela? E pra armazenar? Inviável!!!

Eu sugiro o seguinte: essas distâncias são rodoviárias, certo? Cadastre as rodovias, e as localidades por onde elas passam...

No modelo que eu pensei, vc vai cadastrar os trechos de rodovia. Cada trecho vai ter uma localidade de início e uma de fim. Vai ter também a distância entre essas localidades, e as coordenadas geográficas dessas localidades. Por fim, cadastre uma lista dos próximos trechos para onde vc pode ir a partir desse trecho.

O que são essas localidades? São cidades e pontos de interseção entre as estradas. Um detalhe: cada trecho deve ser cadastrado 2x, uma para cada direção.

Por fim, crie um índice invertido, com as cidades, a posição geográfica delas, e a rodovia mais próxima. Assim, você tem um ponto de origem e um ponto de destino, e as suas posições geográficas, e as rodovias onde vc deve iniciar e terminar. Assim, você só precisa percorrer, na sua base de rodovias, o trecho entre o início e o fim, de forma que vc tenha uma coordenada geográfica atual, e a cada trecho, vc procure chegar cada vez mais perto da coordenada geográfica de destino. Aí vc simplesmente acumula a distância até o destino.

Acho que a maior vantagem desse método é que seria possível indicar, além da distância, o caminho a ser seguido, incluindo os pontos de referência.

Esse tipo de algoritmo que eu descrevi é chamado de "Algoritmo Guloso", e é apenas um dos conhecidos pra resolver esse tipo de problema, há outros mais eficientes ou mais rápidos.
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 25-10-2004, 16:52   #8 (permalink)
fdbelo
Tô em todas
 
Registrado em: Jul 2001
Localização: Ludwigsburg - Alemanha
Mensagens: 1.927
Reputação: 24 fdbelo está indo no caminho certo
Enviar mensagem via ICQ para fdbelo Enviar mensagem via MSN para fdbelo
Padrão

Mil por mil? Não seria mil por três (cidade, x e y)?

jqueiroz, mas pelo que entendi da sua idéia vc vai fazer o cadastro da posição geográfica das cidades do mesmo jeito, ou seja, é igual a idéia do Matheus, só que ainda inclui mais alguns dados.
__________________
|Dell Inspiron 6400|Intel Core 2 Duo T7200 (2GHz) |2GB DDR-2 RAM|120GB HD (5.400)|15.4" Wide True Life (1280x800)|Bluetooth integrado, bateria 9 células e mais umas coisinhas |

Folding@Home Member!
fdbelo está offline   Responder com Quote
Antigo 25-10-2004, 17:14   #9 (permalink)
Matheus Villela
Membro Senior
 
Registrado em: Sep 2003
Mensagens: 306
Reputação: 18 Matheus Villela está indo no caminho certo
Padrão

Citação:
Postado Originalmente por fdbelo
Só corrigindo, a fórmula pra calcular a distância entre dois pontos é [(x1-x2)^2+(y1-y2)^2]^1/2
Ops, nem vi que tava errado a conta :P de qq forma pensei em coordenadas e não na estrada

Citação:
Postado Originalmente por jqueiroz
Isso é inviável!!! Só o estado de Minas Gerais tem mais de mil municípios...
Não alimente os trolls.
Matheus Villela está offline   Responder com Quote
Antigo 25-10-2004, 18:17   #10 (permalink)
rodrigozk
Novo Membro
 
Registrado em: Sep 2004
Mensagens: 113
Reputação: 16 rodrigozk está indo no caminho certo
Enviar mensagem via ICQ para rodrigozk Enviar mensagem via MSN para rodrigozk
Padrão

Não sei não jqueiroz, essa sua lógica ficaria menor do que a da struct talvez, porém ficaria muito complicada. Depende muito do número de cidades que ele vai colocar. No site que ele mostrou são paenas algumas. De todo jeito, qualquer coia que ele fizer abrangendo todas as cidades vai ocupar muito espaço. Spy, vc sabe quantas cidades você irá colocar?
rodrigozk está offline   Responder com Quote
Antigo 26-10-2004, 6:40   #11 (permalink)
spynet
Membro Senior
 
Registrado em: Sep 2002
Localização: SP
Mensagens: 373
Reputação: 20 spynet está indo no caminho certo
Enviar mensagem via ICQ para spynet
Padrão

E ae pessoal, blz???
Serão aproximadamente 50 cidades.... nao teremos tanta assim, pq eh uma empresa pequena que percorre um certo trecho proximo a cidade dela.
Será praticamente como tem neste site:
http://www.dnit.gov.br/rodovias/distancias/distancias.asp

[]s, e obrigado pela força galera.

Adilson
__________________
=================================
Shopmedia Corporative Internet & System
http://www.shopmedia.com.br
=================================
spynet está offline   Responder com Quote
Antigo 26-10-2004, 10:50   #12 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Citação:
Mil por mil? Não seria mil por três (cidade, x e y)?

jqueiroz, mas pelo que entendi da sua idéia vc vai fazer o cadastro da posição geográfica das cidades do mesmo jeito, ou seja, é igual a idéia do Matheus, só que ainda inclui mais alguns dados.
Pelo que eu entendi, seria mil por mil mesmo: cidades x cidades... origens x destinos.

No meu exemplo, não haveria um array... seriam listas encadeadas. O mais próximo de um array seria a lista invertida, das cidades p/ as localidades de início e fim, mas mesmo assim seria um array N x 1 (um vetor).

Citação:
Serão aproximadamente 50 cidades
Com essa quantidade, realmente o array fica viável. Porém, se vc precisar escalar isso (p/ 100, 200, etc) a coisa vai complicar.

E ainda há a questão de como armazenar isso... ou vc pretende fornecer os valores no código? Lembre-se de que nem sempre o que funciona bem em memória funciona bem em disco... veja só o caso dos algoritmos de sort (bubble x quick): em memória, o quick sort dá um banho, mas em disco o buble é mais rápido...
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 26-10-2004, 12:27   #13 (permalink)
rodrigozk
Novo Membro
 
Registrado em: Sep 2004
Mensagens: 113
Reputação: 16 rodrigozk está indo no caminho certo
Enviar mensagem via ICQ para rodrigozk Enviar mensagem via MSN para rodrigozk
Padrão

1 - Eu acho que o melhor seria você fazer uma matriz e inserir as cidades na matriz

2 - O que são esses sort, buble...?
rodrigozk está offline   Responder com Quote
Antigo 26-10-2004, 13:34   #14 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Citação:
O que são esses sort, buble...?
São algoritmos "clássicos" de ordenação. No "Bubble Sort" você faz passagens lineares na tabela a ser ordenada, comparando cada posição com a próxima, e trocando as duas de posição se estiverem fora da ordem. Quem olha de fora tem a impressão de que os valores maiores vão subindo (ou descendo) como bolhas dentro dágua, daí o nome.

Já no "Quick Sort" você divide a tabela em duas partes; pega o elemento do meio, e arruma de forma que todos os elementos antes dele sejam menores que ele, e todos os elementos depois dele sejam maiores que ele. Depois pega cada uma das duas partes, e repete o processo, recursivamente.
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Resposta


Opções do Tópico

Regras de Mensagens
Você não pode criar tópicos
Você não pode postar respostas
Você não pode anexar arquivos
Você não pode editar suas mensagens

Código vB está Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Ir para...


Horários baseados na GMT -3. Agora são 14:19.