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

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

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

Вывести значение логического выражения, заданного в виде строки S. - C++

28.03.2012, 07:18. Просмотров 980. Ответов 1
Метки нет (Все метки)

Вывести значение логического выражения, заданного в виде строки S.
Выражение определяется следующим образом («T» — True, «F» — False):
<выражение>::=T | F | And(<выражение> , <выражение>) |Or(<выражение> , <выражение>)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2012, 07:18     Вывести значение логического выражения, заданного в виде строки S.
Посмотрите здесь:

Рекурсия: вычислить значение логического выражения, заданного в виде строки - C++
Вывести значение логического выражения, заданного в виде строки S. Выражение определяется следующим образом («T» — True, «F» — False): ...

Арифмометр: посчитать значение выражения, заданного в виде строки - C++
Всем доброе время суток! Столкнулся с задачей и не могу сообразить даже в какую сторону шагать! Подскажите пожалуйста! Входные данные...

Вычислить значение арифметического выражения, заданного в виде строки - C++
с клавиатуры вводиться строка типа: &quot;(7+1)*23-1&quot; в одну строку, нужно определить значение арифметического выражения

Найти значение арифметического выражения, заданного в виде строки - C++
Помогите пожалуйста! Ввести с клавиатуры строку, которая содержит арифметическое выражение вида a+b+c.(например 10+2+1). Найти значение...

Вычисление арифметического выражения заданного в виде строки - C++
Собственно вопрос в названии: возможно ли преобразовать строку с оператором в оператор? string s = '+';

Вычислить значение логического выражения - C++
Помогите пожалуйста разобраться с задачей) Надо: Вычислить значение логического выражения при следующих значениях логических величин A,B...

Вычислить значение побитового логического выражения - C++
Добрый день господа форумчане не могу написать код верней не могу понять с чего начать задача (x↓y)+zvx̅ Как написать...

Вывести результат логического выражения (1 или 0) - C++
Задание состоит в следующем: Нужно ввести с клавиатуры числа 1 или 0. при конъюнкции результат равен 1, если все операнды равны1 ; во всех...

Вычислить значение логического выражения при всех возможных значениях логических величин А и В - C++
Вычислить значение логического выражения при всех возможных значениях логических величин А и В; а) не А и не В или А; б) В или не А и...

Вычислить значение заданного выражения - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; int main () { setlocale (LC_ALL,&quot;Russian&quot;); using namespace std; cout &lt;&lt;&quot;Введите...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Duha666
51 / 51 / 5
Регистрация: 10.03.2012
Сообщений: 138
28.03.2012, 07:37     Вывести значение логического выражения, заданного в виде строки S. #2
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
bool ans(char * str, int l, int r) // логическое значение на промежутке [l, r] строки str;
{
    for (int i = l; i <= r; i++)
    {
        if (str[i] == 'T') // если встретили T, то сразу возвращаем истину
            return true;
        if (str[i] == 'F') // аналогично с F
            return false;
        if (str[i] == '(') // если это скобка or или and
        {
            bool t = (str[i - 1] == 'r'); // определяем тип действия(Or/and), true - если это or
            int balance = 1, s; // balance - текущий баланс скобок для корректного определения конца функции, s - расположение запятой-сепаратора
            l = i + 1; // левая граница параметров функции
            for (int j = i + 1; balance > 0; j++)
            {
                if (str[j] == '(')
                    balance++;
                if (str[j] == ')')
                    balance--;
                if (str[j] == ',' && balance == 1) // устанавливаем позицию запятой
                    s = j;
                r = j;
            }
            if (t) // возвращаем значение в зависимости от типа действия
                return (ans(str, l, s - 1) | ans(str, s + 1, r)); 
            else
                return (ans(str, l, s - 1) & ans(str, s + 1, r));
        }
    }
}
Если хотите получить значение на строке x, то ответом будет ans(x, 0, strlen(x)).
Ответ Создать тему
Опции темы

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