elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  matriz escalonada (metodo de gauss)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: matriz escalonada (metodo de gauss)  (Leído 16,006 veces)
jesus++

Desconectado Desconectado

Mensajes: 4


Ver Perfil
matriz escalonada (metodo de gauss)
« en: 25 Diciembre 2013, 18:12 pm »


un problema q me dejaron, pense hacerlo de esta manera:
primero escalonar la matriz inferior y superiormente, luego pasarla a la matriz identidad y tomar una matriz q empiece en la identidad y realizar las mismas operaciones q a la matriz q ingrese por teclado... el problema esta en escalonarlo, si bien lo he probado manualmente, la computadora solo atina a escalonar, pero los terminos centrales no cambian de valor... el primer paso (y en el q busco ayuda seria escalonar la matriz superiormente) el resto ya lo tengo pensado

#include<stdio.h>
#include<conio.h>
int main(){
   int i,j,k,n;
   float  x[80][80];

   
   printf("ingresar el orden de la matriz\n");
   scanf("%d",&n);
   
   for(i=1; i<=n;i++){
   for(j=1; j<=n;j++){
   printf("ingresar x[%d][%d]: ",i,j);
   scanf("%f",&x[j]);}}
   
   for(k=1; k<n;k++){
   for(i=k+1; i<=n;i++){
   for(j=1; j<=n;j++)
   x[j]=x[j]-(x[k][j]*x[k])/x[k][k];
   
   }}
   
   printf("la matriz escalonada es");
   for(i=1; i<=n;i++){
                     printf("\n");
            for(j=1; j<=n;j++)
                     printf("%f  ",x[j]);}
   
   for(k=n; k>1;k--){
   for(i=k-1; i>=1;i--){
   for(j=n; j>=1;j--)
   x[j]=x[j]-(x[k][j]*x[k])/x[k][k];
   }}

printf("la matriz escalonada es");
   for(i=1; i<=n;i++){
                     printf("\n");
            for(j=1; j<=n;j++)
                     printf("%f  ",x[j]);}

   getch();
}


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: matriz escalonada (metodo de gauss)
« Respuesta #1 en: 25 Diciembre 2013, 18:21 pm »

Antes que nada cuando postees código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices.

;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

¡¡¡¡ Saluditos! ..... !!!!




« Última modificación: 25 Diciembre 2013, 18:24 pm por leosansan » En línea

jesus++

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: matriz escalonada (metodo de gauss)
« Respuesta #2 en: 25 Diciembre 2013, 20:49 pm »

Tienes razon, lo tomare en cuenta
Al programa solo deben agregarle "i"a cada x[j], quedara como x(i)[j]
Y la "i" a x[k], quedando x(i)(k)
« Última modificación: 25 Diciembre 2013, 20:54 pm por jesus++ » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: matriz escalonada (metodo de gauss)
« Respuesta #3 en: 25 Diciembre 2013, 22:45 pm »


Aprende a hacerlo, es más fácil:

Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. int main(){
  4.   int i,j,k,n;
  5.   float  x[80][80];
  6.  
  7.  
  8.   printf("ingresar el orden de la matriz\n");
  9.   scanf("%d",&n);
  10.  
  11.   for(i=1; i<=n;i++){
  12.   for(j=1; j<=n;j++){
  13.   printf("ingresar x[%d][%d]: ",i,j);
  14.   scanf("%f",&x[i][j]);}}
  15.  
  16.   for(k=1; k<n;k++){
  17.   for(i=k+1; i<=n;i++){
  18.   for(j=1; j<=n;j++)
  19.   x[i][j]=x[i][j]-(x[k][j]*x[i][k])/x[k][k];
  20.  
  21.   }}
  22.  
  23.   printf("la matriz escalonada es");
  24.   for(i=1; i<=n;i++){
  25.                     printf("\n");
  26.            for(j=1; j<=n;j++)
  27.                     printf("%f  ",x[i][j]);}
  28.  
  29.   for(k=n; k>1;k--){
  30.   for(i=k-1; i>=1;i--){
  31.   for(j=n; j>=1;j--)
  32.   x[i][j]=x[i][j]-(x[k][j]*x[i][k])/x[k][k];
  33.   }}
  34.  
  35. printf("la matriz escalonada es");
  36.   for(i=1; i<=n;i++){
  37.                     printf("\n");
  38.            for(j=1; j<=n;j++)
  39.                     printf("%f  ",x[i][j]);}
  40.  
  41.   getch();
  42. }
  43.  


De entrada, no deberías hacer uso de la de la libreria conio y su función getch.

Leete Lo que no hay que hacer en C/C++. Nivel basico]
En línea

jesus++

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: matriz escalonada (metodo de gauss)
« Respuesta #4 en: 25 Diciembre 2013, 23:26 pm »

Ok, sucede q en mi pc por algun motivo no compila cuando uso system("pause")
Alguna sugerencia en el problema ?
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: matriz escalonada (metodo de gauss)
« Respuesta #5 en: 26 Diciembre 2013, 09:48 am »

Ok, sucede q en mi pc por algun motivo no compila cuando uso system("pause")
Alguna sugerencia en el problema ?

Incluir la librería <stdlib.h>

;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

¡¡¡¡ Saluditos! ..... !!!!


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: matriz escalonada (metodo de gauss)
« Respuesta #6 en: 26 Diciembre 2013, 13:01 pm »

Indexar el código es muy importante para que se entienda mejor:

Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. int main()
  4. {
  5.    int i,j,k,n;
  6.    float x[80][80];
  7.  
  8.    printf("ingresar el orden de la matriz\n");
  9.    scanf("%d",&n);
  10.  
  11.    for(i=1; i<=n; i++)
  12.    {
  13.        for(j=1; j<=n; j++)
  14.        {
  15.            printf("ingresar x[%d][%d]: ",i,j);
  16.            scanf("%f",&x[i][j]);
  17.        }
  18.    }
  19.  
  20.    for(k=1; k<n; k++)
  21.    {
  22.        for(i=k+1; i<=n; i++)
  23.        {
  24.            for(j=1; j<=n; j++)
  25.                x[i][j] = x[i][j] - (x[k][j] * x[i][k]) / x[k][k];
  26.  
  27.        }
  28.    }
  29.  
  30.    printf("la matriz escalonada es");
  31.    for(i=1; i<=n; i++)
  32.    {
  33.        printf("\n");
  34.        for(j=1; j<=n; j++)
  35.            printf("%f  ",x[i][j]);
  36.    }
  37.  
  38.    for(k=n; k>1; k--)
  39.    {
  40.        for(i=k-1; i>=1; i--)
  41.        {
  42.            for(j=n; j>=1; j--)
  43.                x[i][j] = x[i][j] - (x[k][j] * x[i][k]) / x[k][k];
  44.        }
  45.    }
  46.  
  47.    printf("la matriz escalonada es");
  48.    for(i=1; i<=n; i++)
  49.    {
  50.        printf("\n");
  51.        for(j=1; j<=n; j++)
  52.            printf("%f  ",x[i][j]);
  53.    }
  54.  
  55.    getch();
  56. }
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: matriz escalonada (metodo de gauss)
« Respuesta #7 en: 26 Diciembre 2013, 16:29 pm »


Indexar el código es muy importante para que se entienda mejor:


Efectivamente, indentar el código es un habito que se debe adquirir desde los inicios.

Pero ya que nos ponemos tiquismiquis, habría que hacer otras observaciones:

* la función main por ser de tipo int necesita al final un return tipo int.

* los bucles con una sola instrucción o función no necesitan de llaves.

* puestos a imprimir float me gusta más el formato %g ya que no llena la pantalla de decimales innecesarios.

Y ya que nos ponemos tontitos,y  lo digo por mí, por lo menos corregir le el código, y antes una muestra:

Citar
Ingresar el orden de la matriz:
3
 x[1][1]= 1
 x[1][2]= 0
 x[1][3]= 1
 x[2][1]= 1
 x[2][2]= 2
 x[2][3]= 1
 x[3][1]= 2
 x[3][2]= 1
 x[3][3]= 3

La matriz inicial es

1  0  1
1  2  1
2  1  3
La matriz triangular inferior es:

1  0  1
0  2  0
0  0  1
la matriz escalonada es

1  0  0
0  2  0
0  0  1

