Форум программистов, компьютерный форум CyberForum.ru

Python: научные вычисления

Войти
Регистрация
Восстановить пароль
 
LisAlice
0 / 0 / 0
Регистрация: 03.11.2015
Сообщений: 3
#1

Реализовать интерпретатор для вычисления функций - Python

19.12.2016, 19:18. Просмотров 204. Ответов 0
Метки нет (Все метки)

Необходимо реализовать интерпретатор для вычисления функций в обычном базисе Клини.
Есть основной код, нужна помощь с классом FunctionS, S(x)=x+1 - функция следования.

Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
def extract_args(string):
    """ Функция для анализа строки, содержащей аргументы: (10,U[2,2](1,1),5) """
 
    proc_str = string[1:-1]
    num_parenthesis = 0
    num_brackets = 0
    start = 0
    args = list()
    for ch_num, ch in enumerate(proc_str):
        if ch == u'(':
            num_parenthesis += 1
        elif ch == u')':
            num_parenthesis -= 1
        elif ch == u'[':
            num_brackets += 1
        elif ch == u']':
            num_brackets -= 1
        elif ch == u',' and num_parenthesis == 0 and num_brackets == 0:
            args.append(proc_str[start : ch_num])
            start = ch_num + 1
    
    args.append(proc_str[start :])
    
    return [global_parse_string(arg) for arg in args]
 
 
def args_to_unicode(args):
    """ Утилитарная функция для преобразования списка аргументов в строку. """
 
    return u','.join([unicode(arg) for arg in args])
 
            
def global_eval(obj):
    """ Функция для вычисления значения объекта. """
 
    print unicode(obj)
    if type(obj) is int:
        # Если объект - это число, то просто возвращаем его
        return obj
    else:
        # Если объект - это функция, то вычисляем ее
        return obj.eval_obj()
 
    
class FunctionU(object):
    """ 
    Объект-функция проекции, например, U[2,1](1,2) == 1 
    U[<кол-во аргументов>,<номер возвращаемого аргумента>](<аргумент1>,<аргумент2>)
    """
 
    def __init__(self, string):
        super(FunctionU, self).__init__()
        self.num_args = -1
        self.targ_arg = -1
        self.args = list()
        
        self._parse_string(string)
        
    def _parse_string(self, string):
        """ Функция для анализа строки. """
        start = string.find(u'[')
        end = string.find(u']', start)
        self.num_args, self.targ_arg = string[start + 1 : end].split(u',')
        self.num_args = int(self.num_args.strip())
        self.targ_arg = int(self.targ_arg.strip())
        
        self.args = extract_args(string[end + 1 : ])
        
    def eval_obj(self):
        """ Вычисляем функцию U: возвращаем заданный аргумент. """
        return global_eval(self.args[self.targ_arg - 1])
    
    def __unicode__(self):
        return u'U[{},{}]({})'.format(self.num_args, 
                                      self.targ_arg, 
                                      args_to_unicode(self.args))
        
        
class FunctionS(object):
    """ Функция следования. S(x) = x + 1. Вам необходимо ее реализовать. """
    def __init__(self,string):
        pass # Your code here.
        
    def eval_obj(self):
        pass # Your code here.
    
    def __unicode__(self):
        pass # Your code here.
    
    
def global_parse_string(string):
    """ Функция для анализа входной строки. """
    proc_str = string.strip()
    
    tp = proc_str[0]
    if tp == u'U':
        return FunctionU(proc_str[1:])
    elif tp == u'S':
        return FunctionS(proc_str[1:])
    elif tp.isdigit():
        return int(proc_str)
    else:
        raise ValueError()
        
syntax_tree = global_parse_string(u'S(S(S(U[3,2](U[1,1](1),S(U[2,2](1,6)),3))))')
global_eval(syntax_tree)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2016, 19:18     Реализовать интерпретатор для вычисления функций
Посмотрите здесь:

Реализовать два приложения, вычисляющих сумму ряда Маклорена для функций - Python
Есть класс, как создать каркас приложения для вычисления неопределенного числового ряда. Реализовать два конкретных приложения,...

Интерпретатор функций - Visual Basic
Помогите придумать интерпретатор функций. Смысл в чем, в textbox вводится формула, по которой должен выполнится расчет. Как лучше это...

Реализовать командный интерпретатор - C++
Пользователь вводит в консольное приложение команду (в дальнейшем которая будет выполнять операции с виртуальной файловой системой VFS),...

Разработать интерпретатор с поддержкой определяемых пользователем функций - C++
помогите пожалуйста мне нужно разработать интерпритатор с поддержкой определяемых пользователем функций. сам интерпритатор я написала а вот...

приложение для вычисления функций - Delphi
разработать приложение для вычисления функций y=x^2+In(x+5)

Реализовать упрощенный «модельный» командный интерпретатор Shell - C Linux
Скажите, пожалуйста, с чего начать. Вот задание: Реализовать на языке C упрощенный «модельный» командный интерпретатор Shell. Поток...

Написать программу для вычисления функций - PascalABC.NET
Скрин во вложении фотографии текста запрещены. Фотография текста заменена текстом.Program Prog1; Uses crt; VAR m,n: integer; ...

QtScript для вычисления математических функций - C++ Qt
Всем привет. Задача такова. Пользователь вводит функцию в lineEdit, функция содержит независимую переменную x и константы например Q0. ...

программа для вычисления значений функций - Pascal ABC
составить программу для вычисления значений функции F(x) на отрезке с шагом h. результат представлен в виде таблицы, первый столбец...

Программный код для вычисления функций f(x) и f1(x) - VBA
Создать программный код для вычисления функций f(x) и f1(x) в соответствии с заданным вариантом. В VBA не существует функции, вычисляющей...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru