ВБ - Процијените математички израз низа

Интро

У ВБА-у функција Евалуате узима као аргумент формулу која је постављена у алфанумеричкој варијабли и враћа резултат у алфанумеричку варијаблу.

У ВБ, ова функција недостаје и морате је сами имплементирати.

Овај демо подржава једноставне калкулације +, -, * и /, и заграде.

Демо ради на исти начин као и функција Евалуате.

Ова подморница се користи само за тестирање.

 Суб ТестЦалцул () Дим А Стринг Дим Рет Ас Стринг А = "(((3 * (12.223+ 15)) - 7) * 21) / 7" Рет = Евалуатор (А) "Дебуг.Принт Рет '= 224.007 А = "((123.32 / 2.67) * 6) +2127.34" Рет = Евалуер (А) '= 2404.46359550562 "Дебуг.Принт Рет Енд Суб 

Код

 Функција Евалуер (БиВал Ткт Ас Стринг) Ас Стринг Дим и Ас Интегер, оНБ Ас Интегер, фНБ Ас Интегер Дим П1 Ас Интегер, П2 Као Интегер Дим Буфф Ас Стринг Дим Т Ас Стринг 'Поур лес цалцулс и фаут ун поинт а ла плаце де ла виргуле Ткт = Реплаце (Ткт, ", ", ".") 'Воил с'ил иа дес (За и = 1 до Лен (Ткт) Ако Мид (Ткт, и, 1) = "(" Затем оНБ = оНБ + 1 Следеће и 'С'ил иа дес ((оуврантес), воир си елле сонт валидее пар дес) (фермантес) Ако је оНБ> 0 Затим за и = 1 до Лен (Ткт) Ако је Мид (Ткт, и, 1) = ")" Онда фНБ = фНБ + 1 Следеће и друго "Пасте парент, Евалуе дирецтемент ле цалцул Евалуер = ЕвалуеЕкпрессион (Ткт) Екит Фунцтион Енд Ако је оНБ фНБ тада 'Лес родитељ не сонт пас цонцордантес, меттре порука ерреур парентхесе Екит Фунцтион Енд Ако је Док оНБ> 0 'рецхерцхе ла дерниере парентхесе оувранте П1 = ИнСтрРев (Ткт, "(") "Рецхерцхе ла парентхесе ферманте де л'екпрессион П2 = ИнСтр (Мид (Ткт, П1 + 1), ") ")" Вредност л 'израз куи ест ентре парентхесес Буфф = ЕвалуеЕкпрессион (Мид (Ткт, П1 + 1, П2 - 1)) 'Ремплацер л'екпрессион пар ле ресултат ет суппример лес парентхесес Ткт = Лево (Ткт, П1 - 1) & Буфф & Мид (Ткт, П1 + П2 + 1) оНБ = оНБ - 1 Венд' плус де парентхесе, евалуер ла дерниере екпрессион Евалуер = ЕвалуеЕкпрессион (Ткт) Крај Функција Функција ЕвалуеЕкпрессион (А Ас Стринг) Ас Стринг Дим Т Ас Интегер, С Ас Интегер Дим Б Као Стринг, и Ас Интегер, Ц Ас Боолеан Дим ц1 Ас Доубле, ц2 Као Доубле, Сигне Ас Интегер Дим Р Ас Стринг, Фин Ас Боолеан, з Ас Интегер 'енлевер лес еспаце А = Замени (А, "", "") Док није Фин За и = 1 до Лен (А) Т = Асц (Мид (А, и, 1 )) Ако је Т <48 и Т 46 Или и = Лен (А) Онда ако је Ц Онд 'евалуе Ако је и = Лен (А) онда ц2 = Вал (Мид (А, С)) Елсе ц2 = Вал (Мид (А, С, и - С)) Енд Ако је Р = Стр (ЦалцулСимпле (ц1, ц2, Сигне)) Ако је и = Лен (А) онда Фин = Труе Елсе А = Трим (Р & Мид (А, и)) Ц = Фалсе Енд Иф Екит Фор Елсе 'сепаре ле 1ер цхиффре ц1 = Вал (лево (А, и - 1)) Сигне = ТС = и + 1 Ц = Труе Енд Иф Енд Ако Нект и Венд' ремплацер л'екпрессион пар ле ресултат ЕвалуеЕкпрессион = Трим (Р) Крај Фунцтион 

У доњу функцију можете додати различите типове прорачуна:

 Функција ЦалцулСимпле (н1 Ас Доубле, н2 Ас Доубле, Сигне Ас Интегер) Као Доубле Селецт Цасе Сигне Случај 43 '+ ЦалцулСимпле = н1 + н2 Цасе 45' - ЦалцулСимпле = н1 - н2 Случај 42 '* ЦалцулСимпле = н1 * н2 Случај 47' / ЦалцулСимпле = н1 / н2 'Ици, ајоутер д'аутре цалцул ... Енд Селецт Енд Фунцтион 
  • Напомена: Да би био потпуно конзистентан са калкулатором, прво морате процијенити * адн / фунцтион и само онда + и - оне.
  • Пример 3 + 5 * 7
  • Калкулатор га обрађује на следећи начин: 5 * 7 = 35 + 3 = 38
  • Али са овом функцијом: 3 + 5 = 8 * 7 = 56
  • Можете изменити "ЕвалуеЕкпрессион" или унети израчун као 3+ (5 * 7)

Претходни Чланак Sledeći Чланак

Топ Савети