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

Подскажите как исправить функцию - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка в инициализации базовых классов http://www.cyberforum.ru/cpp-beginners/thread919943.html
Привет. Пишу код из книги Лафоре. #include <iostream> using namespace std; #include <windows.h> enum posneg {pos, meg}; class Distance { protected: int feet;
C++ Как правильно описать функцию acos? И ребят помогите разобраться в чем ошибки здесь, делаю лабораторную по методу секущих И еще как можно графически выполнить метод секущих через Dos Box? Заранее благодарю за помощь #include <iostream> #include <math.h> #include <locale> #include <stdio.h> #include <conio.h> http://www.cyberforum.ru/cpp-beginners/thread919942.html
Сортировка массива по убыванию элементов C++
Скажите пожалуйста, что не так, если не так, в этом коде) Задание: отсортировать массив по убыванию значений элементов в строках и столбцах методом пузырька #include <iostream> #include <conio.h> using namespace std; int main() { setlocale ( LC_ALL, "Russian_Russia.1251" ); int a;
указание ключа компилятора для OpenMP C++
смотрю на сайте http://edu.chpc.ru/parallel/mainse4.html Для использования механизмов OpenMP нужно скомпилировать программу компилятором, поддерживающим OpenMP, с указанием соответствующего ключа например: icc/ifort используется ключ компилятора -openmp gcc /gfortran -fopenmp Sun Studio -xopenmp Visual C++ - /openmp PGI -mp у меня Mingw(4.8.1-posix-dwarf-rev1) - пишу в графе "other...
C++ Работа с файлами (запись данных, сортировка) http://www.cyberforum.ru/cpp-beginners/thread919922.html
Здравствуйте, помогите пожалуйста с заданием: написать программу, которая запрашивает у пользователя имя, фамилию, дату рождения, номер группы, пол, рост, вес и записывает данные в файл. Программа должна выполнять сортировку данных из записанного файла по любому параметру пользователя(параметр сортировки задается пользователем при выполнении программы) Я совсем не знаю, как быть, все...
C++ Нотация O большое Здорова! Есть задачка: "Изучите О() нотацию. Приведите реалистичный пример, в котором получается, что О(N*N) быстрее, чем О(N) для некоторых N>10." подробнее

Показать сообщение отдельно
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
11.07.2013, 01:20     Подскажите как исправить функцию
При условии что -1, -2, -3 являются уникальными литералами, т.е. фактически не могут интерпретироваться кроме как знаки +, -, *. А также предоставляя системе самой освободить память по завершению программы:
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include <iostream>
#include <list>
#include <cctype>
 
struct Token_error {};
struct Range_error {};
 
struct TNode
{
    TNode* left;
    TNode* right;
    int val;
 
    TNode(int v) : left(0), right(0) { val = v; }
    TNode(int v, TNode* l, TNode* r) : val(v), left(l), right(r) {}
};
 
typedef std::list<TNode*> Ln;
 
void makeTokensList(const char* line, Ln& emptyList)
{
    const char* p = line;
    while (*p)
    {
        switch (*p)
        {
        case '+':
            emptyList.push_back(new TNode(-1));
            break;
        case '-':
            emptyList.push_back(new TNode(-2));
            break;
        case '*':
            emptyList.push_back(new TNode(-3));
            break;
        default:
            if (isdigit(*p))
            {
                emptyList.push_back(new TNode(*p - '0'));
            }
            else if (isspace(*p))
            {
                ++p;
                continue;
            }
            else
            {
                throw Token_error();
            }
            break;
        }
        ++p;
    }
}
 
void showThis(TNode* v)
{
    std::cout << v->val << ' ';
    std::cout.flush();
}
 
TNode* tryLex(const char* line)
{
    // First part.
    Ln x;
    const char* p = line;
 
    while (*p)
    {
        switch (*p)
        {
        case '+':
            x.push_back(new TNode(-1));
            break;
        case '-':
            x.push_back(new TNode(-2));
            break;
        case '*':
            x.push_back(new TNode(-3));
            break;
        default:
            if (isdigit(*p))
            {
                x.push_back(new TNode(*p - '0'));
            }
            else if (isspace(*p))
            {
                ++p;
                continue;
            }
            else
            {
                throw Token_error();
            }
            break;
        }
        ++p;
    }
 
    // Second part.
    Ln::iterator it = x.begin();
    Ln::iterator tm = it;
    while (1 < x.size())
    {
        if ((*it)->val == -1 || (*it)->val == -2 || (*it)->val == -3)
        {
            tm = it; ++tm;
            Ln::iterator right_node = it;
            --right_node;
            Ln::iterator left_node = right_node;
            --left_node;
 
            if (right_node == x.begin())
            {
               throw Range_error();
            }
 
            (*it)->right = *right_node;
            (*it)->left = *left_node;
            x.erase(right_node);
            x.erase(left_node);
 
            it = x.begin();
            while (it != x.end() && it != tm)
            {
                ++it;
            }
        }
        else
        {
            ++it;
        }
    }
 
    return *x.begin();
}
 
void show(TNode* root)
{
    if (!root)
    {
        return;
    }
 
    show(root->left);
    std::cout << root->val << ' ';
    show(root->right);
}
 
int main()
{
    const char* parseLine = "5 6 7 + - 1 3 * +";
    TNode* root = tryLex(parseLine);
    show(root);
}
 
Текущее время: 04:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru