Matriz simétrica

Publicado por Leonardo 19/07/2007

[ Hits: 8.901 ]

Download mat_simetrica.PAS




Este programa analisa a matriz que foi digitada e diz se ela é simétrica ou triangular inferior.

  



Esconder código-fonte

Programa gera uma matriz, exibe esta matriz e depois verifica se a matriz ‚ triangular inferior ou se ‚ uma matriz simetrica
e depois informa tais fatos ao usuario por meio de mensagens}

program matriz01;
uses crt; {Biblioteca padrao}


type {Definicao de tipo definido pelo usuario}
 matriz = array [1..30,1..30] of integer;


var {Declaracao de variaveis}
x: matriz; {Matriz lida}
l1,c1,linha,coluna: integer; {l1,c1 sao indices da matriz e linha e coluna servirao para posicionar o cursor}
re,res: boolean;{variaveis que recebem um valor falso ou verdadeiro}


{Declaracao do procedimento lermat}
procedure lermat (var a:Matriz; var l,c,li,co:integer);

{Declaracao de variaveis locais}
var i,j: integer; {indices da matriz a}

begin
 write ('Forneca o numero de linhas: '); {Orientacao ao usuario}
 readln (l); {Le a quantidade de linhas}
 write ('Forneca o numero de colunas: '); {Orientacao ao usuario}
 readln (c); {Le a quantidade de colunas}
 writeln; {Comando que pula linha}
 writeln ('Forneca os elementos'); {Orientacao ao usuario}
 {Estrutura de repeticao para ler a matriz}
 for i:=1 to l do {Percorre as linhas}
  begin
   for j:=1 to c do {Percorre as colunas}
    begin
     gotoxy (co,li); {Posicionamento do cursor}
     read (A[i,j]); {Le os elementos da matriz}
     co:=co+7; {Muda a coluna permanecendo na mesma linha}
    end;
   li:= li+1; {Muda a linha}
   co:=1; {Retorna o valor inicial da coluna}
  end;
end; {fim do procedimento}


{Declaracao da funcao trian_infe}
function trian_infe (a: matriz; l,c:integer):boolean;

{Declaracao de variaveis locais}
var s,i,j,g: integer; {i,j indices da matriz, s eh contador e g variavel para atribuir valor as colunas}

begin
 s:=0; {Atribuicao do valor inicial do contador}
 g:=2; {Atribuicao do valor inicial da coluna da matriz}
 {Para identificar se ‚ triangular inferior verificamos se os elementos que deveram ser zero, os sao}
 {Estrutura de repeticao que percorre os elementos que devem ser zero para ser triangular inferior}
 for i:=1 to l do {Percorre as linhas}
  begin
   for j:=g to c do {Percorre as colunas}
     If a[i,j]<>0 then {Compara se os elementos que devem ser zero, os sao}
       s:=s+1; {Se nao forem acrescenta uma unidade}
  g:=g+1; {Acrecenta uma unidade na coluna}
  end;
 If s=0 then {Entao todos os elementos que devem ser zero, os sao}
  trian_infe:=true {Retorno da funcao}
 else {Entao todos os elementos que devem ser zero, nao sao}
  trian_infe:=false; {Retorno da funcao}
end; {Fim da funcao}


{Declaracao da funcao simetrica}
function simetrica (a: matriz; l,c: integer):boolean;

{Declaracao de variaveis locais}
var s,i,j,t:integer; {i,j indices da matriz, s contador e t total de elementos}

begin
 s:=0; {Atribuicao do valor inicial do contador}
 {Estrutura de repticao que vai verificar se eh simetrica}
 for i:=1 to l do {Percorre as linhas}
  for j:=1 to c do {Percorre as colunas}
   If a[i,j] = a[j,i] then {Compara se os elementos sao simetricos}
    s:=s+1; {Acrescenta uma unidade}
 t:= c*l; {Calcula a quantidade total de elementos e atribui este valor a t}
 If t=s then {Se todos os elementos forem simetricos o total de elementos vai ser igual ao contador}
  simetrica:=true {Retorno da funcao}
 else {Nao eh simetrica}
  simetrica:=false; {Retorno da funcao}
end; {Fim da funcao}


{Declaracao do procedimento escremat}
procedure escremat (a: matriz; l,c,li,co:integer);

{Declaracao de variaveis locais}
var i,j: integer; {indices da matriz a}

begin
 for i:=1 to L do {Percorre as linhas}
  begin
   for j:=1 to c do {Percorre as colunas}
    begin
     gotoxy (co,li); {Posicionamento do cursor}
     writeln (a[i,j]); {Escreve os elementos da matriz}
     co:= co+7; {Muda a coluna permanecendo na mesma linha}
    end;
   li:=li+1; {Muda a linha}
   co:=1 {Retorna o valor inicial da coluna}
  end;
end; {Fim do procedimento}


begin {Inicio do programa principal}
 clrscr; {Comando do Pascal que limpa a tela}
 coluna:=1; {Atribuicao do valor incial da coluna}
 linha:=6; {Atribuicao do valor inicial da linha}
 lermat (x,l1,c1,linha,coluna); {Chamada do procedimento que le a matriz}
 writeln; {Comando que pula linha}
 writeln; {Comando que pula linha}
 writeln ('A matriz gerada foi:');{Orientacao ao usuario}
 linha:= linha+4; {Acrescenta 4 unidades na linha}
 escremat (x,l1,c1, linha,coluna); {Chamada do procedimento que escreve a matriz}
 writeln; {Comando que pula linha}
 writeln; {Comando que pula linha}
 res:= trian_infe (x,l1,c1); {Atribuicao do valor da funcao trian_infe}
 re:= simetrica (x,l1,c1); {Atribuicao do valor da funcao simetrica}
 {Estrutura que a partir dos valores obtidos nas funcoes vai escrever qual eh o tipo da matriz}
 If res = true then
  writeln ('A matriz digitada eh tringular inferior')
 else
  If re = true then
   writeln ('A matriz digitada eh simetrica')
  else
   writeln ('A matriz digitada nao eh nem triangular inferior nem simetrica');
 readkey; {Comando do Pascal que espera o usuario digitar qualquer tecla para finalizar}
end.{Fim do programa principal}








Scripts recomendados

Tratamentos de Erros

Calculadora Completa feita no Lazarus(Delphi 7 para Linux)

Funções strings e matemáticas

Cauculadora em Pascal

encontrar o maior e o menor valor em um vetor


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts