program lab_4;
var
x1,x2,x3,x4:integer;
f:array[1..10] of boolean;
i:integer;
function p1(q1,q2:boolean):boolean;{p1-Штрих Шеффера}
begin
p1:=not (q1 and q2);{p1-это q1|q2}
end;
function p2(q1,q2:boolean):boolean;{p2-Плюсик в круге}
begin
p2:=q1 and not q2 or q2 and not q1;{}
end;
function p3(q1,q2:boolean):boolean;{p3-Эквивалентность}
begin
p3:=not q1 and not q2 or q2 and q1;{}
end;
{ Производим колькуляцию, создаем матрицу.}
procedure CalculateBools;
begin
f[1]:=x1=1;
f[2]:=x2=1;
f[3]:=x3=1;
f[4]:=x4=1;
f[5]:=p1(f[3],f[1]);
f[6]:=p2(f[5],f[2]);
f[7]:=p1(f[4],f[2]);
f[8]:=p3(f[3],f[7]);
f[9]:=p2(f[6],f[8]);
f[10]:=p2(f[9],f[2]);
end;
{-Основная программа-}
begin
for x1:=0 to 1 do
for x2:=0 to 1 do
for x3:=0 to 1 do
for x4:=0 to 1 do
begin
CalculateBools;
if f[10] then i:=1 else i:=0;
writeln(x1,' ',x2,' ',x3,' ',x4,' ',i);
end;
readln;
end.
Другие языки программирования и технологии
Паскаль. Помогите лабу доделать и описание.
program lab_4;
var
f:array[1..10] of boolean;
x1,x2,x3,x4:integer;
function p1(q1,q2:boolean):boolean;{p1-Штрих Шеффера}
begin
p1:=not (q1 and q2){p1-это q1|q2}
end;
function p2(q1,q2:boolean):boolean;{p2-Плюсик в круге}
begin
p2:=q1 xor q2{так записывается плюсик в круге. Или так p2:=q1 <> q2}
end;
function p3(q1,q2:boolean):boolean;{p3-Эквивалентность}
begin
p3:=q1 = q2{а так эквивалентность}
end;
{Производим колькуляцию, создаем матрицу.
Но матрицы не видно, видно вектор - одномерный массив.
Во-первых использование глобальных переменных в процедуре - это нарушение принципов структурного программирования.
Во-вторых, что это за функция? Если булева функция 2-х переменных, то она имеет 4 значения,
если 4-х переменных, то должна иметь 16 значений. Здесь функция f на наборах 0000, 1011, 1100, 1101, 1110 и 1111 не определена.
И при этом полностью пересчитывается вся таблица истинности для различных наборов O_o}
procedure CalculateBools;
begin
f[1]:=x1=1;
f[2]:=x2=1;
f[3]:=x3=1;
f[4]:=x4=1;
f[5]:=p1(f[3],f[1]);
f[6]:=p2(f[5],f[2]);
f[7]:=p1(f[4],f[2]);
f[8]:=p3(f[3],f[7]);
f[9]:=p2(f[6],f[8]);
f[10]:=p2(f[9],f[2])
end;
{-Основная программа-}
var n:integer;
begin
for x1:=0 to 1 do
for x2:=0 to 1 do
for x3:=0 to 1 do
for x4:=0 to 1 do
begin
CalculateBools;
{if f[10] then i:=1 else i:=0; Что это? Почему используется значение функции только на наборе 1010?
Если в f[10] получается значение функции на текущем наборе переменных, то зачем массив? }
n := ((x1 shl 1 or x2) shl 1 or x3) shl 1 or x4; {функция неизвестна, поэтому порядок переменных тоже неизвестен}
if n in [1..10] then
writeln(x1:2,x2:2,x3:2,x4:2,ord(f[n]):2)
end;
readln
end.
P.S. Привели бы полностью задание, иначе гадание на кофейной гуще не способно вам помочь.
var
f:array[1..10] of boolean;
x1,x2,x3,x4:integer;
function p1(q1,q2:boolean):boolean;{p1-Штрих Шеффера}
begin
p1:=not (q1 and q2){p1-это q1|q2}
end;
function p2(q1,q2:boolean):boolean;{p2-Плюсик в круге}
begin
p2:=q1 xor q2{так записывается плюсик в круге. Или так p2:=q1 <> q2}
end;
function p3(q1,q2:boolean):boolean;{p3-Эквивалентность}
begin
p3:=q1 = q2{а так эквивалентность}
end;
{Производим колькуляцию, создаем матрицу.
Но матрицы не видно, видно вектор - одномерный массив.
Во-первых использование глобальных переменных в процедуре - это нарушение принципов структурного программирования.
Во-вторых, что это за функция? Если булева функция 2-х переменных, то она имеет 4 значения,
если 4-х переменных, то должна иметь 16 значений. Здесь функция f на наборах 0000, 1011, 1100, 1101, 1110 и 1111 не определена.
И при этом полностью пересчитывается вся таблица истинности для различных наборов O_o}
procedure CalculateBools;
begin
f[1]:=x1=1;
f[2]:=x2=1;
f[3]:=x3=1;
f[4]:=x4=1;
f[5]:=p1(f[3],f[1]);
f[6]:=p2(f[5],f[2]);
f[7]:=p1(f[4],f[2]);
f[8]:=p3(f[3],f[7]);
f[9]:=p2(f[6],f[8]);
f[10]:=p2(f[9],f[2])
end;
{-Основная программа-}
var n:integer;
begin
for x1:=0 to 1 do
for x2:=0 to 1 do
for x3:=0 to 1 do
for x4:=0 to 1 do
begin
CalculateBools;
{if f[10] then i:=1 else i:=0; Что это? Почему используется значение функции только на наборе 1010?
Если в f[10] получается значение функции на текущем наборе переменных, то зачем массив? }
n := ((x1 shl 1 or x2) shl 1 or x3) shl 1 or x4; {функция неизвестна, поэтому порядок переменных тоже неизвестен}
if n in [1..10] then
writeln(x1:2,x2:2,x3:2,x4:2,ord(f[n]):2)
end;
readln
end.
P.S. Привели бы полностью задание, иначе гадание на кофейной гуще не способно вам помочь.
Похожие вопросы
- Помогите пожайлуста доделать программу в паскале! Не получается ((
- Программа на паскале! Помогите(бесплатно)
- Паскаль! Помогите пожалуйста разобраться в задачке.
- Помогите с паскалем. Помогите написать программу переводящую из 10-ой в 16-ую систему счисления на паскале
- Паскаль помогите: С
- Программирование на Паскале Помогите, пожалуйста , написать программу на паскале
- Информатика.Практическая работа по паскалю.ПОМОГИТЕ.Все нужно ввиде паскаля.мучаюсь целый день.постоянно какие-то ошибки
- JavaSE помогите лабу сделать
- Сортировка массива (Паскаль) помогите пожалуйста
- кто нибудь знает турбо паскаль?помогите решить!выручайте,срочно надо!