PROBLEMA CON UNA VARIABLE

Iniciado por magv1991, 21 Febrero 2014, 13:53 PM

0 Miembros y 1 Visitante están viendo este tema.

magv1991

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;
}

eferion

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.

NikNitro!

Yo eso no lo leo... Si lo cambias me avisas. Con seguir los consejos de eferion debería bastar.

Salud;)