Skip to content

Instantly share code, notes, and snippets.

@pilifjed
Created May 2, 2017 17:13
Show Gist options
  • Save pilifjed/15a286f7facbe0012d6dfecf51fee544 to your computer and use it in GitHub Desktop.
Save pilifjed/15a286f7facbe0012d6dfecf51fee544 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
void Input(int n, float t[n][n], float s[n]){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%f",&t[i][j]);
}
}
for(int i=0;i<n;i++){
scanf("%f",&s[i]);
}
}
void PrintM(int n, float t[n][n], float s[n]){
printf("\n");
for(int i=0; i<n; i++){
for(int j=0;j<n;j++){
printf("%f\t", t[i][j]);
}
printf("|\t%f\n",s[i]);
}
}
void SubRow(int n, float t[n][n], int a, int b, float mul){
for(int i=0;i<n;i++){
t[a][i]-=t[b][i]*mul;
}
}
void Gauss(int n, float t[n][n],float s[n]){
float d=0.00;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(t[i][i]!=0) d=t[j][i]/t[i][i];
else d=0.00f;
SubRow(n, t, j, i, d);
s[j]-=s[i];
PrintM(n,t,s);
}
}
}
void Solve(int n, float t[n][n], float s[n]){
Gauss(n,t,s);
PrintM(n,t,s);
for(int i=n-1;i>=0;i--){
s[i]/=t[i][i];
t[i][i]=1.00f;
float hlp=s[i];
for(int j=i-1;j>=0;j--){
s[j]-=t[j][i]*hlp;
t[j][i]=0.00f;
PrintM(n,t,s);
}
}
}
int main(){
int n=0;
scanf("%d",&n);
float t[n][n];
float s[n];
Input(n,t,s);
PrintM(n,t,s);
Solve(n, t, s);
PrintM(n,t,s);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment