Luiz Fernando Posted June 24, 2016 Report Share Posted June 24, 2016 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 Quote Link to comment Share on other sites More sharing options...
fladimir Posted June 24, 2016 Report Share Posted June 24, 2016 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 Quote Link to comment Share on other sites More sharing options...
toya Posted June 24, 2016 Report Share Posted June 24, 2016 CálculoPiramideInversa()...Se localizar um hd do século passado, creio que ainda tenho algo por lá... //------------------------------------------------------------------------------function PiramideInversa()local Result := 0local aBase := {}local aResultado := {}local i := 0local j := 0local nFator := 1aBase := { 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 endifenddo? "aResultado", valtoprg( aResultado )return Result//------------------------------------------------------------------------------function PiramideInversaCalcular( paBase, paResultado, pnFator )local Result := 0local i := 0local j := 0j := 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-- nextelse if pnFator == 1 paResultado := { paBase[2] - paBase[1] } else paResultado := { paBase[2] + paBase[1] } endif endifreturn 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 !!! Quote Link to comment Share on other sites More sharing options...
kapiaba Posted June 24, 2016 Report Share Posted June 24, 2016 Veja se ajuda: http://pai-torneiros.blogspot.com.br/2013/05/piramide-invertida-en-lenguaje-c.html http://pai-torneiros.blogspot.com.br/search/label/Clipper https://joaopaulino.wordpress.com/2008/11/18/programa-que-imprime-uma-piramide-numerica-a-partir-de-um-valor-introduzido-entre-1-e-9/ Quote Link to comment Share on other sites More sharing options...
Euclidao Posted June 24, 2016 Report Share Posted June 24, 2016 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 Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted June 24, 2016 Author Report Share Posted June 24, 2016 Colegas queria agradecer a ajuda de todos, vou analisar as rotinas acima, retorno passando a formula final. Obrigado Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted June 24, 2016 Author Report Share Posted June 24, 2016 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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.