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

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

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

2 страниц V  1 2 >  
Closed Topic Открыть новую тему 
> Булевские ф-ции, упрощение булевских ф-ций
сообщение
Сообщение #1


Новичок
*

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

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


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


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Мог бы ты написать пару примеров входных и выходных данных ?


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

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

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


Перед последним begin`ом в строчке // s: string = 'a*\b + b'; ставит курсор
на // и пишет begin expected blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


В BP и TP нету комментария вида //, убери // и все что за ним стоит или заключи это
между { и }

я думаю дело в этом ...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






lol.gif Вот что значит FPC
Замени на
{ s: string = 'a*\b + b'; }

а можешь вообще удалить, это было просто для теста...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Ему не нравиться переменная //s можно поменять на ps !!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


А вот ещё если написать строчку s: string = 'a*\a*b+a*\b+b';
как s: string = 'a*\a*b+a*\b+b+b; по идее должно получиться a*\b + 2*b'
там ведь в задание написаноисключив повторяющиеся слагаемые
я это понимаю как b+b=2*b или я что не так понял
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






To: rol5en
То, что ты написал в предыдущем посте на вяжется никак с названием топика. У тебя тема какая?
Цитата
Булевские ф-ции, упрощение булевских ф-ций

Допустим, b = True... Что имеем? True + True = 2 * True?

Нет, в булевой алгебре True + True = True or True = True !!! А то, что ты написал - это приведение подобных, и к булевой алгебре никакого отношения не имеет... no1.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


Да ты прав! Извини! good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


Я тут знаешь подумал над твоим True + True = True or True = True!!! и пришёл к выводу что исключение повторяющихся слагаемых значит b+b=b т.е. a*\a*b+b+b будет равно b! Как бы это сделать??? wacko.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата
Как бы это сделать???

smile.gif Уже сделано... Я исправил программу, проверяй новую версию... Она как раз это и делает...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

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

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


А где её взять? Новую версию? Или ты ту отредактировал?

Сообщение отредактировано: rol5en -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Цитата
Или ты ту отредактировал?

yes2.gif Именно... Пост №3... Все исправления будут вноситься мной туда... Там всегда будет самая последняя и правильная версия...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

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

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


А как мне туда перейти? Кинь ссылку=)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






blink.gif А что, в начало этой же страницы ты без ссылки не сможешь подняться?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

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

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


Извини да ступил! Но раз это последняя версия то убери может тогда
// s: string = 'a*\b + b'; и ещё если написать a+b+a*\b+a то получиться
+a+b+a*\b как убрать плюс???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






To: rol5en
В следующий раз копируй программу ПОЛНОСТЬЮ - со всеми пробелами !!! Ты упустил какой-то пробел (ищи теперь сам где он был), и теперь будешь получать неверный результат... У меня только что нормально отработало.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

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

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


Ещё раз извини! unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Новичок
*

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

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


Ещё вопрос это я упустил или а*а даёт ноль?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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