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

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

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

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

29.03.2011, 17:45. Просмотров 200. Ответов 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++
Здорова! Никак не могу передать функциональный объект в функцию. От примерчик, функция передается нормально, а объект нет. #include...

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

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

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

сумма функционального ряда - Математический анализ
a_n=\frac{(1-x^5)^{n-1}}{n-1}

Определение функционального предиката - Lisp
Добрый день! прошу помочь с решением следующей задачи: &quot;определите функциональный предикат (every pr ls), который истинен в том и только в...

Тестируем ПО (от функционального до нагрузочного) - Поиск работы
Здравствуйте! Проведем тестирование ПО (функциональное, локализации, совместимости, безопасности, нагрузочное). Имеем опыт...

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

Назначение функционального преобразователя - Программируемая логика
Нужно было создать схему, я создал по примеру других)) Смешно, но что теперь делать. У других эти схемы ни чего не выполняют, просто для...

Найти сумму функционального ряда - Математический анализ
Помогите найти сумму такого ряда. Я думаю, здесь надо применять почленное интегрирование или дифференцирование, но не вижу, как в этом...

Конканетативное программирование против функционального
. Конканетативный язык программирования - это такой язык, на котором передача результата любой части программы на вход другой достигается...


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

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

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