Cod sursa(job #2658576)

Utilizator Horia14Horia Banciu Horia14 Data 14 octombrie 2020 14:10:55
Problema Algoritmul lui Gauss Scor 60
Compilator py Status done
Runda Arhiva educationala Marime 1.51 kb
fin = open("gauss.in", "r")
fout = open("gauss.out", "w")
sir = fin.readline()
s = list([int(x) for x in sir.split()])
n = s[0]
m = s[1]
A = list()
for i in range(n):
    sir = fin.readline()
    s = list([float(x) for x in sir.split()])
    A.append(s)

fin.close()

i = j = 0
eps = 1e-9
while i < n and j <= m:
    ok = False
    k = i
    while k < n and ok == False:
        if A[k][j] < -eps or A[k][j] > eps:
            ok = True
        else:
            k = k + 1

    if ok == True:
        if k > i:
            for h in range(m + 1):
                A[i][h], A[k][h] = A[k][h], A[i][h]


        for h in range(j + 1, m + 1):
            A[i][h] /= A[i][j]
        A[i][j] = 1

        for u in range(i + 1, n):
            for l in range(j + 1, m + 1):
                A[u][l] -= A[u][j] * A[i][l]
            A[u][j] = 0

        i = i + 1

    j = j + 1

x = [0] * (m + 1)
inc = False
for i in range(n - 1, -1, -1):
    for j in range(m + 1):
        if A[i][j] > eps or A[i][j] < -eps:
            if j == m: # singura valoare nenula de pe linia i este rezulatul, deci sistemul e incompatibil
                fout.write("Imposibil!\n")
                i = -1
                inc = True
                break
            x[j] = A[i][m]
            for k in range(j + 1, m + 1):
                x[j] -= x[k] * A[i][k]
            break

if inc == False:
    for i in range(m):
        fout.write(str(round(x[i], 8)) + " ")
fout.write("\n")
fout.close()