Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: magv1991 en 21 Febrero 2014, 13:53 pm



Título: PROBLEMA CON UNA VARIABLE
Publicado por: magv1991 en 21 Febrero 2014, 13:53 pm
Hey que  onda, pues tengo este programa que no cambia las variables t3 y t4, toma el valor inicial definido antes del primer while, y necesito que tome el ultimo valor despues del while interno para iniciar el ciclo. Alguna ayuda :P

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. FILE *doc; //usaremos un archivo para guardar los datos obtenidos//
  6.  
  7. int main(int argc, char *argv[]) {
  8.  
  9. doc=fopen("posicion del mecanismo 1.txt","w+"); //abrimos y nombramos un archivo de texto//
  10.  
  11. float r1, r2, r3, r4, t1, t2, t3, t4, f1, f2, dt3, dt4, i, pi;
  12. pi=3.14159265359; //el valor de pi lo usaremos para la conversion de grados a radianes y viceversa//
  13. r1=sqrt(pow(47.5,2)+pow(64,2)); //r1 representa al eslabon fijo y no cambia//
  14. r2=14; //r2 representa al eslabon motriz y no cambia//
  15. r3=80; //r3 representa al eslabon acoplador y no cambia//
  16. r4=51.26; //r4 representa al eslabon salida y no cambia//
  17. t1=atan(64/-47.5)+pi; //t1 representa al angulo de r1 desde las abscisas positivas y no cambia//
  18. t2=45; //t2 representa al angulo inicial de r2 desde las abscisas positivas y varia independientemente//
  19. t3=105*pi/180; //at3 representa la primer aproxiamcion al angulo inicial de r3 desde las abscisas positivas y varia en funcion de t2//
  20. t4=30*pi/180; //at4 representa la primer aproximacion al angulo inicial de r4 desde las abscisas positivas y varia en funcion de t2//
  21. i=1; //i es el numero de iteraciones a realizar del metodo de Newton-Raphson//
  22. printf(" t2\t   t3\t\t   t4\n");
  23. fprintf(doc, " t2\t   t3\t\t   t4\n"); //escribimos los datos en el archivo de texto//
  24. while (t2<=405) //se calcularan los valores reales de los angulos t3 y t4 para valores de t2 desde 45 hasta 360 grados//
  25. {
  26. while (i<=3) //se realizaran 3 iteraciones para determinar el valor real de t3 y t4 para un cierto valor de t2//
  27. {
  28. f1=r1*cos(t1)+r4*cos(t4)-r2*cos(t2*pi/180)-r3*cos(t3); //f1 y f2 representan al vector solucion//
  29. f2=r1*sin(t1)+r4*sin(t4)-r2*sin(t2*pi/180)-r3*sin(t3); //del sistema matricial//
  30. dt3=(f1*cos(t4)+f2*sin(t4))/(r3*(cos(t3)*sin(t4)-sin(t3)*cos(t4))); //dt3 y dt4 representan al vector//
  31. dt4=(f1*cos(t3)+f2*sin(t3))/(r4*(cos(t3)*sin(t4)-sin(t3)*cos(t4))); //incognita del sistema matricial//
  32. t3=t3+dt3; //t3+dt3 representa el valor real de t3 para un cierto valor de t2//
  33. t4=t4+dt4; //t4+dt4 representa el valor real de t4 para un cierto valor de t2//
  34. i=i+1; //iteramos para obtener valores de t3 y t4 que se aproximen mas al real//
  35. }
  36. printf("%3.0f\t%3.4f\t\t%3.4f\n", t2, t3*180/pi, t4*180/pi);
  37. fprintf(doc, "%3.0f\t%3.4f\t\t%3.4f\n", t2, t3*180/pi, t4*180/pi); //escribimos los datos en el archivo de texto//
  38. t2=t2+1;
  39. }
  40. fclose (doc); //cerramos y guardamos el archivo//
  41. return 0;
  42. }
  43.  


Título: Re: PROBLEMA CON UNA VARIABLE
Publicado por: eferion en 21 Febrero 2014, 14:04 pm
La verdad es que el código es un poco infumable.

Deberías plantearte usar nombres de variables que digan algo... no tiene sentido tener que ir a los comentarios cada vez que veo un tX para saber qué se supone que ha de contener.

Además, la librería math.h ya tiene un define PI , te puedes ahorrar esa variable.

Los valores que son constantes casi es mejor declararlos con #define o con const. de esa forma te aseguras que no los vas a poder modificar por error.

Otro detalle a tener en cuenta es que "i" no está siendo inicializada en cada pasada del primer bucle... por lo que sólo entrarás en el segundo bucle una vez.


Título: Re: PROBLEMA CON UNA VARIABLE
Publicado por: NikNitro! en 21 Febrero 2014, 14:19 pm
Yo eso no lo leo... Si lo cambias me avisas. Con seguir los consejos de eferion debería bastar.

Salud;)