Программа "Строковый калькулятор" - QBasic

Узнай цену своей работы

Формулировка задачи:

решил попробовать написать программу производящую простые вычисления с использованием строк. пока может только складывать, умножать и возводить в степень.
Листинг программы
  1. PRINT "slozenie(1)"
  2. PRINT "umnozenie(2)"
  3. PRINT "stepen(3)"
  4. INPUT "vybirite dejstvie"; k
  5. SELECT CASE k
  6. CASE IS = 1
  7. PRINT "a + b"
  8. INPUT "vvedite a"; s1$
  9. INPUT "vvedite b"; s2$
  10. PRINT summa$(s1$, s2$)
  11. CASE IS = 2
  12. PRINT "a * b"
  13. INPUT "vvedite a"; b1$
  14. INPUT "vvedite b"; f$
  15. PRINT pro$(b1$, f$)
  16. CASE IS = 3
  17. PRINT "a ^ b"
  18. INPUT "vvedite a"; b1$
  19. INPUT "vvedite b"; h$
  20. s1$ = "0": s2$ = "1"
  21. f$ = b1$
  22. b1$ = "1"
  23. DO
  24. s1$ = summa$(s1$, s2$)
  25. b1$ = pro$(b1$, f$)
  26. LOOP UNTIL s1$ = h$
  27. PRINT b1$
  28. END SELECT
  29. FUNCTION summa$ (s1$, s2$)
  30. s1 = LEN(s1$): s2 = LEN(s2$)
  31. IF s1 > s2 THEN p = s1 ELSE p = s2
  32. FOR j = 1 TO p
  33. w = VAL(MID$(s1$, s1 - j + 1, 1)) + VAL(MID$(s2$, s2 - j + 1, 1)) + r
  34. IF w >= 10 THEN r = w \ 10: w = w MOD 10 ELSE r = 0
  35. c$ = LTRIM$(STR$(w)) + c$
  36. NEXT
  37. IF r <> 0 THEN c$ = LTRIM$(STR$(r)) + c$
  38. summa$ = c$
  39. END FUNCTION
  40. FUNCTION pro$ (b1$, f$)
  41. s1$ = "0": s2$ = "1"
  42. DO
  43. s1$ = summa$(s1$, s2$)
  44. b2$ = c$: c$ = "": r = 0
  45. b1 = LEN(b1$): b2 = LEN(b2$)
  46. IF b1 > b2 THEN p = b1 ELSE p = b2
  47. FOR j = 1 TO p
  48. w = VAL(MID$(b1$, b1 - j + 1, 1)) + VAL(MID$(b2$, b2 - j + 1, 1)) + r
  49. IF w >= 10 THEN r = w \ 10: w = w MOD 10 ELSE r = 0
  50. c$ = LTRIM$(STR$(w)) + c$
  51. NEXT
  52. IF r <> 0 THEN c$ = LTRIM$(STR$(r)) + c$
  53. LOOP UNTIL s1$ = f$
  54. pro$ = c$
  55. END FUNCTION

Решение задачи: «Программа "Строковый калькулятор"»

