Introdução à Linguagem Pascal

Padrão

Olá a todos novamente!

Hoje, finalmente, iremos começar a programar de fato, e fazer o nosso primeiro programa! Quanto a linguagem, iremos utilizar a Linguagem Pascal num primeiro momento. Apesar de muitos não concordarem com o uso dela, eu a considero a melhor escolha para o ensino da programação, por ter uma sintaxe clara e fácil de ser entendida.

Para escrever e compilar (transformar o código escrito em um arquivo executável), utilizaremos o Pascal Zim, um ambiente criado pelo departamento de Ciência da Computação da Universidade de Brasília, para o auxílio no ensino da disciplina de Algoritmos. Atualmente, ele encontra-se na versão 5.01. O link para download você encontra aqui. Algumas pessoas podem preferir utilizar o Turbo Pascal, da Borland. Eu optei pelo Pascal Zim por dois motivos: a última versão do Turbo Pascal é de 1991 (ou seja, já tem 18 anos!!!) e também pelo fato do Pascal Zim ser brasileiro! (vamos valorizar os programadores do Brasil!). Caso queiram utilizar o Turbo Pascal, fiquem à vontade, pois a sintaxe é a mesma.

Após baixarem o Pascal Zim, descompacte-o utilizando o Winrar, PKZip, Winzip, 7Zip, enfim, qualquer um que você tenha aí. Logo após, vá até a pasta pascalzim e execute o Pzim.exe. Teremos a seguinte janela:

pascalzim

Esta é a tela de edição de um programa no Pascal Zim. É nela que escreveremos os comandos que irão compor o nosso programa. A seguir, temos um programa simples em algoritmo que iremos passar para a linguagem Pascal:

algoritmo ola_mundo

[Processamento]
   escreva("Olá, Mundo! Estou no blog do Striker07!")
[Fim]

Este é um programa extremamente simples, que escreve o texto Olá, Mundo! Estou no blog do Striker07! na tela. Em Pascal, este programa ficaria dessa forma:

program ola_mundo;

begin
   write('Olá, Mundo! Estou no blog do Striker07!');
end.

Vamos agora explicar passo-a-passo este primeiro programa. Na primeira linha, temos Program Ola_Mundo; Esta linha define o nome do nosso programa, da mesma forma que definimos o nome do nosso algoritmo na primeira linha dele. Perceba que, os comandos do Pascal terminam com ; e se você não colocá-los, ocorrerá um erro na hora de compilar. Logo em seguida temos o Begin, que significa o início do programa. Os comandos do nosso programa começarão a ser escritos a partir deste Begin. Ele não tem ; porque não é um comando, mas uma indicação de que a área de processamento está iniciando. A seguir, temos o comando write(‘Olá, Mundo! Estou no blog do Striker07!’); que corresponde ao Escreva(“Olá, Mundo! Estou no blog do Striker07!”). Perceba, basicamente, é a mesma coisa no algoritmo e no programa, com a diferença de que no Pascal os comandos são em inglês. Outra diferença é que na linguagem Pascal o texto deve vir entre aspas simples enquanto que no algoritmo ele vem entre aspas duplas. Também não se deve esquecer de colocar o ponto e vírgula no final do comando. Encerrando o programa, temos End. que indica o final do programa. Este End deve sempre ser acompanhado do ponto final, indicando que o programa se encerra aí.

Caso você esteja utilizando o Turbo Pascal, precisará incluir a seguinte linha depois do título do programa:

program ola_mundo;

uses
   wincrt;

begin
...

Esta linha inclui a biblioteca padrão de comandos. Caso esteja utilizando a versão para DOS do Turbo Pascal, substitua wincrt por crt. No Pascal Zim, a biblioteca é incluída automaticamente, então não há a necessidade de colocar esta linha.

Vamos agora fazer um programa simples, que recebe dois números do usuário e os soma. Primeiro, vamos fazer o algoritmo deste programa:

algoritmo soma_dois_numeros

[Declaração de Variáveis]
   numero1, numero2, resultado : inteiro

[Processamento]
   escreva("Digite o primeiro número: ")
   leia(numero1)
   escreva("Digite o segundo número: ")
   leia(numero2)
   resultado ← numero1 + numero2
   escreva("O resultado da soma é ", resultado)
[Fim]

Um algoritmo muito simples, onde lemos o valor de duas variáveis do tipo inteiro, e depois as somamos, armazenando na variável resultado, e mostramos na tela. Agora vamos fazer o mesmo programa em Pascal:

program soma_dois_numeros;

var
   numero1, numero2, resultado : integer;

begin
   write('Digite o primeiro número: ');
   readln(numero1);
   write('Digite o segundo número: ');
   readln(numero2);
   resultado := numero1 + numero2;
   write('O resultado da soma é ', resultado);
end.

Este programa tem alguns elementos a mais que o outro não tinha. Na primeira linha, temos o título do programa, da mesma forma como estava no Olá Mundo. Após isso, temos a área Var, onde declaramos as variáveis do tipo Inteiro, no caso da linguagem Pascal, Integer. A seguir os tipos básicos e os seus respectivos nomes na linguagem Pascal:

  • Inteiro = Integer
  • Real = Real
  • Caracter = Char
  • Booleano = Boolean
  • Literal = String

Na linguagem Pascal, todas as variáveis devem ser declaradas nesta seção. Caso queira declarar variáveis de tipos diferentes, deve-se fazer igual a um algoritmo:

// No Algoritmo
[Declaração de Variáveis]
   soma : inteiro
   inicial : caracter
   media : real

{ Em Pascal }
var
   soma : integer;
   inicial : char;
   media : real;

Uma coisa importante que eu tinha esquecido de falar é que a linguagem Pascal não distingue maiúsculas de minúsculas. Ou seja, Real é a mesma coisa que  real ou rEaL ou reaL. Da mesma forma se você declarar uma variável Media, não poderá declarar outra com o nome de media.

Continuando o código, temos o início do programa. O primeiro comando escreve uma mensagem pedindo pra o usuário entrar com o primeiro número. Em programação, esse tipo de mensagem é conhecido como prompt. Em seguida, temos a função readln() que lê um valor do usuário e o armazena em uma variável. Depois, repetimos os dois comandos para ler o segundo número da soma. Em seguida, temos o cálculo da soma. Perceba que, na linguagem Pascal, o operador de atribuição é representado por := em vez da seta que representamos nos algoritmos. Na última linha, temos a apresentação do resultado na tela, através da função write(), onde colocamos entre os parênteses o texto e  a variável que queremos exibir na tela.

Para concluir este primeiro post, vamos fazer um último programa que calcula a sua idade, baseando-se no seu ano de nascimento, utilizando o conceito de constantes. Teremos, então o seguinte algoritmo:

algoritmo calculo_idade

[Declaração de Constantes]
   ano_atual = 2009

[Declaração de Variáveis]
   ano_nascimento, idade : inteiro
   nome : literal

[Processamento]
   escreva("Olá! Poderia me dizer qual é o seu nome? ")
   leia(nome)
   escreva("Em que ano você nasceu? ")
   leia(ano_Nascimento)
   idade ← ano_atual - anoNascimento
   escreva("Prazer em conhecê-lo, ", nome, ".")
   escreva("Você tem ", idade, " anos.")
[Fim]

Passando este algoritmo para a linguagem Pascal, teremos o seguinte:

program calculo_idade;

const
   ano_atual = 2009;

var
   ano_nascimento, idade : integer;
   nome : string;

begin
   write('Olá! Poderia me dizer qual é o seu nome? ');
   readln(nome);
   write('Em que ano você nasceu? ');
   readln(ano_nascimento);
   idade := ano_atual - ano_nascimento;
   writeln('Prazer em conhecê-lo, ', nome, '.');
   write('Você tem ', idade, ' anos.');
end.

Basicamente, temos apenas um detalhe novo em relação ao último programa: a inclusão da área Const para a declaração de constantes. A declaração ocorre da mesma forma que nos algoritmos, ou seja, sem a definição do tipo, utilizando o operador = para indicar o valor da constante. Outro detalhe é a utilização da função writeln(). Mas qual a diferença entre write() e writeln()? Ao utilizar a função write(), o cursor ficará posicionado logo após o final do texto. Já na função writeln(), o cursor pulará para a próxima linha ao escrever o texto. O emprego dessas funções deve priorizar a estética na tela, deixando o programa com um visual mais “agradável”.

Para encerrar este tópico, vou deixar alguns exercícios para praticarem a elaboração de algoritmos e a programação em Pascal:

1. Desenvolva um algoritmo para calcular a média de 4 números fornecidos pelo usuário.

2. Desenvolva um algoritmo para calcular a expressão S = (A + B) / (A – B).Os valores A e B deverão ser fornecidos pelo usuário.

3. Desenvolva um algoritmo para calcular o volume de um cilindro, dado por Pi R² H, onde R é o raio, H é a altura e Pi uma constante equivalente a 3,14. Os valores de R e H deverão ser fornecidos pelo usuário.

4. Desenvolva um algoritmo para calcular a área da esfera, dada por 4 Pi R² e o seu volume, dado por 4 Pi R³ / 3, onde R é o raio e Pi uma constante equivalente a 3,14. O valor de R deverá ser fornecido pelo usuário.

5. Desenvolva um algoritmo para calcular a altura do cilindro, dada por V / 4 Pi R², onde R é o raio, V é o volume e Pi uma constante equivalente a 3,14. Os valores R e V deverão ser fornecidos pelo usuário.

6. Desenvolva um algoritmo para calcular a função F(x,y) = 2x + 2y², em um domínio real. Os valores X e Y deverão ser fornecidos pelo usuário.

7. Desenvolva um algoritmo para calcular o troco a ser devolvido a um cliente. Deve ser lido (fornecido pelo usuário) o valor  a ser pago e o valor dado pelo cliente.

8. Desenvolva um algoritmo para calcular o valor absoluto da diferença entre A e B. Os valores A e B deverão ser lidos.

9. Desenvolva um algoritmo para calcular (converter) graus Farenheit (F) em graus Centígrados (C) , utilizando a seguinte fórmula: C = 5 (F – 32) / 9. O valor F deverá ser lido.

Algumas dicas:
– Função para calcular a raiz quadrada: sqrt(número)
– Função para calcular o valor absoluto de um número: abs(número)

Tentem fazer os exercícios. Qualquer dúvida, postem nos comentários ou me enviem um e-mail (rafaeldtoledo@gmail.com). No próximo post colocarei as respostas dos exercícios e as respectivas implementações em Pascal.

Abraço a todos e bom feriado!

35 comentários sobre “Introdução à Linguagem Pascal

  1. ae cara gostaria de saber se vc poderia me ajudar a resolver um problema q estou num programa tenho q fazer um programa tipo uma calculado q possa = somar, dividir, multiplicar e tal!!
    teria como me ajudar….
    se tiver como me manda um e-mail fazendo o favor o mais rapido q puder!!
    vlw…

  2. Tereza Cristina

    Estou precisando escrever um programa que receba a idade de 20 pessoas, calcular e imprimir a quantidade de pessoas maiores de idade. Você pode me ajudar?

  3. josé murialdo Gomes

    Meu amigo,
    Gostaria se vc pudesse me ajudar de elaborar um programa em pascal, em que as equipes do campeonato brasileiro fossem marcando pontos a medida dos resultados.pode ser com 4 equipes.
    valeu

  4. josé murialdo Gomes

    Amigo,
    Vc poderia faze uma programação de jogos de equipes e a classifcação deles. Pode ser com 6 equipes em 5 rodadas.
    grato

  5. kleber

    e ai cara blz;
    tenho q fazer um trabalho no pascal para dividir uma seguencia de numeros ate um valor x, usando comandos de repetiçao. vc poderia posta um exemplo ou me manda por email?
    vlw.

    • Rafael

      Cara, quando você tem uma quantidade definida de repetições, o mais indicado é usar o laço for. Não compreendi exatamente o problema, mas vamos dizer que você queira dividir números de 1 a 10 por 2.

      for i := 1 to 10 do
      begin
        resultado := i / 2;
        writeln(i, 'dividido por 2 = ', resultado);
      end;

  6. Tenho fazer um programa de Gestao economica da Pizaria El Gredo.
    na pizzaria, sempre que um cliente dirige-se ao empregado de balcao, este deve introduzir no programa a encomenda do cliente. Este processo e efeito diariamente. a primeira vez que o cliente requer os servicos devera dar os seus dados pessoais para que seja feita a introducao no programa. nas vezes seguintes o cliente o cliente sera identificado com o codigo que lhe sera atribuido. se o cliente encomendar pizzas que ultrapassam o valor de 10,000,000,00 poe mes, podera usufruir de um desconto de 10% sobre o valor total e passar para a lista de clientes privilegiados. pretende-se desenvolver um programa em pascal que faca aintroducao dos dados do cliente, da encomenda e liste os tipos de pizza no ecram sempre que o cliente pretender encomendar uma pizza. estes processos deverao ser efectuados de uma forma interativa(usando menus)

  7. kelvin

    Queria saber se esse programa que decompõe um número em fatores primos esta bom:Program DecomposicaoPrimos ;

    Var n , f2 , f3 , f5 , f7 , f11 , divisor , primo , x : integer ;
    a , ff , ff2 , ff3 , ff5 , ff7 , ff11 , base , ex , p , e , f0 : integer ;

    Begin

    Writeln (‘ ‘) ;
    Writeln (‘ Decomposiçao em fatores primos ‘) ;
    Writeln (‘================================’) ;
    Writeln (‘ ‘) ;

    Write (‘Escreva o número desejado: ‘) ;
    Readln (n) ;
    a := n ;

    Writeln (‘ ‘) ;
    Writeln (‘ ‘) ;

    Begin
    divisor := 1 ;
    primo := 0 ;

    Repeat
    divisor := divisor + 1 ;
    Until n mod divisor = 0 ;

    if divisor = n then
    primo := primo + 1 ;

    end;

    if primo = 1 then
    Writeln (‘O número ‘, n ,’ já é primo.’)
    Else

    if primo = 0 then begin

    begin
    begin
    divisor := 1 ;
    Repeat
    divisor := divisor + 1 ;
    Until n mod divisor = 0 ;
    end;

    if divisor = 2 then repeat
    f2 := f2 + 1 ;
    n := n div 2 ;
    Until n mod 2 0 ;

    end;

    if n > 1 then begin
    begin
    divisor := 1 ;
    Repeat
    divisor := divisor + 1 ;
    Until n mod divisor = 0 ;
    end;

    if divisor = 3 then repeat
    f3 := f3 + 1 ;
    n := n div 3 ;
    Until n mod 3 0 ;

    end;

    if n > 1 then begin
    begin
    divisor := 1 ;
    Repeat
    divisor := divisor + 1 ;
    Until n mod divisor = 0 ;
    end;

    if divisor = 5 then repeat
    f5 := f5 + 1 ;
    n := n div 5 ;
    Until n mod 5 0 ;

    end;

    if n > 1 then begin
    begin
    divisor := 1 ;
    Repeat
    divisor := divisor + 1 ;
    Until n mod divisor = 0 ;
    end;

    if divisor = 7 then repeat
    f7 := f7 + 1 ;
    n := n div 7 ;
    Until n mod 7 0 ;

    end;

    if n > 1 then begin
    begin
    divisor := 1 ;
    Repeat
    divisor := divisor + 1 ;
    Until n mod divisor = 0 ;
    end;

    if divisor = 11 then repeat
    f11 := f11 + 1 ;
    n := n div 11 ;
    Until n mod 11 0 ;

    end;

    if f2 0 then begin
    x := 0 ;
    repeat
    writeln (‘2’) ;
    x := x + 1 ;

    until x = f2 ;

    end;

    if f3 0 then begin
    x := 0 ;
    repeat
    writeln (‘3’) ;
    x := x + 1 ;

    until x = f3 ;

    end;

    if f5 0 then begin
    x := 0 ;
    repeat
    writeln (‘5’) ;
    x := x + 1 ;

    until x = f5 ;

    end;

    if f7 0 then begin
    x := 0 ;
    repeat
    writeln (‘7′) ;
    x := x + 1 ;

    until x = f7 ;

    end;

    if f11 0 then begin
    x := 0 ;
    repeat
    writeln (’11’) ;
    x := x + 1 ;

    until x = f11 ;

    end;

    End ;

    Begin

    if f2 = 0 then ff2 := 1 else
    if f2 = 1 then ff2 := 2 else begin

    base := 2 ;
    ex := f2 ;

    p := base ;
    e := 1 ;

    Repeat
    p := p * base ;
    e := e + 1 ;
    Until e = ex ;

    ff2 := p ;

    end ;

    if f3 = 0 then ff3 := 1 else
    if f3 = 1 then ff3 := 3 else begin

    base := 3 ;
    ex := f3 ;

    p := base ;
    e := 1 ;

    Repeat
    p := p * base ;
    e := e + 1 ;
    Until e = ex ;

    ff3 := p ;

    end ;

    if f5 = 0 then ff5 := 1 else
    if f5 = 1 then ff5 := 5 else begin

    base := 5 ;
    ex := f5 ;

    p := base ;
    e := 1 ;

    Repeat
    p := p * base ;
    e := e + 1 ;
    Until e = ex ;

    ff5 := p ;

    end ;

    if f7 = 0 then ff7 := 1 else
    if f7 = 1 then ff7 := 7 else begin

    base := 7 ;
    ex := f7 ;

    p := base ;
    e := 1 ;

    Repeat
    p := p * base ;
    e := e + 1 ;
    Until e = ex ;

    ff7 := p ;

    end ;

    if f11 = 0 then ff11 := 1 else
    if f11 = 1 then ff11 := 11 else begin

    base := 11 ;
    ex := f11 ;

    p := base ;
    e := 1 ;

    Repeat
    p := p * base ;
    e := e + 1 ;
    Until e = ex ;

    ff11 := p ;

    end ;

    ff := ff2 * ff3 * ff5 * ff7 * ff11 ;
    f0 := a div ff ;
    if a div ff > 1 then writeln (f0) ;

    end ;
    End.

  8. Jefferson Damian

    Oi estou com um problema.
    Estou fazendo um trabalho de aula, usando o Turbo Pascal, e em determinado ponto preciso converter um número inteiro para string mas não consigo achar qual o comondo de conversão.

    Poderia me ajudar?

    Obrigado

    • Rafael

      Olá! Caso você queria apenas escrever o valor na tela, basta jogar dentro de um writeln()

      var
        a : integer;
      
      begin
        a := 12;
        writeln(a);
      end.

      Caso precise que o número esteja armazenado em uma string, aí você pode usar a função IntToStr(). Para usá-la é necessário incluir o sysutils

      uses
        crt;
        sysutils;
      
      var
        a: integer;
        b: string;
      
      begin
        a := 12;
        b := IntToStr(a);
        writeln(b);
      end.
      
    • Rafael

      Sintaxe nada mais é que a “ortografia e gramática” da linguagem de programação. A sintaxe da linguagem Pascal é explicada desse post em diante. Você pode conferir todos os posts da série ali na barra da direita.

  9. ANA CAROLINA

    OLÁ!!Gostei do seu blog,bem intuitivo.
    Eu estou começando a programar em pascal,tenho um exercicio sobre procedimento e não consegui fazer,se puder me ajudar,obrigado!
    Faça um procedimento com um parâmetro
    inteiro n e que ao ser chamado, imprime
    uma figura da seguinte forma:
    ….*….
    …***…
    ..*****..
    .*******.
    *********
    .*******.
    ..*****..
    …***…
    ….*….
    No caso, o procedimento foi chamado com o
    parâmetro 5. A quantidade de linhas
    impressas é 2n-1.

    • Olá Ana!

      Olha… esses exercícios que lhe passam na faculdade / técnico servem exatamente pra desenvolver a sua capacidade de pensamento lógico. É essencial que você brigue com eles, tente, erre, acerte, pois é isso que vai lhe ajudar a se tornar uma boa profissional.

      Fiz uma coisinha em C que funciona, e pode servir de base pra você bolar alguma coisa:

      void imprimir(int x)
      {
          int i, j;
          for (i = 0; i <= x; i++)
          {
              for (j = 0; j < x - i; j++)
              {
                  printf(".");
              }
      
              for (j = 0; j <= i; j++)
              {
                  printf("*");
              }
      
              for (j = 0; j < i; j++)
              {
                  printf("*");
              }
      
              for (j = 0; j < x - i; j++)
              {
                  printf(".");
              }
      
              printf("\n");
          }
      
          for (i = x; i >= 0; i--)
          {
              for (j = 0; j < x - i; j++)
              {
                  printf(".");
              }
      
              for (j = 0; j <= i; j++)
              {
                  printf("*");
              }
      
              for (j = 0; j < i; j++)
              {
                  printf("*");
              }
      
              for (j = 0; j < x - i; j++)
              {
                  printf(".");
              }
      
              printf("\n");
          }
      }
  10. wagner nevony

    Estou com problema em um programa de sistema linear com soluçao por metodo de jordan.

    O problema é que quando se tem zero no resultado ou na coluna e linha da erro e sai do sistema sem dar resultados. o código é esse:

    
    program Jordan5;
    
    uses crt;
    
    var
    
       m,c,b,i,j,k,l,w,v1,v2,linha,coluna   :integer;
    
       s1                               :real;
    
       m1                               :array[1..9] of  real;
    
       m2,jordan                        :array[1..9,1..9] of real;
    
       ch                               :char;
    
       label                            validar,verg,verj,
    
                                        mostrar,mostrar1,mostrar2,fora,fora1;
    
    Procedure piv_parcial;
    
     begin
    
       for l:=(c+1) to linha do
    
         if abs(m2[c,c]) &lt;abs(m2[l,c]) then
    
           begin
    
             for v1:=1 to (linha+1) do
    
    	   m1[v1]:= m2[c,v1];
    
    	     for v1:=1 to (linha+1) do
    
    	       m2[c,v1]:= m2[l,v1];
    
                     for v1:=1 to (linha+1) do
    
    		   m2[l,v1]:=m1[v1];
    
            end;
    
     end;
    
     {--------------------------------------------------------}
    
     procedure espaco;
    
     begin
    
       writeln;
    
       writeln;
    
     end;
    
     {-------------------------------------------------------}
    
     procedure moldura;
    
     begin
    
        textcolor(15);
    
        Gotoxy(1,1);
    
        Write(#201);
    
        Gotoxy(1,24);
    
        Write(#200);
    
        Gotoxy(80,1);
    
        Write(#187);
    
        Gotoxy(80,24);
    
        Write(#188);
    
        for m:=2 to 79 do begin
    
          Gotoxy(m,1);
    
          Write(#205);
    
        end;
    
        for m:=2 to 79 do begin
    
          Gotoxy(m,24);
    
          Write(#205);
    
        end;
    
        for m:=2 to 23 do begin
    
          Gotoxy(1,m);
    
          Write(#186);
    
        end;
    
        for m:=2 to 23 do begin
    
          Gotoxy(80,m);
    
          Write(#186);
    
        end;
    
     end;
    
     {---------------------------------------------------------}
    
     procedure cabecalho;
    
     begin
    
      moldura;
    
      textcolor(3);
    
      gotoxy(15,2);
    
      writeln('PROGRAMA  DE RESOLUCAO DE SISTEMAS DE EQUACOES LINEARES');
    
      gotoxy(20,3);
    
      writeln('METODO UTILIZADO: ELIMINACAO DE JORDAN');
    
      gotoxy(20,4);
    
      textcolor(yellow);
    
      writeln('ALUNOS: VILIANE OLIVEIRA E WAGNER NEVONY');
    
      espaco;
    
      textcolor(15);
    
      gotoxy(30,12);
    
      write('ENTER PARA CONTINUAR...');
    
      readkey;
    
     end;
    
    {------------------------------------------------------------------}
    
    procedure Entrada;
    
    begin
    
      clrscr;
    
      moldura;
    
      textcolor(15);
    
      gotoxy(2,2);
    
      writeln('Entre com valor de 2 a 9 para a Ordem da Matriz!!!');
    
      repeat
    
        gotoxy(2,4);
    
        write('Informe a quantidade de linhas da Matriz:  ');
    
    	gotoxy(45,4);
    
        readln(linha);	
    
      until (linha&gt;=2) and (linha&lt;=9);
    
      repeat
    
    	textcolor(15);
    
    	gotoxy(2,5);
    
    	write('Informe a quantidade de colunas da Matriz: ');
    
    	gotoxy(45,5);
    
        readln(coluna);	
    
      until (coluna&gt;=2) and (coluna&lt;=9);
    
      espaco;
    
      for i:=1 to linha do
    
        for j:=1 to (coluna+1) do
    
        begin
    
          //clrscr;
    
    	  textcolor(15);
    
          gotoxy(2,7);
    
          writeln('Matriz do Tipo : ',linha,'x',coluna);
    
          gotoxy(2,8);
    
          write('Matriz ',' A ', i , j ,' :');
    
          gotoxy(10+j*8,7+i);
    
    	  if j=(coluna+1) then
    
    	    textcolor(yellow);
    
          read(m2[i,j]);
    
          textcolor(15);
    
        end;
    
    end;
    
    {-------------------------------------------------------------------}
    
    BEGIN
    
      repeat
    
        clrscr;
    
    	cabecalho;
    
    	Entrada;
    
        validar:
    
        writeln;
    
        write(' | ');
    
        for i:=1 to linha do
    
          for j:=1 to (coluna+1) do
    
            begin
    
    		  if j=(coluna+1) then
    
    			  textcolor(yellow)
    
    			  else
    
                    textcolor(15);
    
    		        write(' ',m2[i,j]:6:2);
    
              if j=(coluna) then
    
    		    textcolor(15);
    
    			write(' | ');
    
                if j=(coluna+1) then
    
    			  begin
    
                    writeln;
    
                      if i=linha then goto fora;
    
    				    write(' | ');
    
                  end;
    
            end;
    
        fora:
    
    	textcolor(15);
    
        gotoxy(2,23);
    
        writeln(' Pressione qualquer tecla para continuar... ');
    
        readkey;
    
        clrscr;
    
        {---------------------copia matriz---------------------}
    
        writeln('********************************************************************************');
    
        gotoxy(32,2);
    
        textcolor(3);
    
        writeln('MATRIZ  ',linha,' x ',coluna);
    
        textcolor(15);
    
        writeln('********************************************************************************');
    
        write(' | ');
    
        for i:=1 to linha do
    
          for j:=1 to (coluna+1) do
    
            begin
    
    		  if j=(coluna+1) then
    
    			  textcolor(yellow)
    
    			  else
    
                    textcolor(15);
    
           	        write(' ',m2[i,j]:6:2);
    
              if j=(coluna) then write(' | ');
    
                if j=(coluna+1) then
    
                  begin
    
                    writeln;
    
                    if i=linha then goto fora1;
    
                      write(' | ');
    
                  end;
    
            end;
    
        fora1:
    
    	{--------------------- FIM copia matriz---------------------}
    
        c:=1;
    
    	verg:
    
        piv_parcial;
    
        for l:=c+1 to linha do
    
    	  begin
    
            s1:= m2[l,c]/m2[c,c];
    
              for j:=1 to (coluna+1) do
    
                m2[l,j]:=m2[l,j]-s1*m2[c,j];
    
          end;
    
        c:=c+1;
    
        if (c= linha) then goto mostrar1
    
          else
    
            goto verg;
    
        {---------------------solucao do sistema--------------------}
    
        mostrar1:
    
        for i:=1 to (linha) do
    
          for j:=1 to (coluna+1) do
    
    	    jordan[i,j]:=m2[i,j];
    
            v1:=linha; v2:=coluna+1;
    
            m2[v1,v2]:= m2[v1,v2]/m2[v1,v1];
    
            for k:= v1-1 downto 1 do
    
              begin
    
              for i:=k+1 to v1 do
    
              m2[k,v2]:=m2[k,v2]-m2[k,i]*m2[i,v2];
    
            m2[k,v2]:=m2[k,v2]/m2[k,k];
    
          end;
    
    	textcolor(15);
    
        write('********************************************************************************');
    
        textcolor(3);
    
        writeln('                      VETOR SOLUCAO - METODO DE JORDAN                        ');
    
        textcolor(15);
    
        writeln('********************************************************************************');
    
        c:=linha;
    
        verj:
    
        for l:=c-1 downto 1 do
    
          begin
    
            s1:= jordan[l,c]/jordan[c,c];
    
            for j:= 1 to (coluna+1) do
    
              jordan[l,j]:=jordan[l,j]-s1*jordan[c,j];
    
          end;
    
        c:=c-1;
    
        if (c= 1)  then goto mostrar2
    
           else  goto verj;
    
        mostrar2:
    
        for j:=1 to linha do
    
         for i:=1 to coluna do
    
           if i=j then
    
              jordan[i,linha+1]:=jordan[i,linha+1]/jordan[i,j];
    
              writeln;
    
    	{--------------------escrevendo a solução-------------------}
    
        for i:= 1 to linha do
    
          begin
    
    	    write('   X', i , ' : ', jordan[ i,linha+1]:4:3);
    
          end;
    
    	writeln;
    
        writeln('********************************************************************************');
    
        textcolor(3);
    
    	gotoxy(2,23);
    
        writeln('Deseja continuar (S/N) ?');
    
        ch:=upcase(readkey);
    
      until (ch = 'n') or (ch = 'N');
    
     end.
    
    
  11. Danilo Andrade

    Realmente foi muito gostoso praticar esses exercícios =P Cada exercício que eu conclui acabei aperfeiçoando um pouco mais do meu código =)

  12. Monique Machado de Souza

    Olaaa gostei bastante da explicação estou precisando de alguém que me explique assim,é muito difícil de entender

  13. Andrey Visniewski

    ola, esta acontecendo um erro quando tento executar o excercicio 2.

    veja a imagem, tu pode me dizer qual é o problema??? não é a primeira vez que isso acontece…

  14. Andrey Visniewski

    eu arrumei certinho agr está menos confuso
    mas tem um problema que sempre acontece

    quando acontece isso eu fecho o PascalZim e abro novamente e nao acontece esse erro, qual é o problema???

  15. EMANOEL

    Estou com um grande problema, uma vez que o pascalzim não exibe o tempo que levou para o algoritmo ser compilado/executado. Não consigo fazer com que seja calculada o tempo de execução deste algoritmo, ALGUÉM PODERIA ME AJUDAR POR FAVOR.
    RECAPITULANDO…. EU PRECISO EXIBIR AO FINAL DA EXIBIÇÃO DOS NÚMEROS ALEATÓRIOS DESTA MATRIZ, O TEMPO QUE O COMPILADOR LEVOU PARA FAZER ESSE PROCEDIMENTO.

    Program Pascal ;

    var
    i, j:integer;
    ti, tf, tt, Hour, Minute, Second, MSecond : Word;

    vect:array[1..5000] of integer;
    Matriz500: text;

    begin
    GetTime (Hour, Minute, Second, MSecond);
    Writeln (‘Time : ‘,Hour:2,’:’,Minute:2,’:’,Second:2);
    ti:=(Hour*3600+Minute*60+Second)*1000;
    Writeln (‘Milisegundo : ‘, ti);

    j := 0;
    for i := 1 to 5000 do
    begin
    vect[i] := random(10); //j + 1;
    j := random(10);//j + 1;
    end;

    Assign(Matriz500, ‘Matriz500.txt’);
    Rewrite(Matriz500);

    for i := 1 to 5000 do
    begin
    if i < 5000 then
    begin
    Write(vect[i], ', ');
    Write(Matriz500, vect[i], ', ');
    end else begin
    Write(vect[i], '. ');
    Write(Matriz500, vect[i], '.');
    end;
    end;

    Close(Matriz500);

    GetTime (Hour, Minute, Second, MSecond);
    Writeln ('Time : ',Hour:2,':',Minute:2,':',Second:2);
    tf:=(Hour*3600+Minute*60+Second)*1000;
    Writeln ('Milisegundo : ', tf);

    tt := tf-ti;

    Writeln ('Tempo : ', tt);
    ReadLn;
    end.

Deixe uma resposta