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

С++ для начинающих

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

Из функционального в арифметическое - C++

29.03.2011, 17:45. Просмотров 202. Ответов 0
Метки нет (Все метки)

Дан входной файл. В нем выражение в функциональном представлении. Например,
+(*(a,-(3,x)),f(/(3,10),y)) надо получить: ((a*(3-x))+f(3/10,y))
Я взял (для упрощения) что у любой функции ровно два аргумента.
Я сделал рекурсивную функцию в которую засылется строка и возвращается ссылка на строку(char*) .Засылаем в функцию, если видим знак операции, то запоминаем знак и засылаем рекурсивно два аргумента(строки) в функцию.и так далее пока аргумент не станет состоять из одного символа. После этого возвращает строку, ставим "(" результат_фнц(1ый_аргумент) "знак операции" результат_фнц(2ой_аргумент) ")" (если вместо знака операции f, то небольшие изменения) и этот результат опять возвращаем.
C++
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
#include <string.h>
#include <fstream.h>
const n=100;
char *func(char l[n])  //[COLOR="#ff0000"]как вернуть локальную переменную res?[/COLOR]
{
    char ok,a[n],a1[n],a2[n];bool b0,f;int i,j,k; char res[n];
    if (((l[0]=='+')|(l[0]=='-'))|((l[0]=='/')|((l[0]=='*')|(l[0]=='f'))))
    {
        ok=l[0];
        b0=1;i=3;j=0;f=0;k=0;
        while (b0)
        {
            if (l[i]=='(')
            {
                j++;a1[k]=l[i];//f=true;
            }
            else
                if (l[i]==')') 
                    {
                        j--;a1[k]=l[i];
                    }
            if ((l[i]==',')/*&(f))*/&(j==0))
                b0=0;
            else a1[k]=l[i];
            l++;k++;
        }
        f=0;j=0;k=0;
        while (!f)
        {
            if (l[i]='(')
            {
                j++;a2[k]=l[i];
            }
            else
                if ((l[i]=')')&(j==0))
                {
                    f=1;
                }
                else
                    if (l[i]=')')
                    {
                        j--;a2[k]=l[i];
                    }
                    else
                        a2[k]=l[i];
            k++;i++;
        }
        if (ok!='f')
        {
            a[0]='(';
            strcat(a,func(a1)); //[COLOR="Red"](*) func(a1) должно вернуть n-символьную строку, но
                                                            // добавить надо только ту часть в которой есть значения [/COLOR]
            a[strlen(a)+1]=')';
            a[strlen(a)+1]=ok;
            a[strlen(a)+1]='(';
            strcat(a,func(a2)); //(*)
            a[strlen(a)+1]=')';
        }
        else 
        {
            a[0]='f';
            a[1]='(';
            strcat(a,func(a1));  //(*)
            a[strlen(a)+1]=',';
            strcat(a,func(a2));  //(*)
            a[strlen(a)+1]=')';
        }
        //for (i=0;i<n;i++)
        //  cout<<a[i];
        strcpy(res,a);
        return res;
        ;
    }
    else 
        if (strlen(l)==1)
        {   //cout<<l[0];
            res[0]=l[0];
            return res;
        }
    
}
void main()
{
    char l[n],b[n];int i=0;
    ifstream input;
           input.open ("input.txt",ios::in);
    input.getline(l,sizeof(l));
    for (i=0;i<strlen(l);i++)
    cout<<l[i];
    strcpy(b,func(l));
    cout<<'\n';
    for (i=0;i<n;i++)
    cout<<b[i];
    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2011, 17:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из функционального в арифметическое (C++):

Шаблон функционального класса - C++
Пишу лабораторную на С++. Нужно написать шаблоны функциональных классов, с методами вне этих шаблонов, и всё это в отдельном СРР. Я...

Передача функционального объекта в функцию - C++
Здорова! Никак не могу передать функциональный объект в функцию. От примерчик, функция передается нормально, а объект нет. #include...

Конструкторы и деструкторы функционального объекта - C++
Привет всем. Вообщем разбирал задачу, в которой рассматривается алгоритм for_each, я решил добавить отладочный вывод в конструктор и...

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

При вызове метода функционального объекта в шаблонной функции ошибка компиляции C2039 - C++
Объект класса Entry - это запись в журнале экзаменационной сессии: номер зачетки, фамилия, курс, группа, дисциплина, оценка. В задаче есть...

Найти среднее арифметическое квадратов и среднее арифметическое абсолютных значений двух вещественных чисел - C++
Всем здрасте помогите плиз. Дается два вещественных числа. Найти среднее арифметическое их квадратов и среднее арифметическое их абсолютных...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2011, 17:45
Привет! Вот еще темы с ответами:

Вычислите среднее арифметическое положительных и среднее арифметическое отрицательных чисел - C++
Дано n вещественных чисел,которые вводятся с клавиатуры. Вычислите среднее арифметическое положительных и среднее арифметическое...

Найти среднее арифметическое значение четных элементов и среднее арифметическое нечетных элементов и сравнить их между собой - C++
Найти среднее арифметическое значение четных элементов и среднее арифметическое нечетных элементов и сравнить их между собой. Вот часть...

Непрерывность функционального ряда - Математический анализ
Доброго времени суток, помогите разобраться и доказать непрерывность функционального ряда \frac{1}{\sqrt{n}}cos(nx)...

Задание функционального ряда - Matlab
Помогите, пожалуйста! Как записать это в MATLAB? суммирование идет по i, T-параметр, а все остальное-известные константы. e =...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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