Написать программу для вычисления логической функции

Логическая функция должна быть реализована в виде функции,принимающей в качестве параметров значения Х1 – Х4. Нулевые значения соответствуют логическому значению “ЛОЖЬ”, а не нулевые—“ИСТИНА”. Таблица истинности должна быть выведена в следующем ввиде. x1,x2,x3,x4.F.

Вот лабораторная готовая тока надо сделать чтоб вверху было еще написано x1,x2,x3,x4 и F соответственно. И если можете помочь описание сделать.

program lab_4;
var
x1,x2,x3,x4:integer;
f:array[1..10] of boolean;
i:integer;

function p1(q1,q2:boolean):boolean;
begin
p1:=not (q1 and q2);
end;
function p2(q1,q2:boolean):boolean;
begin
p2:=q1 and not q2 or q2 and not q1;<>
end;
function p3(q1,q2:boolean):boolean;
begin
p3:=not q1 and not q2 or q2 and q1;<>
end;

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;

Excel. Функции ЕСЛИ; И; ИЛИ +Примеры использования


writeln(x1,’ ‘,x2,’ ‘,x3,’ ‘,x4,’ ‘,i);
end;
readln;
end.

Форумчанин
Регистрация: 29.05.2011
Сообщений: 449

program lab_4; uses crt; var x1,x2,x3,x4:integer; < integer — целое число >f:array[1..10] of boolean; i:integer; < integer — целое число ><> function p1(q1,q2:boolean):boolean; < функция function p1(q1,q2:boolean):boolean;>begin p1:=not (q1 and q2); end; function p2(q1,q2:boolean):boolean; < функция function p2(q1,q2:boolean):boolean;>begin p2:=q1 and not q2 or q2 and not q1;<> end; function p3(q1,q2:boolean):boolean; < функция function p3(q1,q2:boolean):boolean;>begin p3:=not q1 and not q2 or q2 and q1;<> end; <> < Производим колькуляцию, создаем матрицу.><> procedure CalculateBools; < процедура 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 writeln(‘x1′,’ ‘,’x2′,’ ‘,’x3′,’ ‘,’x4′,’ ‘,’ =F’); 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.
Вложения

перевод паскаля.zip (311.6 Кб, 22 просмотров)

задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype

Читайте также:
Постановка и продюсирование культурно досуговых программ кем работать

Последний раз редактировалось denisbrain; 02.03.2012 в 09:17 .

Источник: www.programmersforum.ru

Написать программу для построения таблицы истинности логической функции F — Free Pascal

Выручайте, ребята! Написать программу для построения таблицы истинности логической функции F. Логическая функция должна быть реализована в качестве функции, принимающей в качестве параметров значения X1 — X4. Нулевые значения соответствуют логическому значению «ЛОЖЬ», а ненулевые — «ИСТИНА». Таблица истинности должна быть выведена в следующем виде:

23 Функция ЕСЛИ в Excel (IF)

Логическая функция: — это задание. А это код, который смог сделать, но доделать под задание свое не смог

program lab_4; uses crt; var x1,x2,x3,x4:integer; < integer — целое число >f:array[1..10] of boolean; i:integer; < integer — целое число ><> function p1(q1,q2:boolean):boolean; < функция function p1(q1,q2:boolean):boolean;>begin p1:=not (q1 and q2); end; function p2(q1,q2:boolean):boolean; < функция function p2(q1,q2:boolean):boolean;>begin p2:=q1 and not q2 or q2 and not q1;<> end; function p3(q1,q2:boolean):boolean; < функция function p3(q1,q2:boolean):boolean;>begin p3:=not q1 and not q2 or q2 and q1;<> end; <> < Производим колькуляцию, создаем матрицу.><> procedure CalculateBools; < процедура 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 writeln(‘x1′,’ ‘,’x2′,’ ‘,’x3′,’ ‘,’x4′,’ ‘,’ =F’); 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.

Код к задаче: «Написать программу для построения таблицы истинности логической функции F»

Листинг программы

function p(q1, q2: boolean): boolean; begin p := not (q1 or q2) end; function f(x1, x2, x3, x4: boolean): boolean; begin f := (x2 and x1) or x1 or p(x3, x4) xor (x2

Источник: studassistent.ru

Логика. Логические функции. Решение уравнений

Написать программу для решения логических уравнений полезно по многим причинам, хотя бы потому, что с ее помощью можно проверять правильность собственного решения тестовых задач ЕГЭ. Другая причина в том, что такая программа является прекрасным примером задачи на программирование, соответствующей требованиям, предъявляемым к задачам категории С в ЕГЭ.

Читайте также:
Виды театрализованных игровых программ

2^n

Идея построения программы проста, — она основана на полном переборе всех возможных наборов значений переменных. Поскольку для заданного логического уравнения или системы уравнений число переменных n известно, то известно и число наборов – , которые требуется перебрать. Используя базовые функции языка C# — отрицание, дизъюнкцию, конъюнкцию и тождество, нетрудно написать программу, которая для заданного набора переменных вычисляет значение логической функции, соответствующей логическому уравнению или системе уравнений.

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

Единственная сложность, возникающая при реализации программы, связана с задачей формирования по номеру набора самого набора значений переменных. Красота этой задачи в том, что эта, казалось бы, трудная задача, фактически сводится к простой, уже неоднократно возникавшей задаче. Действительно, достаточно понять, что соответствующий числу i набор значений переменных, состоящий из нулей и единиц, представляет двоичную запись числа i . Так что сложная задача получения набора значений переменных по номеру набора сводится к хорошо знакомой задаче перевода числа в двоичную систему.

Вот как выглядит функция на языке C#, решающая нашу задачу:

/// /// программа подсчета числа решений /// логического уравнения (системы уравнений) /// /// /// логическая функция — метод, /// сигнатура которого задается делегатом DF /// /// число переменных /// число решений static int SolveEquations(DF fun, int n) < int res = 0; bool[] set = new bool[n]; int m = (int)Math.Pow(2, n); //число наборов int p = 0, q = 0, k = 0; //Полный перебор по числу наборов for (int i = 0; i < m; i++) < p = i; //Формирование очередного набора — set, //заданного двоичным представлением числа i for (int j = 0; j < n; j++) < k = (int)Math.Pow(2, j); q = p % 2; p = p / 2; if (q == 0) set[j] = false; else set[j] = true; >//Вычисление значения функции на наборе set if(fun(set)) res ++; > return res; >

Для понимания программы, надеюсь, достаточно сделанных объяснений идеи программы и комментариев в ее тексте. Остановлюсь лишь на пояснении заголовка приведенной функции. У функции SolveEquations два входных параметра. Параметр fun задает логическую функцию, соответствующую решаемому уравнению или системе уравнений. Параметр n задает число переменных функции fun . В качестве результата функция SolveEquations возвращает число решений логической функции, то есть число тех наборов, на которых функция принимает значение true .

Читайте также:
Адаптированная программа вариант 1 для 2 класса

Для школьников привычно, когда у некоторой функции F(x) входным параметром x является переменная арифметического, строкового или логического типа. В нашем случае используется более мощная конструкция. Функция SolveEquations относится к функциям высшего порядка – функциям типа F(f) , у которых параметрами могут быть не только простые переменные, но и функции.

Класс функций, которые могут передаваться в качестве параметра функции SolveEquations , задается следующим образом:

delegate bool DF(bool[] vars);

Этому классу принадлежат все функции, которым в качестве параметра передается набор значений логических переменных, заданных массивом vars . В качестве результата возвращается значение булевского типа, представляющее значение функции на этом наборе.

В заключение приведу программу, в которой функция SolveEquations используется для решения нескольких систем логических уравнений. Функция SolveEquations является частью приводимого ниже класса ProgramCommon :

class ProgramCommon < delegate bool DF(bool[] vars); static void Main(string[] args) < Console.WriteLine(«У Функции And решений — » + SolveEquations(FunAnd, 2)); Console.WriteLine(«У Функции 51 решений — » + SolveEquations(Fun51, 5)); Console.WriteLine(«У Функции 53 решений — » + SolveEquations(Fun53, 10)); >static bool FunAnd(bool[] vars) < return vars[0] vars[1]; >static bool Fun51(bool[] vars) < bool f = true; f = f (!vars[0] || vars[1]); f = f (!vars[2] || vars[1]); f = f (!vars[3] || vars[4]); f = f (!vars[1] || vars[3]); f = f (!vars[3] || vars[2]); return f; >static bool Fun53(bool[] vars) < bool f = true; f = f ((vars[0] == vars[1]) || (vars[0] == vars[2])); f = f ((vars[1] == vars[2]) || (vars[1] == vars[3])); f = f ((vars[2] == vars[3]) || (vars[2] == vars[4])); f = f ((vars[3] == vars[4]) || (vars[3] == vars[5])); f = f ((vars[4] == vars[5]) || (vars[4] == vars[6])); f = f ((vars[5] == vars[6]) || (vars[5] == vars[7])); f = f ((vars[6] == vars[7]) || (vars[6] == vars[8])); f = f (!((vars[7] == vars[8]) || (vars[7] == vars[9]))); return f; >>

Вот как выглядят результаты решения по этой программе:

Источник: intuit.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru