Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Mathematics knundrum
Message
De
02/06/2003 05:56:21
Walter Meester
HoogkarspelPays-Bas
 
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Divers
Thread ID:
00780672
Message ID:
00795109
Vues:
32
Hi Marvin,
PARAMETERS nResultNumber, nMaxNumberToFind 
** nResultNumber: The number to search
** nMaxNumberToFind: Define the maximum number of Addup expressions you  want. -1 = all

PRIVATE nMaxNumberToFind, nFound, nNumber 
LOCAL nT, nSec, nAddpos, nAddNeg

CREATE CURSOR Result (Result C(240))
CREATE CURSOR Numbers (Number B(2))

FOR nT = 1 TO 20
	INSERT INTO Numbers VALUES(nT)
ENDFOR

nFound           = 0					
nNumbers         = RECCOUNT()
nMaxNumberToFind = IIF(EMPTY(nMaxNumberToFind),-1,nMaxNumberToFind)
nSec=SECONDS()

** Just sort all numbers is decending order and calculated the cumulative summaries for both ;
** positives and negatives

SELECT *, 1*Number as Addpos, 1*Number Addneg;
	 FROM Numbers ;
	 ORDER BY 1 DESCENDING ;
	 INTO CURSOR Num2 READWRITE
	 
INDEX ON Number TAG Num

STORE 0 TO nAddPos, nAddneg
SCAN
	nAddPos = nAddPos + IIF(Number > 0, Number,0)
	nAddNeg = nAddNeg + IIF(Number < 0, Number,0)
	REPLACE Addpos WITH nAddPos,;
			Addneg WITH nAddNeg
ENDSCAN

DO CheckForSumIsResult WITH 0, 0, "",1
? "Time: "+STR(SECONDS()-nSec,6,3)

SELECT Result
BROWSE NORMAL
RETURN

*-

FUNCTION CheckForSumIsResult(nTotal, nRec, cCalc, nLevel)

IF SEEK(nResultNumber - nTotal) AND RECNO()> nRec
	INSERT INTO Result VALUES(cCalc+"+"+ALLTRIM(STR(Num2.Number,10,2)))
	nFound = nFound + 1
ENDIF

IF nRec = nNumbers OR nLevel > 127
	RETURN .F.
ENDIF

GO nRec+1
DO WHILE BETWEEN(nResultNumber,nTotal+Addneg, nTotal+Addpos) AND CheckForSumIsResult(nTotal+Number, RECNO(), cCalc+"+"+ALLTRIM(STR(Number,10,2)), nLevel+1) AND nFound # nMaxNumberToFind 
ENDDO
GO nRec+1
RETURN
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform