[?][C++] no funcionan, se vuelven infinitos, que error cometi :(

Iniciado por Grixis, 19 Julio 2010, 00:37 AM

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

Grixis

este es solo un trozo de un codigo mas grande que estoy trabajando, lo demas funciona pero estas dos partes no funcionan bien, no dan los resultados y repiten el ciclo infinitamente, estoy usando dev-c++
aca tambien tienen un link con el archivo (.cpp, lei las reglas :P) quisiera que elguien lo probara por si mismo para que vea lo que pasa http://www.mediafire.com/?f8yn9o2oksk4794

Código (cpp) [Seleccionar]
# include <stdio.h>
# include <conio.h>
# include <windows.h>
# include <math.h>
# include <string.h>

main(void)
{
         int opcion,j,i,fun;
         float a,b,es,x,p,fp,fa,fb,p1,ea,x0,fp1,fx,fx0,xi1,mat[3][4],a1,a2,a3,b1,b2,b3,ea1,ea2,ea3,pa[5],ln0,ln2,ln3,ln1,ln4,co1,co2,co3,co4,co0;
         float ex0,ex1,ex2,ex3,ex4,l1,l2,l3,l4,l0,l5,xi2,ln,Ln,LN,Cos,COS,Exp,EXP,va[10],vv,suma,n,f0,func[10],h,con,sum,I;
         system ("color 0a");
         printf("\nMENU\n");
         printf("                                        \n");
        printf("1.-Newton Raphson\n");
         printf("2.-Gauss Seidel\n");
         printf("Ingrese su Opcion\n");
         scanf("%d",&opcion);
         switch(opcion)
         {
                       case 1:
                            printf("Ha seleccionado: Newton Raphson\n");
                            printf("La Ecuacion a Evaluar sera: x^2*E^x\n");
                            printf("F'(x)=2x*E^x\n");
                            printf("Ingrese x0:\n");
                            scanf("%f",&x0);
                            printf("Ingrese la Tolerancia:\n");
                            scanf("%f",&es);
                            do
                            {
                            printf("\n--------------------------------------\n");
                            fx=pow(x0,2)*exp(x0);
                            fx0=(2*x0)*exp(x0);
                            if (fx0!=0)
                            {
                                       printf("el valor de F(x): %.4f\n",fx);
                                       printf("el valor de F'(x): %.4f\n",fx0);
                                       xi1=x0-(fx/fx0);
                                       printf("el valor de xi+1: %.4f\n",xi1);
                                       ea=fabs((xi1-x0)/xi1)*100;
                                       printf("El valor relativo fue: %.4f \%",ea);
                                       }
                                       else
                                       {
                                           printf("Ya que F'(x)=0, no se puede aplicar el metodo\n");
                                           }
                                           
                                           printf("\n--------------------------------------\n");
                                           x0=xi1;
                                           fx=pow(x0,2)*exp(x0);
                                           fx0=(2*x0)*exp(x0);
                                           if (fx0!=0)
                                           {
                                                     printf("el valor de F(x): %.4f\n",fx);
                                                     printf("el valor de F'(x): %.4f\n",fx0);
                                                     xi2=x0-(fx/fx0);
                                                      printf("el valor de xi+1: %.4f\n",xi2);
                                                      }
                                                      else
                                       {
                                           printf("Ya que F'(x)=0, no se puede aplicar el metodo\n");
                                           }
                                           ea=fabs((xi2-x0)/xi2)*100;
                                           printf("El valor relativo fue: %.4f \%",ea);
                                           printf("\n--------------------------------------\n");
                                           }while (ea>es);
                            break;
                           
                            case 2:
                            printf("Ha seleccionado Gauss Seidel\n");
                            printf("Ingrese la Matriz 3x4\n");
                            for(i=1;i<=3;i++)
                            for(j=1;j<=4;j++)
                            {
                                             printf("Ingrese el elemento  %d,%d de la matriz:", i,j);
                                             scanf("%f",&mat[i][j]);
                                             }
                                             printf("La matriz generada fue:\n");
                                             for(i=1;i<=3;i++)
                                             {
                                                              for (j=1;j<=4;j++)
                                                              {
                                                              printf("\t%f",mat[i][j]);
                                                              }
                                                              printf("\n");
                                                              }
                                                              printf("Ingrese la Tolerancia:\n");
                                                              scanf("%f",&es);
                                                              do
                                                              {
                                                                      printf("\n--------------------------------------\n");
                                                                      a1=mat[1][4]-((mat[1][2]+mat[1][3])/mat[1][1]);
                                                                      a2=mat[2][4]-((mat[2][1]+mat[2][3])/mat[2][2]);
                                                                      a3=mat[3][4]-((mat[3][1]+mat[3][2])/mat[3][3]);
                                                                      printf("el valor de X1 fue: %.4f\n",a1);
                                                                      printf("el valor de X2 fue: %.4f\n",a2);
                                                                      printf("el valor de X3 fue: %.4f\n",a3);
                                                                      ea1=fabs((b1-a1)/b1)*100;
                                                                      ea2=fabs((b2-a2)/b2)*100;
                                                                      ea3=fabs((b3-a3)/b3)*100;
                                                                      printf ("Ea1=%.2f\n",ea1);
                                                                      printf ("Ea2=%.2f\n",ea2);
                                                                      printf ("Ea3=%.2f\n",ea3);
                                                                      printf("\n--------------------------------------\n");
                                                                      b1=mat[1][4]-(((mat[1][2]*a2)+(mat[1][3]*a3))/mat[1][1]);
                                                                      b2=mat[2][4]-(((mat[2][1]*b1)+(mat[2][3]*a3))/mat[2][2]);
                                                                      b3=mat[3][4]-(((mat[3][1]*b1)+(mat[3][2]*b2))/mat[3][3]);
                                                                      ea1=fabs((b1-a1)/b1)*100;
                                                                      ea2=fabs((b2-a2)/b2)*100;
                                                                      ea3=fabs((b3-a3)/b3)*100;
                                                                      printf("el valor de X1 fue: %.4f\n",b1);
                                                                      printf("el valor de X2 fue: %.4f\n",b2);
                                                                      printf("el valor de X3 fue: %.4f\n",b3);
                                                                      printf ("Ea1=%.2f\n",ea1);
                                                                      printf ("Ea2=%.2f\n",ea2);
                                                                      printf ("Ea3=%.2f\n",ea3);
                                                                      }while ((ea1>es) and (ea2>es) and (ea3>es));
                                                                      break;
                                                                     
                                                                      getch ();

Shell Root

xD, no se, pero joder que código tan raro y que montón de variables. Además, existen nombres de variables tipo float que son palabras reservadas. o.O"

Que estas haciendo?, creo que hasta se podría recordar el código en un 40%.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Grixis

Cita de: Shell Root en 19 Julio 2010, 00:41 AM
xD, no se, pero joder que código tan raro y que montón de variables. Además, existen nombres de variables tipo float que son palabras reservadas. o.O"

Que estas haciendo?, creo que hasta se podría recordar el código en un 40%.


hay muchas variable porque dije que era parte de un codigo mas grande pero esas dos partes no sirven >.<
es algo para mi clase de calculo
no pego el codigo general completo porque son como 500 lineas asi que solo pegue lo que me causa problemas, lo demas funciona de maravilla

do-while

Por dios, cuida el estilo, ese codigo es casi ilegible. Si tienes un if-else, ponlos uno sobre otro, asi se ve la estructura de un vistazo:

if()
{
    for(;;)
    {
    }
}
else
{
    do{
    }while();
}

y esto, como ves, es aplicable al resto del codigo. Si no sigues unas pautas basicas para ordenar el codigo, dudo mucho que la gente intente descifrar lo que pones, y a ti mismo te resultara imposible en pocos dias saber que es lo que hace cada parte de tu codigo.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

nicolas_cof

Grixis, ademas de lo ya mencionado, algunos consejos...

main(void)

#include <conio.h>

https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

system("color 0a");

Si quieres que tu codigo sea lo mas portable posible evita hacer llamadas al sistema.

Otro punto a tener en cuenta es usar menos llamadas a printf() ya que podes juntar muchas de las cadenas en uno solo cuando sean seguidas, optimizando asi mas el codigo...

printf( "..."
       "..."
       "..."
       "..." );


Y por ultimo, seria bueno que modularices un poco el codigo, ya que como bien te mencionaron es imposible de leer y entender...

http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B/Funciones

Salu10.