Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Erro na hora de imprimir os resultados.


Ir à solução Resolvido por devair1010,

Posts recomendados

Olá, boa noite! Sou eu novamente.

Bom, dessa vez venho aqui pedir ajuda para vocês uma luz nesse código, onde é impresso a soma de todas as colunas ao invés de imprimir o resultado da soma de cada uma individualmente. O que pode estar errado, alguma variável ou atribuição?

 

Program SomaCol_ValDiagonal;

var    mat: array[1..5,1..5] of integer;
         vet: array[1..5] of integer;
      soma,  somaC, l, c : integer;

//Linha e coluna de 1 até 5
begin
    soma:=0;
    for l:=1 to 5 do
    begin
         for c:=1 to 5 do
          begin
  	     	write('Digite um valor para a ',l,'ª linha e ',c,'ª coluna: ');  //Usuário insere valor para a coluna
          	readln(mat[l,c]);
          	somaC:=somaC+(mat[l,c]);
          begin
          if l=c then   //Se a linha for igual a coluna, é um cenário propício a formar a diagonal
            vet[l]:=mat[l,c];  
          end;
          end;
      writeln;
    end;

//Imprime os valores da diagonal   
  for l:=1 to 5 do
      begin
          soma:=soma+vet[l];
          writeln('Os elementos na diagonal são: ',vet[l]); 
        end;
    writeln;

//Imprime a soma das colunas individualmente (corrigir)  
    for c:=1 to 5 do
        begin
            writeln('A soma da ',c,'ª coluna resulta em: ',somaC);
        end;
    readkey;
end.

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@Nikollas G. Ohta     a identação do código facilita a detecção de erros , e a sua variável  "somaC"  vai acumulando os valores de todas as colunas assim no final ele contém esses valores somados uns com os outros ,  então uma solução seria usar um vetor que armazenasse os valores de cada coluna em cada uma de suas 5 posições , ou escrever os valores lá na hora que faz a leitura , e seu código modificado poderia ser assim  :

Program SomaCol_ValDiagonal;
var    
  mat      : array[1..5,1..5] of integer;
  vet      : array[1..5]      of integer;
  somaC    : array[1..5]      of integer;
  soma,l,c :                     integer;

                                              //  Linha e coluna de 1 até 5
begin
  soma:=0;
  for l := 1 to 5 do
  begin
    for c := 1 to 5 do
    begin                                      //  Usuário insere valor para a coluna
      write('Digite um valor para a ',l,'ª linha e ',c,'ª coluna: ');  
      readln(mat[l,c]);                        //  lê o teclado e insere nas posições da matriz                        
      somaC[l] := somaC[l] + ( mat[ l,c ] );   //  acumula o total na posição de somaC
      if l = c then                            //  Se a linha for igual a coluna, é um 
                                               //  cenário propício a formar a diagonal
      //begin                                  //  esse bigin estava fora de lugar e 
                                               //  nem precisa dele , pois tem apenas uma linha
        vet[l] := mat[ l,c ];                  //  armazena o valor da diagonal
      //end;
    end;
    writeln;
  end;
                                               //  Imprime os valores da diagonal   
  for l := 1 to 5 do
  begin
    soma := soma + vet[ l ];
     writeln('Os elementos na diagonal são: ',vet[ l ] ); 
  end;
  writeln;

                                               //  Imprime a soma das colunas individualmente (corrigir)  
  for c := 1 to 5 do
  begin                                        //  escreve os valores totais de cada coluna 
    writeln('A soma da ',c,'ª coluna resulta em: ',somaC[ c ]);
  end;
  readkey;
end.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Resumo:

- a variável soma não tem utilidade no código. Basta removê-la;

- não é interessante ficar tendo que ficar digitando valores para cada execução. Implemente algo como gerar os números ou já deixar uma matriz fixa. Na versão final retira. (Ou deixa gerando automaticamente mesmo.)

- o valor da diagonal já está na matriz, não precisaria de outro vetor;

 

Segue um exemplo de código:

program SomaCol_ValDiagonal;
{$CODEPAGE UTF8} //para permitir acentos nas string em alguns compiladores [Não necessário no PascalZim, mas pode deixar]
uses
  CRT; //Unit que disponibiliza o Readkey() para alguns compiladores [Não necessário no PascalZim, mas pode deixar]
var    
  matriz: array[1..5,1..5] of integer;
  somaC : array[1..5]      of integer;
  l,c,i :                     integer;

begin
  Randomize; //evitar que os números gerados pelo Random() repitam ao reexecutar o programa
  
  for l := 1 to 5 do
  begin
    for c := 1 to 5 do
    begin                                   
      write ('Digite um valor para a ', l, 'ª linha e ', c, 'ª coluna: ');  
      //readln(matriz[l,c]);
      matriz[l,c] := Random(10)+1; writeln(matriz[l,c]); //preenche com valores aleatórios     
      somaC[l] := somaC[l] + matriz[l,c];
    end;
    writeln();
  end;

  write  ('Os elementos na diagonal são respectivamente: '); 
  for i := 1 to 5 do
    write  (matriz[i,i], ' '); 
  writeln();
  
  write  ('As somas das colunas são respectivamente: ');
  for c := 1 to 5 do
    write  (somaC[c], ' ');
  
  Readkey();
end.

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...