Iniciar sesión

Ver la versión completa : [Ayuda] Un par de preguntas sobre C++



Endher
19/11/2010, 23:10
Estoy haciendo un trabajo de C++ para la universidad, y tengo un par de dudas que no sé solventar (y que creo que son una chorrada xD).

Lo primero es que tengo que usar la función fmod. No nos pone para que sirve, pero googleando he visto que sirve para calcular el resto de una división de dos valores. He visto un ejemplo de como usarla y tengo en mi programa puesto:


phi_p = fmod(suma/angulo);
Las variables están definidas y almacenadas, lo he comprobado metiendo un std::cout justo antes de lo que he puesto. Pero el IDE me da este error:
faltan argumentos para function ‘double fmod(double, double)’

He probado a cambiar suma y angulo por números cualquiera y persiste el error... incluso copiando algún ejemplo de internet en un proyecto nuevo me pasa...

Y otra cosa... me dicen que tengo una variable umbral de salida que puede tener valores de entre 0 y 90º, y me dicen que otra variable vale A si se cumple que phi_p (lo que he puesto antes) es mayor que la variable umbral Y menor que 180 - la variable umbral. Que es -A si es mayor que 180 más la variable umbral Y menor que 360 - la variable umbral, y que vale 0 en el resto de los casos.

He puesto el siguiente código:


for (i=0; i<91; i++)
{
if (phi_p > i && phi_p<(180-i)
{

}

else
{
if (phi_p > (180+i) && phi_p<(360-i)
{

}

else
{

}
}
}


Y no se me ocurre que poner para que luego el programa muestre algo así como: el valor del angulo de doblaje es A de 0 a 34º, -A de 56 a 78º y 0 en los demás.

Seguramente sea sencillo, pero llevo toda la tarde dándole vueltas a este tema y no se me ocurre absolutamente nada...

Gracias de antemano :brindis:

EDIT: tengo añadidas las librerías iostream y cmath, aunque cuando falta la librería da otra clase de error...

Nuria
19/11/2010, 23:24
Por lo que pones, parece que la función fmod necesita dos argumentos y le estás pasando sólo uno.

En vez de fmod(a/b) prueba con fmod(a,b).

juanvvc
19/11/2010, 23:32
phi_p = fmod(suma/angulo);
Las variables están definidas y almacenadas, lo he comprobado metiendo un std::cout justo antes de lo que he puesto. Pero el IDE me da este error:
faltan argumentos para function ‘double fmod(double, double)’



Si pones suma/angulo, la división te la hace directamente y a fmod() solo le llega el resultado, con lo que no puede calcular el resto. Es decir, que no tienes que hacer tú la división, le pasas el numerador y denominador a fmod por separado y ya está


phi=fmod(suma, angulo)

Sobre la segunda duda, la verdad es que no me he enterado de la pregunta.

Endher
19/11/2010, 23:54
Gracias por contestar :brindis:. He cambiado lo de fmod a como me habéis dicho, y en lugar de darme el resto de la división, me devuelve el valor de "suma" :S

Sobre la segunda pregunta, voy a tratar de explicarla mejor. El programa consiste en calcular el ángulo de doblaje de de un robot con un número N de módulos. El valor de ese ángulo de doblaje, depende del resultado del fmod(suma,angulo). Para ello, tengo otra variable que es el umbral de subida, que tiene valores comprendidos entre 0 y 90º.

Lo que pensé en hacer era un for que recorriese todos los ángulos, comenzando por 0 y terminando por 90º. Para determinar el valor del ángulo de doblaje, se tienen que ir viendo que condiciones cumple en cada instante (en 0º, luego en 1º, y así sucesivamente). Las condiciones son las siguientes:

- Ángulo de doblaje = A -> si fmod > el umbral en ese instante y además fmod < 180- el umbral.

- Ángulo de doblaje = -A -> si fmod > 180 + el umbral y además fmod < 360- el umbral.

-Angulo de doblaje = 0 en cualquier otro caso.

Para ir revisando las condiciones, he puesto los bucles que he posteado arriba, pero mi duda es la siguiente. En un intervalo de ángulos (por ejemplo, de 0 a 35), se van a cumplir las condiciones para que sea A, en otro intervalo para que sea -A y en el resto será 0. Lo que quiero es que al final del programa, se muestre por pantalla: El valor del ángulo de doblaje es A en tal intervalo, -A en tal intervalo y 0 en los demás.

Gracias de nuevo :brindis:

juanvvc
20/11/2010, 10:39
Ten en cuenta que si 'suma' es menor que 'angulo', fmod(suma, angulo) va a devolver 'suma' siempre. Creo que tendrás que ponernos un ejemplo con valores reales para ver si realmente fmod() no está funcionando.

En cuanto a la segunda duda, se trata de unas inecuaciones simples que intentas resolver por métodos numéricos. La solución que planteas es muy compleja y nada fácil de programar: tu programa tendrá que ser capaz de identificar los límites de las zonas de transición, y los algoritmos que necesitas ya entrarán dentro del campo de la inteligencia artificial. Son "sencillos", eso sí, pero solo en comparación con otros algoritmos de ese mismo campo :D

Si quieres que el programa saque esa frase "el ángulo vale tanto entre tanto y tanto", es el típico caso es que el problema tienes que resolverlo tú sobre el papel y darle la solución al ordenador. No dejes que el ordenador resuelva las inecuaciones: como te estás dando cuenta, programar el ordenador para que busque la solución es muchísimo más complejo que buscarla tú.

¿Te obligan a dar esa frase al final? Si no te obligan, no lo hagas. Si te obligan, busca otro camino diferente al que estás tomando.

Endher
20/11/2010, 17:42
Gracias juanvvc :)

Al final he conseguido que todo funcione y que hiciese lo que quería con apaños guarros... porque me he dado cuenta que como mucho solo hay un intervalo que cumpla la inecuación, por lo que he metido algunos contadores y tal y ya me sale. No es una solución elegante, al igual que muchas que he tomado, pero al menos la criatura funciona.

Ahora me queda tratar de mejorar el programa, empezando por aplicar herencia de clases (de la que no me entero de nada). Pero bueno, como he dicho antes, esto funciona :D.