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

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

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

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


Новичок
*

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

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


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


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

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

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


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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.11.2005 16:33
Сообщение #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 - 16.11.2005 18:59
 К началу страницы 
+ Ответить 
rol5en
сообщение 16.11.2005 16:50
Сообщение #4


Новичок
*

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

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


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


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

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

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


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

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


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


Гость






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

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


Новичок
*

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

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


Ему не нравиться переменная //s можно поменять на ps !!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
rol5en
сообщение 16.11.2005 17:02
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.11.2005 17:11
Сообщение #9


Гость






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

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

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


Новичок
*

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

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


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


Новичок
*

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

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


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


Гость






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

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


Новичок
*

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

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


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

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


Гость






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

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


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


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


Новичок
*

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

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


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

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

 



- Текстовая версия 21.06.2025 20:00
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"