Alguien que entienda de C++? Need help

Trolli

Tengo un programa pero estoy estancado en una función que no me acaba de salir, es C++ orientado a objetos, me gustaría resolverlo por MP ya que el programa no me pertenece a mí realmente (es de un amigo) y me da cosa colgarlo por aquí...
Alguien me podría ayudar? Muchas gracias!

Thanat0s

Puedes colgar la parte del código donde tienes el problema y te podemos orientar.

HeXaN

Vamos, que le has chirlado las prácticas a un colega y lo que has hecho tú no te rula xD

1 1 respuesta
Trolli

#3 Nope, yo he hecho Java y C, pero C++ OO nunca, me ha pasado la práctica un amigo para ayudarle y me falta una cosa que no me acaba de salir :/

Es una cosa bastante sencilla, te pregunta el perímetro de cualquier polígono.
El polígono puede ser de entre 3 y 15 vértices, y para entrar los datos das coordenadas.
Ejemplo:

Entra el número de vértices:
-> aquí escribes el número entre 3-15
Coordenadas vértice 1
-> 0, 0
Coordenadas vértice 2
-> 0, 1
Coordenadas vértice 3
-> 0, 2

Ahí te tiene que responder el perímetro (y otras cosas, todo lo demás lo tengo pero el puto perímetro no acaba de salir)
Lo he querido hacer con un for, el código que he puesto es:

 float auxiliar=0;
              float perimetro1=0;
              float perimetro2=0;
              
for (int i=1; i<nvertex; i++) { //Aquí tengo que calcular la distancia entre los 2 puntos, y se lo asigno a auxiliar auxiliar = sqrt(pow(vertex[i][0] - vertex[i-1][0], 2) + pow(vertex[i][1] - vertex[i-1][1], 2)); perimetro1 = auxiliar; } auxiliar = sqrt(pow(vertex[0][0] - vertex[nvertex-1][0],2) + pow(vertex[0][1] - vertex[nvertex-1][1],2)); perimetro2 = auxiliar; perimetro=perimetro1+perimetro2;

Creo que el problema es que no "guarda" para sumar todas las distancias de los puntos, y lo sobreescribe...
A ver si se puede entender con esta parte, sino a ver si alguien me puede echar una mano por MP u.u

Daredevil

Desde luego no sé que tendrás mal en el código... pero el algoritmo que empleas para calcular un perímetro da pánico. Un perímetro es la suma de todos los lados y punto, no hay que desglosarlo en partes, ni emplear variables auxiliares ni nada de nada.

1 respuesta
Trolli

#5 Claro, pero ese es el algoritmo para calcular los lados si te los dan en distancia numérica.
Si te lo dan en coordenadas, imagínate que te dan coordenadas negativas, ya cambia la cosa, la fórmula para ser exactos es

Te lo pongo de otra manera sin tanto auxiliar (eso lo tenía por otras cosas que pedían tenerlo más a mano, pero no problem)

float auxiliar=0;
              
for (int i=1; i<nvertex; i++) { //calcular la distancia entre 2 puntos y asignamos a auxiliar auxiliar = sqrt(pow(vertex[i][0] - vertex[i-1][0],2) + pow(vertex[i][1] - vertex[i-1][1],2)); perimetro = perimetro+auxiliar; } auxiliar = sqrt(pow(vertex[0][0] - vertex[nvertex-1][0],2) + pow(vertex[0][1] - vertex[nvertex-1][1],2)); perimetro = perimetro+auxiliar;

Claro, lo que debe hacer es ir acumulando todas las distancias de todos los lados, para luego hacer la fórmula, pero creo que como digo, va sobreescribiendo y no guarda cada lado lo que hace.

1 respuesta
Daredevil

No me has entendido... para calcular la distancia entre dos puntos tienes que emplear esa fórmula lógicamente, pero la aplicas con el bucle que más rabia te de y punto. No necesitas variables auxiliares ni nada, con un simple sumatorio dentro del bucle ya está, a eso me refería con el algoritmo que empleas.

Thanat0s

#6 Veo que dejas fuera del for el caso especial que es el tamaño del primer vértice con el último vértice.

Bien, tiene pinta de que todo lo hace bien, coge cada vértice, calcula el tamaño y lo suma acumulándolo en perímetro.

No veo por ningún lado dónde lo está sobreescribiendo.

Lo único que puedes estar haciendo mal es la llamada a la función/método o que estés retornando el valor equivocado.

eZpit
float perimetro = 0f;
for (int i=1; i<nvertex; i++) 
{
    perimetro += sqrt(pow(vertex[i][0] - vertex[i-1][0], 2) + pow(vertex[i][1] - vertex[i-1][1], 2)); 
}      
perimetro += sqrt(pow(vertex[0][0] - vertex[nvertex-1][0],2) + pow(vertex[0][1] - vertex[nvertex-1][1],2));

No veo errores en este código (que es el tuyo, pero sin toda la paja innecesaria).

¿Estás seguro que estas almacenando bien la input del teclado en los "vertex[][]" y que nvertex es correcto?

Usuarios habituales

  • eZpit
  • Thanat0s
  • Daredevil
  • Trolli
  • HeXaN