Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
JavierMarcelo98
Date:
Fri Oct 25 16:01:07 2019 +0000
Parent:
7:ec4c4e249c82
Commit message:
Programa Error.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r ec4c4e249c82 -r a844283ff838 main.cpp
--- a/main.cpp	Fri Oct 25 15:29:08 2019 +0000
+++ b/main.cpp	Fri Oct 25 16:01:07 2019 +0000
@@ -1,6 +1,6 @@
 /* ###########################################################################
 **    Archivo        : main.c
-**    Proyecto       : STM32-103C8_Minimos
+**    Proyecto       : STM32-103C8_Error
 **    Procesador     : STM32F103C8
 **    Herramienta    : Mbed
 **    Version        : Driver 01.01
@@ -70,7 +70,7 @@
 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 */
 void Portada();
-void Principal();
+void Error();
 void Setup(void);  
 /* END definitions */ 
 
@@ -86,7 +86,7 @@
               
 Setup();            // Inicialización del sistema
 Portada();
-Principal();
+Error();
 }
 /* END main */
 
@@ -120,139 +120,121 @@
     terminal.printf("\n\r\t\t\e[1;37m           ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA\e[0m"); 
     terminal.printf("\n\n\r\t\t\e[1;37m                INGENIERIA EN COMUNICACIONES Y ELECTRONICA\e[0m"); 
     terminal.printf("\n\n\r\t\t\e[1;37m                            ANALISIS NUMERICO\e[0m"); 
-    terminal.printf("\n\n\r\t\t\e[1;37m                             PROGRAMA: MINIMOS\e[0m");
+    terminal.printf("\n\n\r\t\t\e[1;37m                              PROGRAMA: ERROR\e[0m");
     terminal.printf("\n\n\r\t\t\e[1;37m                      ALUMNO: MARCELO PADRON JAVIER\e[0m");
     terminal.printf("\n\n\r\t\t\e[1;37m                              GRUPO: 4CV2\e[0m\n\n");
     wait(3.0);//Retardo de 3 segundos   
 }
-void Principal()
-{
-    {
- float  aux[10],aux1[10],auxx[10],resultado[10],suma,sumat[10],tole[10],
-        tole1,tolefin[10],tolerancia,w,x1[10],xy[10][10];
- int    grado,h,i,j;
+
+void error(){
+    int n,x,y,a,i,w;
+    float error=.1;
+    float z;
+    i=1;
+    terminal.printf("Para este programa es necesario que la matriz "); 
+    terminal.printf("\ningresada tenga los coeficientes mas altos\nen la diagonal\n");
+    terminal.printf("Ingrese la cantida de variables a encontrar (cantidad de ecuaciones\n");
+    n=terminal.getc();
+
+    float A[n][n];
+    float B[n];
+    float sig[n];
+    float ant[n];
+    float auxa[n];
+    float auxb=0;
+
+        for (x = 0; x < n; x++){ // CREA 0 en aux
+            auxa[x]=0;
+            sig[x]=0;
+        }
 
- terminal.printf("\nCual es el grado de la ecuaci¢n (2 ¢ 3): \n");
- grado=terminal.getc();
- for(j=0;j<10;j++)
- {
-  auxx[j]=0;
-  }
- for(i=0;i<grado;i++)
- {
-  terminal.printf("\nIngresa la Ecuaci¢n Numero %d \n",i+1);
-  for(j=0;j<grado;j++)
-  {
-   terminal.printf("\nX%d%d= ",i+1,j+1);
-   xy[i][j]=terminal.getc();
-   }
-  terminal.printf("\nY%d=  ",i+1);
-  resultado[i]=terminal.getc();
-  }
- terminal.printf("\nLas ecuaciones que ingresaste son:\n");
- for(i=0;i<grado;i++)
- {
-  for(j=0;j<grado;j++)
-  {
-   terminal.printf(" %.0f[X%d]",xy[i][j],j+1);
-   if(j==0)
-    printf("+");
-   }
-  terminal.printf("=",i+1);
-  terminal.printf("%.0f",resultado[i]);
-  terminal.printf("\n");
-  }
- terminal.printf("\n Matriz a resolver:\n");
- for(i=0;i<grado;i++)
- {
-  terminal.printf("\n%c ",179);
-  for(j=0;j<grado;j++)
-  {
-   terminal.printf(" %.0f ",xy[i][j],j+1);
-   }
-  terminal.printf(" %c",179);
-  terminal.printf("  %.0f ",resultado[i]);
-  terminal.printf(" %c",179);
-  }
- terminal.printf("\nIngresa la Exactitud o Tolerancia: ");
- tolerancia=terminal.getc();
- for(;;)
- {
-  h=0;
-  do
-  {
-   suma=0;
-   for(i=h;i<h+1;i++)
-   {
-    for(j=0;j<grado;j++)
-    {
-     if(j!=i)
-     {
-      suma+=((xy[i][j]*x1[j])/xy[i][i]);
-      }
+    for (x = 0; x < n; x++){ //llena matriz A
+            terminal.printf("Ingrese los elementos del renglon "); 
+            terminal.printf("%i",x+1); 
+            terminal.printf("de la matriz de coeficientes");
+        for(y = 0; y < n; y++){
+            A[x][y]=terminal.getc();
+        }
+    }
+        terminal.printf("Ingrese la matriz de resultados: ");
+    for (x = 0; x < n; x++){ // llena matriz B de resultados
+        B[x]=terminal.getc();
+    }
+    terminal.printf("Ingrese cantidad maxima de iteraciones");
+    w=terminal.getc();
+    terminal.printf("Ingrese el error de convergencia");
+    error=terminal.getc();
+    terminal.printf("MATRIZ INGRESADA");
+    for (x = 0; x < n; x++){ //MUESTRA LA MATRIZ INGRESADA
+        for(y = 0; y < n; y++){
+            terminal.printf("%f",A[x][y]);
+        }
+        terminal.printf("|"); terminal.printf("%f",B[x]);
+        }
+    for (x = 0; x < n; x++){ //QUITA 0 DE LA DIAGONAL CAMBIANDO RENGLONES
+        if (A[x][x] == 0){
+            for (y = x; y < n ; y++){
+                if (A[y][x] == 0){
+                }
+                else {
+                    for (a = 0; a < n; a++){
+                    auxa[a]=A[y][a];
+                    A[y][a]=A[x][a];
+                    A[x][a]=auxa[a];
+                }
+                auxb=B[y];
+                B[y]=B[x];
+                B[x]=auxb;
+                }
+            }
 
-     }
+        }
     }
-   sumat[h]=suma;
-   h++;
-   }while(h<grado);
-  for(i=0,j=grado-1;i<grado;i++,j--)
-  {
-   aux[i]=auxx[j];
-   }
-  for(i=0;i<grado;i++)
-  {
-   for(j=0;j<grado;j++)
-   {
-    if(i!=j)
-    {
-     auxx[i]=((resultado[i])/xy[i][i])-(sumat[i]);
-     }
-else{
-    terminal.printf("INDETEMINA");
-}
+    ///for ()
+    for(x = 0; x<n ; x++){
+        z=A[x][x];
+        for(y = 0; y<n ; y++){
+        A[x][y]=(A[x][y])/(-z);
+        }
+        A[x][x]=0;
+        B[x]=B[x] / z;
+        ant[x]=B[x];
     }
-   }
-  for(i=0,j=grado-1;i<grado;i++,j--)    {  x1[i]=auxx[i];  }
-  for(i=0;i<grado;i++)          {  tole[i]=0;  }
-  for(i=0,j=grado-1;i<grado;i++,j--)    {  aux1[i]=auxx[j];  }
-  for(i=0;i<grado;i++)          {  tole[i]=aux1[i]-aux[i];  }
-
-  int k=0;
-  while(k<grado)
-  {
-   for(i=0;i<grado-1;i++)
-   {
-    if(tole[i]<tole[i+1])
-    {
-     tole1=tole[i];tole[i]=tole[i+1];tole[i+1]=tole1;
-     }
-    }
-   k++;
-   }
-  for( j=0;j<grado;j++)
-  {
-   tolefin[j]=tole[j];
-   }
-  w=tolefin[0];
-  terminal.printf("\n");
-  for(j=0;j<grado;j++)
-  {
-   terminal.printf("x%d=  %f\n",j+1,auxx[j]);
-   }
-  if(fabs(w)<=tolerancia)
-  {
-   terminal.printf("\nResultados en la Iteracion Numero %d \n");
-   for(j=0;j<grado;j++)
-   {
-    terminal.printf("X%d=%.15f\n",j+1,auxx[j]);
-    }
-   terminal.getc();
-   break;
-   }
-  }
- }
-    }
+    for(a = 0; a<n ; a++){
+        for (y = 0; y<n ; y++){
+        sig[a]=sig[a]+(ant[y]*A[a][y]);
+        }
+        sig[a]=sig[a]+B[a];
+        }
+    for (x = 0; x<n ; x++){
+        while (abs(sig[x]-ant[x]) > error && w > i){ //Hace los pasos hasta que el error sea menor a error
+            for (y = 0; y<n ;y++){
+                ant[y]=sig[y];
+            }
+        for(a = 0; a<n ; a++){
+                sig[a]=0;
+                for (y = 0; y<n ; y++){
+                sig[a]=sig[a]+(ant[y]*A[a][y]);
+            }
+            sig[a]=sig[a]+B[a];
+        }
+        i++;
+        }
+}
+if(i > w ){
+    terminal.printf("El error no converge a "); terminal.printf("%f",error); 
+    terminal.printf(" en "); terminal.printf("%i",w); terminal.printf(" iteraciones");;
+}
+else{
+terminal.printf(" Se llego a los resultados en "); terminal.printf("%f",i+1); terminal.printf(" iteraciones\n\n");
+terminal.printf(" Con un error de "); terminal.printf("%f",error); 
+terminal.printf(" Los valores de las variables son: \n\n");
+for(x = 0; x<n ; x++){
+    terminal.printf("X");terminal.printf("%f",x);terminal.printf(" = ");
+    terminal.printf("%f",sig[x]);
+}
+}
+}
 /* END routines */   
  
 /* END program */