110 likes | 213 Views
GAUSS COM PIVOTEAMENTO. CÓDIGO EM PASCAL. Program GaussPivoteamento ; {$APPTYPE CONSOLE} Uses {Esta sessão pertence ao Delphi} SysUtils ; var //declaração de variáveis i, j, k, z, n, cont , comp , c: integer ; // n é a ordem da matriz quadrada A
E N D
CÓDIGO EM PASCAL ProgramGaussPivoteamento; {$APPTYPE CONSOLE} Uses {Esta sessão pertence ao Delphi} SysUtils; var //declaração de variáveis i, j, k, z, n, cont, comp, c: integer; // n é a ordem da matriz quadrada A A: array[1..50, 1..50] of real; // matriz A a ser usada no método de Gauss com pivoteamento parcial b, x: array[1..50] of real; // vetor b do sistema linear (Ax=b) aux, pivo, primeiro, q, blinha: real;
CÓDIGO EM PASCAL Begin {inicia-se aqui o bloco de programação} writeln('Entre com a ordem da matriz A: ');{este comando escreve uma mensagem na tela} readln(n); // armazena em n a ordem da matriz quadrada A{este comando lê uma entrada do teclado} for i:=1 to n do // percorre as linhas de i até n que foi dada acima este é o o primeiro laço begin for j:=1 to n do //percorre as colunas de j até n este é o segundo laço e deve ser terminado primeiro begin writeln('Entre com A', i, j, ': '); escreve a posição i e j e espera que ela seja dada por uma entrada de teclado readln(A[i,j]); // lê um elemento por vez end;fim do laço dentro de j end;fim do laço dentro de i for i:=1 to n do // percorre as linhas do vetor b begin writeln('Entre com B', i, ': '); readln(b[i]); // lê um elemento por vez end;
CÓDIGO EM PASCAL for i:=1 to n do // imprime a matriz A antes do processo para que se possa visualizar as posições de cada termo na forma de matriz este é o laço de impressão das linhas “ i ” begininicio do laço “ i ” for j:=1 to n do laço para as colunas begininicio do laço write(A[i,j],' '); escreve a matriz A na forma de entrada end; fim do laço de j writeln(''); salta uma linha end; fim do laço de i writeln(''); for i:=1 to n do // imprime o vetor b antes do processo begin writeln(b[i]); escreve o vetor b end; writeln(''); writeln('');
CÓDIGO EM PASCAL j:=1; começam aqui as analises while(j<n) do enquanto j for menor que n faça begin i:=1; while(i<=(n-j)) do begin if( abs(A[j+i,j])>abs(A[j,j]) )then// [j,j] é a posição onde ficará o pivô, se o elemento da mesma coluna e de uma linha abaixo for maior em módulo então begin k:=j; while(k<=n) do // troca-se a linha inteira begin aux:=A[j+i,k]; // aux: variável para auxiliar a troca dos valores posição por posição A[j+i,k]:=A[j,k]; A[j,k]:=aux; k:=k+1; // incrementa k, k percorre as colunas de A nas linhas envolvidas no processo de troca end; aux:=b[j+i]; // troca as linhas correspondentes no vetor b b[j+i]:=b[j]; b[j]:=aux; end;
CÓDIGO EM PASCAL pivo:=A[j,j]; // depois da troca temos o pivô (maior elemento) no local correto [j,j] (diagonal) primeiro:=A[j+i,j]; // primeiro elemento da coluna do pivô (j) e da linha i+j if(pivo<>0) then// se o pivo for diferente de zero begin b[j+i]:=b[j+i] - (primeiro/pivo)*b[j]; // subtrai (fator)*b[j] do elemento de b na posição i+j z:=j; while(z<=n) do // produz zeros abaixo do pivô begin A[j+i,z]:=A[j+i,z]-(primeiro/pivo)*A[j,z]; // quando z=j, A[j,j] é o pivô e então A[j+i,j]=A[j+i,j]-A[j+i,j]=0 z:=z+1; end; end; i:=i+1; end; j:=j+1; end;
CÓDIGO EM PASCAL for i:=1 to n do // imprime a matriz A depois do processo terminado begin for j:=1 to n do begin write(A[i,j],' '); end; writeln(''); end; writeln(''); for i:=1 to n do // imprime o vetor b depois do processo terminado begin writeln(b[i]); end;
CÓDIGO EM PASCAL //calcula o vetor solução x do sistema linear Ax=b cont:=0; // contará o numero de elementos (na posição pivô) nulos j:=n; if(A[j,j]<>0) then// verifica se o ultimo pivô não é nulo begin x[j]:=b[j]/A[j,j]; // calcula o ultimo elemento do vetor solução end else begin cont:=cont+1; // conta um pivô nulo blinha:=b[j]; // blinha é o b[j] da linha correspondente ao pivô nulo for c:=1 to (n-1) do begin blinha:=blinha-(A[j,c]*x[c]); end; if(blinha=0)then //se blinha é zero begin comp:=1; // sistema compativel e indeterminado endelsecomp:=2; // senão incompativel end;
CÓDIGO EM PASCAL j:=j-1; while(j>=1) do // faz o mesmo para os pivôs das outras linhas begin if(A[j,j]<>0) then begin i:=n; x[j]:=b[j]; while(i>j) do begin x[j]:=x[j]-(x[i]*A[j,i]); i:=i-1; end; x[j]:=x[j]/A[j,j]; end
CÓDIGO EM PASCAL else begin cont:=cont+1; blinha:=b[j]; for c:=1 to (n-1) do begin blinha:=blinha-(A[j,c]*x[c]); end; if(blinha=0)then begin comp:=1; endelsecomp:=2; end; j:=j-1; end;
CÓDIGO EM PASCAL if(cont=0) then begin writeln(''); writeln('X:'); for i:=1 to n do // imprime o vetor solução x begin writeln(x[i]); end; end elseif(comp=1)then begin writeln('Sistema compativel e indeterminado. '); endelse begin writeln('Sistema incompativel.'); end; readln(q); end.