Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jose1997

PASCAL - AJUDA

Recommended Posts

Boa noite!

Esse é meu primeiro post então me desculpem se postei no lugar errado.

Estou com um pequeno problema para resolver um problema de programação pascal envolvendo matrizes e vetores.

O problema é o seguinte:

1. Desenvolver um procedimento que escreva uma matriz 3x3.

2. Utilizando a solução do exercício 1, armazene a diagonal principal da matriz em um vetor e depois escreva os valores armazenados nesse vetor.

Esses foi o mais próximo que consegui chegar, o problema 1 eu fiz mais o 2 to empacado.

procedure Trabalho01 ();
Var
Mat : array [1..3] of array [1..3] of integer;
Vet : array [1..3] of integer;
Linha, Coluna, Valor : Integer;
Begin
Valor := 0;
For Linha := 1 to 3 do
Begin
For Coluna :=1 to 3 do
Begin
Valor := Valor + 2;
Mat[Linha][Coluna] := Valor;
End;
End;
If Linha = Coluna then
Begin
Vet[1] := Mat
Vet[2] := Mat
Vet[3] := Mat
escr(IntToStr(Vet[Mat]);
End;
End;
Minha duvida é a seguinte. Eu preciso usar If ? Da maneira que estou usando ele dará todos os valores no qual linha = coluna, isso me daria mais dados do que preciso. Como eu posso filtrar para que me dê as posições [1,1] [2,2][3,3] ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve usar o if dentro de um for. Exemplo:

For x := 1 to 3 do

begin

novoVetor[x] := Mat[x][x];

end;

No teu caso, como está usando fora de um FOR, veja o que acontece:

Linha vai ser igual a coluna (3=3), 3 porque foi o último valor atribuidos a eles. Entende? Você tem que passar valor por valor.

Faz tempo que não programo em pascal, mas acho que atribuições como "Vet[1] := Mat", não são válidas, ou se forem você estaria colocando toda a Matriz gerada dentro da 1ª posição do vetor.

Refaz e posta aí.

Bons estudos.

Conheça e colabore com o OpenStreetMap. Ajude mapeando sua cidade. Mapas com dados livres. www.osm.org

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por FILIPEINFORMATICA10
      uses Crt; var X, Y : Integer; begin Writeln ('Entre com dois Números:'); { Mostra na tela a mensagem} Readln (X, Y); { Lê os dois números } If (X = Y) Then {Condição - SE X for igual a Y} Begin {INICIO - Repare abaixo que existe duas instruções, dois comandos Writeln, por isso estão entre BEGIN e END} Writeln ('X é igual que Y'); Writeln ('O Valor de X é =', X); End; {FIM} end.
    • Por flavionorvel
      #include <stdio.h>
      #include <stdlib.h>
      // Limites de tamanhos
      #define MINIMO 2
      #define MAXIMO 50
      // Variáveis globais
      int opcao = 0;
      int linhas = MAXIMO;
      int colunas = MAXIMO;
      int matrizA[MAXIMO][MAXIMO];
      int matrizB[MAXIMO][MAXIMO];
      void limpar_tela();
      // Retorna resposta do usuario se quer rodar novamente
      int rodar_novamente()
      {
      int opcao = 0;
      printf("\n\nDeseja rodar novamente? Digite 1 para SIM e 0 para Não: ");
      scanf("%d",&opcao);
      if (opcao == 1 || opcao == 0) {
      return opcao;
      }
      printf("\nOpcao invalida. Escolha novamente.");
      return rodar_novamente();
      }
      // Recebe valor inteiro do usuario
      int receber_numero()
      {
      int numero = 0;
      scanf("%d",&numero);
      if (numero >0) {
      return numero;
      }
      printf("\nNúmero inválido. digite um número positivo.: ");
      return receber_numero();
      }
      // Valida tamanhos de linhas e colunas
      int validar_tamanhos(int linhas, int colunas)
      {
      if ((linhas >= MINIMO && linhas <= MAXIMO) && (colunas >= MINIMO && colunas <= MAXIMO) && (linhas !
      = colunas)) {
      return 1;
      }
      printf("\nLinhas e Colunas devem ser diferentes e ter valores entre %d e %d. Tente
      novamente.",MINIMO,MAXIMO);
      return 0;
      }
      // Preencher matriz
      void preencher_matriz(int matriz[MAXIMO][MAXIMO], int linhas, int colunas)
      {
      int i,j;
      for (i = 0 ; i < linhas ; i ++) {
      for (j = 0 ; j < colunas ; j ++) {
      printf("\nDigite um valor inteiro para a posicao %d-%d da matriz A: ",i,j);
      matriz[j] = receber_numero();
      }
      }
      }
      // Imprimir matrizes
      void imprimir_matrizes(int matrizA[MAXIMO][MAXIMO], int matrizB[MAXIMO][MAXIMO], int linhas, int
      colunas)
      {
      int i,j;
      limpar_tela();
      printf("\n\nMATRIZ A\n");
      for (i = 0 ; i < linhas ; i++) {
      for (j = 0 ; j < colunas ; j ++) {
      printf("\nMATRIZ A POSICAO %d-%d: %d",i,j,matrizA[j]);
      }
      }
      printf("\n\nMATRIZ B (TRANSPOSTA DE A)\n");
      for (i = 0 ; i < colunas ; i++) {
      for (j = 0 ; j < linhas ; j ++) {
      printf("\nMATRIZ B POSICAO %d-%d: %d",i,j,matrizB[j]);
      }
      }
      }
      void limpar_tela()
      {
      system("@cls||clear");
      }
      // Laço principal
      int main()
      {
      int i,j;
      do {
      //Inicializar variáveis
      opcao = 0;
      linhas = 0;
      colunas = 0;
      i = 0;
      j = 0;
      do {
      printf("\nEntre com o tamanho para linhas: ");
      linhas = receber_numero();
      printf("\nEntre com o tamanho para colunas: ");
      colunas = receber_numero();
      } while (!validar_tamanhos(linhas,colunas));
      // entrar com valores para a matriz A
      preencher_matriz(matrizA, linhas, colunas);
      // criar matriz transposta de A
      for(i = 0 ; i < linhas ; i ++) {
      for(j = 0 ; j < colunas ;j ++) {
      matrizB[j] = matrizA[j];
      }
      }
      // Imprimir matrizes
      imprimir_matrizes(matrizA,matrizB,linhas, colunas);
      // Pergunta ao usuário se quer continuar
      opcao = rodar_novamente();
      } while (opcao == 1);
      }me 

       
    • Por AnotherSunset
      Boa noite/dia gente. Preciso de ajuda aqui. Tenho um exercício no qual tenho de fazer um programa em pascal com o seguinte enunciado:
      Considere a soma S dos termo da série infinita apresentada abaixo:

      Fazer um programa em Free Pascal que calcule o valor aproximado da soma S dos termos da série até o momento em que a diferença das normas (módulo) de 2 termos consecutivos for menor que 0,000001 ({i.e.}, norma da diferença das normas de dois termos consecutivos).
       
      Segue meu algoritmos/programa:
       
      program calcserie;
      var
         soma, a1, a2, an  : real;
         sinal                : longint;
         cont, n, fat         : integer;
      begin
         n := 0;
         a1 := 1;
         a2 := 0;
         soma := 0;
         cont := 1;
         fat := 1;
         an := 1;
         sinal := 1;
         while (an) > 0.000001 do
            begin
            n := n + 2;
              while cont <= n do
                  begin
                  fat := fat * cont;
                  cont := cont + 1;
              end;
           soma := (soma + (a1 * sinal));
           sinal := sinal * -1;
           a2 := a1;
           a1 := ((1/fat));
              if (a2 < 0) then
              an := (a2 * -1) - a1
              else if (a1 < 0) then
              an := (a2) - (a1 * -1);
              end;
         write (soma:0:15);
      end.
       
      Meu erro está sendo a partir da 3 casa decimal

    • Por viniciusSantana
      Boa noite meu problema é '$' que sempre da na ultima linha esta ai o codigo
       
       
      Program Pzim ;
      var nome:string;
              sangue:string;
              idade:integer;
      Begin
      writeln('Escreva seu nome aqui ');
      read(nome);
      writeln('Digite sua idade ');
      read(idade);
      writeln('Digite seu tipo sanguineo ');
      read(sangue);
      if sangue=Apositivo then
      write('Você ',nome,'tem);
      End.
    • Por Hatepascal
      program divisao;
      /*ME AJUDEM POR FAVOR, ESTOU FICANDO LOUCO!
      Questão:
      faça uma calculadora onde o usuario entre com 2 numeros
      e secolha a operacao desejada, multiplicao ou divisao.
      voce devera mostrar o resultado e depois perguntar se
      ele deseja realizar a operacao novamente.
      sei que isso usa o comando while,porem nao estou
      conseguindo entender a logica,pelo que parece
      algem resolve para mim? grato.
      */
       
      var m,d, n1, n2: real;
          continuar :string;
          escolha:char;
      begin
        d := 0;
        m :=0;
        continuar := 'sim' ;
        while continuar = 'sim' do
        Begin
        writeln('digite o primeiro numero: ');
        readln(n1);
        writeln('digite o segundo numero');
        readln(n2);
        WriteLn('escreva d para divisao ou m para multiplicacao');
        readln(escolha);
          if escolha = 'm' then
          begin
            m := n1 * n2;
          end;
          if escolha = 'd' then
          begin
            d := n1 / n2;
            end;
          write('resultado multiplicação : ');
          writeln(m);
          write('resultado divisão : ');
          writeln(d);
         
          writeln('deseja continuar , sim? ');
          readln;
          end;
          end.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.