En este tema, aprenderemos sobre los arreglos en Ada, un tipo de dato fundamental que permite almacenar múltiples valores del mismo tipo en una estructura ordenada. Los arreglos son útiles para manejar colecciones de datos y realizar operaciones sobre ellos de manera eficiente.

Contenido

Definición de Arreglos

Un arreglo en Ada es una colección de elementos del mismo tipo, organizados en una secuencia indexada. Los índices de un arreglo pueden ser de cualquier tipo discreto (como enteros o enumeraciones).

Sintaxis Básica

type Index_Type is range <lower_bound> .. <upper_bound>;
type Array_Type is array (Index_Type) of Element_Type;
  • Index_Type: Define el rango de índices del arreglo.
  • Array_Type: Define el tipo de arreglo.
  • Element_Type: Define el tipo de los elementos del arreglo.

Declaración e Inicialización

Declaración de un Arreglo

type Index_Type is range 1 .. 10;
type Integer_Array is array (Index_Type) of Integer;

Inicialización de un Arreglo

My_Array : Integer_Array := (1 => 10, 2 => 20, 3 => 30, others => 0);

En este ejemplo, My_Array es un arreglo de 10 enteros, donde los primeros tres elementos se inicializan con valores específicos y el resto se inicializa a 0.

Acceso a Elementos

Para acceder a los elementos de un arreglo, utilizamos los índices definidos:

Value : Integer := My_Array(1);  -- Accede al primer elemento
My_Array(2) := 25;               -- Modifica el segundo elemento

Iteración sobre Arreglos

Podemos iterar sobre los elementos de un arreglo utilizando bucles. Aquí hay un ejemplo con un bucle for:

for Index in My_Array'Range loop
    Put_Line(Integer'Image(My_Array(Index)));
end loop;

En este ejemplo, My_Array'Range devuelve el rango de índices del arreglo, y el bucle for itera sobre cada índice, imprimiendo el valor correspondiente.

Arreglos Multidimensionales

Ada también soporta arreglos multidimensionales. Aquí hay un ejemplo de un arreglo bidimensional:

type Row_Type is range 1 .. 3;
type Column_Type is range 1 .. 3;
type Matrix is array (Row_Type, Column_Type) of Integer;

My_Matrix : Matrix := ((1, 2, 3), (4, 5, 6), (7, 8, 9));

Para acceder a los elementos de un arreglo bidimensional:

Value : Integer := My_Matrix(1, 2);  -- Accede al elemento en la primera fila, segunda columna
My_Matrix(2, 3) := 10;               -- Modifica el elemento en la segunda fila, tercera columna

Ejercicios Prácticos

Ejercicio 1: Suma de Elementos de un Arreglo

Escribe un programa que calcule la suma de todos los elementos de un arreglo de enteros.

Solución

with Ada.Text_IO; use Ada.Text_IO;

procedure Sum_Array is
    type Index_Type is range 1 .. 5;
    type Integer_Array is array (Index_Type) of Integer;
    My_Array : Integer_Array := (1 => 10, 2 => 20, 3 => 30, 4 => 40, 5 => 50);
    Sum : Integer := 0;
begin
    for Index in My_Array'Range loop
        Sum := Sum + My_Array(Index);
    end loop;
    Put_Line("Sum of array elements: " & Integer'Image(Sum));
end Sum_Array;

Ejercicio 2: Transposición de una Matriz

Escribe un programa que calcule la transposición de una matriz 3x3.

Solución

with Ada.Text_IO; use Ada.Text_IO;

procedure Transpose_Matrix is
    type Row_Type is range 1 .. 3;
    type Column_Type is range 1 .. 3;
    type Matrix is array (Row_Type, Column_Type) of Integer;

    Original_Matrix : Matrix := ((1, 2, 3), (4, 5, 6), (7, 8, 9));
    Transposed_Matrix : Matrix;
begin
    for Row in Row_Type loop
        for Col in Column_Type loop
            Transposed_Matrix(Col, Row) := Original_Matrix(Row, Col);
        end loop;
    end loop;

    for Row in Row_Type loop
        for Col in Column_Type loop
            Put(Integer'Image(Transposed_Matrix(Row, Col)) & " ");
        end loop;
        New_Line;
    end loop;
end Transpose_Matrix;

Conclusión

En esta sección, hemos aprendido sobre los arreglos en Ada, incluyendo su definición, declaración, inicialización, acceso a elementos, iteración y arreglos multidimensionales. Los ejercicios prácticos proporcionados te ayudarán a reforzar estos conceptos. En el próximo tema, exploraremos los registros en Ada, que permiten agrupar diferentes tipos de datos en una sola estructura.

© Copyright 2024. Todos los derechos reservados