ADA - Array_Index (Duda)

 
Vista:

Array_Index (Duda)

Publicado por Estudiante (2 intervenciones) el 28/11/2007 19:34:42
Hola, necesito ayuda sobre un código ya que me han pasado como ejercicio de practicas el siguiente enunciado:
Implemente una función de tipo Integer, llamada Array_Index, con dos parámetros de tipo Vector_2 (Fuente, Patron). Se debe buscar si el Patrón (el vector completo) está contenido en la Fuente. La función devolverá el índice de la primera aparición del Patrón en la Fuente. Si el Patrón no está contenido en la Fuente la función devolverá un cero.

Ejemplo con vectores de tipo entero:

Fuente: (10..15) ==> (12, 34, 65, 1234, 4, 8)
Patrón: (5..6) ==> (65, 1234)
Resultado: 12;

El código se escribirá en un fichero llamado array_index.adb

Conocimientos de Ada indispensables para realizar el ejercicio.Estructura de un programa/subprogramas, variables/declaraciones, sentencias y tipos ordinales, tipos estructurados.

Descargas y pruebas.El tipo Vector_2 se halla definido en el fichero arrays.ads. Debe descargar este fichero e incorporarlo al proyecto junto con array_index.adb y el procedimiento principal.

Puede usar el siguiente código como punto de partida para desarrollar un procedimiento principal de prueba:

with Arrays, Array_Index;
use Arrays;

procedure Probar is
V1 : Vector_2(1 .. 5); -- Cambie el rango si lo desea
V2 : Vector_2(1 .. 4); -- Cambie el rango si lo desea
R : Integer; -- Resultado que debe dar la búsqueda
begin
-- Escriba el código necesario aquí para dar valores
-- adecuados a V1, V2 y R, de tal manera que R sea el valor
-- que debe devolver la función al buscar B en V1
if R /= Array_Index(V1, V2); then
-- Escriba el código que estime oportuno
-- para señalar el error de la búsqueda
end if;
end Probar;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Implementación de la función Array_Index para buscar un patrón en un vector

Publicado por Alejandro (155 intervenciones) el 30/06/2023 20:05:37
El enunciado plantea la implementación de una función llamada Array_Index que busca un patrón en un vector y devuelve el índice de la primera aparición del patrón en el vector. En caso de que el patrón no esté contenido en el vector, la función devuelve cero.

A continuación, se proporciona una posible implementación de la función Array_Index en el archivo array_index.adb:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
with Ada.Text_IO; use Ada.Text_IO;
 
procedure Array_Index is
   type Vector_2 is array(Integer range <>) of Integer;
 
   function Array_Index(Fuente, Patron : Vector_2) return Integer is
   begin
      if Patron'Length > Fuente'Length then
         return 0; -- Patrón más largo que la fuente, no se encuentra
      else
         for I in Fuente'Range' loop
            if Fuente(I) = Patron(1) then
               -- Comprobar si el patrón coincide a partir de esta posición
               Match : Boolean := True;
               for J in Patron'Range' loop
                  exit when not Match;
                  if Fuente(I + J) /= Patron(J) then
                     Match := False;
                  end if;
               end loop;
               if Match then
                  return I; -- Índice de la primera aparición del patrón
               end if;
            end if;
         end loop;
         return 0; -- Patrón no encontrado
      end if;
   end Array_Index;
 
   -- Código de prueba
   V1 : Vector_2(1 .. 5) := (12, 34, 65, 1234, 4);
   V2 : Vector_2(1 .. 2) := (65, 1234);
   R : Integer;
 
begin
   R := Array_Index(V1, V2);
   Put_Line("Resultado: " & Integer'Image'(R));
end Array_Index;

En el código proporcionado, se define el tipo Vector_2 como un arreglo de enteros. La función Array_Index recibe dos parámetros de tipo Vector_2 (Fuente y Patron) y devuelve un valor entero.

La función realiza una búsqueda secuencial en la Fuente para encontrar el Patrón. Si el Patrón es más largo que la Fuente, la función devuelve cero. Si se encuentra el Patrón, se devuelve el índice de la primera aparición. Si no se encuentra el Patrón, también se devuelve cero.

En el procedimiento principal, se realizan pruebas con valores de ejemplo en los vectores V1 y V2. El resultado de la función Array_Index se muestra por pantalla.

Recuerda descargar el archivo arrays.ads y agregarlo al proyecto junto con array_index.adb y el procedimiento principal para realizar las pruebas.

Puedes modificar los vectores V1 y V2 en el procedimiento principal para realizar pruebas adicionales con diferentes valores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar