Pascal/Turbo Pascal - Pasar arrays a un procedimiento o función

   
Vista:

Pasar arrays a un procedimiento o función

Publicado por Marcelo mlferra35@hotmail.com (7 intervenciones) el 26/02/2017 12:34:24
Hola , tengo que sumar dos array en un procedimiento o en una función. Yo hice esto y no sale.


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
Program p0015ja; // Funcion que suma dos arrays
uses crt;
 
type  vector= array[1..30] of integer;
 var
    a,b: vector;
    i,j,p: integer;
 
 Function suma(n1,n2: vector): vector;
  begin
   For i:= 1 to 30 do
   begin
    suma[p]:= n1[i] + n2[j];
    Write(' ', suma[p]);
   end;
  end;
 
 Begin
 clrscr;
 Randomize;
           Writeln ('Ingreso de datos');
           Writeln;
            For i:= 1 to 30 do
             begin
              a[i]:= random(10);
              write(' ',a[i]);
             end;
           Writeln;
           Writeln;
            For j:= 1 to 30 do
             begin
              b[j]:= random(10);
              write(' ',b[j]);
             end;
           Writeln (' La suma de los arrays: ',suma(a,b));   //Acá me marca error ¡¡¡¡¡¡
             Readkey;
 End.


Gracias ¡¡¡
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

Pasar arrays a un procedimiento o función

Publicado por David (14 intervenciones) el 26/02/2017 13:16:06
En primer lugar decirte que tienes varios errores de concepto:

1. Una función no puede devolver nunca un tipo de dato definido por el usuario, salvo que lo saques como parámetro, y para eso serái mejor usar un procedimiento:

Por ejemplo:

procedure suma(var v1: vector; var v2: vector; var vsuma: vector)

donde vsuma contienen los valores de sumar v1 y v2.

2. Para mostrar un vector no puedes hacer directamete Write(v1), por ejemplo. Tendrías que recorrer el vector e ir mostrando los valores uno a uno. Ejemplo
1
2
For i :=1 to 30 do
Write(vsuma[i],' ');



3. Los arrays hay que pasarlos por referencia y no por valor. O sea, como puse antes: procedure suma(var 1: vector...) etc.

Dicho esto, te dejo aquí como haría yo el procedimiento correspondiente:

1
2
3
4
5
6
7
8
Procedure suma(var n1:vector; var n2: vector; Vsuma:vector);
begin
For i:= 1 to 30 do
begin
Vsuma[i]:=n1{i}+n2[i];
Write(' ', Vsuma[i]);
end;
end;

En realidad, tampoco es del todo cierto que yo lo hiciera así, ya que yo no mostraría la suma dentro del mismo procedimiento suma, sino que haría otro aparte, pero eso, si quieres ya lo dejo para ti.

Espero que te haya quedado claro. Si no es así, vuelve a escribir. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Pasar arrays a un procedimiento o función

Publicado por Marcelo (7 intervenciones) el 26/02/2017 14:10:47
Muchísimas gracias ¡¡¡
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