Программа "Строковый калькулятор" - QBasic
Формулировка задачи:
решил попробовать написать программу производящую простые вычисления с использованием строк.
пока может только складывать, умножать и возводить в степень.
Листинг программы
- PRINT "slozenie(1)"
- PRINT "umnozenie(2)"
- PRINT "stepen(3)"
- INPUT "vybirite dejstvie"; k
- SELECT CASE k
- CASE IS = 1
- PRINT "a + b"
- INPUT "vvedite a"; s1$
- INPUT "vvedite b"; s2$
- PRINT summa$(s1$, s2$)
- CASE IS = 2
- PRINT "a * b"
- INPUT "vvedite a"; b1$
- INPUT "vvedite b"; f$
- PRINT pro$(b1$, f$)
- CASE IS = 3
- PRINT "a ^ b"
- INPUT "vvedite a"; b1$
- INPUT "vvedite b"; h$
- s1$ = "0": s2$ = "1"
- f$ = b1$
- b1$ = "1"
- DO
- s1$ = summa$(s1$, s2$)
- b1$ = pro$(b1$, f$)
- LOOP UNTIL s1$ = h$
- PRINT b1$
- END SELECT
- FUNCTION summa$ (s1$, s2$)
- s1 = LEN(s1$): s2 = LEN(s2$)
- IF s1 > s2 THEN p = s1 ELSE p = s2
- FOR j = 1 TO p
- w = VAL(MID$(s1$, s1 - j + 1, 1)) + VAL(MID$(s2$, s2 - j + 1, 1)) + r
- IF w >= 10 THEN r = w \ 10: w = w MOD 10 ELSE r = 0
- c$ = LTRIM$(STR$(w)) + c$
- NEXT
- IF r <> 0 THEN c$ = LTRIM$(STR$(r)) + c$
- summa$ = c$
- END FUNCTION
- FUNCTION pro$ (b1$, f$)
- s1$ = "0": s2$ = "1"
- DO
- s1$ = summa$(s1$, s2$)
- b2$ = c$: c$ = "": r = 0
- b1 = LEN(b1$): b2 = LEN(b2$)
- IF b1 > b2 THEN p = b1 ELSE p = b2
- FOR j = 1 TO p
- w = VAL(MID$(b1$, b1 - j + 1, 1)) + VAL(MID$(b2$, b2 - j + 1, 1)) + r
- IF w >= 10 THEN r = w \ 10: w = w MOD 10 ELSE r = 0
- c$ = LTRIM$(STR$(w)) + c$
- NEXT
- IF r <> 0 THEN c$ = LTRIM$(STR$(r)) + c$
- LOOP UNTIL s1$ = f$
- pro$ = c$
- END FUNCTION
Решение задачи: «Программа "Строковый калькулятор"»
textual
Листинг программы
- DECLARE SUB obrabotka (a$, b$, nznak!)
- DECLARE FUNCTION umnozhenie$ (a$, b$)
- DECLARE FUNCTION slozhenie$ (a$, b$)
- DECLARE FUNCTION vychitanie$ (a$, b$)
- DECLARE FUNCTION sravnenie! (a$, b$)
- DECLARE FUNCTION delenie$ (a$, b$, rezhim!)
- DECLARE FUNCTION prog1$ (a$, b$)
- DECLARE FUNCTION prog2$ (a$, b$)
- DECLARE FUNCTION prog3$ (a$, b$)
- DECLARE FUNCTION prog4$ (a$, b$, rezhim!)
- DECLARE FUNCTION prog5$ (a$, b$)
- DECLARE FUNCTION faktorial$ (a$)
- DECLARE FUNCTION perevodss$ (a$, qq$, pp$)
- DECLARE FUNCTION sinx$ (x$, rd!)
- DECLARE FUNCTION cosx$ (x$, rd!)
- PRINT "spisok dostupnyh operacij"
- PRINT " 1.slozhenie"
- PRINT " 2.vychitanie"
- PRINT " 3.umnozhenie"
- PRINT " 4.delenie"
- PRINT " 5.vozvedenie v stepen"
- PRINT " 6.celochislennoe delenie"
- PRINT " 7.ostatok ot delenija"
- PRINT " 8.izvlechenie kornja n stepeni"
- PRINT " 9.celaja chast chisla"
- PRINT " 10.faktorial"
- PRINT " 11.perevod ss q-p"
- PRINT " 12.sin(x)"
- PRINT " 13.cos(x)"
- INPUT "vybirete dejstvie"; k
- CLS
- SELECT CASE k
- CASE IS = 1
- PRINT "a + b"
- INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
- PRINT prog1$(a$, b$)
- CASE IS = 2
- PRINT "a - b"
- INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
- PRINT prog2$(a$, b$)
- CASE IS = 3
- PRINT "a * b"
- INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
- PRINT prog3$(a$, b$)
- CASE IS = 4
- PRINT "a / b"
- INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
- IF b$ = "0" THEN PRINT "osibka" ELSE PRINT prog4$(a$, b$, 0)
- CASE IS = 5
- PRINT "a ^ b"
- INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
- PRINT prog5$(a$, b$)
- CASE IS = 6
- PRINT "a \ b"
- INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
- PRINT prog4$(a$, b$, 1)
- CASE IS = 7
- PRINT "a mod b"
- INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
- IF INSTR(a$, "-") <> 0 THEN a$ = RIGHT$(a$, LEN(a$) - 1): znak$ = CHR$(45)
- IF sravnenie(a$, b$) = 2 THEN
- PRINT znak$ + a$
- ELSE
- PRINT prog4$(a$, b$, 2)
- END IF
- CASE IS = 8
- PRINT "b^sqr(a)"
- INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
- PRINT prog3$(a$, "1/" + b$)
- CASE IS = 9
- PRINT "int(a)"
- INPUT "vvedite a"; a$
- PRINT LEFT$(a$, INSTR(a$, ".") - 1)
- CASE IS = 10
- PRINT "a!"
- INPUT "vvedite"; a$
- PRINT faktorial$(a$)
- CASE IS = 11
- PRINT "q-p"
- INPUT "vvedite chislo"; a$: INPUT "vvedite q"; q$: INPUT "vvedite p"; p$
- PRINT perevodss$(a$, q$, p$)
- CASE IS = 12
- PRINT "sin(x)"
- INPUT "vyberite rad/deg[0/1]"; rd
- INPUT "vvedite x"; x$
- PRINT sinx$(x$, rd)
- CASE IS = 13
- PRINT "cos(x)"
- INPUT "vyberite rad/deg[0/1]"; rd
- INPUT "vvedite x"; x$
- PRINT cosx$(x$, rd)
- END SELECT
- FUNCTION cosx$ (x$, rd)
- IF rd = 1 THEN
- rad$ = prog4$(x$, "180", 0)
- pi$ = "3.14159265"
- x$ = prog3$(rad$, pi$)
- IF x$ = "" THEN x$ = "0"
- END IF
- x0$ = x$
- x$ = "1"
- FOR i = 1 TO 6
- xy$ = LTRIM$(STR$(i * 2))
- x1$ = prog5$(x0$, xy$)
- x2$ = faktorial$(xy$)
- x3$ = prog4$(x1$, x2$, 0)
- IF i MOD 2 <> 0 THEN
- x$ = prog2$(x$, x3$)
- ELSE
- x$ = prog1$(x$, x3$)
- END IF
- NEXT
- IF LEFT$(x$, 1) = "-" THEN sxs = 1
- cosx$ = MID$(x$, 1, 5 + sxs)
- END FUNCTION
- FUNCTION delenie$ (a$, b$, rezhim)
- nachpozic = 1
- ostatok$ = ""
- snos$ = ""
- rezultat4$ = ""
- FOR i = 1 TO LEN(a$)
- dlinasnosa = dlinasnosa + 1
- snos$ = ostatok$ + MID$(a$, nachpozic, dlinasnosa)
- IF snos$ = CHR$(48) THEN
- rezultat4$ = rezultat4$ + CHR$(48)
- snos$ = ""
- nachpozic = nachpozic + 1
- dlinasnosa = 0
- END IF
- IF NOT (sravnenie(snos$, b$) = 2) THEN
- FOR j = 1 TO 9
- jstr$ = LTRIM$(STR$(j))
- podbor$ = umnozhenie$(b$, jstr$)
- IF sravnenie(snos$, podbor$) = 2 THEN
- EXIT FOR
- ELSE
- chislo4$ = jstr$
- podbor0$ = podbor$
- END IF
- NEXT
- rezultat4$ = rezultat4$ + chislo4$
- ostatok$ = vychitanie$(snos$, podbor0$)
- nostat = nachpozic + dlinasnosa - 1
- nachpozic = nachpozic + dlinasnosa
- dlinasnosa = 0
- IF ostatok$ = "0" THEN ostatok$ = ""
- END IF
- NEXT
- IF nostat <> LEN(a$) THEN
- IF snos$ <> "" AND sravnenie(snos$, b$) = 2 THEN
- rezultat4$ = rezultat4$ + CHR$(48)
- ostatok$ = snos$
- snos$ = ""
- END IF
- END IF
- SELECT CASE rezhim
- CASE IS = 1
- IF rezultat4$ = "" THEN
- delenie$ = CHR$(48)
- ELSE
- delenie$ = rezultat4$
- END IF
- EXIT FUNCTION
- CASE IS = 2
- IF ostatok$ = "" THEN
- delenie$ = CHR$(48)
- ELSE
- delenie$ = ostatok$
- END IF
- EXIT FUNCTION
- END SELECT
- IF ostatok$ = "" AND rezultat4$ <> "" THEN
- delenie$ = rezultat4$
- EXIT FUNCTION
- END IF
- IF ostatok$ <> "" THEN
- rezultat4$ = rezultat4$ + CHR$(46)
- snos$ = ostatok$
- i = 0
- DO
- i = i + 1
- snos$ = snos$ + CHR$(48)
- FOR j = 0 TO 9
- jstrd$ = LTRIM$(STR$(j))
- podbord$ = umnozhenie$(b$, jstrd$)
- IF sravnenie(snos$, podbord$) = 2 THEN
- EXIT FOR
- ELSE
- chislo4d$ = jstrd$
- podbor0d$ = podbord$
- END IF
- NEXT
- rezultat4$ = rezultat4$ + chislo4d$
- ostatok$ = vychitanie$(snos$, podbor0d$)
- IF ostatok$ = CHR$(48) THEN
- EXIT DO
- ELSE
- snos$ = ostatok$
- ostatok$ = ""
- END IF
- LOOP UNTIL i = 25
- END IF
- IF rezultat4$ = "" THEN rezultat4$ = CHR$(48)
- delenie$ = rezultat4$
- END FUNCTION
- FUNCTION faktorial$ (a$)
- fkt$ = "1"
- fqs$ = "0"
- DO UNTIL fqs$ = a$
- fqs$ = slozhenie$(fqs$, "1")
- fkt$ = umnozhenie$(fkt$, fqs$)
- LOOP
- faktorial$ = fkt$
- END FUNCTION
- SUB obrabotka (a$, b$, nznak)
- ato4ka = INSTR(a$, ".")
- bto4ka = INSTR(b$, ".")
- IF ato4ka > 0 THEN azn = LEN(a$) - ato4ka
- IF bto4ka > 0 THEN bzn = LEN(b$) - bto4ka
- IF azn > bzn THEN nznak = azn ELSE nznak = bzn
- IF azn > 0 THEN
- a$ = MID$(a$, 1, ato4ka - 1) + MID$(a$, ato4ka + 1, azn)
- END IF
- a$ = a$ + STRING$(nznak - azn, 48)
- IF bzn > 0 THEN
- b$ = MID$(b$, 1, bto4ka - 1) + MID$(b$, bto4ka + 1, bzn)
- END IF
- b$ = b$ + STRING$(nznak - bzn, 48)
- IF LEFT$(a$, 1) = CHR$(48) AND LEN(a$) <> 1 THEN
- FOR i = 1 TO LEN(a$)
- IF MID$(a$, i, 1) = CHR$(48) THEN
- vednola = vednola + 1
- ELSE
- EXIT FOR
- END IF
- NEXT
- a$ = RIGHT$(a$, LEN(a$) - vednola)
- END IF
- IF LEFT$(b$, 1) = CHR$(48) AND LEN(b$) <> 1 THEN
- FOR i = 1 TO LEN(b$)
- IF MID$(b$, i, 1) = CHR$(48) THEN
- vednolb = vednolb + 1
- ELSE
- EXIT FOR
- END IF
- NEXT
- b$ = RIGHT$(b$, LEN(b$) - vednolb)
- END IF
- END SUB
- FUNCTION perevodss$ (a$, qq$, pp$)
- u$ = "0123456789ABCDEF"
- k = INSTR(a$, ".")
- stepen$ = LTRIM$(STR$((LEN(a$) - k) * (k <> 0)))
- a$ = MID$(a$, 1, k - 1) + MID$(a$, k + 1, LEN(a$) - k)
- zx$ = "0"
- FOR i = LEN(a$) TO 1 STEP -1
- j = INSTR(u$, UCASE$(MID$(a$, i, 1))) - 1
- sj$ = LTRIM$(STR$(j))
- stepen0$ = stepen$
- x1$ = prog5$(qq$, stepen$)
- stepen$ = stepen0$
- x2$ = prog3$(sj$, x1$)
- zx$ = prog1$(zx$, x2$)
- stepen$ = prog1$(stepen$, "1")
- NEXT
- dkj = INSTR(zx$, ".")
- IF dkj > 0 THEN
- z$ = LEFT$(zx$, dkj - 1)
- ds$ = RIGHT$(zx$, LEN(zx$) - dkj + 1)
- ELSE
- z$ = zx$
- ds$ = "0"
- END IF
- DO
- IF sravnenie(z$, pp$) = 2 THEN
- ccc = VAL(z$) + 1
- ELSE
- ccc = VAL(prog4$(z$, pp$, 2)) + 1
- END IF
- cc$ = MID$(u$, ccc, 1) + cc$
- z$ = prog4$(z$, pp$, 1)
- LOOP UNTIL z$ = "0"
- lll$ = "0"
- DO
- lll$ = slozhenie$(lll$, "1")
- pt$ = pp$
- ds$ = prog3$(ds$, pp$)
- pp$ = pt$
- yd = VAL(LEFT$(ds$, INSTR(ds$, ".") - 1)) + 1
- ff$ = ff$ + MID$(u$, yd, 1)
- ds$ = RIGHT$(ds$, LEN(ds$) - INSTR(ds$, ".") + 1)
- LOOP UNTIL INSTR(ds$, ".") = 0 OR lll$ = "20"
- perevodss$ = cc$ + "." + ff$
- END FUNCTION
- FUNCTION prog1$ (a$, b$)
- IF a$ = "0" THEN
- prog1$ = b$
- EXIT FUNCTION
- END IF
- IF b$ = "0" THEN
- prog1$ = a$
- EXIT FUNCTION
- END IF
- IF LEFT$(a$, 1) = "-" THEN
- flzna = 1
- a$ = RIGHT$(a$, LEN(a$) - 1)
- END IF
- IF LEFT$(b$, 1) = "-" THEN
- flznb = 1
- b$ = RIGHT$(b$, LEN(b$) - 1)
- END IF
- IF flzna = 1 AND flznb = 1 THEN znakm$ = "-"
- IF flzna = 1 XOR flznb = 1 THEN
- IF a$ = b$ THEN
- prog1$ = "0"
- EXIT FUNCTION
- END IF
- IF sravnenie(a$, b$) = 1 THEN
- IF flzna = 1 THEN
- prog1$ = prog2$(b$, a$)
- ELSE
- prog1$ = prog2$(a$, b$)
- END IF
- EXIT FUNCTION
- END IF
- IF sravnenie(a$, b$) = 2 THEN
- IF flzna = 1 THEN
- prog1$ = prog2$(b$, a$)
- ELSE
- prog1$ = prog2$(a$, b$)
- END IF
- EXIT FUNCTION
- END IF
- END IF
- nznak = 0
- CALL obrabotka(a$, b$, nznak)
- process$ = slozhenie$(a$, b$)
- IF nznak > 0 THEN
- IF LEN(process$) - nznak > 0 THEN
- kcdz = LEN(process$) - nznak
- ELSE
- kcdz = 0
- kvn = ABS(LEN(process$) - nznak)
- END IF
- process$ = MID$(process$, 1, kcdz) + "." + STRING$(kvn, 48) + MID$(process$, kcdz + 1, nznak)
- FOR y = LEN(process$) TO 1 STEP -1
- vrp = ASC(MID$(process$, y, 1))
- IF vrp = 46 OR vrp = 48 THEN
- ky = ky + 1
- ELSE
- EXIT FOR
- END IF
- NEXT
- process$ = MID$(process$, 1, LEN(process$) - ky)
- END IF
- IF LEFT$(process$, 1) = "." THEN process$ = "0" + process$
- prog1$ = znakm$ + process$
- END FUNCTION
- FUNCTION prog2$ (a$, b$)
- IF LEFT$(a$, 1) = "-" THEN
- flzna2 = 1
- a$ = RIGHT$(a$, LEN(a$) - 1)
- END IF
- IF LEFT$(b$, 1) = "-" THEN
- flznb2 = 1
- b$ = RIGHT$(b$, LEN(b$) - 1)
- END IF
- IF flzna2 = 1 OR flznb2 = 1 THEN
- IF flzna2 = 1 AND flznb2 = 1 THEN
- prog2$ = prog1$("-" + a$, "-" + b$)
- EXIT FUNCTION
- END IF
- IF flzna2 = 1 THEN
- prog2$ = prog1$(CHR$(45) + a$, CHR$(45) + b$)
- EXIT FUNCTION
- END IF
- IF flznb2 = 1 THEN
- prog2$ = prog1$(a$, b$)
- EXIT FUNCTION
- END IF
- END IF
- nznak = 0
- CALL obrabotka(a$, b$, nznak)
- process2$ = vychitanie$(a$, b$)
- IF LEFT$(process2$, 1) = "-" THEN
- znakm2$ = "-"
- process2$ = RIGHT$(process2$, LEN(process2$) - 1)
- END IF
- IF nznak > 0 THEN
- IF LEN(process2$) - nznak > 0 THEN
- kcdz2 = LEN(process2$) - nznak
- ELSE
- kcdz2 = 0
- kvn2 = ABS(LEN(process2$) - nznak)
- END IF
- process2$ = MID$(process2$, 1, kcdz2) + "." + STRING$(kvn2, 48) + MID$(process2$, kcdz2 + 1, nznak)
- FOR y = LEN(process2$) TO 1 STEP -1
- vrp2 = ASC(MID$(process2$, y, 1))
- IF vrp2 = 46 OR vrp2 = 48 THEN
- ky2 = ky2 + 1
- ELSE
- EXIT FOR
- END IF
- NEXT
- process2$ = MID$(process2$, 1, LEN(process2$) - ky2)
- END IF
- IF LEFT$(process2$, 1) = "." THEN process2$ = "0" + process2$
- prog2$ = znakm2$ + process2$
- END FUNCTION
- FUNCTION prog3$ (a$, b$)
- IF LEFT$(a$, 1) = "-" THEN
- flzna3 = 1
- a$ = RIGHT$(a$, LEN(a$) - 1)
- END IF
- IF LEFT$(b$, 1) = "-" THEN
- flznb3 = 1
- b$ = RIGHT$(b$, LEN(b$) - 1)
- END IF
- IF flzna3 = 1 XOR flznb3 = 1 THEN znakm3$ = "-"
- CALL obrabotka(a$, b$, nznak)
- process3$ = umnozhenie$(a$, b$)
- IF nznak > 0 THEN
- IF LEN(process3$) - 2 * nznak > 0 THEN
- kcdz3 = LEN(process3$) - 2 * nznak
- ELSE
- kcdz3 = 0
- kvn3 = ABS(LEN(process3$) - 2 * nznak)
- END IF
- process3$ = MID$(process3$, 1, kcdz3) + "." + STRING$(kvn3, 48) + MID$(process3$, kcdz3 + 1, 2 * nznak)
- FOR y = LEN(process3$) TO 1 STEP -1
- vrp3 = ASC(MID$(process3$, y, 1))
- IF vrp3 = 46 OR vrp3 = 48 THEN
- ky3 = ky3 + 1
- ELSE
- EXIT FOR
- END IF
- NEXT
- process3$ = MID$(process3$, 1, LEN(process3$) - ky3)
- END IF
- IF LEFT$(process3$, 1) = "." THEN process3$ = "0" + process3$
- IF process3$ = "" THEN process3$ = "0"
- prog3$ = znakm3$ + process3$
- END FUNCTION
- FUNCTION prog4$ (a$, b$, rezhim)
- IF LEFT$(a$, 1) = "-" THEN
- flzna4 = 1
- a$ = RIGHT$(a$, LEN(a$) - 1)
- END IF
- IF LEFT$(b$, 1) = "-" THEN
- flznb4 = 1
- b$ = RIGHT$(b$, LEN(b$) - 1)
- END IF
- IF flzna4 = 1 XOR flznb4 = 1 THEN znakm4$ = "-"
- ato4ka4 = INSTR(a$, ".")
- bto4ka4 = INSTR(b$, ".")
- IF ato4ka4 > 0 OR bto4ka4 > 0 THEN
- CALL obrabotka(a$, b$, nznak)
- END IF
- dl$ = delenie$(a$, b$, rezhim)
- IF LEFT$(d$, 1) = "." THEN dl$ = "0" + dl$
- IF dl$ = "0" THEN
- prog4$ = "0"
- ELSE
- prog4$ = znakm4$ + dl$
- END IF
- END FUNCTION
- FUNCTION prog5$ (a$, b$)
- IF LEFT$(a$, 1) = "-" THEN flzna5 = 1: a$ = RIGHT$(a$, LEN(a$) - 1)
- IF LEFT$(b$, 1) = "-" THEN nm3 = 1: b$ = RIGHT$(b$, LEN(b$) - 1)
- jh = INSTR(b$, "/")
- IF jh > 0 THEN
- b11$ = MID$(b$, 1, jh - 1)
- b22$ = MID$(b$, jh + 1, LEN(b$) - jh)
- b$ = prog4$(b11$, b22$, 0)
- END IF
- b22$ = RIGHT$(b22$, 1)
- IF (b22$ = "2" OR b22$ = "4" OR b22$ = "6" OR b22$ = "8") AND flzna5 = 1 THEN
- PRINT "oshibka, chetnaja stepen iz otricatelnogo chisla"
- EXIT FUNCTION
- END IF
- fs$ = "0"
- process5$ = "1"
- db = INSTR(b$, ".")
- IF db = 0 THEN
- nx$ = RIGHT$(b$, 1)
- IF nx$ = "1" OR nx$ = "3" OR nx$ = "5" OR nx$ = "7" OR nx$ = "9" THEN
- IF flzna5 = 1 THEN znakm5$ = "-"
- END IF
- END IF
- IF db > 0 THEN
- bd$ = MID$(b$, db, LEN(b$) - bd)
- b$ = MID$(b$, 1, db - 1)
- END IF
- IF b$ = "" THEN b$ = "0"
- DO UNTIL fs$ = b$
- fs$ = slozhenie$(fs$, "1")
- aa$ = a$
- process5$ = prog3$(process5$, aa$)
- LOOP
- IF db > 0 THEN
- hq$ = LTRIM$(STR$(EXP(VAL(bd$) * LOG(VAL(a$)))))
- ELSE
- hq$ = "1"
- END IF
- rezultat5$ = znakm5$ + prog3$(process5$, hq$)
- IF nm3 = 1 THEN prog5$ = prog4$("1", rezultat5$, 0) ELSE prog5$ = rezultat5$
- END FUNCTION
- FUNCTION sinx$ (x$, rd)
- IF rd = 1 THEN
- rad$ = prog4$(x$, "180", 0)
- pi$ = "3.14159265"
- x$ = prog3$(rad$, pi$)
- IF x$ = "" THEN x$ = "0"
- END IF
- x0$ = x$
- FOR i = 1 TO 6
- xy$ = LTRIM$(STR$(i * 2 + 1))
- x1$ = prog5$(x0$, xy$)
- x2$ = faktorial$(xy$)
- x3$ = prog4$(x1$, x2$, 0)
- IF i MOD 2 <> 0 THEN
- x$ = prog2$(x$, x3$)
- ELSE
- x$ = prog1$(x$, x3$)
- END IF
- NEXT
- IF LEFT$(x$, 1) = "-" THEN sxs = 1
- sinx$ = MID$(x$, 1, 5 + sxs)
- END FUNCTION
- FUNCTION slozhenie$ (a$, b$)
- lena = LEN(a$)
- lenb = LEN(b$)
- perenos = 0
- rezultat$ = ""
- DO
- i = i + 1
- IF lena + 1 > i THEN
- achislo = ASC(MID$(a$, lena - i + 1, 1)) - 48
- ELSE
- achislo = 0
- END IF
- IF lenb + 1 > i THEN
- bchislo = ASC(MID$(b$, lenb - i + 1, 1)) - 48
- ELSE
- bchislo = 0
- END IF
- summa = achislo + bchislo + perenos
- IF summa >= 10 THEN
- perenos = summa \ 10
- summa = summa MOD 10
- ELSE
- perenos = 0
- END IF
- rezultat$ = LTRIM$(STR$(summa)) + rezultat$
- LOOP UNTIL i >= lena AND i >= lenb
- IF perenos > 0 THEN rezultat$ = LTRIM$(STR$(perenos)) + rezultat$
- slozhenie$ = rezultat$
- END FUNCTION
- FUNCTION sravnenie (a$, b$)
- IF LEN(a$) > LEN(b$) THEN
- sravnenie = 1
- EXIT FUNCTION
- END IF
- IF LEN(a$) < LEN(b$) THEN
- sravnenie = 2
- EXIT FUNCTION
- END IF
- IF LEN(a$) = LEN(b$) THEN
- FOR i = 1 TO LEN(a$)
- IF MID$(a$, i, 1) > MID$(b$, i, 1) THEN
- sravnenie = 1
- EXIT FUNCTION
- END IF
- IF MID$(a$, i, 1) < MID$(b$, i, 1) THEN
- sravnenie = 2
- EXIT FUNCTION
- END IF
- NEXT
- END IF
- sravnenie = 0
- END FUNCTION
- FUNCTION umnozhenie$ (a$, b$)
- lena3 = LEN(a$)
- lenb3 = LEN(b$)
- IF lenb3 > lena3 THEN
- SWAP a$, b$
- SWAP lena3, lenb3
- END IF
- FOR i = 1 TO lenb3
- proizv$ = ""
- perenos3 = 0
- IF lenb3 + 1 > i THEN
- bchislo3 = ASC(MID$(b$, lenb3 - i + 1, 1)) - 48
- ELSE
- bchislo3 = 0
- END IF
- FOR j = 1 TO lena3
- IF lena3 + 1 > j THEN
- achislo3 = ASC(MID$(a$, lena3 - j + 1, 1)) - 48
- ELSE
- achislo3 = 0
- END IF
- proizvedenie = achislo3 * bchislo3 + perenos3
- IF proizvedenie >= 10 THEN
- perenos3 = proizvedenie \ 10
- proizvedenie = proizvedenie MOD 10
- ELSE
- perenos3 = 0
- END IF
- proizv$ = LTRIM$(STR$(proizvedenie)) + proizv$
- NEXT
- IF perenos3 > 0 THEN proizv$ = LTRIM$(STR$(perenos3)) + proizv$
- rezultat3$ = slozhenie$(rezultat3$, proizv$ + STRING$(i - 1, 48))
- NEXT
- IF LEFT$(rezultat3$, 1) = CHR$(48) THEN rezultat3$ = CHR$(48)
- umnozhenie$ = rezultat3$
- END FUNCTION
- FUNCTION vychitanie$ (a$, b$)
- lena2 = LEN(a$)
- lenb2 = LEN(b$)
- IF sravnenie(a$, b$) = 2 THEN
- SWAP a$, b$
- SWAP lena2, lenb2
- znak2$ = "-"
- END IF
- zanimaem = 0
- FOR i = 1 TO lena2
- IF lena2 + 1 > i THEN
- achislo2 = ASC(MID$(a$, lena2 - i + 1, 1)) - 48
- ELSE
- achislo2 = 0
- END IF
- IF lenb2 + 1 > i THEN
- bchislo2 = ASC(MID$(b$, lenb2 - i + 1, 1)) - 48
- ELSE
- bchislo2 = 0
- END IF
- minus = achislo2 - bchislo2 - zanimaem
- IF i <> sa THEN
- IF minus < 0 THEN
- minus = minus + 10
- zanimaem = 1
- ELSE
- zanimaem = 0
- END IF
- END IF
- IF minus >= 0 THEN
- rezultat2$ = LTRIM$(STR$(minus)) + rezultat2$
- END IF
- NEXT
- FOR i = 1 TO LEN(rezultat2$) - 1
- IF MID$(rezultat2$, i, 1) = CHR$(48) THEN
- vednul = vednul + 1
- ELSE
- EXIT FOR
- END IF
- NEXT
- rezultat2$ = MID$(rezultat2$, 1 + vednul, LEN(rezultat2$) - vednul)
- vychitanie$ = znak2$ + rezultat2$
- END FUNCTION
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д