Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: N1elsRoy en 04 de Mayo 2021, 16:13
-
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
-
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.
-
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:
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:
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:
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));
}
}