BotonMenu
BotonIndice

Visita : http://www.conoce3000.com
Paypal : https://www.paypal.me/conoce3000/1

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL


6. FUNCIONES, PROCEDIMIENTOS Y UNIDADES.
6.4. PARÁMETROS ARREGLOS ABIERTOS. (OPEN ARRAY)
6. FUNCIONES, PROCEDIMIENTOS Y UNIDADES.
6.4. PARÁMETROS ARREGLOS ABIERTOS. (OPEN ARRAY)
6. FUNCIONES, PROCEDIMIENTOS Y UNIDADES.
6.4. PARÁMETROS ARREGLOS ABIERTOS. (OPEN ARRAY)

SIGUIENTE

SIGUIENTE

SIGUIENTE


‒ Parámetros arreglos abiertos. (Open array)

El compilador admite la creación de procedimientos o funciones con parámetros que se conocen como arreglos abiertos (open array), estos parámetros sólo se usan con arreglos de una dimensión. Estos parámetros nos permiten usar distintos arreglos con una cantidad variable de elementos, es decir que se pueden pasar arreglos con diferente cantidad de elementos a un procedimiento o función, su uso es como se muestra a continuación:

Procedure HacerAlgo(Var N:array of integer);

Esto es muy útil, si por ejemplo se desea hacer un procedimiento o función, que permita ordenar dos arreglos con diferente cantidad de elementos. Cuando un arreglo se pasa como un arreglo abierto a un procedimiento o función, este es tratado como un arreglo de 0 hasta n elementos. Por ejemplo: si a un procedimiento o función le pasamos un arreglo de 5 a 8 elementos es tratado como un arreglo desde 0 hasta 3 elementos (tiene 4 elementos). Además se debe usar o hacer uso de la función High, esta función nos permite devolver el índice del último elemento que tendrá el parámetro que se pase al procedimiento o función. A continuación un ejemplo:


Descargar
{$codepage UTF8}

VAR   Lista01:array [1..10 ] of integer = (8,5,4,2,3,10,11,5,8,9);
      Lista02:array [1..5] of integer = (5,8,2,3,1);      
     
PROCEDURE Ordenar(Var lista:array of integer);
 Var i,j:longint;
     aux:integer;
 Begin
   For i:=1 to High(lista) do  //después del primero
    Begin
      aux:=lista[i];
      j:=i-1;
      While ( (j>=0) and (lista[j]>aux) ) do
        //mientras no se termina la lista y la comparación (mayor  que ) del elemento con
        //el anterior sea verdadera
        Begin
          lista[j+1]:= lista[j];
          j := j - 1;
        End;
        lista[j+1]:=aux;
    End;   
 End;    
  
PROCEDURE Mostrar(Var lista:array of integer);
 Var i:integer;
 Begin
  For i:=0 to High(lista) do
   Writeln(lista[i]);
 End;  
       
BEGIN      
  Writeln('Lista01');
  Ordenar(Lista01);
  Mostrar(Lista01);
  Writeln('Lista02');      
  Ordenar(Lista02);
  Mostrar(Lista02);
END.
Código fuente 10 : Parámetros con arreglos abiertos (open array).
Descargar

Debido a que los arreglos abiertos (open array) empiezan en 0, se debe adaptar el algoritmo de ordenación para usar estos índices, es por eso que dentro del procedimiento Ordenar se puede observar que el for empieza en 1, porque el segundo elemento de la lista se encuentra en el índice o posición 1, además dentro del bucle While para verificar que se llego al inicio de la lista la comparación de la variable j se hace con el valor 0, porque el primer elemento de la lista se encuentra en el índice o posición 0.

El compilador permite pasar una parte de un arreglo a una función o procedimiento que use arreglos abiertos. Esto se puede hacer especificando parte del rango del arreglo que se desea usar en el procedimiento o función. Por ejemplo, cuando se declara la siguiente variable:

Var lista : array [1..10] of integer;

y se tiene una función que calcule el promedio de los números de la lista, y queremos obtener el promedio sólo de los primeros 5 números, debemos hacerlo del siguiente modo:

Promedio(lista[1..5]);[B] [P]a continuación el programa completo de ejemplo:

Descargar
{$codepage UTF8}

FUNCTION Promedio(lista:array of integer):single;
 Var 
   i:integer;
   aux:single; 
 Begin
  aux:=0;
  for  i:= 0 to high(lista) do aux:=aux+lista[i];
  Promedio:=aux/(high(lista)+1)
 End;
   
VAR lista:array [1..10] of integer = (10,15,12,14,11,8,1,5,10,20);       

BEGIN      
  Writeln('Promedio de los 5 primeros =',Promedio(lista[1..5]):5:3);
  Writeln('Promedio de los 5 ultimos =',Promedio(lista[6..10]):5:3) 
END.
Código fuente 11: Pasando parte de un arreglo con arreglos abiertos (open array).
Descargar

Cuando una función o procedimiento usa arreglos abiertos, entonces se pueden pasar los elementos de un arreglo sin haberlos creado de manera directa usando sólo corchetes, el parametro de la función o procedimiento no debe usar la palabra reservada var, porque lo que se pasa no es una variable si no los valores de un arreglo que no existe. A continuación el ejemplo:


Descargar
{$codepage UTF8}

FUNCTION Promedio(lista:array of integer):single; //no usar var
 Var 
   i:integer;
   aux:single; 
 Begin
  aux:=0;
  for  i:= 0 to high(lista) do aux:=aux+lista[i];
  Promedio:=aux/(high(lista)+1)
 End;  
       
BEGIN      
  Writeln('Promedio de 5 numeros =',Promedio([1,2,3,4,5]):5:3) 
END.
Código fuente 12: Pasando un arreglo de manera directa con arreglos abiertos.
Descargar




SIGUIENTE
SIGUIENTE
SIGUIENTE



 
‒ Comentarios y sugerencias.

Agradezco de antemano, todo comentario, sugerencia, y donativo (a través de Paypal me), que ayude a mejorar los contenidos educativos de Conoce 3000. Además, cualquier pregunta o duda que tengas lo puedes hacer por este medio. Pero, todo contenido que pueda resultar ofensivo, malicioso, racista, sexista, discriminatorio, obsceno, vulgar será eliminado.


Comments System WIDGET PACK






PORTADA |  INTERESANTE |  APUNTES |  LIBROS |  GALERIA


Creative Commons License


Todos los textos, imágenes y videos de Conoce3000 estan colocados bajo una licencia : Creative Commons Reconocimiento-NoComercial 3.0 Unported License.