Darkside  

Voltar   Darkside > Darkside > Comunidade
FAQ Calendário Postagens do dia Buscapé Search

Responder
 
Thread Tools
Gerson
Trooper
 

Default Programação Simples OO

25-08-06, 18:09 #1
Escrever um algoritmo que leia 10 pontos no plano 2D (cada ponto contém suas coordenadas X e Y) e informe quais são os dois pontos mais próximos.

existe algum jeito de fazer isso orientado a objetos sem fazer um código gigante e pedrero? nao entendo nada de OO...
valeu





Gerson is offline   Reply With Quote
Bombastic
The Alpha Male
 

25-08-06, 18:09 #2
sim, depende principalmente da linguagem

qual é a formula da distancia entre 2 pontos e qual linguagem vc tava pensando?

Bombastic is offline   Reply With Quote
Ted
Trooper
 

Gamertag: MassahudDS PSN ID: massahud Steam ID: massahud
25-08-06, 18:13 #3
class Ponto
{
public Ponto(int x, int y);
public double distancia(Ponto p);
public double getX();
public double getY();
}

Ted is offline   Reply With Quote
tdf
 

Steam ID: tdf
25-08-06, 18:14 #4
Ah, até tava tentando pensar na fórmula aqui, mas não tenho mais saco pra essas coisas... até pq no google tem pronto, algum nerd já pensou nisso pra você, pode ter certeza ehuahe

tdf is offline   Reply With Quote
Ted
Trooper
 

Gamertag: MassahudDS PSN ID: massahud Steam ID: massahud
25-08-06, 18:18 #5
Distancia de 2 pontos é raiz da soma dos quadrados das distâncias x e y (Pitágoras)

Ted is offline   Reply With Quote
Gerson
Trooper
 

25-08-06, 18:19 #6
sim a formula da distancia entre dois pontos eu sei po é só fazer pitágoras e tal
sqrt( sqr(x1-x2) + sqr(y1-y2) ) ou...em OO
sqrt( sqr(p1.getx( ) - p2.getx( )) + sqr(p1.gety( ) - p2.gety( )) )
só que aí olha quantos pontos sao...vai ficar gigante.
por isso que eu queria saber se n tem um jeito mais simples de fazer em OO
valeu a ajuda ae

Gerson is offline   Reply With Quote
Marcelo
Trooper
 

Steam ID: cabelo
25-08-06, 18:23 #7
Dist(a,b) = Raiz( (xa - xb)² + (ya - yb)² )

Eu acho. =)


edit: é, todo mundo postando junto dá nisso. =)


Last edited by Marcelo; 25-08-06 at 18:30..
Marcelo is offline   Reply With Quote
Ted
Trooper
 

Gamertag: MassahudDS PSN ID: massahud Steam ID: massahud
25-08-06, 18:28 #8
Ou voce faz na força bruta verificando todos os pontos entre si O(n^2), ou então usa subdivisão espacial, como uma quadtree, diminuindo a quantidade de pontos que voce precisa olhar.

Ted is offline   Reply With Quote
tdf
 

Steam ID: tdf
25-08-06, 18:33 #9
Será que se eu pensasse muito assim eu ia chegar no teorema de pitágoras um dia?!
ehauheau

tdf is offline   Reply With Quote
Gerson
Trooper
 

25-08-06, 18:38 #10
tdf na 3 serie eu cheguei à conclusão que a soma dos 2 lados de um quadrado é igual a soma dos outros 2 lados do quadrado.
e pois é Ted, não tem jeito mesmo...vai ter que ser na força bruta...fazer o que.
valeu a ajuda ae pessoas

Gerson is offline   Reply With Quote
un4
inativo
 

25-08-06, 18:43 #11
vc dá como entrada 10 pontos e quer os 2 mais próximos entre si?

un4 is offline   Reply With Quote
Ted
Trooper
 

Gamertag: MassahudDS PSN ID: massahud Steam ID: massahud
25-08-06, 18:45 #12
Pra acelerar voce pode nao fazer a raiz, faz so a soma dos quadrados, pois se a soma for menor a raiz tambem é menor.

Ted is offline   Reply With Quote
Gerson
Trooper
 

25-08-06, 18:59 #13
de fato ted
isso ae una.
só to com um problema agora e tal.
como que eu vou fazer pra saber de quais pontos que veio a distancia menor e tal.
imaginem um esquema assim
dist = p1.calcula_distancia(p2)
menor = dist
dist = p1.calcula_distancia(p3)
checa_menor(dist,menor)
dist = p1.calcula_distancia(p4)
checa_menor(dist,menor)
....etc
ok, mas como que eu vou saber de quais pontos que veio o menor?

Gerson is offline   Reply With Quote
Sh3lld3r
Trooper
 

Steam ID: sh3lld3r
25-08-06, 19:07 #14
eu nao vou fazer sua lição de casa deus uhuhuh

:*

Sh3lld3r is offline   Reply With Quote
Biel
Trooper
 

25-08-06, 19:22 #15
eu tenho que fazer um parecido em java pra semana que vem...
se quiser te envio o programa...

Biel is offline   Reply With Quote
Gerson
Trooper
 

25-08-06, 19:30 #16
valeu ae xbiel
acho que isso da talvez...
ufa, me achei


Last edited by Gerson; 25-08-06 at 19:40..
Gerson is offline   Reply With Quote
un4
inativo
 

25-08-06, 20:05 #17
Ficou bem simples a minha implementacao aqui...
Fiz uma classe pro ponto e outra classe responsavel por saber quem é maior e guardar esses pontos..

(ruby)

Code:
class Ponto
  attr_accessor :x, :y
	
  def initialize(x,y)
    self.x, self.y = x, y
  end
	
  def distancia(p)
    dx = x - p.x
    dy = y - p.y
    # vou usar apenas a soma dos quadrados como o ted falou..
    dx.power!(2) + dy.power!(2)
  end
	
  def to_s
    "(#{x},#{y})"
  end
end

class MaiorDistancia
  attr_accessor :distancia, :p1, :p2
	
  def initialize
    @distancia = 0
  end
	
  def testa(p1, p2)
    d = p1.distancia(p2)
    if d > @distancia
      @p1 = p1
      @p2 = p2	
      @distancia = d
    end
  end

end

p = []
md = MaiorDistancia.new


# Adicionando 3 pontos pra testar
p << Ponto.new(2,2)
p << Ponto.new(4,4)
p << Ponto.new(5,5)

# Loop tosco (ordem n^2), mas que evita o calculo
# entre cada ponto mais de 1x e entre ele mesmo

p[0..(p.length) -2].each do |p1|
  p[1..(p.length) -1 ].each do |p2|
    if p1 != p2
      md.testa(p1,p2)
    end
  end
end

# Wheeeee
puts "Maior distancia entre pontos encontrada:"
puts "#{md.p1} e #{md.p2}: #{Math.sqrt(md.distancia)}"
Code:
Maior distancia entre pontos encontrada:
(2,2) e (5,5): 4.24264068711928
eu acho que da pra fazer aquele loop em ruby com 1 linha, mas não to me lembrando como era.. ;(


Last edited by un4; 25-08-06 at 20:16..
un4 is offline   Reply With Quote
Ted
Trooper
 

Gamertag: MassahudDS PSN ID: massahud Steam ID: massahud
25-08-06, 21:17 #18
O loop interno pode ser feito à partir do externo:
Code:
for (i = 0; i < n; i++) {
    for (j = i+1: j < n; j++) {
    }
}
Diminui o tempo, mas continua O(n^2)

Ted is offline   Reply With Quote
Gerson
Trooper
 

26-08-06, 01:15 #19
valeu ae ted e un4

Gerson is offline   Reply With Quote
Responder


Regras de postagem
Você não pode criar novos tópicos
Você não pode postar
Você não pode enviar anexos
Você não pode editar seus posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Atalho para Fóruns



O formato de hora é GMT -3. horário: 14:33.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.