Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ помогите доделать задачу на булевские функции

Автор: blackhard 13.11.2007 2:25

помогите доделать.задание такое нужно вывести таблицу значений истинности для заданной функции.
я вот уже почти написал прогу я работаю в ней только со строками в начале в заданной функции вывожу все возможные варианты значений тоесть допустим функция A*B я доделал задачу до того этапа что она должна выводить вот это
0*1
1*0
1*1
0*0 тоесть перебирает все возможные варианты но тут и возникает проблема прога почемуто выводит
0*0
0*0
0*0
0*0 и я не могу понять почему вродебы все правильно мнеб только исправить это а дальше я знаю как делать
вот прога

{colichestvo perem}
function findvar(s:string):string;
var
result:string;
ch:char;
begin
result:='';
for ch:='A' to 'Z' do
if pos(ch,s)>0 then
result:=result+ch;
findvar:=result;
end;
{perevod v 2 sis}
function inttobin(n,k:longint):string;
var
s,d: String;
i,c:integer;
const
radix=2;
digit: string[10]='0123456789';
begin
s:='';
D:='';
{if N<K then
begin
c:=K-n;
for i:=1 to c do
d:=d+'0';
end;}
repeat
s:=digit[(n mod radix)+1]+s;
n:=n div radix;
until n=0;
if k-length(s)>0 then
begin
c:=k-length(s);
for i:=1 to (c-1) do
d:=d+'0';
end;
d:=d+s;
inttobin:=d;
end;
{zamena v stroke}
procedure replase(sold,snew:string;var s:string);
var n:integer;
begin
while pos(sold,s)>0 do
begin
n:=pos(sold,s);
delete(s,n,length(sold));
insert(snew,s,n);
end;
end;
{colichestvo vozmoghnih znaheniy}
function voz(k:integer):integer;
var
q,c:integer;
begin
c:=1;
for q:=1 to K do begin
C:=c*2;
end;
voz:=c;
end;
{osnovnaya programma}
var
s,x,z,svar:string;
I,k,e,j:integer;
begin
writeln('ўўҐ¤ЁвҐ дг­ЄжЁо');
readln(s);
z:=s;
svar:='';
x:=findvar(s);
K:=voz(length(X));
for i:=0 to (K-1) do
begin
svar:=inttobin(i,k);
for j:=1 to length(X) do
begin
replase(x[j],svar[j],z);
writeln(z);
end;
end;
{replase('A','0',s);
writeln(s);}
readln;
end.


помогите пожалуйстя smile.gif проблема в этой функции а именно с добавлением нулей ночето не получается исправить
Код
function inttobin(n,k:longint):string;
var
     s,d: String;
     i,c:integer;
const
     radix=2;
     digit: string[10]='0123456789';
begin
  s:='';
  D:='';
     {if N<K then
     begin
      c:=K-n;
      for i:=1 to c do
       d:=d+'0';
     end;}
     repeat
         s:=digit[(n mod radix)+1]+s;
         n:=n div radix;
     until n=0;
     if k-length(s)>0 then
     begin
     c:=k-length(s);
      for i:=1 to (c-1) do
       d:=d+'0';
     end;
     d:=d+s;
     inttobin:=d;
end;

Автор: Malice 13.11.2007 3:05

Замени:

svar:=inttobin(i,k);
на
svar:=inttobin(i,length(x));

а то выравнивается не на кол-во переменных, а на хз что smile.gif

Автор: volvo 13.11.2007 3:12

blackhard, посмотри здесь:
http://volvo71.narod.ru/tasks.htm#bool_func_table

Автор: blackhard 13.11.2007 3:54

Цитата(volvo @ 12.11.2007 23:12) *

blackhard, посмотри здесь:
http://volvo71.narod.ru/tasks.htm#bool_func_table

спасибо все оказалось просто сделал у себя как вэтой проге для дополнения нулями отдельную функцию и все заработало smile.gif