UkrReferat.com
найбільша колекція україномовних рефератів

Всього в базі: 75843
останнє поновлення: 2016-12-04
за 7 днів додано 10

Реферати на українській
Реферати на російській
Українські підручники

$ Робота на замовлення
Реклама на сайті
Зворотній зв'язок

 

ПОШУК:   

реферати, курсові, дипломні:

Українські рефератиРусские рефератыКниги
НазваУточнення алгоритму обчислення виразу (реферат)
Авторdimich
РозділІнформатика, компютерні науки
ФорматWord Doc
Тип документуРеферат
Продивилось1012
Скачало288
Опис
ЗАКАЧКА
Замовити оригінальну роботу

Реферат на тему:

 

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

 

Напишемо функцію 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], порожня множина ? – як [], множина символів {'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 байтів.

 

Найпростішими виразами типу множина є сталі, тобто списки виразів і

діапазонів базового типу в квадратних дужках []. Інші вирази будуються з

однотипних множинних сталих і змінних та знаків бінарних операцій '+',

'*', '-', що позначають відповідно об'єднання, перетин і різницю множин.

 

Приклад 1. Нехай за дії означення var v : set of 0..9 виконано оператор

присвоювання v:=[1..3]. Тоді вираз v+[2..4] має значення [1..4],

-----> Page:

0 [1]

ЗАМОВИТИ ОРИГІНАЛЬНУ РОБОТУ