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

Пропозициональная формула - C++

Восстановить пароль Регистрация
 
AndrewSage
0 / 0 / 0
Регистрация: 05.09.2012
Сообщений: 22
26.11.2013, 09:31     Пропозициональная формула #1
Написать программу для реализации следующего алгоритма
определения является ли данная строка символов пропозициональной формулой или нет:
шаг 1. Проверка скобочного итога формулы.
шаг 2. Проверка того, что первый символ открывающаяся скобка, а последний-
закрывающаяся. В случае выполнения условия, удалить внешние скобки.
шаг 3. Если первый символ отрицание, то удалить его и повторить шаг 2. Иначе выделить
две формулы (по нулевому скобочному итогу) и проверить наличие знака операции между
ними.
шаг 4. Повторить шаги 2 и 3 для каждой подформулы, если она не является
пропозициональной переменной.

Пропозициональная формула:
Кликните здесь для просмотра всего текста
Из пропозициональных переменных формулы строятся по следующим правилам:
1. Пропозициональная переменная есть формула.
2. Если А– формула, то ¬А– тоже формула.
3. Если A и B некоторые формулы, то ( A ∨B),(A ∧B),(A →B) тоже являются
формулами.
Относительно формул верно следующее утверждение об однозначности
синтаксического разбора:
Теорема 1.1: Пропозициональная формула, не являющаяся переменной, может
быть представлена только в одном из четырех видов (А ∧ В) , (А ∨ В) , ( А → В) , ¬А,
где А и В– некоторые формулы.
Формальное доказательство можно провести так. Назовем скобочным итогом
разницу между открывающимися и закрывающимися скобками. Индукцией по
построению формулы легко доказать
Лемму 1.1: Скобочный итог формулы равен нулю.
Доказательство можно провести индукцией по построению. Проверяем это
утверждение для переменных, а также доказываем, что если оно верно для формул А и В,
то оно верно также и для формул (А ∧ В) , (А ∨ В) , ( А → В) , ¬А.
Определение: Формулы А и В имеют одинаковое строение, если формула А может
быть получена из формулы В путем замены каждого вхождения функционального
символа (или логической связки) формулы В на соответствующий функциональный
символ формулы А.


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
#include "stdafx.h"
#include <iostream>
#include <string>
 
using namespace std;
 
void main()
{
    string str;
    int q=0,w=0,d;
    getline(cin,str);                  // Ввод строки
    d=str.length();                    // Длина строки
    cout<<str<<endl;
       for (int i=0; i<d; i++)         // читаем строку
       {
           if (str[i]=='(') q++;       // Находим все '('
           if (str[i]==')') w++;       //Находим все ')'
       
              if (q==w)                // Если кол-во скобок '(' и ')' равно, то
              {
                  again:
                  if((str[0]=='(') && (str[d-1]==')'))  // Проверяем первую и последнюю скобки
                  {
                      str.erase(0,1);                   // Удаляем первую
                      str.erase(d-2,1);                 // и последнюю скобки
                  }
                  if (str[0]=='-') str.erase (0,1); goto again;     // Если первый элемент = НЕ, то удаляем его и снова выполняем проверку скобок
              }   
       }
       cout<<str<<endl;
       system ("pause");
}
Не
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2013, 09:31     Пропозициональная формула
Посмотрите здесь:

C++ Формула
C++ Формула
C++ Формула на с++
C++ формула в С++
Формула C++
Формула C++
Формула! C++
формула на c++ C++

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

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

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