![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
blackhard |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
задача такаяисходная информация:строка содержащая булевскую функцию от переменных А,В....,приведенную к нормальной совершенной форме.
задание:вывести таблицу истинности этой функции. указание:количество переменных и их обозначения должны определяться программно. подскажите кто может ![]() и если можите подскажите еще алгоритм решения.спасибо! ![]() |
![]() ![]() |
blackhard |
![]()
Сообщение
#2
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
function fromdec(n, radix: longint): string;
var
s: string;
const
digit: string[16] = '0123456789ABCDEFQ';
begin
s := '';
repeat
s := digit[(n mod radix) + 1] + s;
n := n div radix;
until n = 0;
while length(s) < 2 do s := '0' + s;
fromdec := s;
end;
const
s: string = 'A*/B+/A*/C*/D+B*/C*D';
type
tmatrix = array[0 .. 3, 0 .. 3] of 0 .. 1;
var
mx: tmatrix;
p, i: integer;
mask, sub_s: string;
function matches(s, mask: string): boolean;
var i: integer;
begin
matches := true;
for i := 1 to length(s) do begin
if (mask[i] = 'X') or (s[i] = mask[i]) then {}
else matches := false
end;
end;
procedure print_mx(const mx: tmatrix);
var i, j: integer;
begin
for i := 0 to 3 do begin
for j := 0 to 3 do write(mx[i, j]:3);
writeln;
end;
end;
procedure fill_mx(var mx: tmatrix;
first, second: string);
var i, j: integer;
begin
for i := 0 to 3 do
for j := 0 to 3 do
if matches(fromdec(i, 2), first) and matches(fromdec(j, 2), second)
then mx[i, j] := 1;
end;
{var
mx: tmatrix;
p, i: integer;
mask, sub_s: string; }
begin
s := s + '+';
repeat
p := pos('+', s);
if p > 0 then begin
sub_s := copy(s, 1, p-1);
mask := '';
for i := 1 to 4 do mask := mask + 'X';
for i := 1 to length(sub_s) do begin
if sub_s[i] in ['A' .. 'D'] then
if (i > 1) and (sub_s[i - 1] = '/') then
mask[ord(sub_s[i]) - ord('A') + 1] := '0'
else
mask[ord(sub_s[i]) - ord('A') + 1] := '1';
end;
fill_mx(mx, copy(mask, 1, 2), copy(mask, 3, 2));
delete(s, 1, p);
end;
until p = 0;
print_mx(mx);
readln;
end.
может кто поможет разобраться с этой прогой!? ![]() ![]() ![]() |
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 5:12 |