01 · Escopo
Sobre Portugol Studio 2.0
Portugol é um nome usado por diferentes pseudolinguagens. Esta documentação descreve especificamente Portugol Studio 2.0; suas regras não definem um padrão universal para todas as pseudolinguagens chamadas Portugol.
As regras apresentadas correspondem à pseudolinguagem Portugol Studio 2.0 e às fontes listadas ao final desta referência.
02 · Organização
Estrutura de um programa
Um arquivo começa com programa e um bloco delimitado por chaves. As inclusões de bibliotecas aparecem no início do bloco; depois podem vir declarações globais e funções. A forma usual de ponto de entrada é a função chamada inicio.
programa {
inclua biblioteca Matematica --> mat
const inteiro tentativas = 3
inteiro acertos = 0
funcao inicio() {
escreva("Bem-vindo ao exercício")
}
}
Blocos de funções, condições e laços usam { e }. O ponto e vírgula é usado nos três campos do cabeçalho de para; os exemplos tradicionais escrevem um comando por linha e não terminam cada comando com ponto e vírgula.
03 · Escrita
Nomes, comentários e literais
- Identificadores começam com uma letra ASCII ou sublinhado; depois podem conter letras ASCII, dígitos e sublinhados. A gramática publicada não admite letras acentuadas em identificadores.
- As palavras-chave são escritas sem acentos e a gramática as reconhece na forma minúscula, por exemplo
programa,funcaoeenquanto. - Comentários de linha começam com
//; comentários de bloco ficam entre/*e*/. - Números reais usam ponto como separador decimal. Textos usam aspas duplas e caracteres individuais usam aspas simples; o léxico também define escapes e literais hexadecimais.
- Valores lógicos são
verdadeiroefalso.
// comentário de linha
/* comentário
em bloco */
cadeia mensagem = "Olá"
caracter inicial = 'A'
real media = 7.5
logico aprovado = verdadeiro
04 · Dados
Tipos, variáveis e constantes
| Tipo | Uso |
|---|---|
inteiro | Números inteiros. |
real | Números com parte fracionária. |
logico | Valores verdadeiro ou falso. |
caracter | Um caractere. |
cadeia | Sequência de caracteres. |
vazio | Indica função sem valor de retorno. |
Declare o tipo antes do nome. Uma declaração pode agrupar nomes do mesmo tipo e pode incluir uma expressão inicial. A palavra-chave const marca declarações constantes. Valores e tipos precisam ser compatíveis.
inteiro idade = 18, ano
real altura = 1.72
const real pi_aproximado = 3.14
cadeia nome = "Lia"
logico concluiu = falso
Uma variável declarada dentro de uma função ou bloco tem escopo local; declarações no corpo principal, fora das funções, são globais. A forma de uma lista de declarações também permite inicializadores de vetores e matrizes, detalhados na seção Vetores e matrizes.
05 · Expressões
Operadores e precedência
| Grupo | Operadores | Significado |
|---|---|---|
| Aritméticos | + - * / % | Soma, subtração, multiplicação, divisão e resto. |
| Unários | + - nao ~ ++ -- | Sinal, negação lógica, negação bit a bit, incremento e decremento. ++ e -- podem aparecer antes ou depois do identificador. |
| Atribuição | = += -= *= /= | Atribuição simples e atribuições compostas. = não é o operador de igualdade. |
| Comparação | == != > < <= >= | Igualdade, diferença e comparações relacionais. |
| Lógicos | e ou | Conjunção e disjunção lógica. |
| Bit a bit | ^ << >> & | | XOR, deslocamento à esquerda e à direita, AND e OR bit a bit. |
| Agrupamento | ( ) | Controla explicitamente a ordem de avaliação. |
A gramática oficial define os operadores em alternativas recursivas, mas não publica uma tabela de precedência clara para todas as combinações. Use parênteses para explicitar a ordem, especialmente ao misturar comparações, lógica e operações bit a bit.
06 · Interação
Entrada e saída
escreva apresenta uma ou mais expressões. Para quebrar a linha, inclua a sequência de escape \n numa cadeia passada à função. leia recebe dados para variáveis. A função predefinida limpa() limpa a área de saída.
programa {
funcao inicio() {
cadeia nome
escreva("Qual é o seu nome? ")
leia(nome)
escreva("Olá, ", nome, "!\n")
}
}
A forma de exibir e ler dados depende das funções e bibliotecas disponíveis no ambiente de execução descrito pelas referências.
07 · Decisões
Condições e seleção
se executa um ramo quando a expressão lógica é verdadeira; senao define o ramo alternativo. Os blocos podem conter vários comandos. A seleção múltipla usa escolha, rótulos caso e o caso alternativo contrario.
se (nota >= 7) {
escreva("Aprovado\n")
} senao {
escreva("Continue praticando\n")
}
escolha (opcao) {
caso 1:
escreva("Iniciar\n")
pare
caso contrario:
escreva("Opção desconhecida\n")
}
pare encerra o caso atual de escolha ou interrompe um laço. Use uma expressão do tipo lógico como condição.
08 · Laços
Repetição
Portugol Studio 2.0 define laços condicionais e um laço com inicialização, condição e incremento:
inteiro contador = 1
enquanto (contador <= 3) {
escreva(contador, "\n")
contador++
}
faca {
contador--
} enquanto (contador > 0)
para (inteiro i = 0; i < 3; i++) {
escreva(i, "\n")
}
enquanto testa antes de cada repetição; faca ... enquanto testa depois do bloco. Em para, os campos são separados por ponto e vírgula e podem inicializar uma variável, testar uma condição e atualizar o contador. pare encerra o laço atual.
09 · Coleções
Vetores e matrizes
Vetores usam um índice entre colchetes; matrizes usam dois índices. Quando o tamanho é informado, deve ser uma expressão inteira constante e positiva; em declarações com inicializador, ele pode ser inferido. A gramática também permite matrizes inicializadas por linhas.
programa {
funcao inicio() {
inteiro notas[3] = {8, 9, 10}
inteiro quadro[2][2] = {{1, 2}, {3, 4}}
escreva(notas[0], "\n")
escreva(quadro[1][0], "\n")
}
}
Os índices são expressões inteiras. Parâmetros de função podem declarar dimensões sem fixar os tamanhos, por exemplo inteiro valores[] ou inteiro tabela[][].
10 · Reuso
Funções e parâmetros
Uma função pode declarar um tipo de retorno antes do nome; omitir o tipo equivale ao uso sem valor de retorno, que também pode ser escrito com vazio. Parâmetros têm tipo e nome, podem ser separados por vírgulas e podem receber vetores ou matrizes. Um & antes do nome indica passagem por referência.
funcao inteiro dobrar(inteiro valor) {
retorne valor * 2
}
funcao atualizar(inteiro &total, inteiro acrescimo) {
total += acrescimo
}
funcao inicio() {
inteiro resultado = dobrar(4)
atualizar(resultado, 1)
escreva(resultado, "\n")
}
retorne encerra a função e pode devolver uma expressão. A referência oficial descreve chamadas de função em expressões, funções com retorno e funções sem retorno.
11 · Recursos padrão
Bibliotecas de Portugol Studio 2.0
Uma biblioteca é incluída com inclua biblioteca Nome e pode receber um apelido após -->. As chamadas usam o nome ou o apelido seguido de ponto. A tabela resume os módulos da pseudolinguagem documentados nas fontes desta referência; a documentação de cada classe lista assinaturas, parâmetros e constantes.
| Biblioteca | Recursos de referência |
|---|---|
Arquivos | Abrir, fechar, ler e escrever arquivos; consultar fim de arquivo, selecionar arquivos, listar arquivos e pastas, criar pasta, substituir texto e verificar ou apagar arquivos. |
Calendario | Dia, mês, ano, hora, minuto, segundo, milissegundo e nomes de dias da semana. |
Graficos | Janela gráfica, desenhos geométricos, imagens, animações GIF, texto, fontes, cores, gradientes, dimensões, tela cheia e transformações visuais. |
Internet | Tempo limite, leitura de conteúdo de endereço, download de imagem e verificação de disponibilidade. |
Matematica | PI, potencia, raiz, arredondar, logaritmo, seno, cosseno, tangente, valor absoluto, maior e menor número. |
Mouse | Consultar botões e posição do ponteiro; ocultar ou exibir o cursor. |
Objetos | Criar objetos a partir de JSON/XML ou propriedades, consultar e atribuir propriedades tipadas, trabalhar com vetores de propriedades e liberar ou exportar objetos. |
ServicosWeb | Conexões e requisições web, cabeçalhos e parâmetros; operações de obter, publicar, atualizar e excluir dados. |
Sons | Carregar, reproduzir, pausar, interromper e liberar sons; consultar posição, duração e volume. |
Teclado | Consultar e ler teclas e caracteres, com constantes para teclas comuns, letras, números e funções. |
Texto | numero_caracteres, caixa_alta, caixa_baixa, substituir, preencher_a_esquerda, obter_caracter, posicao_texto e extrair_subtexto. |
Tipos | Verificar se textos representam números, lógicos ou caracteres e converter entre cadeia, inteiro, real, lógico e caracter. |
Util | Diretório do usuário, tamanhos de vetores e matrizes, sorteio, espera e tempo decorrido. |
inclua biblioteca Matematica --> mat
funcao inicio() {
escreva(mat.potencia(2, 3), "\n")
}
O conjunto de bibliotecas pertence ao ambiente de referência de Portugol Studio 2.0; nem toda biblioteca é apropriada para qualquer interpretador ou contexto de execução.
Assinaturas e resultados
As chamadas abaixo usam o apelido mat do exemplo anterior. As funções devolvem valores que podem ser atribuídos a variáveis ou combinados em expressões.
| Biblioteca | Assinatura ou chamada | Comportamento |
|---|---|---|
Matematica | potencia(base, expoente) | Devolve um real com a base elevada ao expoente. Exemplo: potencia(2, 3) resulta em 8. |
Matematica | raiz(radicando, indice) | Devolve um real com a raiz indicada pelo índice. raiz(27, 3) resulta em 3. |
Matematica | arredondar(numero, casas), logaritmo(numero, base) | Devolvem reais: arredondamento para a quantidade de casas informada e logaritmo na base indicada. |
Matematica | seno(angulo), cosseno(angulo), tangente(angulo) | Devolvem reais com o resultado trigonométrico; os ângulos são expressos em radianos. |
Matematica | valor_absoluto(numero), maior_numero(a, b), menor_numero(a, b), PI | Devolvem reais: valor absoluto, maior ou menor valor entre dois números e a constante π. |
Texto | numero_caracteres(cadeia), caixa_alta(cad), caixa_baixa(cad) | A primeira devolve um inteiro; as outras devolvem a cadeia em maiúsculas ou minúsculas. |
Texto | substituir(cad, pesquisa, substituto) | Devolve uma cadeia com todas as ocorrências do trecho pesquisado substituídas. |
Texto | preencher_a_esquerda(car, tamanho, cad) | Devolve uma cadeia preenchida à esquerda até o tamanho indicado; cadeias que já têm esse tamanho não mudam. |
Texto | obter_caracter(cad, indice), posicao_texto(texto, cadeia, posicao_inicial) | A primeira devolve um caracter; a segunda, um inteiro com a posição. Os índices começam em zero; a busca devolve -1 quando não encontra o texto. |
Texto | extrair_subtexto(cadeia, posicao_inicial, posicao_final) | Devolve uma cadeia do índice inicial até o final, sem incluir o índice final. Exemplo: extrair_subtexto("salgado", 0, 3) resulta em "sal". |
Tipos | cadeia_e_inteiro(cad, base), cadeia_e_real(cad), cadeia_e_logico(cad), cadeia_e_caracter(cad) | Devolvem valores lógicos para indicar se a cadeia representa o tipo indicado. Para inteiros, as bases documentadas são 2, 10 e 16. |
Tipos | inteiro_e_caracter(valor), caracter_e_inteiro(car), caracter_e_logico(car) | Devolvem valores lógicos para testar se os valores podem ser convertidos nos tipos indicados. |
Tipos | cadeia_para_inteiro(valor, base), cadeia_para_real(valor), cadeia_para_logico(valor), cadeia_para_caracter(valor) | Devolvem inteiro, real, lógico ou caracter, conforme a função. A conversão lógica reconhece verdadeiro ou falso; a conversão para caracter exige exatamente um caracter. |
Tipos | inteiro_para_cadeia(valor, base), inteiro_para_caracter(valor), inteiro_para_logico(valor), inteiro_para_real(valor) | Devolvem cadeia, caracter, lógico ou real; para cadeia, use base 2, 10 ou 16. |
Tipos | caracter_para_cadeia(valor), caracter_para_inteiro(valor), caracter_para_logico(valor), logico_para_cadeia(valor), logico_para_inteiro(valor), logico_para_caracter(valor), real_para_cadeia(valor), real_para_inteiro(valor) | Devolvem cadeia, inteiro, lógico ou caracter conforme o tipo de origem e a função usada; consulte a referência da biblioteca para cada conversão. |
Util | obter_diretorio_usuario(), numero_elementos(vetor), numero_linhas(matriz), numero_colunas(matriz) | A primeira devolve uma cadeia; as demais, inteiros com as dimensões. A matriz precisa ter ao menos uma linha para consultar colunas. |
Util | sorteia(minimo, maximo), aguarde(intervalo), tempo_decorrido() | sorteia devolve um inteiro no intervalo inclusivo se minimo for menor que maximo; aguarde não devolve valor e pausa em milissegundos; tempo_decorrido devolve um inteiro em milissegundos desde o primeiro uso da biblioteca. |
inclua biblioteca Texto --> txt
funcao inicio() {
cadeia palavra = "logica"
escreva(txt.numero_caracteres(palavra), "\n")
escreva(txt.caixa_alta(palavra), "\n")
escreva(txt.extrair_subtexto(palavra, 0, 3), "\n")
}
Saída: 6, LOGICA e log, cada valor em uma linha.
inclua biblioteca Tipos --> tipos
funcao inicio() {
escreva(tipos.cadeia_e_inteiro("101", 2), "\n")
escreva(tipos.cadeia_para_inteiro("101", 2), "\n")
}
Saída: verdadeiro e 5. A primeira chamada valida a escrita binária; a segunda converte o mesmo valor para inteiro.
12 · Exemplo
Programa completo
Este exemplo junta declaração, entrada e saída, condição, função e expressão lógica:
programa {
funcao logico eh_par(inteiro numero) {
retorne numero % 2 == 0
}
funcao inicio() {
inteiro valor
escreva("Digite um número inteiro: ")
leia(valor)
se (eh_par(valor)) {
escreva("O número é par\n")
} senao {
escreva("O número é ímpar\n")
}
}
}
13 · Dicas de leitura
Erros frequentes e como evitá-los
- Trocar atribuição por igualdade: use
=para atribuir e==para comparar valores. - Esquecer as separações do laço
para: os campos de inicialização, condição e atualização são separados por ponto e vírgula. - Usar índices fora do vetor: os índices começam em zero; um vetor de tamanho 3 tem posições de
0a2. - Esperar um comando de outra biblioteca: inclua o módulo com
inclua biblioteca Nomee use o mesmo nome ou apelido antes do ponto. - Confundir o tamanho com o último índice: uma cadeia de seis caracteres tem último índice
5; emextrair_subtexto, o índice final marca o limite e não entra no resultado. - Usar
pareem qualquer lugar: esse comando encerra o laço ou caso de seleção atual; fora desses contextos, não substituiretorne.
14 · Leitura adicional
Referências da pseudolinguagem Portugol Studio 2.0
Portugol Studio 2.0 tem origem no Portugol Studio. Esse projeto aparece nesta seção somente como fonte das referências usadas para documentar a pseudolinguagem.
- Repositório oficial do Portugol Studio, que identifica a pseudolinguagem como Portugol Studio 2.0.
- Gramática oficial e léxico oficial.
- Ajuda oficial de entrada e saída, incluindo o uso de
\npara pular linha, e analisador semântico, que lista as funções predefinidas. - Código-fonte das bibliotecas padrão e suas funções documentadas; consulte diretamente Matematica, Texto, Tipos e Util.
As referências são mantidas por projetos distintos. Consulte-as para conferir detalhes de comportamento e compatibilidade antes de usar uma função específica.