Jump to content
Fivewin Brasil

Ajuda com Calculo


Luiz Fernando

Recommended Posts

Colegas veja se alguém sabe de algum formula para ter o resultado abaixo, preciso achar a variação entre alguns valores, nos três exemplos abaixo fiz somente com 3 e 4 valores, mais irei precisa de fazer com 6 e ate 12 valores, já tinha visto esta formula uma vez, mais não consigo achar.

4 6 4

2 -2

0

6 4 8

-2 4

2

4 6 6 8

2 0 2

2 2

0

Link to comment
Share on other sites

Tentei entender mas não consegui chegar... pensei em algo tipo o código abaixo mas na parte dos negativos não dá.


func main
aBase := {4,6,4}
aNova := {}
while len(aBase) > 1
  aNova := array(len(aBase)-1)
for i:=len(aBase) to 2 STEP -1
     nResultado := aBase[i] - aBase[i-1]
     aNova[i-1] := nresultado
  next
  aBase := aNova
end
return

Agora fiquei curioso... alguém conseguiu montar uma formula pra resolver?

[]´s

Link to comment
Share on other sites

CálculoPiramideInversa()...
Se localizar um hd do século passado, creio que ainda tenho algo por lá...

//------------------------------------------------------------------------------

function PiramideInversa()

local Result := 0
local aBase := {}
local aResultado := {}
local i := 0
local j := 0
local nFator := 1

aBase := { 4, 6, 6, 8 }
aResultado := array( len( aBase ) - 1 )
do while len( aResultado ) > 1
PiramideInversaCalcular( @aBase, @aResultado, nFator )
? "aBase:", valtoprg( aBase ), "aResultado", valtoprg( aResultado ), if( nFator == 1, "Somar", "Subtrair" )
if len( aResultado ) > 1
aBase := aclone( aResultado )
aResultado := array( len( aBase ) - 1 )
if nFator == 1
nFator := 0
else
nFator := 1
endif
endif
enddo
? "aResultado", valtoprg( aResultado )

return Result

//------------------------------------------------------------------------------

function PiramideInversaCalcular( paBase, paResultado, pnFator )

local Result := 0
local i := 0
local j := 0

j := len( paResultado )
if j > 2
for i = len( paBase) to 2 step -1
if pnFator == 1
paResultado[j] := paBase - paBase[i - 1]
else
paResultado[j] := paBase + paBase[i - 1]
endif
j--
next
else
if pnFator == 1
paResultado := { paBase[2] - paBase[1] }
else
paResultado := { paBase[2] + paBase[1] }
endif
endif

return Result

//------------------------------------------------------------------------------

Considere-se que na questão, o Fator de cada linha da PiramideInversa deve ser: Somar, Subtrair...
Mais ou menos por aí...
Caso haja erros, desculpem, a memória já anda meia bugada !!!

Link to comment
Share on other sites

Olá pessoal!
Andei mexendo com matrizes e consegui mais ou menos isso:
Consistência de Entrada de dados, direção do cálculo e tratamento de números negativos é por conta do freguês...

Function main()
local aAux, cEnt:=space(30), aMain:={}, nY, nL, nH, nM
   MsgGet(" Variação de Valores", "digite os valores seperedos p/espaço", @cEnt)
   aAux:=HB_ATokens( alltrim(cEnt), " ")
   nL := len(aAux)
   aAdd(aMain,{val(aAux[1])}) 
   for nY = 2 to nL
       aAdd(aMain[1]," ")
       aAdd(aMain[1], val(aAux[nY]))
   next
   nM:= len(aMain[1])
   nL := nM/2+1
   for nH = 2 to nL
       aAdd(aMain, array(nM))
       aFill(aMain[nH], " ")
       for nY=nH-1 to nM
           do case
              case nY+1 > nM
                   exit
              case valtype(aMain[nH-1,nY+1]) = "C"	//  Não faz nada
              otherwise
                   aMain[nH,nY] := aMain[nH-1,nY+1] - aMain[nH-1,nY-1]
           endcase
       next
   next
   xbrowser(aMain)
return nil

T+, Euclides

Link to comment
Share on other sites

as rotinas acima precisava de pequenos ajuste para dar o resultado final que precisava, acabei utilizando a formula abaixo.

exemplo com 3 valores

resultado =(((mix1-mix2)*-1)+((mix2-mix3)*-1))

exemplo com 6 valores

resultado =(((MIX1-MIX2)*-1)+((MIX2-MIX3)*-1)+((MIX3-MIX4)*-1)+((MIX4-MIX5)*-1)+((MIX5-MIX6)*-1))

exemplo com 12 valores

resultado ==(((MIX1-MIX2)*-1)+((MIX2-MIX3)*-1)+((MIX3-MIX4)*-1)+((MIX4-MIX5)*-1)+((MIX5-MIX6)*-1)+((MIX6-MIX7)*-1)+((MIX7-MIX8)*-1)+((MIX8-MIX9)*-1)+((MIX9-MIX10)*-1)+((MIX10-MIX11)*-1)+((MIX11-MIX12)*-1))

Obrigado

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...