2019-02-11 16:31:33 +00:00
---
2019-02-13 00:14:08 +00:00
filename: learnpascal-pt.pas
2019-02-11 16:31:33 +00:00
contributors:
2019-02-13 00:14:08 +00:00
- ["Ganesha Danu", "https://github.com/blinfoldking"]
- ["Keith Miyake", "https//github.com/kaymmm"]
2019-10-29 22:53:29 +00:00
- ["Raul Almeida", "https://github.com/almeidaraul"]
2019-02-13 00:14:08 +00:00
translators:
2019-02-11 21:58:20 +00:00
- ["Raul Almeida", "https://github.com/almeidaraul"]
2019-02-11 16:31:33 +00:00
---
2019-02-11 21:32:24 +00:00
>Pascal é uma linguagem de programação estruturada, que recebeu este nome em homenagem ao matemático e físico Blaise Pascal. Foi criada em 1970 pelo suíço Niklaus Wirth,tendo em mente encorajar o uso de código estruturado.
fonte : [wikipédia ](https://pt.wikipedia.org/wiki/Pascal_(linguagem_de_programa%C3%A7%C3%A3o ))
2019-02-11 16:31:33 +00:00
2019-02-11 21:58:20 +00:00
Para compilar e executar um programa em Pascal, você pode usar o freepascal,
um compilador gratuito. [Faça o download aqui ](https://www.freepascal.org/ )
2019-02-11 16:31:33 +00:00
```pascal
//Corpo de um programa em Pascal
//isso é um comentário
{
isso também é um comentário,
mas com várias linhas
}
//cabeçalho do programa
2019-02-11 21:58:20 +00:00
PROGRAM aprendendo_pascal; //< -- não esqueça o ponto e vírgula . O nome do
programa deve começar com uma letra.
2019-02-11 16:31:33 +00:00
2019-02-11 21:32:24 +00:00
CONST
2019-02-11 16:31:33 +00:00
{
aqui você declara valores constantes
}
2019-02-11 21:32:24 +00:00
TYPE
2019-02-11 16:31:33 +00:00
{
aqui você declara tipos não nativos
}
2019-02-11 21:32:24 +00:00
VAR
2019-02-11 16:31:33 +00:00
{
aqui você declara variáveis
}
//programa de fato
2019-02-11 21:32:24 +00:00
BEGIN
2019-02-13 00:14:08 +00:00
80
2019-02-11 21:58:20 +00:00
aqui ficam todas as instruções que não pertencem nem a funções
nem a procedimentos
blocos de código começam com BEGIN e terminam com END
(como as chaves em C)
2019-02-11 16:31:33 +00:00
}
2019-02-11 21:32:24 +00:00
END. //o "end" no final do programa requer um ponto final.
2019-02-11 16:31:33 +00:00
```
```pascal
//formas de declarar uma variável
2019-02-11 21:32:24 +00:00
VAR a:INTEGER;
VAR b:INTEGER;
2019-02-11 16:31:33 +00:00
2019-02-11 21:32:24 +00:00
VAR
a : INTEGER;
b : INTEGER;
2019-02-11 16:31:33 +00:00
2019-02-11 21:32:24 +00:00
VAR a,b : INTEGER;
2019-02-11 16:31:33 +00:00
```
```pascal
2019-02-11 21:32:24 +00:00
PROGRAM Learn_More;
2019-02-11 16:31:33 +00:00
//agora, mais sobre tipos de dados e operações
2019-02-11 21:32:24 +00:00
CONST
2019-02-11 16:31:33 +00:00
PI = 3.141592654;
GNU = 'GNU''s Not Unix';
2019-02-11 21:58:20 +00:00
{ a convenção é usar caixa alta para constantes
constantes têm valores fixos que só podem ser alterados
antes da compilação
constantes podem ser de qualquer tipo nativo (integer, real, boolean,
char, string)
2019-02-11 16:31:33 +00:00
2019-02-11 21:32:24 +00:00
TYPE
vet_char : array [0..255] of CHAR;
2019-02-11 21:58:20 +00:00
// isso declara um novo tipo de variável, vet_char, com 256 caracteres
2019-02-11 21:32:24 +00:00
vet_multd : array of array of INTEGER;
2019-02-11 16:31:33 +00:00
// vetores de vetores são vetores multidimensionais
2019-02-11 21:58:20 +00:00
// use vetores de tamanho 0 (daí, usa-se alocação dinâmica)
2019-02-11 21:32:24 +00:00
// vetores do tipo vet_multd são de duas dimensões
2019-02-11 16:31:33 +00:00
//declarando variáveis
2019-02-11 21:32:24 +00:00
VAR
int, c, d : INTEGER;
2019-02-11 16:31:33 +00:00
// três variáveis que guardam valores inteiros
// inteiros têm 16 bits (vão de -32768 a 32767)
2019-02-11 21:32:24 +00:00
r : REAL;
2019-02-11 16:31:33 +00:00
// uma variável que guarda um valor real
// reais vão de 3.4E-38 a 3.4E38
2019-02-11 21:32:24 +00:00
bool : BOOLEAN;
2019-02-11 16:31:33 +00:00
// uma variável que guarda um valor booleano (verdadeiro ou falso)
2019-02-11 21:32:24 +00:00
ch : CHAR;
2019-02-11 16:31:33 +00:00
// uma variável que guarda um caractere
// caracteres têm 8 bits
2019-02-11 21:32:24 +00:00
str : STRING;
2019-02-11 21:58:20 +00:00
// STRING não é um tipo padrão, mas vem na maioria dos compiladores
2019-02-11 16:31:33 +00:00
// string é um vetor de caracteres com tamanho padrão de 255 elementos
2019-02-11 21:32:24 +00:00
s : STRING[50];
2019-02-11 21:58:20 +00:00
// especificar o tamanho de uma string assim otimiza o uso de memória
2019-02-11 21:32:24 +00:00
my_str: vet_char;
2019-02-11 16:31:33 +00:00
// aqui, uma variável de um tipo personalizado declarado acima
2019-02-11 21:32:24 +00:00
my_2d : vet_multd;
2019-02-11 21:58:20 +00:00
// defina o tamanho de vetores dinâmicos antes de usá-los
2019-02-11 16:31:33 +00:00
2019-02-11 21:32:24 +00:00
// outros tipos de dados (pascal é uma linguagem fortemente tipada)
2019-02-11 16:31:33 +00:00
// tipos adicionais de inteiros
2019-02-11 21:32:24 +00:00
b : BYTE; // faixa [0..255]
shi : SHORTINT; // faixa [-128..127]
smi : SMALLINT; // faixa [-32,768..32,767] (inteiro padrão)
w : WORD; // faixa [0..65,535]
li : LONGINT; // faixa [-2,147,483,648..2,147,483,647]
lw : LONGWORD; // faixa [0..4,294,967,295]
c : CARDINAL; // longword
i64 : INT64; // faixa [-9223372036854775808..9223372036854775807]
qw : QWORD; // faixa [0..18,446,744,073,709,551,615]
2019-02-11 16:31:33 +00:00
// tipos adicionais de reais
2019-02-11 21:32:24 +00:00
rr : REAL; // faixa depende da plataforma (8 bits, 16 bits, etc)
rs : SINGLE; // faixa [1.5E-45..3.4E38]
rd : DOUBLE; // faixa [5.0E-324 .. 1.7E308]
re : EXTENDED; // faixa [1.9E-4932..1.1E4932]
rc : COMP; // faixa [-2E64+1 .. 2E63-1]
2019-02-11 16:31:33 +00:00
2019-02-11 21:32:24 +00:00
BEGIN
2019-02-11 16:31:33 +00:00
int := 1;// usa-se := para atribuir valores a variáveis
r := 3.14;
ch := 'a';
str := 'apple';
bool := true;
//pascal não é case-sensitive (não diferencia maiúsculas de minúsculas)
2019-02-11 21:58:20 +00:00
// uma opção de organização é usar maiúsculas para termos da linguagem
// (BEGIN, END, INTEGER, etc) e constantes
// aritmética
2019-02-11 16:31:33 +00:00
int := 1 + 1; // int deixa de ser 1 e passa a ser 2
int := int + 1; // int = 2 + 1 = 3;
2019-02-11 21:58:20 +00:00
int := 4 DIV 2; //int = 2 (DIV é uma divisão inteira - ignora o resto)
2019-02-11 21:32:24 +00:00
int := 3 DIV 2; //int = 1
int := 1 DIV 2; //int = 0
2019-02-11 16:31:33 +00:00
2019-02-11 21:32:24 +00:00
bool := true OR false; // bool = true
bool := false AND true; // bool = false
bool := true XOR true; // bool = false
2019-02-11 16:31:33 +00:00
r := 3 / 2; // usa-se a "/" para divisões entre inteiros
r := int; // um real pode receber um valor inteiro (mas não o contrário)
c := str[1]; //acessando elementos de um vetor: vetor[índice do elemento]
2019-10-11 13:19:39 +00:00
str := 'hello' + 'world'; //concatenação de strings
2019-02-11 16:31:33 +00:00
2019-02-11 21:58:20 +00:00
my_str[0] := 'a'; { só se pode atribuir valores a vetores elemento
por elemento (não o vetor inteiro de uma vez) }
2019-02-11 16:31:33 +00:00
2019-02-11 21:32:24 +00:00
// LAÇOS
WHILE (ch != 'a') DO
BEGIN
writeln('ch é diferente de a');
IF (ch = 'c') THEN
writeln('ch é igual a c');
END;
2019-02-11 21:58:20 +00:00
SETLENGTH(my_2d,10,10);
// inicialização de um vetor com alocação dinâmica; my_2d vira um 10x10
FOR c := 0 to 9 DO
{ vetores começam em 0 e terminam em tamanho-1
(exceto se, declarando o tipo, forem especificados valores diferentes) }
FOR d := 0 to 9 DO
// a variável usada em um laço FOR deve ter sido declarada no cabeçalho
my_2d[c,d] := c * d;
// acessam-se elementos de vetores multidimensionais com [d1, d2, d3...]
2019-02-11 21:32:24 +00:00
2019-02-11 16:31:33 +00:00
2019-02-11 21:32:24 +00:00
END.
2019-02-11 16:31:33 +00:00
```
```pascal
2019-02-11 21:32:24 +00:00
PROGRAM programacao_com_funcoes;
2019-02-11 16:31:33 +00:00
2019-02-11 21:32:24 +00:00
VAR
i, inutil : INTEGER;
2019-02-11 16:31:33 +00:00
{ OBS: diferença entre procedimento e função
função: realiza operações e retorna valor
procedimento: só realiza operações
}
//declarando e descrevendo uma função
2019-02-11 21:32:24 +00:00
FUNCTION fatorial_recursiva(CONST a: INTEGER) : INTEGER;
2019-02-11 16:31:33 +00:00
{ calcula a! recursivamente }
// pode-se declarar variáveis locais para funções e procedimentos
// exemplo:
2019-02-11 21:32:24 +00:00
// VAR
// local_a : INTEGER;
2019-02-11 16:31:33 +00:00
2019-02-11 21:32:24 +00:00
BEGIN
2019-02-11 21:58:20 +00:00
{ O bloco ELSE só funciona se não houver ponto e vírgula no bloco do IF
exemplo:
IF a THEN
writeln('a');
ELSE
writeln('b');
Isso não permitiria que o programa compilasse }
2019-02-11 21:32:24 +00:00
IF a >= 1 THEN
2019-02-11 16:31:33 +00:00
// o valor de retorno é atribuído como se a função fosse uma variável
fatorial_recursiva := a * fatorial_recursiva(a-1)
2019-02-11 21:32:24 +00:00
ELSE
2019-02-11 16:31:33 +00:00
fatorial_recursiva := 1;
2019-02-11 21:32:24 +00:00
END; // o END de funções e procedimentos recebe ponto e vírgula
2019-02-11 16:31:33 +00:00
//declarando e descrevendo um procedimento
2019-02-11 21:32:24 +00:00
PROCEDURE salvainteiro(VAR i : INTEGER; inutil : INTEGER);
2019-02-11 16:31:33 +00:00
{ recebe entrada do usuário e salva na variável i
passagem de valor:
2019-02-11 21:58:20 +00:00
POR REFERÊNCIA - "VAR i: integer"; implica que alterações na variável i
dentro da função são guardadas para o escopo de todo o programa
POR VALOR - "inutil: integer"; implica que o valor do argumento é copiado
e alterações na variável inutil não são guardadas
2019-02-11 16:31:33 +00:00
}
2019-02-11 21:32:24 +00:00
BEGIN
WRITE('Insira um inteiro: '); //escreve sem quebrar linha
READLN(i); //lê i com quebra de linha
inutil := 4; // inutil não terá seu valor alterado fora do procedimento.
END;
2019-02-11 16:31:33 +00:00
2019-02-11 21:32:24 +00:00
BEGIN // programa principal
inutil := 3;
salvainteiro(i, inutil);
2019-02-11 16:31:33 +00:00
// escrevendo i!
2019-02-11 21:58:20 +00:00
WRITELN(i, '! = ', factorial_recursion(i)); // escreve e quebra linha
// valores numéricos são automaticamente convertidos para texto na escrita
2019-02-11 16:31:33 +00:00
2019-02-11 21:58:20 +00:00
// escrever valor de inutil (sempre 3, já que salvainteiro não a altera)
WRITELN('inutil = ', inutil);
2019-02-11 21:32:24 +00:00
END.
2019-02-11 16:31:33 +00:00
```