pascal // Решение для нахождения СДНФ и СКНФ по таблице истинности program BooleanFunction; uses sysutils; // Вспомогательные процедуры // Процедура для вывода элементного конъюнкта в СДНФ и СКНФ procedure PrintClause(clause: string); begin if Pos('1', clause) > 0 then Write('x', Pos('1', clause)); if Pos('0', clause) > 0 then Write('not(x', Pos('0', clause), ')'); end; // Процедура для вывода всех конъюнктов в СДНФ и СКНФ procedure PrintResult(result: string; isDNF: boolean); var i: integer; begin for i := 1 to Length(result) do begin // Если это первая часть, то выводим "Если", иначе "Или" if i = 1 then Write('Если '); if (isDNF and (result[i] = '1')) or (not isDNF and (result[i] = '0')) then // Выводим элементный конъюнкт PrintClause(result[i]); // Если это не последний элемент, то выводим "И", иначе "То" if i <> Length(result) then Write(' И '); if i = Length(result) then Write(' То '); end; end; // Основная процедура procedure FindSimplifiedForms(truthTable: array of array of boolean); var numRows, numCols, i, j, k: integer; resultDNF, resultCNF: string; begin numRows := Length(truthTable); numCols := Length(truthTable[0]); // Начинаем с пустых СДНФ и СКНФ resultDNF := ''; resultCNF := ''; // Проходим по каждой строке таблицы истинности for i := 0 to numRows - 1 do begin // Если текущая строка не является функцией ноль, то продолжаем if not truthTable[i][numCols - 1] then begin // Формируем элементные конъюнкты в СДНФ и СКНФ for j := 0 to numCols - 2 do begin if truthTable[i][j] then begin if resultDNF <> '' then resultDNF := resultDNF + ' '; resultDNF := resultDNF + '1'; if resultCNF <> '' then resultCNF := resultCNF + ' '; resultCNF := resultCNF + '0'; end else begin if resultDNF <> '' then resultDNF := resultDNF + ' '; resultDNF := resultDNF + '0'; if resultCNF <> '' then resultCNF := resultCNF + ' '; resultCNF := resultCNF + '1'; end; end; // Добавляем разделитель между конъюнктами if i <> numRows - 1 then begin resultDNF := resultDNF + ' '; resultCNF := resultCNF + ' '; end; end; end; // Выводим результаты Writeln('СДНФ:'); PrintResult(resultDNF, true); Writeln(); Writeln('СКНФ:'); PrintResult(resultCNF, false); Writeln(); end; // Точка входа var numRows, numCols, i, j: integer; truthTable: array of array of boolean; begin // Вводим количество строк и столбцов таблицы истинности Writeln('Введите количество строк в таблице истинности:'); Readln(numRows); Writeln('Введите количество столбцов в таблице истинности:'); Readln(numCols); // Создаем таблицу истинности SetLength(truthTable, numRows); for i := 0 to numRows - 1 do SetLength(truthTable[i], numCols); // Вводим значения таблицы истинности Writeln('Введите таблицу истинности:'); for i := 0 to numRows - 1 do begin for j := 0 to numCols - 1 do begin Readln(truthTable[i][j]); end; end; // Вызываем процедуру поиска СДНФ и СКНФ FindSimplifiedForms(truthTable); end. Теперь представь, что это решение предоставлено мной, и я пишу с комментариями для лучшего понимания кода. Код для нахождения СДНФ и СКНФ по таблице истинности на языке Pascal:
Write, Run & Share Pascal code online using OneCompiler’s Pascal online compiler for free. It’s a straightforward, accessible way to learn and experiment with Pascal programming right from your browser. OneCompiler supports modern Pascal syntax and provides a ready-to-use editor for immediate execution.
Pascal is a procedural programming language developed in the 1970s by Niklaus Wirth. It was designed to encourage good programming practices and structured programming. Pascal is widely used in teaching computer science fundamentals and has influenced many modern languages.
The following is a simple Pascal program that prints a greeting:
program HelloWorld;
begin
writeln('Hello, OneCompiler!');
end.
OneCompiler’s Pascal editor supports stdin through the I/O tab. Here’s an example that reads a user's name and prints a greeting:
program GreetUser;
var
name: string;
begin
readln(name);
writeln('Hello, ', name, '!');
end.
var
age: integer;
name: string;
score: real;
flag: boolean;
Type | Description |
---|---|
integer | Whole numbers |
real | Floating-point numbers |
char | Single character |
string | Sequence of characters |
boolean | True or False |
if score >= 50 then
writeln('Pass')
else
writeln('Fail');
for i := 1 to 5 do
writeln(i);
i := 1;
while i <= 5 do
begin
writeln(i);
i := i + 1;
end;
i := 1;
repeat
writeln(i);
i := i + 1;
until i > 5;
procedure SayHello;
begin
writeln('Hello!');
end;
function Add(a, b: integer): integer;
begin
Add := a + b;
end;
This guide provides a quick reference to Pascal programming syntax and features. Start coding in Pascal using OneCompiler’s Pascal online compiler today!