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!
#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
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.
#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.
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.
#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.
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?