148 lines
3.2 KiB
Plaintext
148 lines
3.2 KiB
Plaintext
'PROGRAM : BIG MULTIPLICATION VER #1
|
|
'LRCVS 01.01.2010
|
|
'THIS PROGRAM SIMPLY MAKES A MULTIPLICATION
|
|
'WITH ALL THE PARTIAL PRODUCTS.
|
|
'............................................................
|
|
|
|
DECLARE SUB A.INICIO (A$, B$)
|
|
DECLARE SUB B.STORE (CAD$, N$)
|
|
DECLARE SUB C.PIZARRA ()
|
|
DECLARE SUB D.ENCABEZADOS (A$, B$)
|
|
DECLARE SUB E.MULTIPLICACION (A$, B$)
|
|
DECLARE SUB G.SUMA ()
|
|
DECLARE FUNCTION F.INVCAD$ (CAD$)
|
|
|
|
RANDOMIZE TIMER
|
|
CALL A.INICIO(A$, B$)
|
|
CALL B.STORE(A$, "A")
|
|
CALL B.STORE(B$, "B")
|
|
CALL C.PIZARRA
|
|
CALL D.ENCABEZADOS(A$, B$)
|
|
CALL E.MULTIPLICACION(A$, B$)
|
|
CALL G.SUMA
|
|
|
|
SUB A.INICIO (A$, B$)
|
|
CLS
|
|
'Note: Number of digits > 1000
|
|
INPUT "NUMBER OF DIGITS "; S
|
|
CLS
|
|
A$ = ""
|
|
B$ = ""
|
|
FOR N = 1 TO S
|
|
A$ = A$ + LTRIM$(STR$(INT(RND * 9)))
|
|
NEXT N
|
|
FOR N = 1 TO S
|
|
B$ = B$ + LTRIM$(STR$(INT(RND * 9)))
|
|
NEXT N
|
|
END SUB
|
|
|
|
SUB B.STORE (CAD$, N$)
|
|
OPEN "O", #1, N$
|
|
FOR M = LEN(CAD$) TO 1 STEP -1
|
|
WRITE #1, MID$(CAD$, M, 1)
|
|
NEXT M
|
|
CLOSE (1)
|
|
END SUB
|
|
|
|
SUB C.PIZARRA
|
|
OPEN "A", #3, "R"
|
|
WRITE #3, ""
|
|
CLOSE (3)
|
|
KILL "R"
|
|
END SUB
|
|
|
|
SUB D.ENCABEZADOS (A$, B$)
|
|
LT = LEN(A$) + LEN(B$) + 1
|
|
L$ = STRING$(LT, " ")
|
|
OPEN "A", #3, "R"
|
|
MID$(L$, LT - LEN(A$) + 1) = A$
|
|
WRITE #3, L$
|
|
CLOSE (3)
|
|
L$ = STRING$(LT, " ")
|
|
OPEN "A", #3, "R"
|
|
MID$(L$, LT - LEN(B$) - 1) = "X " + B$
|
|
WRITE #3, L$
|
|
CLOSE (3)
|
|
END SUB
|
|
|
|
SUB E.MULTIPLICACION (A$, B$)
|
|
LT = LEN(A$) + LEN(B$) + 1
|
|
L$ = STRING$(LT, " ")
|
|
C$ = ""
|
|
D$ = ""
|
|
E$ = ""
|
|
CT1 = 1
|
|
ACUM = 0
|
|
OPEN "I", #2, "B"
|
|
WHILE EOF(2) <> -1
|
|
INPUT #2, B$
|
|
OPEN "I", #1, "A"
|
|
WHILE EOF(1) <> -1
|
|
INPUT #1, A$
|
|
RP = (VAL(A$) * VAL(B$)) + ACUM
|
|
C$ = LTRIM$(STR$(RP))
|
|
IF EOF(1) <> -1 THEN D$ = D$ + RIGHT$(C$, 1)
|
|
IF EOF(1) = -1 THEN D$ = D$ + F.INVCAD$(C$)
|
|
E$ = LEFT$(C$, LEN(C$) - 1)
|
|
ACUM = VAL(E$)
|
|
WEND
|
|
CLOSE (1)
|
|
MID$(L$, LT - CT1 - LEN(D$) + 2) = F.INVCAD$(D$)
|
|
OPEN "A", #3, "R"
|
|
WRITE #3, L$
|
|
CLOSE (3)
|
|
L$ = STRING$(LT, " ")
|
|
ACUM = 0
|
|
C$ = ""
|
|
D$ = ""
|
|
E$ = ""
|
|
CT1 = CT1 + 1
|
|
WEND
|
|
CLOSE (2)
|
|
END SUB
|
|
|
|
FUNCTION F.INVCAD$ (CAD$)
|
|
LCAD = LEN(CAD$)
|
|
CADTEM$ = ""
|
|
FOR CAD = LCAD TO 1 STEP -1
|
|
CADTEM$ = CADTEM$ + MID$(CAD$, CAD, 1)
|
|
NEXT CAD
|
|
F.INVCAD$ = CADTEM$
|
|
END FUNCTION
|
|
|
|
SUB G.SUMA
|
|
CF = 0
|
|
OPEN "I", #3, "R"
|
|
WHILE EOF(3) <> -1
|
|
INPUT #3, R$
|
|
CF = CF + 1
|
|
AN = LEN(R$)
|
|
WEND
|
|
CF = CF - 2
|
|
CLOSE (3)
|
|
W$ = ""
|
|
ST = 0
|
|
ACUS = 0
|
|
FOR P = 1 TO AN
|
|
K = 0
|
|
OPEN "I", #3, "R"
|
|
WHILE EOF(3) <> -1
|
|
INPUT #3, R$
|
|
K = K + 1
|
|
IF K > 2 THEN ST = ST + VAL(MID$(R$, AN - P + 1, 1))
|
|
IF K > 2 THEN M$ = LTRIM$(STR$(ST + ACUS))
|
|
WEND
|
|
'COLOR 10: LOCATE CF + 3, AN - P + 1: PRINT RIGHT$(M$, 1); : COLOR 7
|
|
W$ = W$ + RIGHT$(M$, 1)
|
|
ACUS = VAL(LEFT$(M$, LEN(M$) - 1))
|
|
CLOSE (3)
|
|
ST = 0
|
|
NEXT P
|
|
|
|
OPEN "A", #3, "R"
|
|
WRITE #3, " " + RIGHT$(F.INVCAD(W$), AN - 1)
|
|
CLOSE (3)
|
|
CLS
|
|
PRINT "THE SOLUTION IN THE FILE: R"
|
|
END SUB
|