textual
Листинг программы
  1. DECLARE SUB obrabotka (a$, b$, nznak!)
  2. DECLARE FUNCTION umnozhenie$ (a$, b$)
  3. DECLARE FUNCTION slozhenie$ (a$, b$)
  4. DECLARE FUNCTION vychitanie$ (a$, b$)
  5. DECLARE FUNCTION sravnenie! (a$, b$)
  6. DECLARE FUNCTION delenie$ (a$, b$, rezhim!)
  7. DECLARE FUNCTION prog1$ (a$, b$)
  8. DECLARE FUNCTION prog2$ (a$, b$)
  9. DECLARE FUNCTION prog3$ (a$, b$)
  10. DECLARE FUNCTION prog4$ (a$, b$, rezhim!)
  11. DECLARE FUNCTION prog5$ (a$, b$)
  12. DECLARE FUNCTION faktorial$ (a$)
  13. DECLARE FUNCTION perevodss$ (a$, qq$, pp$)
  14. DECLARE FUNCTION sinx$ (x$, rd!)
  15. DECLARE FUNCTION cosx$ (x$, rd!)
  16. PRINT "spisok dostupnyh operacij"
  17. PRINT "    1.slozhenie"
  18. PRINT "    2.vychitanie"
  19. PRINT "    3.umnozhenie"
  20. PRINT "    4.delenie"
  21. PRINT "    5.vozvedenie v stepen"
  22. PRINT "    6.celochislennoe delenie"
  23. PRINT "    7.ostatok ot delenija"
  24. PRINT "    8.izvlechenie kornja n stepeni"
  25. PRINT "    9.celaja chast chisla"
  26. PRINT "    10.faktorial"
  27. PRINT "    11.perevod ss q-p"
  28. PRINT "    12.sin(x)"
  29. PRINT "    13.cos(x)"
  30. INPUT "vybirete dejstvie"; k
  31. CLS
  32. SELECT CASE k
  33.     CASE IS = 1
  34.         PRINT "a + b"
  35.         INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
  36.         PRINT prog1$(a$, b$)
  37.     CASE IS = 2
  38.         PRINT "a - b"
  39.         INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
  40.         PRINT prog2$(a$, b$)
  41.     CASE IS = 3
  42.         PRINT "a * b"
  43.         INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
  44.         PRINT prog3$(a$, b$)
  45.     CASE IS = 4
  46.         PRINT "a / b"
  47.         INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
  48.         IF b$ = "0" THEN PRINT "osibka" ELSE PRINT prog4$(a$, b$, 0)
  49.     CASE IS = 5
  50.         PRINT "a ^ b"
  51.         INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
  52.         PRINT prog5$(a$, b$)
  53.     CASE IS = 6
  54.         PRINT "a \ b"
  55.         INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
  56.         PRINT prog4$(a$, b$, 1)
  57.     CASE IS = 7
  58.         PRINT "a mod b"
  59.         INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
  60.         IF INSTR(a$, "-") <> 0 THEN a$ = RIGHT$(a$, LEN(a$) - 1): znak$ = CHR$(45)
  61.         IF sravnenie(a$, b$) = 2 THEN
  62.             PRINT znak$ + a$
  63.         ELSE
  64.             PRINT prog4$(a$, b$, 2)
  65.         END IF
  66.     CASE IS = 8
  67.         PRINT "b^sqr(a)"
  68.         INPUT "vvedite a"; a$: INPUT "vvedite b"; b$
  69.         PRINT prog3$(a$, "1/" + b$)
  70.     CASE IS = 9
  71.         PRINT "int(a)"
  72.         INPUT "vvedite a"; a$
  73.         PRINT LEFT$(a$, INSTR(a$, ".") - 1)
  74.     CASE IS = 10
  75.         PRINT "a!"
  76.         INPUT "vvedite"; a$
  77.         PRINT faktorial$(a$)
  78.     CASE IS = 11
  79.         PRINT "q-p"
  80.         INPUT "vvedite chislo"; a$: INPUT "vvedite q"; q$: INPUT "vvedite p"; p$
  81.         PRINT perevodss$(a$, q$, p$)
  82.     CASE IS = 12
  83.         PRINT "sin(x)"
  84.         INPUT "vyberite rad/deg[0/1]"; rd
  85.         INPUT "vvedite x"; x$
  86.         PRINT sinx$(x$, rd)
  87.     CASE IS = 13
  88.         PRINT "cos(x)"
  89.         INPUT "vyberite rad/deg[0/1]"; rd
  90.         INPUT "vvedite x"; x$
  91.         PRINT cosx$(x$, rd)
  92. END SELECT
  93.  
  94.  
  95.  
  96.  
  97. FUNCTION cosx$ (x$, rd)
  98. IF rd = 1 THEN
  99.     rad$ = prog4$(x$, "180", 0)
  100.     pi$ = "3.14159265"
  101.     x$ = prog3$(rad$, pi$)
  102.     IF x$ = "" THEN x$ = "0"
  103. END IF
  104. x0$ = x$
  105. x$ = "1"
  106. FOR i = 1 TO 6
  107.     xy$ = LTRIM$(STR$(i * 2))
  108.     x1$ = prog5$(x0$, xy$)
  109.     x2$ = faktorial$(xy$)
  110.     x3$ = prog4$(x1$, x2$, 0)
  111.     IF i MOD 2 <> 0 THEN
  112.         x$ = prog2$(x$, x3$)
  113.     ELSE
  114.         x$ = prog1$(x$, x3$)
  115.     END IF
  116. NEXT
  117. IF LEFT$(x$, 1) = "-" THEN sxs = 1
  118. cosx$ = MID$(x$, 1, 5 + sxs)
  119. END FUNCTION
  120.  
  121. FUNCTION delenie$ (a$, b$, rezhim)
  122. nachpozic = 1
  123. ostatok$ = ""
  124. snos$ = ""
  125. rezultat4$ = ""
  126. FOR i = 1 TO LEN(a$)
  127.     dlinasnosa = dlinasnosa + 1
  128.     snos$ = ostatok$ + MID$(a$, nachpozic, dlinasnosa)
  129.     IF snos$ = CHR$(48) THEN
  130.         rezultat4$ = rezultat4$ + CHR$(48)
  131.         snos$ = ""
  132.         nachpozic = nachpozic + 1
  133.         dlinasnosa = 0
  134.     END IF
  135.     IF NOT (sravnenie(snos$, b$) = 2) THEN
  136.         FOR j = 1 TO 9
  137.             jstr$ = LTRIM$(STR$(j))
  138.             podbor$ = umnozhenie$(b$, jstr$)
  139.             IF sravnenie(snos$, podbor$) = 2 THEN
  140.                 EXIT FOR
  141.             ELSE
  142.                 chislo4$ = jstr$
  143.                 podbor0$ = podbor$
  144.             END IF
  145.         NEXT
  146.         rezultat4$ = rezultat4$ + chislo4$
  147.         ostatok$ = vychitanie$(snos$, podbor0$)
  148.         nostat = nachpozic + dlinasnosa - 1
  149.         nachpozic = nachpozic + dlinasnosa
  150.         dlinasnosa = 0
  151.         IF ostatok$ = "0" THEN ostatok$ = ""
  152.     END IF
  153. NEXT
  154. IF nostat <> LEN(a$) THEN
  155.     IF snos$ <> "" AND sravnenie(snos$, b$) = 2 THEN
  156.         rezultat4$ = rezultat4$ + CHR$(48)
  157.         ostatok$ = snos$
  158.         snos$ = ""
  159.     END IF
  160. END IF
  161. SELECT CASE rezhim
  162.     CASE IS = 1
  163.         IF rezultat4$ = "" THEN
  164.             delenie$ = CHR$(48)
  165.         ELSE
  166.             delenie$ = rezultat4$
  167.         END IF
  168.         EXIT FUNCTION
  169.     CASE IS = 2
  170.         IF ostatok$ = "" THEN
  171.             delenie$ = CHR$(48)
  172.         ELSE
  173.             delenie$ = ostatok$
  174.         END IF
  175.         EXIT FUNCTION
  176. END SELECT
  177. IF ostatok$ = "" AND rezultat4$ <> "" THEN
  178.     delenie$ = rezultat4$
  179.     EXIT FUNCTION
  180. END IF
  181. IF ostatok$ <> "" THEN
  182.     rezultat4$ = rezultat4$ + CHR$(46)
  183.     snos$ = ostatok$
  184.     i = 0
  185.     DO
  186.         i = i + 1
  187.         snos$ = snos$ + CHR$(48)
  188.         FOR j = 0 TO 9
  189.             jstrd$ = LTRIM$(STR$(j))
  190.             podbord$ = umnozhenie$(b$, jstrd$)
  191.             IF sravnenie(snos$, podbord$) = 2 THEN
  192.                 EXIT FOR
  193.             ELSE
  194.                 chislo4d$ = jstrd$
  195.                 podbor0d$ = podbord$
  196.             END IF
  197.         NEXT
  198.         rezultat4$ = rezultat4$ + chislo4d$
  199.         ostatok$ = vychitanie$(snos$, podbor0d$)
  200.         IF ostatok$ = CHR$(48) THEN
  201.             EXIT DO
  202.         ELSE
  203.             snos$ = ostatok$
  204.             ostatok$ = ""
  205.         END IF
  206.     LOOP UNTIL i = 25
  207. END IF
  208. IF rezultat4$ = "" THEN rezultat4$ = CHR$(48)
  209. delenie$ = rezultat4$
  210. END FUNCTION
  211.  
  212. FUNCTION faktorial$ (a$)
  213. fkt$ = "1"
  214. fqs$ = "0"
  215. DO UNTIL fqs$ = a$
  216.     fqs$ = slozhenie$(fqs$, "1")
  217.     fkt$ = umnozhenie$(fkt$, fqs$)
  218. LOOP
  219. faktorial$ = fkt$
  220. END FUNCTION
  221.  
  222. SUB obrabotka (a$, b$, nznak)
  223. ato4ka = INSTR(a$, ".")
  224. bto4ka = INSTR(b$, ".")
  225. IF ato4ka > 0 THEN azn = LEN(a$) - ato4ka
  226. IF bto4ka > 0 THEN bzn = LEN(b$) - bto4ka
  227. IF azn > bzn THEN nznak = azn ELSE nznak = bzn
  228. IF azn > 0 THEN
  229.     a$ = MID$(a$, 1, ato4ka - 1) + MID$(a$, ato4ka + 1, azn)
  230. END IF
  231. a$ = a$ + STRING$(nznak - azn, 48)
  232. IF bzn > 0 THEN
  233.     b$ = MID$(b$, 1, bto4ka - 1) + MID$(b$, bto4ka + 1, bzn)
  234. END IF
  235. b$ = b$ + STRING$(nznak - bzn, 48)
  236. IF LEFT$(a$, 1) = CHR$(48) AND LEN(a$) <> 1 THEN
  237.     FOR i = 1 TO LEN(a$)
  238.         IF MID$(a$, i, 1) = CHR$(48) THEN
  239.             vednola = vednola + 1
  240.         ELSE
  241.             EXIT FOR
  242.         END IF
  243.     NEXT
  244.     a$ = RIGHT$(a$, LEN(a$) - vednola)
  245. END IF
  246. IF LEFT$(b$, 1) = CHR$(48) AND LEN(b$) <> 1 THEN
  247.     FOR i = 1 TO LEN(b$)
  248.         IF MID$(b$, i, 1) = CHR$(48) THEN
  249.             vednolb = vednolb + 1
  250.         ELSE
  251.             EXIT FOR
  252.         END IF
  253.     NEXT
  254.     b$ = RIGHT$(b$, LEN(b$) - vednolb)
  255. END IF
  256. END SUB
  257.  
  258. FUNCTION perevodss$ (a$, qq$, pp$)
  259. u$ = "0123456789ABCDEF"
  260. k = INSTR(a$, ".")
  261. stepen$ = LTRIM$(STR$((LEN(a$) - k) * (k <> 0)))
  262. a$ = MID$(a$, 1, k - 1) + MID$(a$, k + 1, LEN(a$) - k)
  263. zx$ = "0"
  264. FOR i = LEN(a$) TO 1 STEP -1
  265.     j = INSTR(u$, UCASE$(MID$(a$, i, 1))) - 1
  266.     sj$ = LTRIM$(STR$(j))
  267.     stepen0$ = stepen$
  268.     x1$ = prog5$(qq$, stepen$)
  269.     stepen$ = stepen0$
  270.     x2$ = prog3$(sj$, x1$)
  271.     zx$ = prog1$(zx$, x2$)
  272.     stepen$ = prog1$(stepen$, "1")
  273. NEXT
  274. dkj = INSTR(zx$, ".")
  275. IF dkj > 0 THEN
  276.     z$ = LEFT$(zx$, dkj - 1)
  277.     ds$ = RIGHT$(zx$, LEN(zx$) - dkj + 1)
  278. ELSE
  279.     z$ = zx$
  280.     ds$ = "0"
  281. END IF
  282. DO
  283.     IF sravnenie(z$, pp$) = 2 THEN
  284.         ccc = VAL(z$) + 1
  285.     ELSE
  286.         ccc = VAL(prog4$(z$, pp$, 2)) + 1
  287.     END IF
  288.     cc$ = MID$(u$, ccc, 1) + cc$
  289.     z$ = prog4$(z$, pp$, 1)
  290. LOOP UNTIL z$ = "0"
  291. lll$ = "0"
  292. DO
  293.     lll$ = slozhenie$(lll$, "1")
  294.     pt$ = pp$
  295.     ds$ = prog3$(ds$, pp$)
  296.     pp$ = pt$
  297.     yd = VAL(LEFT$(ds$, INSTR(ds$, ".") - 1)) + 1
  298.     ff$ = ff$ + MID$(u$, yd, 1)
  299.     ds$ = RIGHT$(ds$, LEN(ds$) - INSTR(ds$, ".") + 1)
  300. LOOP UNTIL INSTR(ds$, ".") = 0 OR lll$ = "20"
  301. perevodss$ = cc$ + "." + ff$
  302. END FUNCTION
  303.  
  304. FUNCTION prog1$ (a$, b$)
  305. IF a$ = "0" THEN
  306.     prog1$ = b$
  307.     EXIT FUNCTION
  308. END IF
  309. IF b$ = "0" THEN
  310.     prog1$ = a$
  311.     EXIT FUNCTION
  312. END IF
  313. IF LEFT$(a$, 1) = "-" THEN
  314.     flzna = 1
  315.     a$ = RIGHT$(a$, LEN(a$) - 1)
  316. END IF
  317. IF LEFT$(b$, 1) = "-" THEN
  318.     flznb = 1
  319.     b$ = RIGHT$(b$, LEN(b$) - 1)
  320. END IF
  321. IF flzna = 1 AND flznb = 1 THEN znakm$ = "-"
  322. IF flzna = 1 XOR flznb = 1 THEN
  323.     IF a$ = b$ THEN
  324.         prog1$ = "0"
  325.         EXIT FUNCTION
  326.     END IF
  327.     IF sravnenie(a$, b$) = 1 THEN
  328.         IF flzna = 1 THEN
  329.             prog1$ = prog2$(b$, a$)
  330.         ELSE
  331.             prog1$ = prog2$(a$, b$)
  332.         END IF
  333.         EXIT FUNCTION
  334.     END IF
  335.     IF sravnenie(a$, b$) = 2 THEN
  336.         IF flzna = 1 THEN
  337.             prog1$ = prog2$(b$, a$)
  338.         ELSE
  339.             prog1$ = prog2$(a$, b$)
  340.         END IF
  341.         EXIT FUNCTION
  342.     END IF
  343. END IF
  344. nznak = 0
  345. CALL obrabotka(a$, b$, nznak)
  346. process$ = slozhenie$(a$, b$)
  347. IF nznak > 0 THEN
  348.     IF LEN(process$) - nznak > 0 THEN
  349.         kcdz = LEN(process$) - nznak
  350.     ELSE
  351.         kcdz = 0
  352.         kvn = ABS(LEN(process$) - nznak)
  353.     END IF
  354.     process$ = MID$(process$, 1, kcdz) + "." + STRING$(kvn, 48) + MID$(process$, kcdz + 1, nznak)
  355.     FOR y = LEN(process$) TO 1 STEP -1
  356.         vrp = ASC(MID$(process$, y, 1))
  357.         IF vrp = 46 OR vrp = 48 THEN
  358.             ky = ky + 1
  359.         ELSE
  360.             EXIT FOR
  361.         END IF
  362.     NEXT
  363.     process$ = MID$(process$, 1, LEN(process$) - ky)
  364. END IF
  365. IF LEFT$(process$, 1) = "." THEN process$ = "0" + process$
  366. prog1$ = znakm$ + process$
  367. END FUNCTION
  368.  
  369. FUNCTION prog2$ (a$, b$)
  370. IF LEFT$(a$, 1) = "-" THEN
  371.     flzna2 = 1
  372.     a$ = RIGHT$(a$, LEN(a$) - 1)
  373. END IF
  374. IF LEFT$(b$, 1) = "-" THEN
  375.     flznb2 = 1
  376.     b$ = RIGHT$(b$, LEN(b$) - 1)
  377. END IF
  378. IF flzna2 = 1 OR flznb2 = 1 THEN
  379.     IF flzna2 = 1 AND flznb2 = 1 THEN
  380.         prog2$ = prog1$("-" + a$, "-" + b$)
  381.         EXIT FUNCTION
  382.     END IF
  383.     IF flzna2 = 1 THEN
  384.         prog2$ = prog1$(CHR$(45) + a$, CHR$(45) + b$)
  385.         EXIT FUNCTION
  386.     END IF
  387.     IF flznb2 = 1 THEN
  388.         prog2$ = prog1$(a$, b$)
  389.         EXIT FUNCTION
  390.     END IF
  391. END IF
  392. nznak = 0
  393. CALL obrabotka(a$, b$, nznak)
  394. process2$ = vychitanie$(a$, b$)
  395. IF LEFT$(process2$, 1) = "-" THEN
  396.     znakm2$ = "-"
  397.     process2$ = RIGHT$(process2$, LEN(process2$) - 1)
  398. END IF
  399. IF nznak > 0 THEN
  400.     IF LEN(process2$) - nznak > 0 THEN
  401.         kcdz2 = LEN(process2$) - nznak
  402.     ELSE
  403.         kcdz2 = 0
  404.         kvn2 = ABS(LEN(process2$) - nznak)
  405.     END IF
  406.     process2$ = MID$(process2$, 1, kcdz2) + "." + STRING$(kvn2, 48) + MID$(process2$, kcdz2 + 1, nznak)
  407.     FOR y = LEN(process2$) TO 1 STEP -1
  408.         vrp2 = ASC(MID$(process2$, y, 1))
  409.         IF vrp2 = 46 OR vrp2 = 48 THEN
  410.             ky2 = ky2 + 1
  411.         ELSE
  412.             EXIT FOR
  413.         END IF
  414.     NEXT
  415.     process2$ = MID$(process2$, 1, LEN(process2$) - ky2)
  416. END IF
  417. IF LEFT$(process2$, 1) = "." THEN process2$ = "0" + process2$
  418. prog2$ = znakm2$ + process2$
  419. END FUNCTION
  420.  
  421. FUNCTION prog3$ (a$, b$)
  422. IF LEFT$(a$, 1) = "-" THEN
  423.     flzna3 = 1
  424.     a$ = RIGHT$(a$, LEN(a$) - 1)
  425. END IF
  426. IF LEFT$(b$, 1) = "-" THEN
  427.     flznb3 = 1
  428.     b$ = RIGHT$(b$, LEN(b$) - 1)
  429. END IF
  430. IF flzna3 = 1 XOR flznb3 = 1 THEN znakm3$ = "-"
  431. CALL obrabotka(a$, b$, nznak)
  432. process3$ = umnozhenie$(a$, b$)
  433. IF nznak > 0 THEN
  434.     IF LEN(process3$) - 2 * nznak > 0 THEN
  435.         kcdz3 = LEN(process3$) - 2 * nznak
  436.     ELSE
  437.         kcdz3 = 0
  438.         kvn3 = ABS(LEN(process3$) - 2 * nznak)
  439.     END IF
  440.     process3$ = MID$(process3$, 1, kcdz3) + "." + STRING$(kvn3, 48) + MID$(process3$, kcdz3 + 1, 2 * nznak)
  441.     FOR y = LEN(process3$) TO 1 STEP -1
  442.         vrp3 = ASC(MID$(process3$, y, 1))
  443.         IF vrp3 = 46 OR vrp3 = 48 THEN
  444.             ky3 = ky3 + 1
  445.         ELSE
  446.             EXIT FOR
  447.         END IF
  448.     NEXT
  449.     process3$ = MID$(process3$, 1, LEN(process3$) - ky3)
  450. END IF
  451. IF LEFT$(process3$, 1) = "." THEN process3$ = "0" + process3$
  452. IF process3$ = "" THEN process3$ = "0"
  453. prog3$ = znakm3$ + process3$
  454. END FUNCTION
  455.  
  456. FUNCTION prog4$ (a$, b$, rezhim)
  457. IF LEFT$(a$, 1) = "-" THEN
  458.     flzna4 = 1
  459.     a$ = RIGHT$(a$, LEN(a$) - 1)
  460. END IF
  461. IF LEFT$(b$, 1) = "-" THEN
  462.     flznb4 = 1
  463.     b$ = RIGHT$(b$, LEN(b$) - 1)
  464. END IF
  465. IF flzna4 = 1 XOR flznb4 = 1 THEN znakm4$ = "-"
  466. ato4ka4 = INSTR(a$, ".")
  467. bto4ka4 = INSTR(b$, ".")
  468. IF ato4ka4 > 0 OR bto4ka4 > 0 THEN
  469.     CALL obrabotka(a$, b$, nznak)
  470. END IF
  471. dl$ = delenie$(a$, b$, rezhim)
  472. IF LEFT$(d$, 1) = "." THEN dl$ = "0" + dl$
  473. IF dl$ = "0" THEN
  474.     prog4$ = "0"
  475. ELSE
  476.     prog4$ = znakm4$ + dl$
  477. END IF
  478. END FUNCTION
  479.  
  480. FUNCTION prog5$ (a$, b$)
  481. IF LEFT$(a$, 1) = "-" THEN flzna5 = 1: a$ = RIGHT$(a$, LEN(a$) - 1)
  482. IF LEFT$(b$, 1) = "-" THEN nm3 = 1: b$ = RIGHT$(b$, LEN(b$) - 1)
  483. jh = INSTR(b$, "/")
  484. IF jh > 0 THEN
  485.     b11$ = MID$(b$, 1, jh - 1)
  486.     b22$ = MID$(b$, jh + 1, LEN(b$) - jh)
  487.     b$ = prog4$(b11$, b22$, 0)
  488. END IF
  489. b22$ = RIGHT$(b22$, 1)
  490. IF (b22$ = "2" OR b22$ = "4" OR b22$ = "6" OR b22$ = "8") AND flzna5 = 1 THEN
  491.     PRINT "oshibka, chetnaja stepen iz otricatelnogo chisla"
  492.     EXIT FUNCTION
  493. END IF
  494. fs$ = "0"
  495. process5$ = "1"
  496. db = INSTR(b$, ".")
  497. IF db = 0 THEN
  498.     nx$ = RIGHT$(b$, 1)
  499.     IF nx$ = "1" OR nx$ = "3" OR nx$ = "5" OR nx$ = "7" OR nx$ = "9" THEN
  500.         IF flzna5 = 1 THEN znakm5$ = "-"
  501.     END IF
  502. END IF
  503. IF db > 0 THEN
  504.     bd$ = MID$(b$, db, LEN(b$) - bd)
  505.     b$ = MID$(b$, 1, db - 1)
  506. END IF
  507. IF b$ = "" THEN b$ = "0"
  508. DO UNTIL fs$ = b$
  509.     fs$ = slozhenie$(fs$, "1")
  510.     aa$ = a$
  511.     process5$ = prog3$(process5$, aa$)
  512. LOOP
  513. IF db > 0 THEN
  514.     hq$ = LTRIM$(STR$(EXP(VAL(bd$) * LOG(VAL(a$)))))
  515. ELSE
  516.     hq$ = "1"
  517. END IF
  518. rezultat5$ = znakm5$ + prog3$(process5$, hq$)
  519. IF nm3 = 1 THEN prog5$ = prog4$("1", rezultat5$, 0) ELSE prog5$ = rezultat5$
  520. END FUNCTION
  521.  
  522. FUNCTION sinx$ (x$, rd)
  523. IF rd = 1 THEN
  524.     rad$ = prog4$(x$, "180", 0)
  525.     pi$ = "3.14159265"
  526.     x$ = prog3$(rad$, pi$)
  527.     IF x$ = "" THEN x$ = "0"
  528. END IF
  529. x0$ = x$
  530. FOR i = 1 TO 6
  531.     xy$ = LTRIM$(STR$(i * 2 + 1))
  532.     x1$ = prog5$(x0$, xy$)
  533.     x2$ = faktorial$(xy$)
  534.     x3$ = prog4$(x1$, x2$, 0)
  535.     IF i MOD 2 <> 0 THEN
  536.         x$ = prog2$(x$, x3$)
  537.     ELSE
  538.         x$ = prog1$(x$, x3$)
  539.     END IF
  540. NEXT
  541. IF LEFT$(x$, 1) = "-" THEN sxs = 1
  542. sinx$ = MID$(x$, 1, 5 + sxs)
  543. END FUNCTION
  544.  
  545. FUNCTION slozhenie$ (a$, b$)
  546. lena = LEN(a$)
  547. lenb = LEN(b$)
  548. perenos = 0
  549. rezultat$ = ""
  550. DO
  551.     i = i + 1
  552.     IF lena + 1 > i THEN
  553.         achislo = ASC(MID$(a$, lena - i + 1, 1)) - 48
  554.     ELSE
  555.         achislo = 0
  556.     END IF
  557.     IF lenb + 1 > i THEN
  558.         bchislo = ASC(MID$(b$, lenb - i + 1, 1)) - 48
  559.     ELSE
  560.         bchislo = 0
  561.     END IF
  562.     summa = achislo + bchislo + perenos
  563.     IF summa >= 10 THEN
  564.         perenos = summa \ 10
  565.         summa = summa MOD 10
  566.     ELSE
  567.         perenos = 0
  568.     END IF
  569.     rezultat$ = LTRIM$(STR$(summa)) + rezultat$
  570. LOOP UNTIL i >= lena AND i >= lenb
  571. IF perenos > 0 THEN rezultat$ = LTRIM$(STR$(perenos)) + rezultat$
  572. slozhenie$ = rezultat$
  573. END FUNCTION
  574.  
  575. FUNCTION sravnenie (a$, b$)
  576. IF LEN(a$) > LEN(b$) THEN
  577.     sravnenie = 1
  578.     EXIT FUNCTION
  579. END IF
  580. IF LEN(a$) < LEN(b$) THEN
  581.     sravnenie = 2
  582.     EXIT FUNCTION
  583. END IF
  584. IF LEN(a$) = LEN(b$) THEN
  585.     FOR i = 1 TO LEN(a$)
  586.         IF MID$(a$, i, 1) > MID$(b$, i, 1) THEN
  587.             sravnenie = 1
  588.             EXIT FUNCTION
  589.         END IF
  590.         IF MID$(a$, i, 1) < MID$(b$, i, 1) THEN
  591.             sravnenie = 2
  592.             EXIT FUNCTION
  593.         END IF
  594.     NEXT
  595. END IF
  596. sravnenie = 0
  597. END FUNCTION
  598.  
  599. FUNCTION umnozhenie$ (a$, b$)
  600. lena3 = LEN(a$)
  601. lenb3 = LEN(b$)
  602. IF lenb3 > lena3 THEN
  603.     SWAP a$, b$
  604.     SWAP lena3, lenb3
  605. END IF
  606. FOR i = 1 TO lenb3
  607.     proizv$ = ""
  608.     perenos3 = 0
  609.     IF lenb3 + 1 > i THEN
  610.         bchislo3 = ASC(MID$(b$, lenb3 - i + 1, 1)) - 48
  611.     ELSE
  612.         bchislo3 = 0
  613.     END IF
  614.     FOR j = 1 TO lena3
  615.         IF lena3 + 1 > j THEN
  616.             achislo3 = ASC(MID$(a$, lena3 - j + 1, 1)) - 48
  617.         ELSE
  618.             achislo3 = 0
  619.         END IF
  620.         proizvedenie = achislo3 * bchislo3 + perenos3
  621.         IF proizvedenie >= 10 THEN
  622.             perenos3 = proizvedenie \ 10
  623.             proizvedenie = proizvedenie MOD 10
  624.         ELSE
  625.             perenos3 = 0
  626.         END IF
  627.         proizv$ = LTRIM$(STR$(proizvedenie)) + proizv$
  628.     NEXT
  629.     IF perenos3 > 0 THEN proizv$ = LTRIM$(STR$(perenos3)) + proizv$
  630.     rezultat3$ = slozhenie$(rezultat3$, proizv$ + STRING$(i - 1, 48))
  631. NEXT
  632. IF LEFT$(rezultat3$, 1) = CHR$(48) THEN rezultat3$ = CHR$(48)
  633. umnozhenie$ = rezultat3$
  634. END FUNCTION
  635.  
  636. FUNCTION vychitanie$ (a$, b$)
  637. lena2 = LEN(a$)
  638. lenb2 = LEN(b$)
  639. IF sravnenie(a$, b$) = 2 THEN
  640.     SWAP a$, b$
  641.     SWAP lena2, lenb2
  642.     znak2$ = "-"
  643. END IF
  644. zanimaem = 0
  645. FOR i = 1 TO lena2
  646.     IF lena2 + 1 > i THEN
  647.         achislo2 = ASC(MID$(a$, lena2 - i + 1, 1)) - 48
  648.     ELSE
  649.         achislo2 = 0
  650.     END IF
  651.     IF lenb2 + 1 > i THEN
  652.         bchislo2 = ASC(MID$(b$, lenb2 - i + 1, 1)) - 48
  653.     ELSE
  654.         bchislo2 = 0
  655.     END IF
  656.     minus = achislo2 - bchislo2 - zanimaem
  657.     IF i <> sa THEN
  658.         IF minus < 0 THEN
  659.             minus = minus + 10
  660.             zanimaem = 1
  661.         ELSE
  662.             zanimaem = 0
  663.         END IF
  664.     END IF
  665.     IF minus >= 0 THEN
  666.         rezultat2$ = LTRIM$(STR$(minus)) + rezultat2$
  667.     END IF
  668. NEXT
  669. FOR i = 1 TO LEN(rezultat2$) - 1
  670.     IF MID$(rezultat2$, i, 1) = CHR$(48) THEN
  671.         vednul = vednul + 1
  672.     ELSE
  673.         EXIT FOR
  674.     END IF
  675. NEXT
  676. rezultat2$ = MID$(rezultat2$, 1 + vednul, LEN(rezultat2$) - vednul)
  677. vychitanie$ = znak2$ + rezultat2$
  678. END FUNCTION

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы