View difference between Paste ID: qy6yrNRx and
SHOW: | | - or go back to the newest paste.
1-
1+
Program Sistema_Linear;
2
3
	type vetor = array[1..20] of extended;
4
		matriz = array[1..20,1..20] of extended;
5
  
6
	var Constantes: vetor;
7
		Mampliada: matriz;
8
		Mauxiliar: matriz;
9
		Cons_auxiliar: vetor;
10
		i, j, N, Num_escolha: integer;
11
		Escolha: char;
12
13
function compara_vetor (Vetora, Vetorb: vetor): extended;
14
	var Subtrai: vetor; 
15
		Max: extended;
16
	begin
17
		max := 0;
18
		for i := 1 to N do
19
			begin
20
				Subtrai[i] := Vetora[i] - Vetorb[i];
21
			end;     
22
		for i := 1 to N do
23
			begin
24
				if abs(Subtrai[i]) > Max then
25
					begin
26
						Max := abs(Subtrai[i]);
27
					end;
28
				compara_vetor := max;
29
			end;
30
	end;
31
32
procedure escalona_sup (MatrizA: matriz; Vetorconst: vetor);
33
	
34
	var i, j, k: integer;
35
		aux: extended;
36
	begin   
37
		for k := 1 to (N - 1) do
38
			begin
39
				for j := (k + 1) to N do
40
					begin
41
						aux := MatrizA[k, j]/MatrizA[j, j];
42
						for j := (k + 1) to N do
43
							begin
44
								MatrizA[k, i] := MatrizA[k, i] - aux * MatrizA[j, i];
45
							end;
46
						Vetorconst[k] := Vetorconst[k] - aux * Vetorconst[j];
47
					end;
48
			end;
49
	end;
50
51
procedure escalona_inf (MatrizA: matriz; Vetorconst: vetor);
52
	var i, k : integer;
53
		s: extended;
54
	begin    
55
		for k := 1 to (N - 1) do
56
			begin
57
				for i := (k + 1) to N do
58
					begin
59
						s := MatrizA[i, k]/MatrizA[k, k];
60
						MatrizA[i, k] := 0;
61
						for j := (k + 1) to N do
62
							begin
63
								MatrizA[i, j] := MatrizA[i, j] - s * MatrizA[k, j];
64
							end;
65
						Vetorconst[i] := Vetorconst[i] - s * Vetorconst[k];
66
					end;
67
			end;
68
	end;
69
70
procedure gauss (MatrizAmp: matriz; Constante: vetor);
71
	var i, k: integer;
72
		Resposta: vetor;
73
		aux: extended;
74
	begin
75
		writeln(' ');
76
		writeln('Gauss');
77
		Mauxiliar := MatrizAmp;
78
		Cons_auxiliar := Constante;
79
		escalona_inf (Mauxiliar, Cons_auxiliar);
80
		Resposta[N] := Cons_auxiliar[N]/Mauxiliar[N, N];
81
		for i := (N - 1) downto 1 do
82
			begin
83
				aux := 0;
84
				for j := (i + 1) to N do
85
					begin
86
						aux := aux + Mauxiliar[i, j] * Resposta[j];
87
						Resposta[i] := (Mauxiliar[i] - aux)/Mauxiliar[i, i];
88
					end;
89
				for i := 1 to N do
90
					begin
91
						writeln('X', i, ' = ', Resposta[i]);
92
						writeln(' ');
93
					end;
94
			end;
95
	end;
96
97
begin
98
	repeat
99
	clrscr;
100
	write('Quantidade de variáveis = ');
101
	readln(N);
102
	for i := 1 to N do
103
		begin
104
			writeln(' ');
105
			writeln('Fornecer os coeficientes da equacao ', i, ':');
106
			for j := 1 to N do
107
				begin
108
					write('Coeficiente de X', j, ' = ');
109
					readln(Mampliada[i,j]);
110
				end;
111
			write('Valor da constante da equacao ', i,' = ');
112
			readln(Constantes[i]);
113
	end;
114
	writeln(' ');
115
	writeln('Escolha o metodo de resolucao:');
116
	writeln(' ');
117
	writeln('1 - Eliminacao de Gauss');
118
	writeln('2 - Metodo de eliminacao de Gauss-Jordan');
119
	writeln('3 - Metodo de Jacobi');
120
	writeln('4 - Metodo de Gauss-Seidel');
121
	writeln(' ');
122
	repeat
123
	write(' Digite o numero do metodo escolhido (1-4): ');
124
	readln(Num_escolha);
125
	case num of
126
		1: gauss(Mampliada, Constantes);
127
		2: jordan(Mampliada, Constantes);
128
		3: jacobi(Mampliada, Constantes);
129
		4: seidel(Mampliada, Constantes);
130
	end;
131
	write('Escolher outro metodo? (S/N): ');
132
	readln(Escolha);
133
	Escolha := upcase(Escolha);
134
	until Escolha = 'N';
135
	write('Sair do programa? (S/N): ');
136
	readln(Escolha);
137
	resposta := upcase(Escolha);
138
	until Escolha = 'S';
139
end.