Test Foro de elhacker.net SMF 2.1

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


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

FILE *doc; //usaremos un archivo para guardar los datos obtenidos//

int main(int argc, char *argv[]) {

doc=fopen("posicion del mecanismo 1.txt","w+"); //abrimos y nombramos un archivo de texto//

float r1, r2, r3, r4, t1, t2, t3, t4, f1, f2, dt3, dt4, i, pi;
pi=3.14159265359; //el valor de pi lo usaremos para la conversion de grados a radianes y viceversa//
r1=sqrt(pow(47.5,2)+pow(64,2)); //r1 representa al eslabon fijo y no cambia//
r2=14; //r2 representa al eslabon motriz y no cambia//
r3=80; //r3 representa al eslabon acoplador y no cambia//
r4=51.26; //r4 representa al eslabon salida y no cambia//
t1=atan(64/-47.5)+pi; //t1 representa al angulo de r1 desde las abscisas positivas y no cambia//
t2=45; //t2 representa al angulo inicial de r2 desde las abscisas positivas y varia independientemente//
t3=105*pi/180; //at3 representa la primer aproxiamcion al angulo inicial de r3 desde las abscisas positivas y varia en funcion de t2//
t4=30*pi/180; //at4 representa la primer aproximacion al angulo inicial de r4 desde las abscisas positivas y varia en funcion de t2//
i=1; //i es el numero de iteraciones a realizar del metodo de Newton-Raphson//
printf(" t2\t   t3\t\t   t4\n");
fprintf(doc, " t2\t   t3\t\t   t4\n"); //escribimos los datos en el archivo de texto//
while (t2<=405) //se calcularan los valores reales de los angulos t3 y t4 para valores de t2 desde 45 hasta 360 grados//
{
while (i<=3) //se realizaran 3 iteraciones para determinar el valor real de t3 y t4 para un cierto valor de t2//
{
f1=r1*cos(t1)+r4*cos(t4)-r2*cos(t2*pi/180)-r3*cos(t3); //f1 y f2 representan al vector solucion//
f2=r1*sin(t1)+r4*sin(t4)-r2*sin(t2*pi/180)-r3*sin(t3); //del sistema matricial//
dt3=(f1*cos(t4)+f2*sin(t4))/(r3*(cos(t3)*sin(t4)-sin(t3)*cos(t4))); //dt3 y dt4 representan al vector//
dt4=(f1*cos(t3)+f2*sin(t3))/(r4*(cos(t3)*sin(t4)-sin(t3)*cos(t4))); //incognita del sistema matricial//
t3=t3+dt3; //t3+dt3 representa el valor real de t3 para un cierto valor de t2//
t4=t4+dt4; //t4+dt4 representa el valor real de t4 para un cierto valor de t2//
i=i+1; //iteramos para obtener valores de t3 y t4 que se aproximen mas al real//
}
printf("%3.0f\t%3.4f\t\t%3.4f\n", t2, t3*180/pi, t4*180/pi);
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//
t2=t2+1;
}
fclose (doc); //cerramos y guardamos el archivo//
return 0;
}
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;)