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: 

Pascal online compiler

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.

About Pascal

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.

Sample Code

The following is a simple Pascal program that prints a greeting:

program HelloWorld;
begin
  writeln('Hello, OneCompiler!');
end.

Taking inputs (stdin)

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.

Syntax Basics

Variables

var
  age: integer;
  name: string;
  score: real;
  flag: boolean;

Data Types

TypeDescription
integerWhole numbers
realFloating-point numbers
charSingle character
stringSequence of characters
booleanTrue or False

Conditionals

if score >= 50 then
  writeln('Pass')
else
  writeln('Fail');

Loops

For loop

for i := 1 to 5 do
  writeln(i);

While loop

i := 1;
while i <= 5 do
begin
  writeln(i);
  i := i + 1;
end;

Repeat-Until loop

i := 1;
repeat
  writeln(i);
  i := i + 1;
until i > 5;

Procedures and Functions

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!