Acredito que o seu problema esteja aqui:
for (int i=1; i<=3; i++){ // Somatório em j. for (int j=1; j<=3; j++) { soma[j] = a[i][j]*x_pre[j]*delta(i,j); } // Atualiza os valores de x. x_pos[i] = (b[i]-soma[i])/a[i][i];}
Veja que no somatório de j você faz 3 iterações e atribui os valores a cada posição do vetor "soma".
Mas quando você vai atualizar os valores de x, você só utiliza soma, ou seja, a unica iteração que vai importar no somatório de j é o atual valor de i.
Se i=1, você só utiliza soma[1], Se i=2, você só utiliza soma[2], Se i=3, você só utiliza soma[3].
Isso significa que nessas situações o seu delta sempre terá i=j, e o delta sempre será 0, e, por consequencia, o seu soma sempre será 0. Por isso que o valor sempre dá igual.
Experimente declarar "soma" como uma simples variavel float, e mude esta linha:
soma[j] = a[i][j]*x_pre[j]*delta(i,j);
para
soma += a[i][j]*x_pre[j]*delta(i,j);
e não esqueça de zerar a variavel soma antes do somatório de j
// Somatório em j. soma = 0;