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

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

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

> Булевские ф-ции, упрощение булевских ф-ций
сообщение
Сообщение #1


Новичок
*

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

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


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


Гость






To: klem4
А зачем? Без данных слабо? blum.gif
const
max_word = 255;
delimiter = [#32, '+'];
type
wrd_info = record
start, len: byte;
end;
twords = array[1 .. max_word] of wrd_info;
char_set = set of char;

function get_words(s: string; var words: twords;
delimiter: char_set): integer;
var
i, count, curr_len: integer;
begin
count := 0; i := 1;
while i <= length(s) do begin

while (s[i] in delimiter) and (i <= length(s)) do inc(i);

curr_len := 0;
while not (s[i] in delimiter) and (i <= length(s)) do begin
inc(i); inc(curr_len);
end;

if curr_len > 0 then begin
inc(count);
with words[count] do begin
start := i - curr_len;
len := curr_len
end;
end;

end;
get_words := count;
end;

const
num_vars = 2;

var
mult_words: twords;

function check_part(s: string): string;
var
contains: array[false .. true, 1 .. num_vars] of boolean;
i, count: integer;
curr_var: string;
_result: string;
zero: boolean;

begin
for zero := false to true do
for i := 1 to num_vars do
contains[zero, i] := false;

count := get_words(s, mult_words, [#32, '*']);
for i := 1 to count do begin
curr_var := copy(s, mult_words[i].start, mult_words[i].len);
contains[not (curr_var[1] = '\'),
ord(curr_var[length(curr_var)]) - ord('a') + 1] := true;
end;

_result := '';
i := 1; zero := false;
while (i <= num_vars) and not zero do begin

if contains[false, i] <> contains[true, i] then begin

if contains[false, i] then _result := _result + '\';
_result := _result + chr(ord('a') + i - 1) + '*';

end
else
if contains[false, i] = true then zero := true;

inc(i);
end;

if zero then _result := '0*';
check_part := copy(_result, 1, pred(length(_result)));
end;

var
plus_words: twords;
count: byte;

i: byte;

r_str: string;
part: string;

const
s: string = 'a*\a*b+a*\b+b';
{
s: string = 'a*\b + b';
}

begin
r_str := s;

repeat
s := r_str;

count := get_words(s, plus_words, [#32, '+']);
r_str := ' '; { Пробел }

for i := 1 to count do begin
part := check_part(copy(s, plus_words[i].start, plus_words[i].len));

if part <> '0' then begin
if pos(' ' + part, r_str) = 0 then begin
if r_str <> ' ' then r_str := r_str + ' + ';
r_str := r_str + part;
end;
end;
end;

until s = r_str;

writeln('the result: ', r_str);
end.


To: rol5en
Погоняй на разных примерчиках, в принципе (хотя это и не проверялось !!!) должно работать с любым количеством переменных, НО (!!!) обозначения переменных должны быть по порядку: (a, b, c, d, ...)
Само желаемое количество переменных задается здесь:
const
num_vars = 2; { <-- }


Найдешь глюки - говори, на каких значениях поймал их. Задание, кстати, довольно интересное yes2.gif

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

Сообщений в этой теме
rol5en   Булевские ф-ции   16.11.2005 18:31
klem4   Мог бы ты написать пару примеров входных и выходны…   16.11.2005 19:39
volvo   To: klem4 А зачем? Без данных слабо? :blum: con…   16.11.2005 20:33
rol5en   Перед последним begin`ом в строчке // s: string =…   16.11.2005 20:50
klem4   В BP и TP нету комментария вида //, убери // и все…   16.11.2005 20:53
volvo   :lol: Вот что значит FPC Замени на { s: string = …   16.11.2005 20:53
rol5en   Ему не нравиться переменная //s можно поменять на …   16.11.2005 20:55
rol5en   А вот ещё если написать строчку s: string = 'a…   16.11.2005 21:02
volvo   To: rol5en То, что ты написал в предыдущем посте …   16.11.2005 21:11
rol5en   Да ты прав! Извини! :good:   16.11.2005 21:13
rol5en   Я тут знаешь подумал над твоим True + True = True…   16.11.2005 22:23
volvo   :) Уже сделано... Я исправил программу, проверяй…   16.11.2005 22:26
rol5en   А где её взять? Новую версию? Или ты ту отредакти…   16.11.2005 22:29
volvo   :yes2: Именно... Пост №3... Все исправления буду…   16.11.2005 22:32
rol5en   А как мне туда перейти? Кинь ссылку=)   16.11.2005 22:36
volvo   :blink: А что, в начало этой же страницы ты без сс…   16.11.2005 22:42
rol5en   Извини да ступил! Но раз это последняя версия …   16.11.2005 22:51
volvo   To: rol5en В следующий раз копируй программу ПОЛН…   16.11.2005 22:57
rol5en   Ещё раз извини! :unsure:   16.11.2005 23:02
rol5en   Ещё вопрос это я упустил или а*а даёт ноль?   16.11.2005 23:04
rol5en   Всё всё всё это я лузер!   16.11.2005 23:09
Lomik   Помогите организовать всё тоже самое только ещё со…   17.11.2005 21:44
volvo   To: Lomik Ха, ну попробуй реализуй... Я посмотрю, …   17.11.2005 22:03
Altair   полуоффтоп НЕ булевские а булевы!   18.11.2005 2:13
Guest   Исходная информация: строка, содержащая булевскую …   29.11.2005 22:24
volvo   Пользуйся поиском... Уже делал ... Сообщения раз…   29.11.2005 22:26


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

 





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