Уточнення алгоритму обчислення виразу
В історії розвитку мови Паскаль склалося так, що носій базового типу не може мати більше 256 елементів. Наприклад, вираз set of 1.512 недопустимий. У внутрішньому зображенні множини кожному елементу носія базового типу відповідає 1 біт і дані множинних типів займають не більше 256/8 = 32 байтів. Множини в мові Паскаль У підпрограмах розроблюваного модуля читання лексем доведеться мати справу… Читати ще >
Уточнення алгоритму обчислення виразу (реферат, курсова, диплом, контрольна)
Реферат на тему:
Уточнення алгоритму обчислення виразу.
Напишемо функцію llxval обчислення значення виразу за його ЗПЗ, що подається послідовністю лексем. У цій функції використовуються засоби з модуля SLlx:
— функція перевірки вичерпання послідовності лексем із заголовком.
function isemllx (Llx: Sqlx): boolean;
— процедура добування й вилучення першого елемента послідовності лексем із заголовком.
procedure get (var Llx: Sqlx; var lx: Tlx).
Крім того, використовуються підпрограми обробки магазина лексем, про які сказано в попередньому підрозділі.
function llxval (var Llx: Sqlx): real;
var Slx: Stlx; lx, lx1, lx2: Tlx; ok: boolean;
begin.
inits (Slx); ok := true;
while not isemllx (Llx) and ok do.
begin.
get (Llx, lx);
case lx. stl of.
con: push (Slx, lx);
ops: begin.
pop (Slx, lx2); pop (Slx, lx1);
case lx. sig of.
" + ": lx1. numb := lx1. numb + lx2. numb;
" - «: lx1. numb := lx1. numb — lx2. numb;
" * ": lx1. numb := lx1. numb * lx2. numb;
" / «: if lx2. numb <> 0 then.
lx1.numb := lx1. numb / lx2.numb.
else ok := false.
end;
if ok then push (Slx, lx1).
end;
nam: begin.
pop (Slx, lx1);
if lx.name = «sin «then.
lx1.numb := sin (lx1.numb) else.
if lx.name = «cos «then.
lx1.numb := cos (lx1.numb);
push (Slx, lx1).
end.
end { case lx. stl }.
end; { while }.
if ok then.
begin pop (Slx, lx1); llxval := lx1. numb end.
else.
begin.
writeln («***zerodivide*** »); llxval := 0.
end.
end;
Множини в мові Паскаль У підпрограмах розроблюваного модуля читання лексем доведеться мати справу з множинами символів. Подання та обробку множин символів та значень інших перелічуваних типів у мові Паскаль зручно задавати з використанням спеціальних типів множин.
Стала-множина задається в дужках [] переліком елементів або діапазонів. Наприклад, множина чисел {1, 2, 3, 5} подається як [1, 2, 3, 5] або [1.3, 5], порожня множина xF0C6 — як [], множина символів { «a », «i », «j », «k », «l », «m », «n «} - як [ «a », «i ». «n «].
Якщо T задає перелічуваний тип, то вираз set of T означає множинний тип. Елементами його носія є підмножини носія типу T. Наприклад, носій типу set of Boolean складається з 4-х множин бульових значень: [], [false], [true], [false, true]; носій типу set of «a ». «z «- з 226 підмножин малих латинських літер. Тип T називається базовим для типу set of T.
В історії розвитку мови Паскаль склалося так, що носій базового типу не може мати більше 256 елементів. Наприклад, вираз set of 1.512 недопустимий. У внутрішньому зображенні множини кожному елементу носія базового типу відповідає 1 біт і дані множинних типів займають не більше 256/8 = 32 байтів.
D.
R.
X.
r.
x.
$.
X.
" .
d.
n.
p.
v.
-.
x0153.
¤.
¶.
O.
Ue.
i.
o.
'.
$.
d.
x00AA.
¶.
O.
o.
x245Bx5C00 $x845Ex0870×1800Найпростішими виразами типу множина є сталі, тобто списки виразів і діапазонів базового типу в квадратних дужках []. Інші вирази будуються з однотипних множинних сталих і змінних та знаків бінарних операцій «+ », «* », «- «, що позначають відповідно об «єднання, перетин і різницю множин.
Приклад 1. Нехай за дії означення var v: set of 0.9 виконано оператор присвоювання v:=[1.3]. Тоді вираз v+[2.4] має значення [1.4], v*[2.4] - значення [2.3], v-[2.4] - значення [1]. xF0E7.
Бульові вирази вигляду S1 = S2 (S1 <> S2) задають перевірку на рівність (нерівність) значень однотипних множинних виразів S1 і S2. Аналогічно вирази S1 <= S2 (S1 >= S2) задають перевірку включення S1 у S2 (S2 в S1). Наприклад, значеннями виразів [1.3]=[1, 2, 3] та [1, 2]<=[1.3] є true, а виразів [1]>=[1.2] та [1, 2]<>[2, 1] - false.
Булів вираз вигляду e in S, де тип виразу e є базовим для множинного типу виразу S, задає перевірку належності значення e множині S.
Вирази типу множина можна присвоювати змінним того ж самого типу.
Приклад 2. Нехай діє означення типів рядків Str і множин символів SS = set of char. Тоді:
1) процедура Symset задає побудову множини SS символів рядка A:
procedure Symset (A: Str; var S: SS);
var i: integer;
begin.
S := [];
for i:= 1 to length (A) do S := S + [ A[i] ].
end;
2) функція EqSS задає перевірку рівності множин символів двох рядків:
function EqSS (A, B: Str): boolean;
var S1, S2: SS;
begin.
Symset (A, S1);
Symset (B, S2);
EqSS := (S1 = S2).
end;
3) функція SettoStr задає побудову рядка з символів-елементів множини в порядку їхнього кодування:
function SettoStr (S: SS): Str;
var A: Str; c: char;
begin.
A := «» ;
for c := chr (0) to chr (255) do.
if c in S then A := A + c;
SettoStr := A.
end.
xF0E7.
атні 2, потім кратні 3 тощо.