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

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

Восстановить пароль Регистрация
 
gtrfan34
0 / 0 / 0
Регистрация: 26.12.2010
Сообщений: 10
29.03.2011, 17:45     Из функционального в арифметическое #1
Дан входной файл. В нем выражение в функциональном представлении. Например,
+(*(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++ Конструкторы и деструкторы функционального объекта
C++ ср арифметическое
передача функционального объекта в функцию C++
C++ Вычислите среднее арифметическое положительных и среднее арифметическое отрицательных чисел
C++ Шаблон функционального класса
C++ Найти среднее арифметическое значение четных элементов и среднее арифметическое нечетных элементов и сравнить их между собой

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

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

Текущее время: 09:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru