01 · Alcance
Sobre Portugol Studio 2.0
Portugol es un nombre que se usa para distintos pseudolenguajes. Esta documentación describe específicamente Portugol Studio 2.0; sus reglas no definen un estándar universal para todos los pseudolenguajes llamados Portugol.
Las reglas presentadas corresponden al pseudolenguaje Portugol Studio 2.0 y a las fuentes enumeradas al final de esta referencia.
02 · Organización
Estructura de un programa
Un archivo comienza con programa y un bloque delimitado por llaves. Las inclusiones de bibliotecas aparecen al principio del bloque; después pueden venir declaraciones globales y funciones. La forma habitual de punto de entrada es una función llamada inicio.
programa {
inclua biblioteca Matematica --> mat
const inteiro tentativas = 3
inteiro acertos = 0
funcao inicio() {
escreva("Bienvenido al ejercicio")
}
}
Los bloques de funciones, condiciones y bucles usan { y }. El punto y coma se usa en los tres campos de la cabecera de para; los ejemplos habituales escriben un comando por línea y no terminan cada comando con punto y coma.
03 · Escritura
Nombres, comentarios y literales
- Los identificadores empiezan con una letra ASCII o guion bajo; después pueden incluir letras ASCII, dígitos y guiones bajos. La gramática publicada no admite letras acentuadas en identificadores.
- Las palabras clave se escriben sin acentos y la gramática las reconoce en minúsculas, por ejemplo
programa,funcaoyenquanto. - Los comentarios de línea empiezan con
//; los comentarios de bloque se delimitan con/*y*/. - Los números reales usan punto como separador decimal. Los textos usan comillas dobles y los caracteres individuales, comillas simples; el léxico también define escapes y literales hexadecimales.
- Los valores lógicos son
verdadeiroyfalso.
// comentario de línea
/* comentario
de bloque */
cadeia mensagem = "Hola"
caracter inicial = 'A'
real media = 7.5
logico aprovado = verdadeiro
04 · Datos
Tipos, variables y constantes
| Tipo | Uso |
|---|---|
inteiro | Números enteros. |
real | Números con parte fraccionaria. |
logico | Valores verdadeiro o falso. |
caracter | Un carácter. |
cadeia | Secuencia de caracteres. |
vazio | Indica una función sin valor de retorno. |
Declara el tipo antes del nombre. Una declaración puede agrupar nombres del mismo tipo e incluir una expresión inicial. La palabra clave const marca declaraciones constantes. Los valores y tipos deben ser compatibles.
inteiro idade = 18, ano
real altura = 1.72
const real pi_aproximado = 3.14
cadeia nome = "Lia"
logico concluiu = falso
Una variable declarada dentro de una función o bloque tiene alcance local; las declaraciones del cuerpo principal, fuera de las funciones, son globales. La lista de declaraciones también permite inicializadores de vectores y matrices, que se explican en Vectores y matrices.
05 · Expresiones
Operadores y precedencia
| Grupo | Operadores | Significado |
|---|---|---|
| Aritméticos | + - * / % | Suma, resta, multiplicación, división y resto. |
| Unarios | + - nao ~ ++ -- | Signo, negación lógica, negación bit a bit, incremento y decremento. ++ y -- pueden aparecer antes o después del identificador. |
| Asignación | = += -= *= /= | Asignación simple y compuesta. = no es el operador de igualdad. |
| Comparación | == != > < <= >= | Igualdad, diferencia y comparaciones relacionales. |
| Lógicos | e ou | Conjunción y disyunción lógica. |
| Bit a bit | ^ << >> & | | XOR, desplazamientos a izquierda y derecha, AND y OR bit a bit. |
| Agrupación | ( ) | Controla explícitamente el orden de evaluación. |
La gramática oficial define los operadores mediante alternativas recursivas, pero no publica una tabla de precedencia clara para todas las combinaciones. Usa paréntesis para hacer explícito el orden, sobre todo al mezclar comparaciones, lógica y operaciones bit a bit.
06 · Interacción
Entrada y salida
escreva muestra una o más expresiones. Para saltar de línea, incluye la secuencia de escape \n en una cadena que pases a la función. leia recibe datos para variables. La función predefinida limpa() limpia el área de salida.
programa {
funcao inicio() {
cadeia nome
escreva("¿Cuál es tu nombre? ")
leia(nome)
escreva("Hola, ", nome, "!\n")
}
}
La forma de mostrar y leer datos depende de las funciones y bibliotecas disponibles en el entorno de ejecución descrito por las referencias.
07 · Decisiones
Condiciones y selección
se ejecuta una rama cuando la expresión lógica es verdadera; senao define la rama alternativa. Los bloques pueden contener varios comandos. La selección múltiple usa escolha, etiquetas caso y la alternativa contrario.
se (nota >= 7) {
escreva("Aprobado\n")
} senao {
escreva("Sigue practicando\n")
}
escolha (opcao) {
caso 1:
escreva("Iniciar\n")
pare
caso contrario:
escreva("Opción desconocida\n")
}
pare termina el caso actual de escolha o interrumpe un bucle. Usa una expresión de tipo lógico como condición.
08 · Bucles
Repetición
Portugol Studio 2.0 define bucles condicionales y un bucle con inicialización, condición 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 evalúa antes de cada repetición; faca ... enquanto evalúa después del bloque. En para, los campos se separan por punto y coma y pueden inicializar una variable, comprobar una condición y actualizar el contador. pare termina el bucle actual.
09 · Colecciones
Vectores y matrices
Los vectores usan un índice entre corchetes; las matrices usan dos índices. Cada dimensión declarada debe ser una expresión constante de tipo entero y valor positivo; si hay un inicializador, el tamaño puede inferirse. La gramática también permite inicializar matrices por filas.
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")
}
}
Los índices son expresiones enteras. Los parámetros de función pueden declarar dimensiones sin fijar sus tamaños, por ejemplo inteiro valores[] o inteiro tabela[][].
10 · Reutilización
Funciones y parámetros
Una función puede declarar un tipo de retorno antes del nombre; omitir el tipo equivale a usarla sin valor de retorno, que también se puede escribir con vazio. Los parámetros tienen tipo y nombre, pueden separarse por comas y pueden recibir vectores o matrices. Un & antes del nombre indica paso por referencia.
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 termina la función y puede devolver una expresión. La referencia oficial describe llamadas dentro de expresiones, funciones con retorno y funciones sin retorno.
11 · Recursos estándar
Bibliotecas de Portugol Studio 2.0
Una biblioteca se incluye con inclua biblioteca Nombre y puede recibir un alias después de -->. Las llamadas usan el nombre o el alias seguido de un punto. La tabla resume los módulos del pseudolenguaje documentados en las fuentes de esta referencia; la documentación de cada clase enumera firmas, parámetros y constantes.
| Biblioteca | Recursos de referencia |
|---|---|
Arquivos | Abrir, cerrar, leer y escribir archivos; comprobar el fin, seleccionar archivos, listar archivos y carpetas, crear carpetas, reemplazar texto y comprobar o borrar archivos. |
Calendario | Día, mes, año, hora, minuto, segundo, milisegundo y nombres de los días de la semana. |
Graficos | Ventanas gráficas, dibujos geométricos, imágenes, animaciones GIF, texto, fuentes, colores, gradientes, dimensiones, pantalla completa y transformaciones visuales. |
Internet | Tiempo límite, lectura de contenido de una dirección, descarga de imágenes y comprobación de disponibilidad. |
Matematica | PI, potencia, raiz, arredondar, logaritmo, seno, coseno, tangente, valor absoluto, número mayor y menor. |
Mouse | Consultar botones y posición del puntero; ocultar o mostrar el cursor. |
Objetos | Crear objetos desde JSON/XML o propiedades, consultar y asignar propiedades tipadas, trabajar con vectores de propiedades y liberar o exportar objetos. |
ServicosWeb | Conexiones y solicitudes web, encabezados y parámetros; operaciones para obtener, publicar, actualizar y eliminar datos. |
Sons | Cargar, reproducir, pausar, detener y liberar sonidos; consultar posición, duración y volumen. |
Teclado | Consultar y leer teclas y caracteres, con constantes para teclas comunes, letras, números y funciones. |
Texto | numero_caracteres, caixa_alta, caixa_baixa, substituir, preencher_a_esquerda, obter_caracter, posicao_texto y extrair_subtexto. |
Tipos | Comprobar si los textos representan números, valores lógicos o caracteres, y convertir entre cadena, entero, real, lógico y caracter. |
Util | Directorio del usuario, tamaños de vectores y matrices, sorteo, espera y tiempo transcurrido. |
inclua biblioteca Matematica --> mat
funcao inicio() {
escreva(mat.potencia(2, 3), "\n")
}
El conjunto de bibliotecas pertenece al entorno de referencia de Portugol Studio 2.0; no todas las bibliotecas son apropiadas para cualquier intérprete o contexto de ejecución.
Firmas y resultados
Las llamadas siguientes usan el alias mat del ejemplo anterior. Las funciones devuelven valores que pueden asignarse a variables o combinarse en expresiones.
| Biblioteca | Firma o llamada | Comportamiento |
|---|---|---|
Matematica | potencia(base, expoente) | Devuelve un número real con la base elevada al exponente. Ejemplo: potencia(2, 3) da 8. |
Matematica | raiz(radicando, indice) | Devuelve un número real con la raíz indicada por el índice. raiz(27, 3) da 3. |
Matematica | arredondar(numero, casas), logaritmo(numero, base) | Devuelven números reales: redondeo a los decimales indicados y logaritmo en la base especificada. |
Matematica | seno(angulo), cosseno(angulo), tangente(angulo) | Devuelven números reales con el resultado trigonométrico; los ángulos se expresan en radianes. |
Matematica | valor_absoluto(numero), maior_numero(a, b), menor_numero(a, b), PI | Devuelven números reales: valor absoluto, mayor o menor de dos números y la constante π. |
Texto | numero_caracteres(cadeia), caixa_alta(cad), caixa_baixa(cad) | La primera devuelve un entero; las otras devuelven la cadena en mayúsculas o minúsculas. |
Texto | substituir(cad, pesquisa, substituto) | Devuelve una cadena con todas las apariciones del fragmento buscado reemplazadas. |
Texto | preencher_a_esquerda(car, tamanho, cad) | Devuelve una cadena rellenada por la izquierda hasta el tamaño indicado; las cadenas que ya tienen ese tamaño no cambian. |
Texto | obter_caracter(cad, indice), posicao_texto(texto, cadeia, posicao_inicial) | La primera devuelve un carácter; la segunda, un entero con la posición. Los índices empiezan en cero; la búsqueda devuelve -1 si no encuentra el texto. |
Texto | extrair_subtexto(cadeia, posicao_inicial, posicao_final) | Devuelve una cadena desde el índice inicial hasta el final, sin incluirlo. Ejemplo: extrair_subtexto("salgado", 0, 3) da "sal". |
Tipos | cadeia_e_inteiro(cad, base), cadeia_e_real(cad), cadeia_e_logico(cad), cadeia_e_caracter(cad) | Devuelven valores lógicos para indicar si la cadena representa el tipo indicado. Para enteros, las bases documentadas son 2, 10 y 16. |
Tipos | inteiro_e_caracter(valor), caracter_e_inteiro(car), caracter_e_logico(car) | Devuelven valores lógicos para comprobar si los valores se pueden convertir a los tipos indicados. |
Tipos | cadeia_para_inteiro(valor, base), cadeia_para_real(valor), cadeia_para_logico(valor), cadeia_para_caracter(valor) | Devuelven un entero, real, lógico o carácter según la función. La conversión lógica reconoce verdadeiro o falso; para convertir a carácter se requiere exactamente un carácter. |
Tipos | inteiro_para_cadeia(valor, base), inteiro_para_caracter(valor), inteiro_para_logico(valor), inteiro_para_real(valor) | Devuelven una cadena, carácter, valor lógico o real; para cadenas, usa la base 2, 10 o 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) | Devuelven cadena, entero, valor lógico o carácter según el tipo de origen y la función; consulta la referencia de la biblioteca para cada conversión. |
Util | obter_diretorio_usuario(), numero_elementos(vetor), numero_linhas(matriz), numero_colunas(matriz) | La primera devuelve una cadena; las demás, enteros con las dimensiones. La matriz debe tener al menos una fila para consultar las columnas. |
Util | sorteia(minimo, maximo), aguarde(intervalo), tempo_decorrido() | sorteia devuelve un entero dentro del intervalo inclusivo si minimo es menor que maximo; aguarde no devuelve valor y pausa en milisegundos; tempo_decorrido devuelve un entero en milisegundos desde el primer uso de la 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")
}
Salida: 6, LOGICA y log, cada valor en una línea.
inclua biblioteca Tipos --> tipos
funcao inicio() {
escreva(tipos.cadeia_e_inteiro("101", 2), "\n")
escreva(tipos.cadeia_para_inteiro("101", 2), "\n")
}
Salida: verdadeiro y 5. La primera llamada valida la escritura binaria; la segunda convierte el mismo valor a entero.
12 · Ejemplo
Programa completo
Este ejemplo combina declaración, entrada y salida, condición, función y expresión lógica:
programa {
funcao logico eh_par(inteiro numero) {
retorne numero % 2 == 0
}
funcao inicio() {
inteiro valor
escreva("Ingresa un número entero: ")
leia(valor)
se (eh_par(valor)) {
escreva("El número es par\n")
} senao {
escreva("El número es impar\n")
}
}
}
13 · Consejos de lectura
Errores frecuentes y cómo evitarlos
- Confundir asignación e igualdad: usa
=para asignar y==para comparar valores. - Olvidar los separadores del bucle
para: los campos de inicialización, condición y actualización se separan con punto y coma. - Usar índices fuera del vector: los índices empiezan en cero; un vector de tamaño 3 ocupa las posiciones
0a2. - Esperar una operación de otra biblioteca: incluye el módulo con
inclua biblioteca Nombrey usa el mismo nombre o alias antes del punto. - Confundir el tamaño con el último índice: una cadena de seis caracteres tiene como último índice el
5; enextrair_subtexto, el índice final marca el límite y no se incluye en el resultado. - Usar
pareen cualquier lugar: termina el bucle o caso de selección actual; fuera de esos contextos no sustituye aretorne.
14 · Lectura adicional
Referencias del pseudolenguaje Portugol Studio 2.0
Portugol Studio 2.0 tiene su origen en Portugol Studio. Ese proyecto aparece en esta sección únicamente como fuente de las referencias utilizadas para documentar el pseudolenguaje.
- Repositorio oficial de Portugol Studio, que identifica el pseudolenguaje como Portugol Studio 2.0.
- Gramática oficial y léxico oficial.
- Ayuda oficial sobre entrada y salida, incluido el uso de
\npara saltar de línea, y el analizador semántico, que enumera las funciones predefinidas. - Código fuente de las bibliotecas estándar y sus funciones documentadas; consulta directamente Matematica, Texto, Tipos y Util.
Las referencias pertenecen a proyectos distintos. Consúltalas para verificar detalles de comportamiento y compatibilidad antes de usar una función específica.