The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

3.8 Арифметика

3.8 Арифметика

Предыдущая  Содержание  Следующая V*D*V

Если мы хотим выполнять арифметические действия, то позволяем исполнительным функциям возвращать значения типа double, которые будут напечатаны в process():

 

static double exec (const void * tree)

{

    return (* (struct Type **) tree) -> exec(tree);

}

 

void process (const void * tree)

{

    printf("\t%g\n", exec(tree));

}

 

Для каждого типа узла требуется одна исполнительная функция, который вычисляет и возвращает значение для данного узла. Вот два примера:

 

static double doVal (const void * tree)

{

    return ((struct Val *) tree) -> value;

}

 

static double doAdd (const void * tree)

{

    return exec(((struct Bin *) tree) -> left) +

            exec(((struct Bin *) tree) -> right);

}

 

static struct Type _Add = { mkBin, doAdd, freeBin };

static struct Type _Value = { mkVal, doVal, free };

 

const void * Add = & _Add;

const void * Value = & _Value;

 

Предыдущая  Содержание  Следующая