Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Уточнення алгоритму обчислення виразу

РефератДопомога в написанніДізнатися вартістьмоєї роботи

В історії розвитку мови Паскаль склалося так, що носій базового типу не може мати більше 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 тощо.

Показати весь текст
Заповнити форму поточною роботою