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!

  • 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…

    • estou começando a programar agora, muito difícil, mas gostei de suas explicações…

  • 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?

  • 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

  • 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

  • jose mauricio

    pow blz o tuto
    de pascal
    ajudou muito,mas tem mostrar os
    comandos usados
    valeu””

    • Rafael

      Como assim “comandos”? Não entendi. . .

  • Estou em dificuldade no final do programa
    ñ sei quando e pra dividir ou somar ñsei eu tento mais ñ sie o que e para colocar ou seja a fórmula

    • Rafael

      Não compreendi a sua dúvida… Por favor, tente detalhá-la mais para que eu possa ajudar! 🙂

  • 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;

  • 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)

  • 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.

  • 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.
      
  • Elson

    Olá, bom […] você poderia me dizer as sintaxes do Pascal?
    Agradeço desde já!

    • 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.

  • Elson

    Você poderia me mandar algum algoritimo feito com vetor?
    Agradeço!

  • 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");
          }
      }
  • ANA CAROLINA

    OLÁ Rafael!! Obrigado por responder..acho que vai ajudar,vou montar algo aqui. Valeu mesmo!!

  • 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.
    
    
  • 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 =)

  • Monique Machado de Souza

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

  • 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…

    • Olá Andrey! Utilize ponto em vez de vírgula e problema resolvido! 🙂

      • Andrey Visniewski

        agora deu certo
        eu corrigi algumas coisas que eu digitei errado tambem

      • Andrey Visniewski

        grato

  • 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???

    • Está faltando um ponto e vírgula na linha anterior

      • Andrey Visniewski

        eu comecei a programar ontem vendo o seu site, eu nunca tinha feito nenhuma linha de programação,

        seu site é excelente e tem uma linguagem fácil de se entender

        muito obrigado pela atenção

  • Andrey Visniewski

    agr esta dando um erro sintatico quando eu coloco := na linha da formula o que eu faço????

  • Onde estou errando nesse código? Porque ele não está conseguindo ser executado corretamente.

  • 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.

  • Bom eu queria saber a diferença entre o CHAR e STRING…