В алгебре логики различают три вида логических операций:
Конъюкция - это логическое умножение, обозначается &, ^, И
Дизъюнкция - это логическое сложение, обозначается ∨, I, ИЛИ, +
Инверсия - это логическое отрицание(т.е., если у нас 0, то с инверсии у нас получится 1), обозначаем ее как HE, ¬, -
Логические операции имеют свой порядок: сначала инверсия, потом конъюкция, потом дизъюнкция.
Давай подсчитаем количество переменных в логическом выражении: это A, B, C, т.е., 3 переменные. Подсчитаем количество действий в этом выражении: 5 действий.
Сложим кол-во действий и кол-во переменных и получим количество столбцов в таблице.
3 + 5 = 8 столбцов.
Теперь определим количество строк в таблице. Для этого воспользуемся формулой m = 2^n.
m = 2^3 = 8 строк в таблице, не считая шапки таблицы.
Чертим таблицу:
A B C A ^ B B ^ C A ^ C A^B∨B B^C∨A
0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1
1 1 0 1 0 0 1 1
1 0 1 0 0 1 0 1
0 1 1 0 1 0 1 1
1 1 1 1 1 1 1 1
Расставим порядок действий: первым действием у нас будет A ^ B, так как конъюкция первее дизъюнкции.
Вторым действием будет B ^ C по выше сказанной причине.
Третьим действием будет A ^ C
Четвертым действием A ^ B ∨ B
Пятым действием будет B ^ C ∨ A
В таблице будет только две цифры - 0 и 1. В первых трех действиях конъюкция(лог.умножение), т.е. мы будем умножать 0 и 1. В последних двух действиях - конъюкция с дизъюнкцией, т.е. сначала будем умножать B на C и прибавлять к A. (Если алгебру знаешь - справишься).
Задача решена.
P.S Если у всех троих переменных 0 - то во всех логических действиях у них будет результат, равный нулю. Тоже самое и с ситуацией, когда все три переменные равны 1.
===== C++ 17 =====
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int nm = 12, nd = 28;
float t2009[12][28], t2010[12][28], pt[12][28];
float dT[nm][2] ={{-7.3,-4},{-9.8, -9.1},{-4.4, 2.6},{2.2,11.3},
{7.7,18.6},{12.1,22},{14.4,24.3},{12.5,21.9},
{7.4,15.7},{2.2,8.7},{-3.3,0.9},{-7.6,-3}};
srand(time(NULL));
for(int m = 0; m < nm; m++)
{
float k = (dT[m][1] - dT[m][0])/RAND_MAX;
for(int d =0; d < nd; d++)
{
t2009[m][d] = rand() * k + dT[m][0];
t2010[m][d] = rand() * k + dT[m][0];
pt[m][d] = t2010[m][d] / t2009[m][d] * 100;
}
}
cout << "2009\n";
for(int m = 0; m < nm; m++)
{
for(int d =0; d < nd; d++)
cout << fixed << setw(5) << setprecision(1) << t2009[m][d];
cout << endl;
}
cout << "2010\n";
for(int m = 0; m < nm; m++)
{
for(int d =0; d < nd; d++)
cout << fixed << setw(5) << setprecision(1) << t2010[m][d];
cout << endl;
}
cout << "PERCENTS\n";
for(int m = 0; m < nm; m++)
{
for(int d =0; d < nd; d++)
cout << fixed << setw(5) << setprecision(0) << pt[m][d];
cout << endl;
}
return 0;
}
Объяснение:
A ^ B ∨ B ^ C ∨ A ^ C
В алгебре логики различают три вида логических операций:
Конъюкция - это логическое умножение, обозначается &, ^, И
Дизъюнкция - это логическое сложение, обозначается ∨, I, ИЛИ, +
Инверсия - это логическое отрицание(т.е., если у нас 0, то с инверсии у нас получится 1), обозначаем ее как HE, ¬, -
Логические операции имеют свой порядок: сначала инверсия, потом конъюкция, потом дизъюнкция.
Давай подсчитаем количество переменных в логическом выражении: это A, B, C, т.е., 3 переменные. Подсчитаем количество действий в этом выражении: 5 действий.
Сложим кол-во действий и кол-во переменных и получим количество столбцов в таблице.
3 + 5 = 8 столбцов.
Теперь определим количество строк в таблице. Для этого воспользуемся формулой m = 2^n.
m = 2^3 = 8 строк в таблице, не считая шапки таблицы.
Чертим таблицу:
A B C A ^ B B ^ C A ^ C A^B∨B B^C∨A
0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1
1 1 0 1 0 0 1 1
1 0 1 0 0 1 0 1
0 1 1 0 1 0 1 1
1 1 1 1 1 1 1 1
Расставим порядок действий: первым действием у нас будет A ^ B, так как конъюкция первее дизъюнкции.
Вторым действием будет B ^ C по выше сказанной причине.
Третьим действием будет A ^ C
Четвертым действием A ^ B ∨ B
Пятым действием будет B ^ C ∨ A
В таблице будет только две цифры - 0 и 1. В первых трех действиях конъюкция(лог.умножение), т.е. мы будем умножать 0 и 1. В последних двух действиях - конъюкция с дизъюнкцией, т.е. сначала будем умножать B на C и прибавлять к A. (Если алгебру знаешь - справишься).
Задача решена.
P.S Если у всех троих переменных 0 - то во всех логических действиях у них будет результат, равный нулю. Тоже самое и с ситуацией, когда все три переменные равны 1.