Código
  1. #include<stdio.h>
  2.  
  3. int main()
  4. {
  5.    int i,j,k,n;
  6.    float x[80][80],fac;
  7.  
  8.    printf("Ingresar el orden de la matriz:\n");
  9.    scanf("%d",&n);
  10.    for(i=0; i<n; i++){
  11.        for(j=0; j<n; j++){
  12.            printf(" x[%d][%d]= ",i+1,j+1);
  13.            fflush (stdout);
  14.            scanf("%f",&x[i][j]);
  15.        }
  16.    }
  17.    printf("\nLa matriz inicial es\n");
  18.    for(i=0; i<n; i++){
  19.        printf("\n");
  20.        for(j=0; j<n; j++)
  21.            printf("%g  ",x[i][j]);
  22.    }
  23.    for(k=0; k<n-1; k++){
  24.        for(i=k+1; i<n; i++){
  25.            fac =-x[i][k]/x[k][k];
  26.            for(j=k; j<n; j++)
  27.                x[i][j]+=x[k][j]*fac;
  28.        }
  29.    }
  30.    printf("\nLa matriz triangular superior es:\n");
  31.    for(i=0; i<n; i++) {
  32.        printf("\n");
  33.        for(j=0; j<n; j++){
  34.            printf("%g  ",x[i][j]);
  35.            fflush (stdout);
  36.        }
  37.    }
  38.    for(k=n-1; k>=0; k--){
  39.        for(i=k-1; i>=0; i--){
  40.            fac =-x[i][k]/x[k][k];
  41.            for(j=n-1; j>=0; j--)
  42.                x[i][j] += x[k][j]*fac;
  43.        }
  44.    }
  45.    printf("\nla matriz diagonal es\n");
  46.    for(i=0; i<n; i++){
  47.        printf("\n");
  48.        for(j=0; j<n; j++){
  49.            printf("%g  ",x[i][j]);
  50.            fflush (stdout);
  51.        }
  52.    }
  53.    return 0;
  54. }
  55.  

Eso sí, es un tanto chapucero ya que ni usa pivote ni intercambia filas, caso necesario si en medio de la transformación sale un cero en la diagonal. Pero es lo que el autor proponía.

;-)  ;-) Felices Navidades y Próspero Año Nuevo.  ;-)  ;-)

¡¡¡¡ Saluditos! ..... !!!!




REEDITADO: corregida la observación inferior/superior. Thanks!
« Última modificación: 26 Diciembre 2013, 16:59 pm por leosansan » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: matriz escalonada (metodo de gauss)
« Respuesta #8 en: 26 Diciembre 2013, 16:35 pm »

* los bucles con una sola instrucción o función no necesitan de llaves.
Cierto pero, en ocasiones las llaves dan más legibilidad (sobre todo cuando empiezas a anidar cosas)

* puestos a imprimir float me gusta más el formato %g ya que no llena la pantalla de decimales innecesarios.
Otra opción es poner %.4f

De esa forma muestra solo hasta 4 decimales, si quieres 8 solo tienes que cambiar el 4 por un 8 ;)
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
csp

Desconectado Desconectado

Mensajes: 35


Ver Perfil
Re: matriz escalonada (metodo de gauss)
« Respuesta #9 en: 26 Diciembre 2013, 16:37 pm »

Buenos días,

Citar
La matriz triangular inferior es:

1  0  1
0  2  0
0  0  1

Es al revés. En la matriz triangular inferior, son nulos todos los elementos sobre la diagonal principal.

Un saludo.
En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Consulta metodo Matriz Java
Java
matc33 2 2,175 Último mensaje 23 Octubre 2013, 17:28 pm
por visualfree
S.O.S : Programa que solucione sistemas Lineales x método de Gauss :)
Programación C/C++
Bachanilorac 1 2,432 Último mensaje 20 Noviembre 2014, 21:13 pm
por avesudra
AYUDA ... Sistema lineal NxN por el método de Gauss (PIVOTE)
Programación C/C++
Alele54 0 1,987 Último mensaje 7 Diciembre 2015, 23:21 pm
por Alele54
Resolver el metodo de Gauss
Programación C/C++
angel1397 4 2,911 Último mensaje 3 Octubre 2016, 00:25 am
por BlackBlex
Ayuda con codigo que resuelve matrices por metodo gauss
Programación C/C++
flosan17 0 1,961 Último mensaje 6 Marzo 2017, 15:55 pm
por flosan17
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines