Dividir Un Array "SOLUCIONADO"

Dividir Un Array "SOLUCIONADO"

Postby remtec » Thu May 20, 2021 5:38 pm

Amigos muy buen dia.

Tengo un Array que sellena con una cantidad variable de registros.

Ejemplo: Arreglo A = Contiene 90 Registro.

Necesito Dividir Arreglo A, en 3 partes, por lo que:
Arreglo B, C y D, deben contener 30 registros cada uno

Muchos Saludos.

Antonio.
Last edited by remtec on Sat May 22, 2021 5:13 pm, edited 1 time in total.
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: Dividir Un Array

Postby JESUS MARIN » Fri May 21, 2021 6:46 am

2 preguntas

Y si el numero total de elementos del array A, no es divisible entre 3 ?

Necesitas los 30 primeros en el array B, los 30 intermedios en el array C, y los 30 ultimos en el array D ?
Jesús Marín
JESUS MARIN
 
Posts: 176
Joined: Wed Jan 02, 2019 8:36 am

Re: Dividir Un Array

Postby hmpaquito » Fri May 21, 2021 11:01 am

aCopy es la manera más rápida de hacer eso:

ACopy()
Copy elements from one array to another

Syntax
ACopy( <aSource>, <aTarget>, [<nStart>], [<nCount>], [<nTargetPos>] ) → aTarget

Arguments
aSource is the array to copy elements from.
aTarget is the array to copy elements to.
nStart is the beginning subscript position to copy from aSource
nCount the number of subscript elements to copy from aSource.
nTargetPos the starting subscript position in aTarget to copy elements to.

Returns
aTarget an array pointer reference
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Dividir Un Array

Postby cnavarro » Fri May 21, 2021 11:39 am

Otra posibilidad
Code: Select all  Expand view


   local aA     := { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
   local nDiv   := 3
   local aB     := {}, aC     := {}, aD     := {}

   AEVal( aA, { | e, n | if( n <= nDiv, AAdd( aB, e ), if( n <= nDiv * 2, AAdd( aC, e ), AAdd( aD, e ) ) ) } )

   XBrowse( aB )
   XBrowse( aC )
   XBrowse( aD )

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Dividir Un Array

Postby xmanuel » Fri May 21, 2021 2:25 pm

Corroboro la idea de Paquito...
Este ejemplo crea elementos al azar:

Code: Select all  Expand view

procedure main

    local A := Array( Int( hb_Random( 1, 300 ) ) )
    local B, C, D  // Arrays adicionales
    local nLen := Len( A )  // Elementos del array principal
    local nPar := Round( nLen / 3, 2 ) // Calculo de elementos para los 3 arrays adicionales
    local i // Contador

    ? "Array creado al azar tiene " + HB_NToS( nLen ) + " elementos..."
    ? "Ahora lo vamos a rellenar... Presiona ENTER para empezar"
    Inkey( 100 )

    for i := 1 to nLen
        A[ i ] := HB_NToS( hb_Random( 1, 1000 ) )    // Relleno del array principal
    next

    // Ver el array principal
    cls
    ? "Ver array general -> A:"
    AChoice( 02, 02, 22, 12, A )

    // Troceo del array principal en los tres, el ultimo se saca por diferencia:
    // total elemento del array principal meno la suma del LEN de los 2 primeros
    B := Array( nPar )
    ACopy( A, B, 1, nPar )
    C := Array( nPar )
    ACopy( A, C, nPar + 1, nPar )
    D := Array( nLen - ( 2 * nPar ) )
    ACopy( A, D, ( nPar * 2 ) + 1, nLen - ( 2 * nPar ) )

    // Ver los array partidos
    cls
    ? "Array B "
    Achoice( 02, 02, 22, 12, B )
    cls
    ? "Array C "
    Achoice( 02, 02, 22, 12, C )
    cls
    ? "Array D "
    Achoice( 02, 02, 22, 12, D )

return
 
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 760
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Dividir Un Array

Postby remtec » Sat May 22, 2021 5:12 pm

Amigos.

Mil gracias a todos por su tremenda ayuda.

Aplique la sugerencia del Maestro Navarro.

a la pregunta de Jesús.
Efectivamente puede suceder que no sea divisible por 3, si menor a 3, asignare 1 array1 y 1 array2 y así sucesivamente, la idea seria dividirlos en partes iguales, si no se puede, se irán llenando como como preguntas, de array1, array2 y array3 el saldo.

Hasta aquí funciona muy bien, pero hare muchas pruebas para llevarlo a todas las posibles situaciones.

Reitero las muchas gracias a todos.

Saludos
Antonio
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 29 guests