Autor Tema: Arrays como parámetros en Pascal para procedure o function arreglos abiertos din  (Leído 375 veces)

N1elsRoy

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Hola, tengo dudas sobre el lenguaje Pascal, recién estoy iniciando en la programación, He estado revisando otros foros para resolver mi duda, y quisiera saber si para pasar un array a un método, tiene que ser si o si mediante un nuevo tipo de dato? así:
  Type
    Tmatriz = array [1..2,1..2] of integer;

Y luego llamar algun metodo así
Function Suma_de_elementos(Vec: Tmatriz):Integer;

Y en el programa principal:
var
  M : Tmatriz;

 llamar al metodo asi:
  suma := Suma_de_elementos(M);

O existe alguna otra manera?, parecida a la de JAVA, que es mas directa en la que le puedo pasar directamente un array cargado, y este método lo recibe como un array, asi como si  estuviera pasando un integer, No se si me estoy dejando a entender? Espero que así sea, como ya dije soy un principiante y carezco de conocimiento

« Última modificación: 08 de Mayo 2021, 21:10 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 702
    • Ver Perfil
Re: Arrays como parametros en Pascal
« Respuesta #1 en: 04 de Mayo 2021, 23:44 »
No soy experto en Pascal. Algo estudié hace décadas, pero desde entonces prácticamente no he vuelto a tocarlo.

Pero hasta donde yo se, creo que no hay otra forma más que la has explicado:
Crear tipo de dato, e indicar ese tipo para pasarlo a la función.

No puedes decirle: "te paso un array genérico"
Tienes que decirle: "te paso un array de este tipo concreto que he definido previamente"

Pero como he dicho, estoy totalmente desconectado de Pascal, así que no soy el más indicado para afirmar nada.
A ver si se pasa alguien con mejor información.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2052
    • Ver Perfil
Hola N1elsRoy, sin ser experto creo que con Pascal habría muchas formas de trabajar esto, incluso dependiendo de la versión de Pascal que se utilice puede haber variantes.

La forma más básica sería con un array estático:

Código: [Seleccionar]
program arrayToFunction;
const
   size =6;
type
   a = array [1..size] of integer;
var
   balance:  a =(300,7,2,94,31,49);
   media: real; 
function avg(var arr: a): real;
var
   i :1..size;
   sum: integer;
begin
   sum :=0;
   for i :=1 to size do
      sum := sum + arr[i];
   avg := sum / size;
end;
begin 
   (*  Pasamos el array a la función *)
   media := avg( balance );
   (* Mostramos el resultado obtenido *)
   writeln('La media que se obtiene de los valores del array es: ', media:7:2);
end.

Pero habría otras basadas en punteros, arrays abiertos, etc. de modo que el tamaño y contenido del array puede ser establecido en tiempo de ejecución del programa. Por ejemplo:

Código: [Seleccionar]
program arrayToFunction;
var
   miArray: Array of Integer;

Function Average (Row : Array of integer) : Real; 
Var I : longint; 
    Temp : Real; 
begin 
  Temp := Row[0]; 
  For I := 1 to High(Row) do 
    Temp := Temp + Row[i]; 
  Average := Temp / (High(Row)+1); 
end;

begin 
   (*  Pasamos el array a la función *)
   (* Mostramos el resultado obtenido *)
   setlength(miArray,3); 
   miArray[0] := 1; miArray[1] := 8; miArray[2] := 9;
   writeln('La media que se obtiene de los valores del array es: ', Average(miArray):7:3);
end.

Que es más al estilo Java como en este código:

Código: [Seleccionar]
import java.util.Scanner;

public class ArraysToMethod {
   public int max(int [] array) {
      int max = 0;

      for(int i=0; i<array.length; i++ ) {
         if(array[i]>max) {
            max = array[i];
         }
      }
      return max;
   }

   public int min(int [] array) {
      int min = array[0];
   
      for(int i = 0; i<array.length; i++ ) {
         if(array[i]<min) {
            min = array[i];
         }
      }
      return min;
   }

   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Introduzca el tamaño del array a ser creado:");
      int size = sc.nextInt();
      int[] myArray = new int[size];
      System.out.println("Introduzca el número de elementos del array:");

      for(int i=0; i<size; i++) {
         myArray[i] = sc.nextInt();
      }
      ArraysToMethod m = new ArraysToMethod();
      System.out.println("El elemento más grande del array es:"+m.max(myArray));
      System.out.println("El elemento más pequeño del array es:"+m.min(myArray));
   }
}
« Última modificación: 08 de Mayo 2021, 21:11 por Alex Rodríguez »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".