IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Булевские функции, проверка на НСДФ
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


Дано: строка , содержащая булевскую функцию от переменных А,В ….. (отрицание к А запписывается как \А) с использованием операций +, * ,\
Задание: проверить, приведена ли функция к нормальной совершенной форме
Указание: количество имеющихся булевских переменных и их конкретные обозначения должны определяться программно . Учесть , что нормальная форма не может содержать повторяющихся слогаемых .
Помогите !
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






blink.gif Мля, мне еще учиться и учться чтобы такие задачки решать.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






NoRToN

Приведи примеры функций для проверки (меня интересует их сложность), и рядом с каждой - результат, который хочешь получить...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


надо только проверить,преобразовывать не надо. Она(строка)должна состоять из суммы слагаемых (каждый из которых есть произведение аргументов исходной функции или их отрицание)Пример не знаю sad.gif Если соответствует то верно если нет,соответственно не верно
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Вот эта программа проверяет, является ли строка, заданная в S, приведенной к НСДФ (изменив несколько символов, можно сделать функцию, проверяющую на НСКФ) :D

Код

function noSpace(s: string): string;
 var p: byte;
 begin
   repeat
     p := pos(' ', s);
     if p <> 0 then
       delete(s, p, 1)
   until p = 0;
   noSpace := s
 end;

const
 maxTokens = 20;
 stackIndex: integer = 0;
type
 stackType = array[1 .. maxTokens] of string;
var
 stack, localStack: stackType;
 firstPass: boolean;


{ returns True if st already exists in s }
function insertStack(st: string; var s: stackType;
        var index: integer): boolean;
 var
   i: integer;
 begin
   insertStack := True;

   for i := 1 to index do
     if s[i] = st then exit;

   inc(index); s[index] := st;
   insertStack := False
 end;

{bubble sort}
procedure sort(var a: stackType; len: integer);
 var
   i, j: integer;
   T: string;
 begin
   for i := 1 to len do
     for j := 1 to len - i do
       if a[j] >= a[j+1] then
         begin
           T := a[j]; a[j] := a[j+1]; a[j+1] := T;
         end;
 end;

function equalStacks(var a, b: stackType;
        len: integer): boolean;
 var i: integer;
 begin
   equalStacks := false;
   for i := 1 to len do
     if a[i] <> b[i] then exit;
   equalStacks := true
 end;

function getToken(delim: char;
        var s: string): string;
 var p: byte;
 begin
   getToken := '';
   p := pos(delim, s);
   if p <> 0 then
     begin
       getToken := Copy(s, 1, pred(p));
       delete(s, 1, p); exit
     end;
   getToken := s; s := ''
 end;

function checkToDf(delim: char;
        s: string): boolean;
 var
   localStack: stackType;
   nextToken: string;
   i, index: integer;
   exists: boolean;
 begin
   checkToDf := false;

   index := 0;
   while s <> '' do
     begin
       nextToken := getToken(delim, s);
       if nextToken[1] = '\' then
         delete(nextToken, 1, 1);

       if insertStack(nextToken, localStack, index)
         then exit;

       if firstPass then
         if insertStack(nextToken, stack, stackIndex) then exit;
     end;

   checkToDf := true;

   if firstPass then
     sort(stack, stackIndex)
   else
     if index = stackIndex then
       begin
         sort(localStack, index);
         checkToDf := equalStacks(stack, localStack, index)
       end
     else checkToDf := false
 end;

const
 s: string = 'b*\a*c + \a*\b*c + a*\b*c + a*\b*\c'; {Ok}
 (*
 s: string = 'b*\a*c + \a*\b*c + a*\b*c + a*\b*\a*c'; {Ошибка}
 *)
var
 nextToken: string;

const
 b: boolean = True;

begin
 firstPass := True;
 s := noSpace(s);

 while (s <> '') and b do
   begin
     nextToken := getToken('+', s);
     b := checkToDf('*', nextToken);
     firstPass := False;
   end;

 if b then
   writeln( 'This function is Ok' )
 else
   writeln( 'Error - wrong function' )
end.


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


Спасибо за помощь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 11.01.2025 22:38
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name