Учебное пособие C#. Алгоритмы и структуры данных н. А. Тюкачев, В. Г. Хлебостроев издание третье, стереотипное 1 / 23


Листинг 4.24. Метод разбора множителей


Download 1.85 Mb.
Pdf ko'rish
bet62/111
Sana19.11.2023
Hajmi1.85 Mb.
#1786905
TuriУчебное пособие
1   ...   58   59   60   61   62   63   64   65   ...   111
Bog'liq
C# Алгоритмы и структуры данных 2018 Тюкачев, Хлебостроев

Листинг 4.24. Метод разбора множителей 
void Factor(ref string s, out Node D) 

D = null; 
s = s.Trim(); 
if (s.Length != 0) 

if (Test(s[0], '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', '+', '-')) 

double xt; TypeVal t; int k; 
18 / 23


111 
SetConst(ref s, out xt, out k, out t);
if (error != 0) return; 
if (t == TypeVal.tFloat) 
D = new NodeConst(t, xt); 
else 
D = new NodeConst(t, k); 

else 
if (s[0] == '(') // 
формула в скобках 

Pop(ref s, 1); 
Expression(ref s, out D);
if (error != 0) return; 


s.Trim(); 
if ((s.Length > 0) & (s[0] != ')'))
{ error = 9; return; }// 
нет ) 
Pop(ref s, 1); 


else 

D = null; error = 6; // 
ожидается множитель 


Метод Factor() замыкает рекурсию, вызывая метод Expression(). 
На рисунке 4.14 представлена диаграмма этого метода. 
19 / 23


112 
Рис. 4.14. Диаграмма метода Factor() 
Синтаксическая диаграмма числовой константы представлена на ри-
сунке 4.15.
Рис. 4.15. Синтаксическая диаграмма числовой константы 
Метод разбора константы представлен в листинге 4.25. 
Листинг 4.25. Разбор константы 
void SetConst(ref string s, out double x, out int k,
out TypeVal t) 

s = s.Trim(); x = 0; k = 0; 
t = TypeVal.tInt; string st = ""; x = 0; 
while(true) 

if ((s != "") && Test(s[0], '0', '1', '2',
'3', '4', '5', '6', '7', '8', '9', ',')) 

if (s[0] == ',') t = TypeVal.tFloat; 
st += Pop(ref s, 1); 

else 
if ((s!="")&& Test(s[0], 'e', 'E') &&
20 / 23


113 
Test(s[1],
'0','1','2','3','4','5','6','7','8','9', 
',', '+','-')) 

st += s[0]; 
st += Pop(ref s, 1); 

else 
break; 
} // end while(true) 
if (t == TypeVal.tInt) 
k = Convert.ToInt32(st); 
else 
x = Convert.ToDouble(st); 
s = s.Trim(); 

Для запуска механизма вычисления выражения надо обратиться к свой-
ству Value корня дерева, который с помощью метода DoOperation() оп-
росит всех своих потомков и вычислит у всех значения Value

Download 1.85 Mb.

Do'stlaringiz bilan baham:
1   ...   58   59   60   61   62   63   64   65   ...   111




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling