Página 1 de 1

Multiplicar o valor de duas arrays

Enviado: 18 Set 2005 01:15
por mp4dj
Boa noite..

Queria tirar uma dúvida mas não sei bem como explicar


Tipo, eu queria somar os valores de todos os ítens de duas arrays e jogar esse valor para uma terceira

Ex. meu prog esta mais ou menos assim

func blabla()

local local1:= array(3), local2:= array(3), local3:=(3)

//abro dois bancos e jogo os valores dos campos para as arrays 1 e 2

select banco1

local1[1]:=valor1
local1[2]:=valor2
local1[3]:=valor3

select banco2

local2[1]:=quant1
local2[2]:=quant2
local2[3]:=quant3


// então eu quero multiplicar o local1 pelo local2, se eu fizer assim:

local3[1]:= local1[1] * local2[1]

// da certo, mas são muitos itens para multiplicar, ai eu queria multiplicar tudo automatico tipo

local i

for i:= 1 to 20

local3:= local1 * local2

next

// mas da argument error *


Agradeço quem puder ajudar


PS: não riam do raciocinio ai pois eu aprendi o pouco que sei sozinho :))

Multiplicar o valor de duas arrays

Enviado: 18 Set 2005 10:49
por Dorival
select banco1

Porque você não faz pelo modo mais simples e praticamente sem perda de tempo.
No momento em que estiver carregando os arrays 1 e 2, gere o 3.

select banco1
local1[1]:=valor

select banco2
local2[1]:=quant1

local3[1]:=local1[1]*local2[1]

e assim por diante, quando terminar de ler os bancos de dados, você já terá o array local3 carregado com os totais.

Espero ter ajudado.
Dorival

Enviado: 18 Set 2005 12:08
por Visitante
O problema está nos índices dos arrays...

Você cria um array com três posições, e quando você faz:

local i
for i:= 1 to 20
local3:= local1 * local2
next

ele roda o laço for next até o valor 3 quando i = 4 dá argument error, pois não existe posição 4 neste array!

Apenas não entendi o caso do 20, pois se você armazena em cada posição das 3 o valor de um campo diferente.

A não ser que o que você queira seja trabalhar com matriz multidimensional, tipo:

func blabla()

local local1:= {}, local2:= {}, local3:={}
//você define os arrays vazios, pois você não sabe, a princípio quantos registros tem o BD

//abro dois bancos e jogo os valores dos campos para as arrays 1 e 2

select banco1
Do while !eof()
AADD(local1,{valor1, valor2, valor3 })
//aqui você criou uma matriz multidimensional
enddo

select banco2
Do while !eof()
AADD(local2,{quant1, quant2, quant3 })
//aqui você criou outra matriz multidimensional
Enddo

//aqui existe um enorme problema: para que dê certo o que você quer (se é que estou entendendo o que você quer) banco1 tem que ter a mesma quantidade de registros de banco2.



// então eu quero multiplicar o local1 pelo local2, se eu fizer assim:

//local3[1]:= local1[1] * local2[1] esquece isso

// da certo, mas são muitos itens para multiplicar, ai eu queria multiplicar tudo automatico tipo

local i

for i:= 1 to Len(Local1)
aadd(local3, {local1[i,1] * local2[i,1], local1[i,2] * local2[i,2], local1[i,3] * local2[i,3]})
//aqui você preencheu local3 com uma outra matriz multidimensional.
next

caso o número de registros de Banco1 seja diferente de banco2, em algum momento você vai ter argument error, pois o índice irá falhar em relação a local1 ou a local2.


Espero ter te dado uma luz!


Um Clip Abraço


Liz@nder

Enviado: 18 Set 2005 19:34
por mp4dj
Mlizander escreveu:caso o número de registros de Banco1 seja diferente de banco2, em algum momento você vai ter argument error, pois o índice irá falhar em relação a local1 ou a local2.
Obrigado rapazes, o problema era isso ai, tem tanta coisa pra somar que eu esqueci de adicionar um item na array então local1 tinha 20 e local2 tinha 19, por isso tava dando erro.


Agora como faço para somar todos os itens da mesma array sem ter que fazer assim:

soma1:= local1[1] + local1[2] + local1[3]... etc


Obrigado

Enviado: 18 Set 2005 19:41
por Poka
. Também ja encontrei esse tipo de problema, tente fazer o seguinte para igualar as matrizes e não dar esse erro.

vmaximo:=len(matriz1)
if len(matriz2)>vmaximo
vmaximo:=len(matriz2)
endif
if len(matriz3)>vmaximo
vmaximo:=len(matriz3)
endif
for a:= len(matriz1)+1 to vmaximo
aadd(matriz1,{0,0,0})
next
for a:= len(matriz2)+1 to vmaximo
aadd(matriz2,{0,0,0})
next
for a:= len(matriz3)+1 to vmaximo
aadd(matriz3,{0,0,0})
next

. agora as matrizes devem estar iguais

Um abraço

Poka

Enviado: 18 Set 2005 20:56
por Maligno
mp4dj escreveu:Agora como faço para somar todos os itens da mesma array sem ter que fazer assim:

soma1:= local1[1] + local1[2] + local1[3]... etc
Levando-se em conta que local1 é uma matriz unidimensional, experimente:

Código: Selecionar todos

soma1 := 0 // inicializa o totalizador
AEval(local1,{|n|soma1 += n})
[]'s
Maligno
http://www.buzinello.com/prg