Potigol.github.io
Site da Linguagem Potigol
Install / Use
/learn @potigol/Potigol.github.ioREADME
Potigol é ...
Uma linguagem moderna (funcional) para aprender a programar.

Faça o Download e veja como Instalar
-
Siga-nos no twitter: @potigol
-
Mais de 500 problemas de programação resolvidos na linguagem Potigol
-
Experimente! :new:
Conheça também a biblioteca de jogos 2D Jerimum :video_game:
Características
- Projetada para ser usada por alunos iniciantes
- Tipagem estática com inferência de tipos
- Palavras-chave em português
- Multiparadigma
- Estímulo ao paradigma funcional: valores imutáveis, casamento de padrões, funções como valores
Como usar
- Verifique se Java está instalado digitando
java -version. Se der uma mensagem de erro é preciso fazer o download em https://www.java.com/pt_BR/download e instalar. - Baixe a versão mais recente do Potigol https://github.com/potigol/Potigol/releases/latest
- Descompacte o arquivo
- Para executar o Editor de Código digite no prompt do terminal
java -jar epotigol.jar
-
No Windows basta executar
epotigol.bat. -
Para executar um programa em Potigol digite no prompt do terminal
java -jar potigol.jar arquivo.poti
- No Windows basta usar
potigol arquivo.poti.
Exemplos: https://github.com/potigol/Potigol/wiki/jogos
A Linguagem
Variáveis
x = 10 # Declaração de um valor fixo (não pode ser alterado)
y, z = 20 # Mais de uma variável recebe o mesmo valor y = 20 e z = 20
a, b, c = 1, 2, 3 # Declaração paralela: a = 1, b = 2 e c = 3
var y := 10 # Declaração de uma variável alterável
y := y + 2 # Atribuição de um valor a uma variável
var a, b, c := 1, 2, 3 # Declaração paralela: var a := 1, var b := 2 e var c := 3
a, b, c := b, a, 4 # Atribuição paralela: a := 2, b := 1 e c := 4
Tipos Básicos
| Tipo | Valores |
| --- | --- |
| Inteiro | -4, 0, 5, ... |
| Real | -7.23, 0.0, 5.25, ... |
| Texto | "texto", "ola", "mundo", ... |
| Lógico | verdadeiro e falso |
| Caractere | 'a', '4', '&', ... |
Operações Aritméticas
5 + 3 # Soma: 8
5 - 3 # Subtração: 2
5 * 3 # Multiplicação: 15
5 / 3 # Divisão real: 1.66667
5 div 3 # Divisão inteira: 1
5 mod 3 # Resto da divisão: 2
Operações Lógicas e Relacionais
# Valores lógicos: verdadeiro, falso
verdadeiro e falso # e lógico : falso
verdadeiro ou falso # ou lógico : verdadeiro
não verdadeiro # não lógico : falso
2 == 3 # teste de igualdade : falso
2 <> 3 # teste de desigualdade : verdadeiro
2 < 3 # menor : verdadeiro
2 <= 3 # menor ou igual : verdadeiro
2 > 3 # maior : falso
2 >= 3 # maior ou igual : falso
Entrada
a = leia_inteiro # lê um número inteiro do teclado
b = leia_real # lê um número real do teclado
c = leia_texto # lê um texto do teclado
x, y = leia_inteiro # lê 2 inteiros, o mesmo que x = leia_inteiro, y = leia_inteiro
números = leia_inteiros(5) # lê um lista de 5 números inteiros, um por linha
números = leia_inteiros(",") # lê uma lista de números inteiros separados por vírgula
Saída
escreva "Olá Mundo" # Escreve e passa para a próxima linha
imprima "Olá " # Escreve e continua na mesma linha
escreva "Mundo"
nome = "Mundo"
escreva "Olá {nome}!" # "Olá Mundo!"
Se
x = leia_inteiro
# se ... então ... fim
se x > 5 então
escreva "Maior do que cinco."
fim
# se ... então ... senão ... fim
se x > 5 então
escreva "Maior do que cinco."
senão
escreva "Menor ou igual a cinco."
fim
se verdadeiro então # escreva "verdadeiro"
escreva "verdadeiro"
senão
escreva "falso"
fim
se falso então # escreva "falso"
escreva "verdadeiro"
senão
escreva "falso"
fim
# se ... então ... senãose ... senão ... fim
se x > 8 então
escreva "Maior do que oito."
senãose x > 6 então
escreva "Maior do que seis."
senãose x > 4 então
escreva "Maior do que quatro."
senãose x > 2 então
escreva "Maior do que dois."
senão
escreva "Menor ou igual a dois."
fim
# usando se como uma expressão
a = se x mod 2 == 0 então "par" senão "ímpar" fim
maior = se a >= b e a >= c então a senãose b > c então b senão c fim
Escolha
x = leia_inteiro
escolha x
caso 1 => escreva "Um" # se x == 1
caso 2 => escreva "Dois" # se x <> 1 e x == 2
caso 3 => escreva "Três" # se x <> 1 e x <> 2 e x == 3
caso _ => escreva "Outro valor" # se x <> 1 e x <> 2 e x <> 3
fim
# escolha com condições
escolha x
caso n se n < 0 => escreva "{n} é negativo"
caso n se n mod 2 == 0 => escreva "{n} é par"
caso n => escreva "{n} é ímpar"
fim
# usando escolha como uma expressão
é_zero = escolha x
caso 0 => verdadeiro
caso _ => falso
fim
sinal = escolha x # escolha retorna um número: -1, 0 ou 1
caso n se n < 0 => -1
caso n se n > 0 => 1
caso _ => 0
fim
Repetição: Para
para i de 1 até 10 faça # escreve os números de 1 a 10
escreva i
fim
var soma := 0
para i de 1 até 10 faça # soma os números de 1 a 10
soma := soma + i
fim
escreva "A soma é {soma}."
para i de 1 até 10 passo 2 faça # escreve os números ímpares de 1 a 10
escreva i
fim
# Para decrescente
para i de 10 até 1 passo -1 faça # escreve os números de 10 a 1
escreva i
fim
# Para com mais de um gerador
para i de 1 até 4,
j de 1 até 3 faça # escreve a tabuada {1..4} x {1..3}
escreva "{i} * {j} == {i * j}"
fim
# Para com listas
cores = ["azul", vermelho", "verde"]
para cor em cores faça
escreva cor
fim
# Para gerando uma lista
numeros = para i de 1 até 5 gere i fim # [1, 2, 3, 4, 5]
pares = para i de 1 até 10 se i mod 2 == 0 gere i # [2, 4, 5, 6, 8, 10]
Repetição: Enquanto
var i := 0
enquanto i<=10 faça # Escreve os números de 1 a 10
escreva i
i := i + 1
fim
Funções
soma(x: Inteiro, y: Inteiro) = x + y # Declaração de função em uma linha
soma(x, y: Inteiro) = x + y # Agrupando parâmetros do mesmo tipo
rep(a: Texto, n: Inteiro) = a * n # Funções com parâmetros de tipos diferentes
a, b = leia_inteiro
c = soma(a, b) # Aplicando a função
escreva "{a} + {b} = {c}"
soma(x, y: Inteiro): Inteiro = x + y # O tipo de retorno pode ser definido explicitamente
soma(x, y: Inteiro) # Declaração de função com corpo
c = x + y
retorne c # A última linha tem o valor de retorno
fim
soma(x, y: Inteiro) # Declaração de função com corpo
c = x + y
c # A palavra 'retorne' é opcional
fim
fatorial(n: Inteiro): Inteiro # Função recursiva (tipo de retorno é obrigatório)
se n <= 1 então
1
senão
n * fatorial(n - 1)
fim
fim
a = leia_inteiro
escreva "Fatorial de {a} é {fatorial(a)}"
f(a: Inteiro)
g(b: Inteiro) = b * 2 # Função interna
retorne g(a) + 3
fim
Tipo de parâmetros
| Tipo | Exemplo | Aplicação|
| --- | --- | --- |
| Inteiro | proximo(a: Inteiro) = a + 1 | proximo(3) |
| Real | dobro(a: Real) = a * 2 | dobro(3.6) |
| Texto | inicio(s: Texto) = s.pegue(5) | inicio("Olá mundo!") |
| Lógico | negacao(a: Lógico) = não a | negacao(verdadeiro) |
| Caractere | id(c: Caractere) = c | id('a') |
| Tupla | f(a : (Inteiro, Texto)) = ... | f((10,"ok")) |
| Lista | soma(a: Lista[inteiro]) = ... | soma([1,2,3,4,5]) |
| Função | f(g: (Inteiro, Inteiro) => Inteiro) = g(2,3) | f((a,b) => a + b) |
| Classe ou Registro | f(a: T) = ... | f(T(...)) |
Tipos
Número (Inteiro e Real)
12345.qual_tipo # "Inteiro"
12345.real # 12345.0
12345.texto # "12345"
97.caractere # 'a'
12345 formato "%8d" # " 12345"
12345.678.qual_tipo # "Real"
12345.678.inteiro # 12345
12345.678.texto # "12345.678"
12345.678.arredonde # 12346
12345.678.arredonde(2) # 12345.68
123.45 formato "%.1f" # "123.4"
12345.678.piso # 12345.0 (arredonda para baixo)
12345.678.teto # 12346.0 (arredonda para cima)
12345.678.inteiro # 12345
Texto
"abc".qual_tipo # "Texto"
"123".inteiro # 123
"12abc3".inteiro # 12
"abc".inteiro # 0
"abc"[2] # 'b' (caractere na posição 2)
"12.3".real # 12.3
"12a.3".real # 12.0
"abc".real
