01 · Alcance
Sobre VisuAlg
VisuAlg es un entorno para escribir y ejecutar algoritmos en un pseudolenguaje en portugués, con estructuras didácticas propias. Esta referencia reúne la sintaxis, las funciones y los comandos de apoyo a la enseñanza descritos en el manual del autor para VisuAlg 3.0.5.2.
02 · Organización
Estructura del algoritmo
Un algoritmo empieza con la palabra clave algoritmo y un nombre entre comillas. Las declaraciones globales, el archivo de datos y los subprogramas aparecen antes de inicio; el cuerpo principal termina en fimalgoritmo.
algoritmo "Bienvenida"
var
nome: caractere
inicio
escreva("¿Cómo te llamas? ")
leia(nome)
escreval("Hola, ", nome, "!")
fimalgoritmo
No se usan llaves para delimitar bloques. Las estructuras tienen palabras de inicio y cierre, como se/fimse y enquanto/fimenquanto. El estilo del pseudolenguaje prevé un comando por línea.
Para usar la extensión de lectura de archivos, arquivo "datos.txt" aparece en la sección de declaraciones, antes del cuerpo principal. Consulta Funciones y comandos auxiliares.
03 · Escritura
Nombres, comentarios y valores
- Las palabras clave y los nombres de variables no distinguen mayúsculas de minúsculas; por convención, las palabras clave se escriben en minúsculas y sin acentos, como
entaoylogico. - Los nombres empiezan con una letra y pueden continuar con letras, dígitos o guiones bajos. El manual de referencia establece un límite de 30 caracteres.
- Los comentarios de línea empiezan con
//y terminan al final de esa línea. Para comentar varias líneas, cada una necesita su propio marcador. - Los literales de texto usan comillas dobles; los valores decimales usan punto. Los valores lógicos son
VERDADEIROyFALSO. - Una línea representa un comando; el pseudolenguaje no requiere punto y coma para separar comandos.
// los nombres ignoran mayúsculas y minúsculas
var
nome_do_aluno: caractere
nota: real
aprovado: logico
inicio
nota <- 8.5
aprovado <- VERDADEIRO
04 · Datos
Tipos, variables y asignación
| Tipo | Uso |
|---|---|
inteiro | Números enteros. |
real | Números con parte fraccionaria. |
caractere | Un carácter o una cadena entre comillas dobles. |
logico | Valores VERDADEIRO y FALSO. |
Las variables se declaran después de var, con los nombres a la izquierda de los dos puntos y el tipo a la derecha. Se pueden declarar varios nombres del mismo tipo, separados por comas. VisuAlg no tiene una palabra clave general para declarar constantes; los valores fijos se escriben como literales o expresiones.
algoritmo "Declaraciones"
var
tentativas, acertos: inteiro
media: real
nome: caractere
terminou: logico
inicio
tentativas <- 0
media <- 7.25
nome <- "Lia"
terminou <- FALSO
fimalgoritmo
El operador de asignación es <-; a la izquierda va una variable o un elemento de vector, y a la derecha una expresión compatible con el tipo destino. Usa = para comparar igualdad.
05 · Expresiones
Operadores y precedencia
| Grupo | Operadores | Significado |
|---|---|---|
| Asignación | <- | Guarda el resultado de una expresión en una variable. |
| Aritméticos unarios | + - | Indican signo positivo o negativo. |
| Potenciación | ^ | Eleva la base al exponente. |
| Aritméticos | * / \ MOD % + - | Multiplicación, división real, división entera, resto, suma y resta. \ calcula la división entera; MOD y % calculan el resto. |
| Concatenación | + | Une expresiones de tipo caractere. |
| Relacionales | = < > <= >= <> | Igual, menor, mayor, menor o igual, mayor o igual y distinto. |
| Lógicos | nao e ou xou | Negación, conjunción, disyunción y disyunción exclusiva. |
En aritmética, ^ tiene la mayor precedencia entre los operadores binarios; *, /, \ y % se evalúan antes que + y -. Los signos unarios tienen mayor precedencia. El manual describe nao como el operador lógico de mayor precedencia.
El manual de referencia no publica una tabla completa de precedencia para todos los operadores lógicos y relacionales. Usa paréntesis para hacer explícitos los grupos y evitar depender de convenciones supuestas.
Las comparaciones de texto no distinguen mayúsculas de minúsculas; por ejemplo, el manual considera iguales "ABC" y "abc".
06 · Interacción
Entrada, salida y formato
leia recibe valores para variables en el orden indicado. escreva muestra expresiones separadas por comas; escreval hace lo mismo y luego cambia de línea.
algoritmo "Formato"
var
quantidade: inteiro
preco: real
inicio
escreva("Cantidad: ")
leia(quantidade)
preco <- quantidade * 2.5
escreval("Total: ", preco:8:2)
fimalgoritmo
En la salida, valor:ancho reserva un campo con el ancho indicado; real:ancho:decimales también fija la cantidad de decimales. El texto no recibe automáticamente el mismo espaciado que las expresiones numéricas; añade espacios al texto cuando sea necesario.
07 · Decisiones
Condiciones y selección
Usa se ... entao para ejecutar un bloque cuando la expresión lógica sea verdadera. senao es opcional y fimse cierra la estructura; se pueden anidar condiciones.
se nota >= 7 entao
escreval("Aprobado")
senao
escreval("Sigue practicando")
fimse
escolha evalúa una expresión una vez y compara su valor con las alternativas de cada caso; outrocaso define la opción predeterminada. fimescolha cierra la selección.
escolha opcao
caso 1, 2
escreval("Opción inicial")
outrocaso
escreval("Otra opción")
fimescolha
08 · Bucles
Repetición
VisuAlg documenta tres bucles principales. para cuenta desde el inicio hasta el límite, incluyéndolo, con un paso predeterminado de 1; un paso negativo permite contar hacia atrás. La variable de control debe ser entera.
para indice de 1 ate 5 faca
escreva(indice:3)
fimpara
enquanto quantidade > 0 faca
quantidade <- quantidade - 1
fimenquanto
repita
tentativas <- tentativas + 1
ate tentativas = 3
enquanto comprueba la condición antes del cuerpo y puede no ejecutarse. repita ... ate comprueba al final y se ejecuta al menos una vez. interrompa sale inmediatamente del bucle actual.
También existe la forma alternativa repita ... fimrepita; en ella, el bucle no tiene una condición final y necesita interrompa para terminar.
09 · Colecciones
Vectores y matrices
Las estructuras indexadas se declaran con vetor y rangos inclusivos. Un vector puede tener una dimensión y una matriz, dos. Los límites son enteros constantes y la sintaxis indica el rango de cada dimensión.
var
notas: vetor[1..5] de real
tabuleiro: vetor[0..2, 0..2] de caractere
inicio
notas[1] <- 9.5
tabuleiro[0, 1] <- "X"
escreval(notas[1])
escreval(tabuleiro[0, 1])
La cantidad de elementos de una dimensión se calcula a partir de sus límites, no del número de la posición final. El primer ejemplo tiene cinco posiciones, indexadas de 1 a 5; el rango también puede empezar en cero u otro entero.
El manual de VisuAlg describe vectores de hasta dos dimensiones. Las matrices se consultan con dos índices entre corchetes, separados por coma.
10 · Reutilización
Procedimientos y funciones
Los procedimientos y las funciones se declaran después de las variables globales y antes de inicio. Un procedimiento no devuelve un valor; una función declara el tipo de retorno después de dos puntos y devuelve el resultado con retorne. Ambos pueden tener variables locales en una sección var.
algoritmo "Rotinas"
var
resultado: inteiro
funcao dobro(valor: inteiro): inteiro
inicio
retorne valor * 2
fimfuncao
procedimento somar(valor: inteiro; var total: inteiro)
inicio
total <- total + valor
fimprocedimento
inicio
resultado <- dobro(4)
somar(3, resultado)
escreval(resultado)
fimalgoritmo
Los parámetros separados por comas dentro de un grupo comparten el tipo; los distintos grupos se separan con punto y coma. Sin var, el parámetro se pasa por valor; con var, la rutina puede modificar la variable recibida. El manual permite recursión, pero no rutinas anidadas.
Las funciones aparecen como expresiones y los procedimientos como comandos. Una llamada a un procedimiento sin parámetros puede omitir los paréntesis.
11 · Recursos del pseudolenguaje
Funciones y comandos auxiliares
El manual del autor documenta las operaciones de entrada y salida escreva, escreval y leia, además de las funciones matemáticas, trigonométricas y de manipulación de texto que aparecen a continuación. Las firmas y los comportamientos resumen la referencia de VisuAlg.
| Grupo | Nombres | Uso general |
|---|---|---|
| Matemáticas | Abs, ArcCos, ArcSen, ArcTan, Cos, CoTan, Exp, GraupRad, Int, Log, LogN, Pi, Quad, RadpGrau, RaizQ, Rand, RandI, Sen, Tan | Valores, conversión de ángulos, parte entera, logaritmos, trigonometría, potencias y números aleatorios. |
| Texto y caracteres | Asc, Carac, Caracpnum, Compr, Copia, Maiusc, Minusc, Numpcarac, Pos | Convertir caracteres y números, medir, extraer, cambiar mayúsculas/minúsculas y localizar texto. |
Firmas y resultados de las funciones
Las funciones pueden usarse en expresiones o asignarse a variables. Pi y Rand no reciben parámetros; los demás nombres indican la cantidad y el orden de los argumentos.
| Grupo | Firma | Resultado |
|---|---|---|
| Matemáticas | Abs(expr), Int(expr), Quad(expr), RaizQ(expr), Exp(base, expoente), Log(expr), LogN(expr), Pi | Valor absoluto, parte entera, cuadrado, raíz cuadrada, potencia, logaritmo decimal o natural y constante π. |
| Trigonometría | Cos(expr), CoTan(expr), Sen(expr), Tan(expr), ArcCos(expr), ArcSen(expr), ArcTan(expr) | Calculan razones trigonométricas y sus arcos; los ángulos de entrada y salida se expresan en radianes. |
| Conversión angular | GraupRad(grados), RadpGrau(radianes) | Convierten grados a radianes y radianes a grados. |
| Valores aleatorios | Rand, RandI(limite) | Rand devuelve un real desde 0 inclusive hasta 1 exclusive; RandI devuelve un entero desde 0 inclusive hasta el límite exclusive. |
| Texto y caracteres | Asc(caracter), Carac(codigo), Caracpnum(cadena), Numpcarac(numero) | Obtienen el código ASCII del primer carácter, convierten un código a carácter, texto a número y número a texto. |
| Texto y caracteres | Compr(cadena), Copia(cadena, inicio, cantidad), Pos(subcadena, cadena) | Miden texto, copian una cantidad de caracteres o buscan la primera aparición. Las posiciones empiezan en 1; Pos devuelve 0 si no encuentra el fragmento. |
| Texto y caracteres | Maiusc(cadena), Minusc(cadena) | Devuelven el texto en mayúsculas o minúsculas. |
algoritmo "Ejemplos de funciones"
inicio
escreval(abs(2 - 9))
escreval(raizq(9))
escreval(pos("Brasil", "Brasil e Portugal"))
fimalgoritmo
Salida: 7, 3 y 1, cada resultado en una línea.
La documentación de VisuAlg también describe comandos de apoyo para la enseñanza y el entorno:
aleatorio [on]activa la generación que usaleia; sin rango explícito, los números van de 0 a 100 y los caracteres se generan como cadenas de cinco letras mayúsculas.aleatorio maximousa el rango inclusivo de 0 al límite;aleatorio minimo, maximodefine ambos límites inclusivos. Los dos deben ser constantes numéricas, no expresiones; si se indican al revés, VisuAlg los intercambia.aleatorio offdesactiva la generación.arquivo "ruta"asocia lecturas con un archivo de texto y aparece en la sección de declaraciones.timer onactiva el retraso predeterminado de 500 ms;timer <tiempo>define un entero constante en milisegundos, de 0 a 10.000, y los valores fuera del rango se limitan. Puede haber varios comandostimeren la sección de comandos.timer offdesactiva el retraso.pausainterrumpe la ejecución para inspeccionarla;debug condicionhace una pausa cuando la condición es verdadera.eco on|offcontrola si los datos de entrada se repiten en la salida;cronometro on|offmide el tiempo transcurrido.limpatelalimpia la pantalla DOS simulada de VisuAlg, pero no borra el panel de salida de la ventana principal.
12 · Ejemplo
Programa completo
Este ejemplo lee tres notas, calcula el promedio y usa una función para clasificar el resultado:
algoritmo "Resultado de la clase"
var
nota1, nota2, nota3, media: real
funcao aprovado(media: real): logico
inicio
retorne media >= 7
fimfuncao
inicio
escreval("Ingresa tres notas:")
leia(nota1, nota2, nota3)
media <- (nota1 + nota2 + nota3) / 3
se aprovado(media) entao
escreval("Aprobado con promedio ", media:5:2)
senao
escreval("Sigue practicando: promedio ", media:5:2)
fimse
fimalgoritmo
13 · Consejos de lectura
Errores frecuentes y cómo evitarlos
- Usar el símbolo equivocado para asignar: en VisuAlg,
<-asigna un valor;=compara valores en una condición. - Dejar un bloque sin cerrar: cada estructura debe terminar con su marcador correspondiente, como
fimse,fimpara,fimfuncaoofimalgoritmo. - Confundir índice y cantidad: los vectores usan los límites declarados;
Copia(cadena, inicio, cantidad)cuenta desde la posición 1 y el tercer argumento indica cuántos caracteres copiar. - Esperar posiciones desde cero de
Pos: las posiciones empiezan en 1 y el resultado0indica que el fragmento no existe en la cadena. - Suponer que el límite aleatorio está incluido:
RandI(limite)sortea desde cero hasta antes del límite. El comandoaleatorio, en cambio, define rangos inclusivos para los datos leídos. - Tratar los comandos del entorno como funciones:
aleatorio,timerydebugson comandos descritos por VisuAlg; no son llamadas que devuelvan un valor.
= (comparación) de <- (asignación).14 · Lectura adicional
Referencias de VisuAlg
- Manual del pseudolenguaje distribuido por el autor de VisuAlg, con sintaxis, tipos, operadores, comandos, rutinas y extensiones educativas; la referencia de comandos de la versión 3.0.5.2 también detalla
aleatorioylimpatela. - Catálogo de funciones numéricas y de texto, con firmas y ejemplos de resultados.
- Copia del manual en un repositorio universitario.
El manual presenta la sintaxis y los recursos de enseñanza de VisuAlg. Consulta las referencias para confirmar las firmas y los detalles de ejecución de los comandos.