Program Sistema_Linear;
type vetor = array[1..20] of extended;
matriz = array[1..20,1..20] of extended;
var Constantes: vetor;
Mampliada: matriz;
Mauxiliar: matriz;
Cons_auxiliar: vetor;
i, j, N, Num_escolha: integer;
Escolha: char;
function compara_vetor (Vetora, Vetorb: vetor): extended;
var Subtrai: vetor;
Max: extended;
begin
max := 0;
for i := 1 to N do
begin
Subtrai[i] := Vetora[i] - Vetorb[i];
end;
for i := 1 to N do
begin
if abs(Subtrai[i]) > Max then
begin
Max := abs(Subtrai[i]);
end;
compara_vetor := max;
end;
end;
procedure escalona_sup (MatrizA: matriz; Vetorconst: vetor);
var i, j, k: integer;
aux: extended;
begin
for k := 1 to (N - 1) do
begin
for j := (k + 1) to N do
begin
aux := MatrizA[k, j]/MatrizA[j, j];
for j := (k + 1) to N do
begin
MatrizA[k, i] := MatrizA[k, i] - aux * MatrizA[j, i];
end;
Vetorconst[k] := Vetorconst[k] - aux * Vetorconst[j];
end;
end;
end;
procedure escalona_inf (MatrizA: matriz; Vetorconst: vetor);
var i, k : integer;
s: extended;
begin
for k := 1 to (N - 1) do
begin
for i := (k + 1) to N do
begin
s := MatrizA[i, k]/MatrizA[k, k];
MatrizA[i, k] := 0;
for j := (k + 1) to N do
begin
MatrizA[i, j] := MatrizA[i, j] - s * MatrizA[k, j];
end;
Vetorconst[i] := Vetorconst[i] - s * Vetorconst[k];
end;
end;
end;
procedure gauss (MatrizAmp: matriz; Constante: vetor);
var i, k: integer;
Resposta: vetor;
aux: extended;
begin
writeln(' ');
writeln('Gauss');
Mauxiliar := MatrizAmp;
Cons_auxiliar := Constante;
escalona_inf (Mauxiliar, Cons_auxiliar);
Resposta[N] := Cons_auxiliar[N]/Mauxiliar[N, N];
for i := (N - 1) downto 1 do
begin
aux := 0;
for j := (i + 1) to N do
begin
aux := aux + Mauxiliar[i, j] * Resposta[j];
Resposta[i] := (Mauxiliar[i] - aux)/Mauxiliar[i, i];
end;
for i := 1 to N do
begin
writeln('X', i, ' = ', Resposta[i]);
writeln(' ');
end;
end;
end;
begin
repeat
clrscr;
write('Quantidade de variáveis = ');
readln(N);
for i := 1 to N do
begin
writeln(' ');
writeln('Fornecer os coeficientes da equacao ', i, ':');
for j := 1 to N do
begin
write('Coeficiente de X', j, ' = ');
readln(Mampliada[i,j]);
end;
write('Valor da constante da equacao ', i,' = ');
readln(Constantes[i]);
end;
writeln(' ');
writeln('Escolha o metodo de resolucao:');
writeln(' ');
writeln('1 - Eliminacao de Gauss');
writeln('2 - Metodo de eliminacao de Gauss-Jordan');
writeln('3 - Metodo de Jacobi');
writeln('4 - Metodo de Gauss-Seidel');
writeln(' ');
repeat
write(' Digite o numero do metodo escolhido (1-4): ');
readln(Num_escolha);
case num of
1: gauss(Mampliada, Constantes);
2: jordan(Mampliada, Constantes);
3: jacobi(Mampliada, Constantes);
4: seidel(Mampliada, Constantes);
end;
write('Escolher outro metodo? (S/N): ');
readln(Escolha);
Escolha := upcase(Escolha);
until Escolha = 'N';
write('Sair do programa? (S/N): ');
readln(Escolha);
resposta := upcase(Escolha);
until Escolha = 'S';
end.