ÍNDICE DE CONTENIDO
1.Utilizando G-Portugol...2
Introducción...2
Composición y ejecución de programas...2
2.La estructura de un archivo .gpt...2
I.Algoritmo...2
II.Variables globales del archivo...2
III.Programa...2
IV.Subprogramas...3
3.Ejecutar el archivo .gpt...3
Como script...3
Como ejecutable binario...4
4.Tipos de datos primitivos...4
I.Cuadro de tipos de datos primitivos, su representación y ejemplos...4
I.Vectores o matrices...4
Asignación de valores a las variables...5
I.Dar valores a un inteiro...5
II.Dar valores a un caractere...5
III.Dar valores a un real...5
IV.Dar valores a un literal...5
V.Dar valores a un lógico...5
VI.dar valores a una matriz...5
5.Expresiones para cambiar un valor...5
6.Glosario de términos aparecidos...6
1.
1.
UTILIZANDO G-PORTUGOL
UTILIZANDO G-PORTUGOL
Escribo esto porque no he encontrado nada en español sobre como programar usando el lenguaje G-Portugol. Este documento es totalmente subjetivo y no tiene calidad académica ninguna. Tampoco tiene copyright ni copyleft ni nada de nada.
He utilizado como orientación el PDF "Manual da versão v1.0" del 2006 de Thiago Silva. Y el Linux Debian para ponerlo en funcionamiento. Según la documentación también se pueden hacer programas para el Windoz.
Versión: 0.5 de Junio 2015 por Juan Ribera Seijas
➢
I
NTRODUCCIÓNSegún lo que he visto hasta ahora, se trata de un lenguaje muy simple, utilizado solamente para fines académicos, basado en C y algo de Pascal. La única manera que he encontrado para interactuar con los programas hechos es mediante una consola de texto, introducir letras o números y mostrar frases. Ninguna posiblidad de usar alguna librería, ni siquiera las estándar, porque no tiene ninguna instrucción include o similar.
Por si alguien no lo sabe, todas las palabras reservadas del lenguaje están escritas en Portugués, nada de inglés.
➢
COMPOSICIÓN Y EJECUCIÓN DE PROGRAMAS
La única manera que conozco es crear uno o varios archivos de texto plano con la terminación .gpt y usar la utilidad gpt para crear el ejecutable o la interpretación (scripting).
2.
2.
LA ESTRUCTURA DE UN ARCHIVO .GPT
LA ESTRUCTURA DE UN ARCHIVO .GPT
Se compone de 4 partes: la palabra algoritmo seguida del nombre de ese programa, un bloque opcional de líneas con las variables, el bloque programa y por último un bloque opcional con una o varias funciones que aquí se llaman subprogramas.
Todas las líneas tienen que acabar en ";" como en C. Y se pueden hacer programas sin usar paréntesis o cualquier otra demarcación de bloque.
Los comentarios igual que en C, con sus dos delimitadores: " /* */" y "//".
I. Algoritmo
Se utiliza para indicar el nombre del ejecutable pero sólo se usa en el caso de que al usar la utilidad GPT no se especifique la opción -o, en cualquier caso, aunque no sirva, es obligatorio.
Ejemplo de declaración algoritmo
algoritmo MiPrograma;
II. Variables globales del archivo
Son opcionales, se inicializan a 0 o nulo y pueden declararse juntamente varias del mismo tipo primitivo. Puedes ver los tipos de datos soportados en el siguiente capítulo.
El bloque comienza con una línea con la palabra reservada: variáveis , y acaba con fim-variáveis . Palabras sin el ";", pero las líneas de las variables sí que lo llevan.
Ejemplo de declaración de variables
variáveis x, edad, ano : inteiro; nome : literal; certo : matriz[4] de lógicos; quadr : matriz[10][2] de inteiros; fimvariáveis III. Programa
valores y las estructuras de control de flujo, están explicados en los capítulos siguientes. También se pueden hacer llamadas a las funciones (subprogramas) escritas posteriormente a este bloque.
Ejemplo de bloque programa
início
imprima("Olá Mundo!, soy Juan\n"); // un salto de línea adicional imprima("segunda línea");
fim
IV. Subprogramas
Este bloque es opcional, puede haber varios. El bloque es delimitado por la palabra reservada função , el bloque comenzando con início y acaba con la palabra fim. En el caso de que devuelva un valor se hace utilizando la palabra reservada retorne . Si pones variables locales, las cuales son de su uso exclusivo, éstas se declaran después de la primera línea y antes de que comience el bloque con código.
Estas funciones no son como las de C, están muy limitadas, no pueden recibir o dar valores por referencia, todos son por valor, es decir, utilizan una copia de la varible. Tampoco pueden declarar funciones dentro de funciones. Pero si pueden llamarse a si mismas en recursión. Y son fuertemente tipadas, en caso de que retorne algo, el valor de la variable utilizada para retornar el valor de la propia función tiene que respetar el tipo de dato declarado y este tipo no puede ser ni matriz ni vector. Sin embargo el subprograma si puede recibir matrices como argumentos. La primera línea, de declaración del subprograma, comienza con la palabra reservada função, seguida del nombre que tú le das a la función y unos paréntesis. Si la función recibe datos, estos son copiados en las variables
declaradas dentro de los paréntesis. No está soportado que haya una función con un número indeterminado de estas variables, por ejemplo, si hay 3 variables entre paréntesis tiene que llamarse a esta función con 3 valores, ni uno más ni uno menos.
Y finalmente (sólo en el caso de que la función devuelva algo) se ponen dos puntos ":" y el tipo primitivo de dato devuelto por la función, que se convierte en el tipo de función.
Ejemplo de subprograma função suma(x: inteiro, y: inteiro) : inteiro // la función devuelve un valor tipo entero obligatoriamente result : inteiro; // variable local de uso exclusivo por la función início // comienza el bloque del código result := x + y; // suma las dos variables recibidas y la asigna a la variable local retorne result; // la funcion devuelve el resultado fim
3.
3.
EJECUTAR EL ARCHIVO .GPT
EJECUTAR EL ARCHIVO .GPT
➢
C
OMOSCRIPTLa utilidad GPT se puede utilizar para ejecutar de manera dinámica (sin compilar) un archivo .gpt. Sólamente hay que añadir la opción -i antes del nombre de archivo. Aquí tienes el archivo con el ejemplo ejemplo1.gpt .
Ejemplo de archivo script hola mundo
algoritmo holamundo; // este ejemplo se puede ver en acción en un terminal de consola así: gpt i ejemplo.gpt início // el bloque programa, siempre con acento imprima("Olá Mundo!, soy Juan\n"); imprima("segunda línea"); fim
➢
COMO EJECUTABLE BINARIO
Sólo hay que añadir la opción -o con el nombre del ejecutable. Para ver como funciona el programa sólo hay que ejecutar el fichero resultante
Ejemplo de archivo ejecutable hola mundo
En un terminal de consola teclea lo siguiente en el mismo directorio donde esté ejemplo.gpt y luego ejecuta holam, tiene que mostrar lo mismo que el ejemplo anterior.
gpt o holam ejemplo.gpt
4.
4.
TIPOS DE DATOS PRIMITIVOS
TIPOS DE DATOS PRIMITIVOS
I. Cuadro de tipos de datos primitivos, su representación y ejemplos
TIPO REPRESENTACIÓN EJEMPLO
inteiro base decimal => un + o - (opcional) seguido de un Nº
base hexadecimal => 0x seguido de 0-9,a-f, A-F
-43
0x3F2A (todos empiezan por cero no O) 0c325 (en todos la letra puede se mayúscula) 0b101010
base octal => 0c seguido de 0-7
base binaria => 0b seguido de 0-1
real un + o - (opcional) seguido de un Nº que contiene un
punto 43.43
caractere un único carácter entre comillas simples, puede ser \n ó \r
'j'
literal una línea con varios caracteres entre comillas dobles, puede contener \n
"unas palabras"
lógico la palabra verdadeiro ó falso, en números 0 es falso y otro número verdadeiro
falso
Estos tipos primitivos se pueden agrupar en matrices o vectores, pero otros tipos más complejos no están soportados. Que yo sepa esto es todo lo que hay. Todos se inicializan a 0 o nulo.
Ejemplo de representación de tipos primitivos
/* para ver como se muestran los cuatro tipos de enteros soportados */ imprima("entero base decimal:", 43,", base hexadecimal:", 0xF43, ", base octal:", 0c43, ", base binaria:", 0b1001); /* para ver como se muestra un real, muestra 1.23 */ imprima("real:", 1.2345); /* para ver como se muestra un caractere */ imprima("caractere:", 'J', ", salto de línea:", '\n'); /* para ver como se muestra un literal */ imprima("literal:", " una frase con algunas palabras"); /* para ver como se muestra un lógico */ imprima("lógico:", verdadeiro, ", falso:", 0); I. Vectores o matrices
Es la manera de agrupar tipos primitivos, también pueden ser utilizadas como argumentos en una función pero se pasan por valor (copia). También se inicializan a 0 o nulo.
Su declaración es casi igual que las variables, la diferencia es que se utilizan los nombres de tipos primitivos en plural. Se pone el nombre de variable, los ":", la palabra matriz junto a unos "[]" con un número dentro que indica el tamaño de la matriz (luego se cuenta empezando en 0, no en 1); la palabra "de" y el tipo primitivo. Si se agrupan varios "[]" se optienen matrices N-dimensión, por cada "[]" se añade una dimensión.
variáveis matrizC : matriz[3] de caracteres; matrizI : matriz[3] de inteiros; matrizR : matriz[3] de reais; matrizL : matriz[3] de literais; matrizZ : matriz[3][2] de lógicos; // matriz de 2 dimensiones (3 x 2): 0,0|0,1|1,0| 1,1|2,0|2,1 fimvariáveis
Su utilización es como cualquier otra variable, se pone la variable y el índice deseado y se utiliza. Ejemplo de utilización de matrices
imprima("Digite um número real:"); r := leia(); // se lee de la consola un número real matrizR[0] := r + 1.0; // se suma 1 al número leído y se asigna a la variable matriz matrizR[1] := r + 2.0; matrizR[2] := r + 3.0; imprima("matriz reales: ", matrizR[0], ", ", matrizR[1], ", ", matrizR[2]); // se muestran los 3 valores de la matriz
➢
A
SIGNACIÓN DE VALORES ALAS VARIABLESTodos los tipos se utilizan igual; es igual que la declaración pero se añade un "=" después de los ":" y un valor en lugar del tipo de variable. Para comprobar si un valor es compatible con el tipo declarado mira el cuadro de tipos de datos primitivos. No te olvides de los ";".
I. Dar valores a un inteiro
Un valor válido después del "=" como en: TuVariable := 32 ;
II. Dar valores a un caractere
Un valor válido después del "=" como en: TuVariable := 'c' ;
III. Dar valores a un real
Un valor válido después del "=" como en: TuVariable := 23.32 ;
IV. Dar valores a un literal
Un valor válido después del "=" como en: TuVariable := "palabra" ;
V. Dar valores a un lógico
Un valor válido después del "=" como en: TuVariable := falso; (sin las comillas)
VI. dar valores a una matriz
Un valor válido de un elemento de la matriz después del "=" como en: TuMatriz[3] := 32;
Que yo sepa no es posible dar valores a toda la matriz en una sola asignación, hay que ir elemento a elemento.
5.
6.
6.
GLOSARIO DE TÉRMINOS APARECIDOS
GLOSARIO DE TÉRMINOS APARECIDOS
G-Portugol...2
Algoritmo...2
Variables globales del archivo...2
variáveis...2 fim-variáveis...2 Programa...2 início...2 fim...2 Subprogramas...3 função...3 retorne...3 inteiro...4 real...4 caractere...4 literal...4 lógico...4
7.
7.
RECOMPILACIÓN DE LOS EJEMPLOS
RECOMPILACIÓN DE LOS EJEMPLOS
Ejemplo de declaración algoritmo...2
Ejemplo de declaración de variables...2
Ejemplo de bloque programa...3
Ejemplo de subprograma...3
Ejemplo de archivo script hola mundo...3
Ejemplo de archivo ejecutable hola mundo...4
Ejemplo de representación de tipos primitivos...4
Ejemplo de declaración de matrices...4