Author Topic: Как из строки сделать математический пример, чтобы узнать решение?  (Read 3129 times)

0 Members and 1 Guest are viewing this topic.

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
К примеру, есть некая переменная - $var, которая несет в себе строку - "90-10+5". Как эту строку перевести в числа и получить 85?
« Last Edit: March 12, 2022, 12:41:35 AM by Hito »
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile


Вот, как текст, я с этой картинки уравнение получаю. Как потом этот текст превратить в уравнение?
Я не ду... Потому и не бу...

Oblie1968

  • Освоившийся
  • **
  • Posts: 29
    • View Profile
Вот, как текст, я с этой картинки уравнение получаю. Как потом этот текст превратить в уравнение?

Видимо, вы имеете ввиду, как посчитать формулу, чтобы получить ответ?
Ну, как, как. Брать и аккуратненько разбирать строку на операции, операнды...
Есть другой вариант, открыть Excel, занести туда формулу непосредственно текстом и потом считать результат. Для таких простых формул вместо Excel-а можно использовать калькулятор.
« Last Edit: March 13, 2022, 02:47:27 AM by Oblie1968 »

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Вот, как текст, я с этой картинки уравнение получаю. Как потом этот текст превратить в уравнение?

Видимо, вы имеете ввиду, как посчитать формулу, чтобы получить ответ?
Ну, как, как. Брать и аккуратненько разбирать строку на операции, операнды...
Я все же где-то глубоко в душе надеялся, что у нас есть способ покрасивее...)) Благодарю за ответ ))
Я не ду... Потому и не бу...


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Вариант для примеров посложнее, но только плюс и минус.
Code: (clickermann) [Select]
$str = "7-67+345+876+86+7-67-56787+7898+6787+56789"

$len = 1
arrpush($sign, 0)
WHILE($len > 0)
   $len = STRPOS ($str, "+", $len)
   IF($len > 0)
      arrpush($sign, $len)
      $len = $len+1
   END_IF
END_CYC

$len = 1
WHILE($len > 0)
   $len = STRPOS ($str, "-", $len)
   IF($len > 0)
      arrpush($sign, $len+0.00004)
      $len = int($len+1)
   END_IF
END_CYC
arrpush($sign, STRLEN ($str)+1)

ARRSORT ($sign)

$num = STRCUT2($str, int($sign[$a])+1, int($sign[$a+1])-1)
FOR($a=1,$a<arrsize($sign)-1)
   IF(int($sign[$a])<$sign[$a])
      $num = $num - STRCUT2($str, int($sign[$a])+1, int($sign[$a+1])-1)
   else
      $num = $num + STRCUT2($str, int($sign[$a])+1, int($sign[$a+1])-1)
   END_IF
END_CYC

print("ответ:   ", $num)

halt

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Вариант для примеров посложнее, но только плюс и минус.
Code: (clickermann) [Select]
$str = "7-67+345+876+86+7-67-56787+7898+6787+56789"

$len = 1
arrpush($sign, 0)
WHILE($len > 0)
   $len = STRPOS ($str, "+", $len)
   IF($len > 0)
      arrpush($sign, $len)
      $len = $len+1
   END_IF
END_CYC

$len = 1
WHILE($len > 0)
   $len = STRPOS ($str, "-", $len)
   IF($len > 0)
      arrpush($sign, $len+0.00004)
      $len = int($len+1)
   END_IF
END_CYC
arrpush($sign, STRLEN ($str)+1)

ARRSORT ($sign)

$num = STRCUT2($str, int($sign[$a])+1, int($sign[$a+1])-1)
FOR($a=1,$a<arrsize($sign)-1)
   IF(int($sign[$a])<$sign[$a])
      $num = $num - STRCUT2($str, int($sign[$a])+1, int($sign[$a+1])-1)
   else
      $num = $num + STRCUT2($str, int($sign[$a])+1, int($sign[$a+1])-1)
   END_IF
END_CYC

print("ответ:   ", $num)

halt

Благодарю!  :)
Я не ду... Потому и не бу...

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Я надеюсь ты 4.14 версией пользуешся. В 4.13 там какой-то косяк с strpos если выражение длинное. С количеством чисел где-то до пяти еще норм, дальше всё. В 4.14 проблем нет.