sambomb Posted August 25, 2011 Report Share Posted August 25, 2011 Crie uma função que some duas strings como se fossem números. Exemplo: cNum1 := "6586242500000000000000000000" //-- Peso da terra em gramas cNum2 := "1234567890123456789012345678" //-- Número qualquer Result = "7820810390123456789012345678" id=code>id=code>Para a entrada dos dados: nDigitos := nRandom(499)+1 cNum1 := "" For i := 1 to nDigitos cNum1 += AllTrim(Str(nRandom(9)) end SysRefresh() nDigitos := nRandom(499)+1 cNum2 := "" For i := 1 to nDigitos cNum2 += AllTrim(Str(nRandom(9)) end id=code>id=code>Após fazer a de soma faça a de multiplicação e subtração. Tendo conseguido e caso queira testar seus conhecimentos em POGramação e matemática tente implentar exponenciação, divisão e o uso de sentenças ex.: Calcula("123456+654321")//"777777". Obs.: Em compiladores 16 bits existe uma limitação para variaveis numéricas, portanto val(cNum1) + val(cNum2) e similares estão descartados. Obs2.: Em 32 bits com xHarbour o limite para número é 308 digitos(não testei com decimais) Para Testar basta usar nNum := Val(Replicate("9",309)) ; nNum += 1 RCA Sistemas - Itaocara - RJ Editado por - sambomb on 25/08/2011 15:04:48 Editado por - sambomb on 25/08/2011 15:31:05 Quote Link to comment Share on other sites More sharing options...
sambomb Posted August 25, 2011 Author Report Share Posted August 25, 2011 Crie uma função que some duas strings como se fossem números. Exemplo: cNum1 := "6586242500000000000000000000" //-- Peso da terra em gramas cNum2 := "1234567890123456789012345678" //-- Número qualquer Result = "7820810390123456789012345678" id=code>id=code>Para a entrada dos dados: nDigitos := nRandom(499)+1 cNum1 := "" For i := 1 to nDigitos cNum1 += AllTrim(Str(nRandom(9)) end SysRefresh() nDigitos := nRandom(499)+1 cNum2 := "" For i := 1 to nDigitos cNum2 += AllTrim(Str(nRandom(9)) end id=code>id=code>Após fazer a de soma faça a de multiplicação e subtração. Tendo conseguido e caso queira testar seus conhecimentos em POGramação e matemática tente implentar exponenciação, divisão e o uso de sentenças ex.: Calcula("123456+654321")//"777777". Obs.: Em compiladores 16 bits existe uma limitação para variaveis numéricas, portanto val(cNum1) + val(cNum2) e similares estão descartados. Obs2.: Em 32 bits com xHarbour o limite para número é 308 digitos(não testei com decimais) Para Testar basta usar nNum := Val(Replicate("9",309)) ; nNum += 1 RCA Sistemas - Itaocara - RJ Editado por - sambomb on 25/08/2011 15:04:48 Editado por - sambomb on 25/08/2011 15:31:05 Quote Link to comment Share on other sites More sharing options...
vagner Posted August 25, 2011 Report Share Posted August 25, 2011 Olá, Para soma é simples, contanto que tenham a mesma quantidade de caracteres, se não tiverem teria que acrescentar "0" antes da menor , mas +- isso : cVlr3 := "" nSoma := 0 For nX := Len(cNum1) To 1 step -1 cVlr1 := SubStr(cNum1,nX,1) cVlr2 := SubStr(cNum2,nX,1) nVlr1 := Val(cVlr1)+Val(cVlr2)+nSoma If nVlr1 > 10 nSoma := 10 nVlr1 -= 10 Else nSoma := 0 Endif cVlr3 += Str(nVlr1,1) Next Até aqui inverteu o valor, basta agora arrumar cVlr4 := "" For nX := Len(cVlr3) To 1 Step -1 cVlr4 += SubStr(cVlr3,nX,1) Next id=code>id=code>Creio que seja isso, não testei, montei aqui mesmo Vagner Wirts "Ele não sabendo que era impossÃvel, foi lá e fez" Quote Link to comment Share on other sites More sharing options...
emotta Posted August 25, 2011 Report Share Posted August 25, 2011 Facil: Function Main() cNum1 := "6586242500000000000000000000" //-- Peso da terra em gramas cNum2 := "1234567890123456789012345678" //-- Número qualquer ? "SOMA" cFormula := Calc(cNum1 + "+" + cNum2) ? cFormula ? "DIVISAO" cFormula := Calc(cNum1 + "/" + cNum2) ? cFormula ? "MULTIPLICACAO" cFormula := Calc(cNum1 + "*" + cNum2) ? cFormula ? "EXPONENCIACAO" cFormula := Calc(cNum1 + "^" + cNum2) ? cFormula Return Static Function Calc(cForm) cFormula := &cForm cFormula := LTrim(Str(cFormula,Len(cForm))) Return cFormula citação:Crie uma função que some duas strings como se fossem números. Exemplo: cNum1 := "6586242500000000000000000000" //-- Peso da terra em gramas cNum2 := "1234567890123456789012345678" //-- Número qualquer Result = "7820810390123456789012345678" id=code>id=code>Para a entrada dos dados: nDigitos := nRandom(499)+1 cNum1 := "" For i := 1 to nDigitos cNum1 += AllTrim(Str(nRandom(9)) end SysRefresh() nDigitos := nRandom(499)+1 cNum2 := "" For i := 1 to nDigitos cNum2 += AllTrim(Str(nRandom(9)) end id=code>id=code>Após fazer a de soma faça a de multiplicação e subtração. Tendo conseguido e caso queira testar seus conhecimentos em POGramação e matemática tente implentar exponenciação, divisão e o uso de sentenças ex.: Calcula("123456+654321")//"777777". Obs.: Em compiladores 16 bits existe uma limitação para variaveis numéricas, portanto val(cNum1) + val(cNum2) e similares estão descartados. Obs2.: Em 32 bits com xHarbour o limite para número é 308 digitos(não testei com decimais) Para Testar basta usar nNum := Val(Replicate("9",309)) ; nNum += 1 RCA Sistemas - Itaocara - RJ Editado por - sambomb on 25/08/2011 15:04:48 Editado por - sambomb on 25/08/2011 15:31:05 id=quote>id=quote>Eduardo Motta emotta@gmail.com.br FWH 9.09 - xHARBOUR 1.2.1 Editado por - emotta on 25/08/2011 17:23:27 Editado por - emotta on 25/08/2011 17:32:19 Quote Link to comment Share on other sites More sharing options...
sambomb Posted August 26, 2011 Author Report Share Posted August 26, 2011 citação:Obs.: Em compiladores 16 bits existe uma limitação para variaveis numéricas, portanto val(cNum1) + val(cNum2) e similares estão descartados. Obs2.: Em 32 bits com xHarbour o limite para número é 308 digitos(não testei com decimais) Para Testar basta usar nNum := Val(Replicate("9",309)) ; nNum += 1 id=quote>id=quote> RCA Sistemas - Itaocara - RJ Quote Link to comment Share on other sites More sharing options...
emotta Posted August 26, 2011 Report Share Posted August 26, 2011 Bom, nas "regras" nao tinha impedimento quanto a MACROS.... rs... Mas eu fiz mais pra ser "chato" mesmo, eu entendi o que é pra ser feito... Abraço, citação: citação:Obs.: Em compiladores 16 bits existe uma limitação para variaveis numéricas, portanto val(cNum1) + val(cNum2) e similares estão descartados. Obs2.: Em 32 bits com xHarbour o limite para número é 308 digitos(não testei com decimais) Para Testar basta usar nNum := Val(Replicate("9",309)) ; nNum += 1 id=quote>id=quote> RCA Sistemas - Itaocara - RJ id=quote>id=quote>Eduardo Motta emotta@gmail.com.br FWH 9.09 - xHARBOUR 1.2.1 Quote Link to comment Share on other sites More sharing options...
sambomb Posted August 26, 2011 Author Report Share Posted August 26, 2011 Mesmo com macro acredito que iria estourar o limite com 309 digitos RCA Sistemas - Itaocara - RJ 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.