Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Curti Facundo
- Este programa resuelve un sistema de ecuaciones lineales de N variables
- por N ecuaciones utilizando diferentes estrategias de pivoteo.
- */
- #include<stdio.h>
- #include<stdlib.h>
- void imprimirMatriz(float m[10][11], int n){
- printf("---------------------\n");
- for(int i=0; i<n; i++){
- for(int j=0; j<n+1; j++){
- printf("%f\t",m[i][j]);
- }
- printf("\n");
- }
- printf("---------------------\n\n");
- }
- float* sustAtras(float m[10][11], int n){
- float resultados[10]; //La posicion 0, corresponde a x1. La pos 1, a x2. Y asi respectivamente
- for(int i=0; i<n-1; i++){ //Recorro las filas
- int p=i;
- //En cada I, me posiciono en la diagonal, y busco el menor de la columna
- //En caso de haber uno menor, intercambio las filas
- for(int y=i; y<n; y++){
- if( m[y][i] != 0 ){ //Hsta encontrar uno distinto de 0
- if(m[p][i]==0) //Si p sigue valiendo 0, toma este valor
- p=y;
- else if( m[y][i] < m[p][i] ) //P ya no vale 0, entonces solo cambia si es menor.
- p=y;
- }
- }
- if(m[p][i]==0){ //Si no encontro ninguno que sea diferente de 0
- printf("El sistema no tiene una unica solucion\n");
- exit(0);
- }
- if(p!=i){ //Realizo el cambio de fila si es necesario. (Calculado en base al procedimiento anterior)
- for(int j=0; j<n+1; j++){
- float aux=m[i][j];
- m[i][j]=m[p][j];
- m[p][j]=aux;
- }
- }
- for(int i2=i+1; i2<n; i2++){ //Deja ceros debajo del pivote
- float mult= m[i2][i]/m[i][i];
- for(int j=0; j<n+1; j++){ //Para ello, transforma toda la lineaa la que va a dejar en 0.
- m[i2][j]=m[i2][j] - mult * m[i][j];
- }
- }
- imprimirMatriz(m, n);
- }
- if(m[n-1][n-1]==0){
- printf("El sistema no tiene una unica solucion\n");
- exit(0);
- }
- printf("Matriz resultante:\n");
- imprimirMatriz(m,n);
- //::::Aca es donde aparentemente esta el error::::
- for(int x=n; x>0; x--){ //Sustitucion hacia atras
- resultados[x]=m[x][n+1]/m[x][x]; //Es igual a su B
- for (int y=x+1; y<n+1; y++) { //Le resto a eso las demas variables
- resultados[x]=resultados[x]-m[x][y]*resultados[y];
- }
- }
- }
- int main(int argc, const char *argv[]){
- int n; //n variables
- float matriz[10][11];
- float *resultados;
- printf("Cuantas ecuaciones tiene el sistema? (Debe tener el mismo numero de variables) - 10 maximo\n");
- scanf("%d",&n);
- printf("Cargando matriz\n");
- for(int i=0; i<n; i++){
- for(int j=0; j<n+1; j++){
- printf("Ingrese el elemento %d,%d de la matriz: ",i,j);
- scanf("%f", &matriz[i][j]);
- printf("\n");
- }
- }
- printf("Matriz ingresada:\n");
- imprimirMatriz(matriz, n);
- printf("Calculando matriz::\n");
- resultados=sustAtras(matriz, n);
- printf("Resultados:\n");
- for(int i=0; i<n; i++){
- printf("\tx%d: %d", i+1, resultados+i);
- }
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement