01 · Visión general
Sobre G-Portugol
G-Portugol organiza algoritmos en portugués mediante declaraciones explícitas, instrucciones imperativas y bloques delimitados. Su sintaxis reúne formas habituales en materiales de lógica, como algoritmo, variáveis, início, se y para.
Esta página documenta el pseudolenguaje según el manual mantenido por el proyecto G-Portugol. Separa las reglas de escritura de las instrucciones y opciones de la herramienta GPT, que se describen en una sección propia. La referencia oficial también plantea como objetivo adaptar el vocabulario a distintas prácticas de enseñanza; GPT no documenta un mecanismo para configurar esas formas, por lo que esta página recoge la sintaxis estándar publicada por el proyecto.
02 · Organización
Estructura del algoritmo
Un archivo comienza con la declaración del algoritmo, puede declarar variables globales, contiene el bloque principal y termina con las declaraciones de funciones. La declaración de variables es opcional; cuando se usa, aparece antes de início y contiene al menos una declaración. Los ejemplos oficiales usan la extensión .gpt.
algoritmo exemplo;
variáveis
nome : literal;
idade : inteiro;
fim-variáveis
início
nome := "Ana";
idade := 16;
imprima(nome, " tem ", idade, " anos.");
fim
função dobro(valor:inteiro) : inteiro
retorne valor * 2;
fim
algoritmo requiere un identificador y punto y coma; ese nombre identifica el algoritmo en el archivo, pero no cambia su ejecución. El bloque principal empieza con início y termina con fim; las funciones se declaran después. Las instrucciones simples terminan en punto y coma; los bloques se cierran con su delimitador, sin punto y coma después. La indentación no es obligatoria, pero ayuda a visualizar la estructura. El bloque principal también puede terminar antes con retorne seguido de un entero, que actúa como código de salida.
03 · Escritura
Identificadores, comentarios y literales
El pseudolenguaje distingue mayúsculas y minúsculas. Las palabras reservadas deben conservar la grafía y los acentos definidos, como variáveis, início, então, faça y função. Los identificadores —nombres de variables, algoritmos y funciones— comienzan con una letra ASCII (A–Z o a–z) o un guion bajo y pueden continuar con letras ASCII, números y guiones bajos.
// Comentario de una línea.
/* Comentario
de varias líneas. */
algoritmo dados;
variáveis
nome_completo : literal;
inicial : caractere;
codigo : inteiro;
fim-variáveis
início
nome_completo := "João";
inicial := 'J';
codigo := 0x2A;
fim
El conjunto estándar de palabras reservadas es algoritmo, variáveis, fim-variáveis, início, fim, inteiro, real, caractere, literal, lógico, verdadeiro, falso, matriz, inteiros, reais, caracteres, literais, lógicos, se, então, senão, fim-se, enquanto, faça, fim-enquanto, repita, até, para, de, passo, fim-para, função, retorne, ou, e y não.
Los enteros aceptan bases decimal, hexadecimal (0x/0X), octal (0c/0C) y binaria (0b/0B). Los reales usan punto decimal, con cifras a ambos lados. Los caracteres se escriben entre comillas simples; '' representa el carácter nulo. Los escapes documentados para caracteres incluyen \n, \r y \\. Los textos usan comillas dobles, admiten escapes y ocupan una sola línea física del código.
04 · Datos
Tipos y variables
El manual oficial documenta cinco tipos primitivos. La declaración indica uno o varios nombres, dos puntos, el tipo y punto y coma.
| Tipo | Ejemplo | Uso |
|---|---|---|
inteiro | 42 | Números enteros. |
real | 3.5 | Números con parte fraccionaria. |
caractere | 'A' | Un carácter. |
literal | "Olá" | Una secuencia de caracteres. |
lógico | verdadeiro | Un valor lógico, verdadeiro o falso. |
variáveis
quantidade, tentativas : inteiro;
preco : real;
disponivel : lógico;
fim-variáveis
Las variables declaradas comienzan con valor cero o nulo, según el tipo. La sintaxis no declara constantes. Los tipos compuestos definidos por el usuario, como los registros, no están documentados.
05 · Colecciones
Vectores y matrices
Los conjuntos homogéneos usan la palabra matriz, seguida de una dimensión entre corchetes por cada eje, de y el nombre plural del tipo primitivo. Cada dimensión es un literal entero positivo; una sola dimensión forma un vector.
variáveis
notas : matriz[5] de reais;
tabuleiro : matriz[3][3] de caracteres;
fim-variáveis
início
notas[0] := 8.5;
tabuleiro[1][2] := 'X';
imprima(notas[0]);
fim
Los índices empiezan en cero. Por eso, el vector valores, declarado con tamaño 5, tiene posiciones de 0 a 4; acceder a valores[5] excede sus límites. Cada elemento recibe la inicialización predeterminada del tipo. Las matrices que se pasan a funciones se copian por valor, según la referencia.
06 · Expresiones
Asignación y operadores
La asignación usa :=. A la izquierda puede aparecer una variable primitiva o una posición indexada de matriz; a la derecha, una expresión compatible con el tipo del destino. No se puede asignar una matriz completa ni pasarla a imprima como un solo valor.
| Orden | Operadores | Operación |
|---|---|---|
| 1 · menor | ou, || | Disyunción lógica. |
| 2 | e, && | Conjunción lógica. |
| 3 | | | OR bit a bit. |
| 4 | ^ | OR exclusivo bit a bit. |
| 5 | & | AND bit a bit. |
| 6 | =, <> | Igualdad y desigualdad. |
| 7 | >, >=, <, <= | Comparaciones relacionales. |
| 8 | +, - | Suma y resta. |
| 9 | *, /, % | Multiplicación, división y resto. |
| 10 · mayor | +, -, ~, não, () | Signos unarios, negación bit a bit, negación lógica y agrupación. |
resultado := (a + b) * 2;
se ativo e tentativas < 3 então
imprima("Pode continuar.");
fim-se
La tabla sigue el orden documentado, de menor a mayor precedencia. Los paréntesis hacen explícito el orden deseado.
07 · Interacción
Entrada y salida
leia() no recibe argumentos: lee una línea de la entrada estándar, hasta el salto de línea, y convierte el contenido al tipo primitivo esperado por el contexto. Puede aparecer sola a la derecha de una asignación, en una condición o en un índice de matriz; la referencia no permite combinarla con otros operandos, como en total := base + leia();. imprima() recibe al menos un valor primitivo, los convierte en texto, los concatena en el orden indicado sin separadores y añade un salto de línea al final.
algoritmo saudacao;
variáveis
nome : literal;
idade : inteiro;
fim-variáveis
início
imprima("Qual é o seu nome?");
nome := leia();
imprima("Qual é a sua idade?");
idade := leia();
imprima("Olá, ", nome, "! Você tem ", idade, " anos.");
fim
No hay concatenación implícita de textos en líneas físicas distintas. Para imprimir juntos valores de diferentes tipos, pásalos como argumentos separados a imprima.
08 · Decisiones
Condicionales
se evalúa una expresión e inicia un bloque; senão es opcional. Todo bloque condicional termina con fim-se. Los paréntesis alrededor de la condición son opcionales. El manual documenta esta estructura como forma de selección del pseudolenguaje; no presenta un comando separado para selección múltiple.
se nota >= 7 então
imprima("Aprovado");
senão
imprima("Precisa recuperar");
fim-se
Cualquier expresión puede evaluarse como condición: cero, texto vacío y el carácter nulo son falsos; los valores numéricos distintos de cero y los textos no vacíos son verdaderos. Los valores lógicos también se escriben como verdadeiro y falso.
09 · Repetición
Bucles
G-Portugol documenta tres estructuras de repetición: enquanto, repita y para. Cada estructura cierra el bloque con su propia palabra reservada.
enquanto quantidade > 0 faça
quantidade := quantidade - 1;
fim-enquanto
repita
quantidade := quantidade + 1;
até quantidade = 3;
para i de 1 até 5 faça
imprima(i);
fim-para
enquanto comprueba la condición antes de cada vuelta; el cuerpo puede no ejecutarse. repita la comprueba después del cuerpo y se ejecuta al menos una vez. Los límites de para son inclusivos, el paso predeterminado es 1 y un paso negativo recorre la secuencia en orden descendente.
para i de 10 até 0 passo -2 faça
imprima(i);
fim-para
No se documentan comandos break ni continue; el control de los bucles debe expresarse mediante la condición y las variables implicadas.
10 · Reutilización
Funciones y retorno
Una función se declara después del bloque principal. Los parámetros siguen la forma nombre:tipo; el tipo de retorno es opcional. Las declaraciones locales, si se necesitan, van antes del bloque início.
função fatorial(valor:inteiro) : inteiro
resultado : inteiro;
contador : inteiro;
início
resultado := 1;
para contador de 1 até valor faça
resultado := resultado * contador;
fim-para
retorne resultado;
fim
retorne devuelve una expresión compatible con el tipo declarado o, en una función sin tipo de retorno, finaliza la función sin valor. Las funciones pueden llamarse a sí mismas. Los parámetros y las matrices se pasan por valor; no hay funciones anidadas ni parámetros variables. Los valores de retorno son primitivos.
11 · Ejemplo integrado
Contar y clasificar números
Este programa lee un límite y recorre los enteros desde uno hasta ese valor, indicando si cada uno es par o impar:
algoritmo contagem;
variáveis
limite, numero : inteiro;
fim-variáveis
início
imprima("Digite o limite:");
limite := leia();
para numero de 1 até limite faça
se numero % 2 = 0 então
imprima(numero, " é par.");
senão
imprima(numero, " é ímpar.");
fim-se
fim-para
fim
El ejemplo combina declaración, lectura, asignación, resto, comparación, decisión y un bucle con límite inclusivo.
12 · Reglas importantes
Comportamiento y límites
- Las palabras reservadas y los identificadores distinguen mayúsculas y minúsculas; los acentos forman parte de las palabras reservadas, pero no se aceptan en identificadores.
- Los tipos primitivos pueden formar vectores y matrices homogéneos de una o más dimensiones. Las matrices se inicializan por elemento y se pasan a funciones por valor; no se asignan ni se devuelven como un conjunto.
- Los tipos
inteiro,real,lógicoycaractereson compatibles en operaciones numéricas;literalno participa en operaciones aritméticas. No hay conversión explícita de tipos. Los operandos compatibles se promocionan cuando no hay pérdida; una conversión al asignar puede truncar un real destinado a entero. Por ejemplo,5 / 2es una división entera, mientras que5.0 / 2produce un resultado real. - Las comparaciones de igualdad entre valores reales pueden variar debido a la representación numérica, especialmente entre la ejecución interpretada, compilada y la traducción.
- Los literales de texto se comparan distinguiendo mayúsculas y minúsculas. La comparación de orden entre literales considera su cantidad de caracteres, según la referencia oficial.
- Los índices de las matrices empiezan en cero. GPT comprueba los límites durante la ejecución interpretada; el manual no describe esa comprobación para los demás modos.
- GPT proporciona dos funciones internas para entrada y salida:
leia()eimprima(...). La referencia no documenta una instrucción propia para incluir bibliotecas estándar.
13 · Herramienta de referencia
El programa GPT
El manual oficial describe GPT como la herramienta del proyecto para analizar y ejecutar archivos de G-Portugol. Las opciones siguientes pertenecen a ese programa y no describen comandos disponibles en la interfaz de Potoo IDE.
| Opción | Función descrita |
|---|---|
-i | Interpreta y ejecuta el algoritmo. |
-o archivo | Compila y guarda un ejecutable. |
-t archivo | Genera código fuente en C. |
-s archivo | Genera código Assembly. |
-d | Añade consejos al informe de errores. |
-h | Muestra la ayuda del programa. |
La forma general es gpt [opciones] archivos.... Si se indican varios archivos, el primero contiene la declaración del algoritmo y el bloque principal; los demás aportan código complementario y no deben repetir la declaración del algoritmo, el bloque global de variables ni el bloque principal. La variable de entorno GPT_INCLUDE también puede indicar archivos adicionales: sus rutas se separan con : en sistemas Unix y con ; en Windows. El manual espera resultados equivalentes entre la interpretación, la compilación y la traducción, con la salvedad de que la comprobación de límites de las matrices ocurre en modo interpretado. La generación de ejecutables con -o se limita a máquinas x86 de 32 bits; para otras arquitecturas, el manual describe generar C con -t y compilarlo con la herramienta del sistema.
14 · Lectura complementaria
Referencias
- Manual oficial de G-Portugol, con capítulos sobre características, programación, sintaxis, la herramienta GPT y la gramática.
- Capítulo de programación, con ejemplos de variables, matrices, control de flujo, funciones y entrada y salida.
- Capítulo de implementación, que explica la estructura, las expresiones, las asignaciones, las funciones y la entrada y salida.
- Manual del programa GPT, con sus opciones de ejecución, compilación y traducción.
- Gramática oficial, con reglas léxicas y producciones sintácticas.
- Repositorio oficial del proyecto y sitio oficial.
15 · Comparación
Diferencias con Portugol Studio 2.0
G-Portugol y Portugol Studio 2.0 son pseudolenguajes distintos. Comparten el objetivo de expresar algoritmos en portugués, pero sus programas no son intercambiables: difieren en la estructura, las palabras reservadas, los tipos, los operadores y las reglas de ejecución.
| Aspecto | G-Portugol | Portugol Studio 2.0 |
|---|---|---|
| Estructura | algoritmo nombre;, bloque principal início ... fim y funciones después. | programa { ... } con la función de entrada funcao inicio(). |
| Escritura | Palabras reservadas con acentos, como variáveis, início y função. | Palabras clave sin acentos, como funcao, senao y nao. |
| Declaraciones y tipos | nombre : inteiro; tipos inteiro, real, caractere, literal y lógico. No documenta const. | inteiro nombre; usa caracter, cadeia, logico y vazio, además de declaraciones con const. |
| Asignación y comparación | := asigna; = y <> comparan. | = asigna; == y != comparan. También documenta asignaciones compuestas y ++/--. |
| Vectores y matrices | matriz[filas][columnas] de inteiros; admite una o más dimensiones y pasa los conjuntos por valor. | inteiro tabla[filas][columnas]; la referencia documenta vectores, matrices bidimensionales, inicializadores y parámetros por referencia con &. |
| Control de flujo | Usa fim-se, fim-enquanto, repita ... até y para ... de ... até ... passo; no documenta selección múltiple ni interrupción de bucles. | Usa bloques entre llaves, escolha/caso, faca ... enquanto, un bucle para de tres campos y pare. |
| Funciones | função dobro(valor:inteiro): inteiro; parámetros por valor, solo puede devolver valores de tipos primitivos y no admite funciones anidadas. | funcao inteiro dobro(inteiro valor); puede usar & para pasar un parámetro por referencia y vazio para indicar ausencia de retorno. |
| Entrada y salida | leia() devuelve un valor convertido según el contexto; imprima(...) concatena y añade un salto de línea. | leia(variable) asigna la entrada a una variable; escreva(...) no añade un salto de línea automáticamente. |
| Bibliotecas | Documenta leia e imprima como funciones internas; no describe una instrucción propia para incluir bibliotecas. | Incluye módulos con inclua biblioteca y ofrece bibliotecas estándar como Matematica, Texto y Tipos. |
| Expresiones | Cualquier expresión puede usarse como condición; cero y los valores vacíos son falsos. La precedencia se presenta explícitamente. | Las condiciones se documentan con valores lógicos; la gramática no ofrece una tabla completa de precedencia, por lo que los paréntesis permiten fijar el orden. |
El mismo ejercicio, dos sintaxis
El ejemplo comprueba la paridad de un número. El algoritmo es el mismo; los delimitadores, los operadores y la entrada y salida siguen las reglas de cada pseudolenguaje.
G-Portugol
algoritmo paridade;
variáveis
numero : inteiro;
fim-variáveis
início
imprima("Digite um inteiro:");
numero := leia();
se numero % 2 = 0 então
imprima("Par");
senão
imprima("Ímpar");
fim-se
fim
Portugol Studio 2.0
programa {
funcao inicio() {
inteiro numero
escreva("Digite um inteiro: ")
leia(numero)
se (numero % 2 == 0) {
escreva("Par\n")
} senao {
escreva("Ímpar\n")
}
}
}
Para consultar cada pseudolenguaje en detalle, abre la referencia de Portugol Studio 2.0 y las reglas oficiales de G-Portugol.