En este módulo, aprenderemos sobre dos estructuras de datos fundamentales en RPG: los arreglos y las listas. Estas estructuras son esenciales para almacenar y manipular colecciones de datos de manera eficiente.

Conceptos Clave

Arreglos

Un arreglo es una colección de elementos del mismo tipo, almacenados en ubicaciones de memoria contiguas. Los arreglos permiten acceder a los elementos mediante índices.

Listas

Una lista es una colección de elementos que pueden ser de diferentes tipos y no necesariamente están almacenados en ubicaciones de memoria contiguas. Las listas permiten una mayor flexibilidad en la manipulación de datos.

Arreglos en RPG

Declaración de Arreglos

Para declarar un arreglo en RPG, utilizamos la palabra clave DCL-S (declarar variable) seguida del nombre del arreglo, el tipo de datos y el tamaño del arreglo.

DCL-S myArray CHAR(10) DIM(5);

En este ejemplo, myArray es un arreglo de 5 elementos, cada uno de tipo CHAR(10).

Inicialización de Arreglos

Podemos inicializar un arreglo al momento de su declaración o posteriormente en el código.

DCL-S myArray CHAR(10) DIM(5) INZ(*ALL);

El uso de INZ(*ALL) inicializa todos los elementos del arreglo con valores predeterminados.

Acceso a Elementos del Arreglo

Para acceder a un elemento específico del arreglo, utilizamos el índice del elemento. Los índices en RPG comienzan en 1.

myArray(1) = 'Hello';
myArray(2) = 'World';

Ejemplo Práctico

DCL-S myArray CHAR(10) DIM(5) INZ(*ALL);

myArray(1) = 'Apple';
myArray(2) = 'Banana';
myArray(3) = 'Cherry';
myArray(4) = 'Date';
myArray(5) = 'Elderberry';

FOR i = 1 TO %ELEM(myArray);
    DSPly myArray(i);
ENDFOR;

En este ejemplo, declaramos un arreglo de 5 elementos, lo inicializamos y luego asignamos valores a cada elemento. Finalmente, utilizamos un bucle FOR para mostrar cada elemento del arreglo.

Listas en RPG

Declaración de Listas

En RPG, las listas se pueden manejar utilizando estructuras de datos más avanzadas como las listas enlazadas. Sin embargo, para simplificar, utilizaremos arreglos dinámicos que pueden crecer según sea necesario.

Ejemplo de Lista Dinámica

DCL-S myList CHAR(10) DIM(10) INZ(*ALL);
DCL-S listSize INT(10) INZ(0);

DCL-PROC addToList;
    DCL-PI *N CHAR(10);
    DCL-PARM newItem CHAR(10);
    
    listSize += 1;
    myList(listSize) = newItem;
    RETURN newItem;
END-PROC;

addToList('Apple');
addToList('Banana');
addToList('Cherry');

FOR i = 1 TO listSize;
    DSPly myList(i);
ENDFOR;

En este ejemplo, declaramos un arreglo myList con un tamaño inicial de 10 elementos y una variable listSize para llevar la cuenta del número de elementos en la lista. La subrutina addToList agrega un nuevo elemento a la lista y actualiza listSize.

Ejercicios Prácticos

Ejercicio 1: Crear y Manipular un Arreglo

  1. Declara un arreglo de 7 elementos de tipo CHAR(15).
  2. Inicializa el arreglo con nombres de días de la semana.
  3. Escribe un bucle para mostrar todos los elementos del arreglo.

Solución

DCL-S daysOfWeek CHAR(15) DIM(7) INZ(*ALL);

daysOfWeek(1) = 'Monday';
daysOfWeek(2) = 'Tuesday';
daysOfWeek(3) = 'Wednesday';
daysOfWeek(4) = 'Thursday';
daysOfWeek(5) = 'Friday';
daysOfWeek(6) = 'Saturday';
daysOfWeek(7) = 'Sunday';

FOR i = 1 TO %ELEM(daysOfWeek);
    DSPly daysOfWeek(i);
ENDFOR;

Ejercicio 2: Crear una Lista Dinámica

  1. Declara un arreglo dinámico para almacenar nombres de frutas.
  2. Escribe una subrutina para agregar elementos a la lista.
  3. Agrega al menos 5 nombres de frutas a la lista y muestra todos los elementos.

Solución

DCL-S fruitList CHAR(20) DIM(10) INZ(*ALL);
DCL-S listSize INT(10) INZ(0);

DCL-PROC addFruit;
    DCL-PI *N CHAR(20);
    DCL-PARM newFruit CHAR(20);
    
    listSize += 1;
    fruitList(listSize) = newFruit;
    RETURN newFruit;
END-PROC;

addFruit('Apple');
addFruit('Banana');
addFruit('Cherry');
addFruit('Date');
addFruit('Elderberry');

FOR i = 1 TO listSize;
    DSPly fruitList(i);
ENDFOR;

Conclusión

En esta sección, hemos aprendido sobre los arreglos y las listas en RPG. Los arreglos son útiles para almacenar colecciones de datos del mismo tipo, mientras que las listas ofrecen mayor flexibilidad. Hemos visto cómo declarar, inicializar y manipular estas estructuras de datos, y hemos practicado con ejemplos y ejercicios. Con estos conocimientos, estarás mejor preparado para manejar colecciones de datos en tus programas RPG.

© Copyright 2024. Todos los derechos reservados