Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Grixis en 19 Julio 2010, 00:37 am



Título: [?][C++] no funcionan, se vuelven infinitos, que error cometi :(
Publicado por: Grixis en 19 Julio 2010, 00:37 am
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
  1. # include <stdio.h>
  2. # include <conio.h>
  3. # include <windows.h>
  4. # include <math.h>
  5. # include <string.h>
  6.  
  7. main(void)
  8. {
  9.          int opcion,j,i,fun;
  10.          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;
  11.          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;
  12.          system ("color 0a");
  13.          printf("\nMENU\n");
  14.          printf("                                        \n");
  15.         printf("1.-Newton Raphson\n");
  16.          printf("2.-Gauss Seidel\n");
  17.          printf("Ingrese su Opcion\n");
  18.          scanf("%d",&opcion);
  19.          switch(opcion)
  20.          {
  21.                        case 1:
  22.                             printf("Ha seleccionado: Newton Raphson\n");
  23.                             printf("La Ecuacion a Evaluar sera: x^2*E^x\n");
  24.                             printf("F'(x)=2x*E^x\n");
  25.                             printf("Ingrese x0:\n");
  26.                             scanf("%f",&x0);
  27.                             printf("Ingrese la Tolerancia:\n");
  28.                             scanf("%f",&es);
  29.                             do
  30.                             {
  31.                             printf("\n--------------------------------------\n");
  32.                             fx=pow(x0,2)*exp(x0);
  33.                             fx0=(2*x0)*exp(x0);
  34.                             if (fx0!=0)
  35.                             {
  36.                                        printf("el valor de F(x): %.4f\n",fx);
  37.                                        printf("el valor de F'(x): %.4f\n",fx0);
  38.                                        xi1=x0-(fx/fx0);
  39.                                        printf("el valor de xi+1: %.4f\n",xi1);
  40.                                        ea=fabs((xi1-x0)/xi1)*100;
  41.                                        printf("El valor relativo fue: %.4f \%",ea);
  42.                                        }
  43.                                        else
  44.                                        {
  45.                                            printf("Ya que F'(x)=0, no se puede aplicar el metodo\n");
  46.                                            }
  47.  
  48.                                            printf("\n--------------------------------------\n");
  49.                                            x0=xi1;
  50.                                            fx=pow(x0,2)*exp(x0);
  51.                                            fx0=(2*x0)*exp(x0);
  52.                                            if (fx0!=0)
  53.                                            {
  54.                                                      printf("el valor de F(x): %.4f\n",fx);
  55.                                                      printf("el valor de F'(x): %.4f\n",fx0);
  56.                                                      xi2=x0-(fx/fx0);
  57.                                                       printf("el valor de xi+1: %.4f\n",xi2);
  58.                                                       }
  59.                                                       else
  60.                                        {
  61.                                            printf("Ya que F'(x)=0, no se puede aplicar el metodo\n");
  62.                                            }
  63.                                            ea=fabs((xi2-x0)/xi2)*100;
  64.                                            printf("El valor relativo fue: %.4f \%",ea);
  65.                                            printf("\n--------------------------------------\n");
  66.                                            }while (ea>es);
  67.                             break;
  68.  
  69.                             case 2:
  70.                             printf("Ha seleccionado Gauss Seidel\n");
  71.                             printf("Ingrese la Matriz 3x4\n");
  72.                             for(i=1;i<=3;i++)
  73.                             for(j=1;j<=4;j++)
  74.                             {
  75.                                              printf("Ingrese el elemento  %d,%d de la matriz:", i,j);
  76.                                              scanf("%f",&mat[i][j]);
  77.                                              }
  78.                                              printf("La matriz generada fue:\n");
  79.                                              for(i=1;i<=3;i++)
  80.                                              {
  81.                                                               for (j=1;j<=4;j++)
  82.                                                               {
  83.                                                               printf("\t%f",mat[i][j]);
  84.                                                               }
  85.                                                               printf("\n");
  86.                                                               }
  87.                                                               printf("Ingrese la Tolerancia:\n");
  88.                                                               scanf("%f",&es);
  89.                                                               do
  90.                                                               {
  91.                                                                       printf("\n--------------------------------------\n");
  92.                                                                       a1=mat[1][4]-((mat[1][2]+mat[1][3])/mat[1][1]);
  93.                                                                       a2=mat[2][4]-((mat[2][1]+mat[2][3])/mat[2][2]);
  94.                                                                       a3=mat[3][4]-((mat[3][1]+mat[3][2])/mat[3][3]);
  95.                                                                       printf("el valor de X1 fue: %.4f\n",a1);
  96.                                                                       printf("el valor de X2 fue: %.4f\n",a2);
  97.                                                                       printf("el valor de X3 fue: %.4f\n",a3);
  98.                                                                       ea1=fabs((b1-a1)/b1)*100;
  99.                                                                       ea2=fabs((b2-a2)/b2)*100;
  100.                                                                       ea3=fabs((b3-a3)/b3)*100;
  101.                                                                       printf ("Ea1=%.2f\n",ea1);
  102.                                                                       printf ("Ea2=%.2f\n",ea2);
  103.                                                                       printf ("Ea3=%.2f\n",ea3);
  104.                                                                       printf("\n--------------------------------------\n");
  105.                                                                       b1=mat[1][4]-(((mat[1][2]*a2)+(mat[1][3]*a3))/mat[1][1]);
  106.                                                                       b2=mat[2][4]-(((mat[2][1]*b1)+(mat[2][3]*a3))/mat[2][2]);
  107.                                                                       b3=mat[3][4]-(((mat[3][1]*b1)+(mat[3][2]*b2))/mat[3][3]);
  108.                                                                       ea1=fabs((b1-a1)/b1)*100;
  109.                                                                       ea2=fabs((b2-a2)/b2)*100;
  110.                                                                       ea3=fabs((b3-a3)/b3)*100;
  111.                                                                       printf("el valor de X1 fue: %.4f\n",b1);
  112.                                                                       printf("el valor de X2 fue: %.4f\n",b2);
  113.                                                                       printf("el valor de X3 fue: %.4f\n",b3);
  114.                                                                       printf ("Ea1=%.2f\n",ea1);
  115.                                                                       printf ("Ea2=%.2f\n",ea2);
  116.                                                                       printf ("Ea3=%.2f\n",ea3);
  117.                                                                       }while ((ea1>es) and (ea2>es) and (ea3>es));
  118.                                                                       break;
  119.  
  120.                                                                       getch ();


Título: Re: [?][C++] no funcionan, se vuelven infinitos
Publicado por: 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%.


Título: Re: [?][C++] no funcionan, se vuelven infinitos
Publicado por: Grixis en 19 Julio 2010, 00:47 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


Título: Re: [?][C++] no funcionan, se vuelven infinitos, que error cometi :(
Publicado por: do-while en 19 Julio 2010, 01:17 am
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:
Código
  1. if()
  2. {
  3.    for(;;)
  4.    {
  5.    }
  6. }
  7. else
  8. {
  9.    do{
  10.    }while();
  11. }
  12.  
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!


Título: Re: [?][C++] no funcionan, se vuelven infinitos, que error cometi :(
Publicado por: nicolas_cof en 19 Julio 2010, 01:59 am
Grixis, ademas de lo ya mencionado, algunos consejos...

Código:
main(void)

Código:
#include <conio.h>

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

Código:
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...

Código:
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.