Импликация -> даёт ложь только в случае, когда левая часть равна единице, а правая равна нулю. В левой части, у нас находится ¬А, а значит при всех ¬А = 0, то есть А = 1, высказывание будет истинно. Ставим единички во всех строках, где А = 1.
Рассмотрим теперь случаи, когда ¬А = 1, то есть А = 0. Чтобы импликация была истинной необходимо, чтобы правая часть давала истину. Рассмотрим A\/B/\C - так как А = 0, необходимо, чтобы обе переменныe, и В, и С были равны единице. Ставим единичку в строке, где В = 1, С = 1. Во все остальные строки ставим нули.
¬А->(A\/B/\C)
Импликация -> даёт ложь только в случае, когда левая часть равна единице, а правая равна нулю. В левой части, у нас находится ¬А, а значит при всех ¬А = 0, то есть А = 1, высказывание будет истинно. Ставим единички во всех строках, где А = 1.
Рассмотрим теперь случаи, когда ¬А = 1, то есть А = 0. Чтобы импликация была истинной необходимо, чтобы правая часть давала истину. Рассмотрим A\/B/\C - так как А = 0, необходимо, чтобы обе переменныe, и В, и С были равны единице. Ставим единичку в строке, где В = 1, С = 1. Во все остальные строки ставим нули.
Итоговая таблица истинности:
А | В | С | F
0 | 0 | 0 | 0
0 | 0 | 1 | 0
0 | 1 | 0 | 0
0 | 1 | 1 | 1
1 | 0 | 0 | 1
1 | 0 | 1 | 1
1 | 1 | 0 | 1
1 | 1 | 1 | 1
#include <iostream>
#include <vector>
using namespace std;
int f(vector<int> &u){
int k = 1;
bool has_negative = false;
for(auto &i : u){
if(i < 0){
k *= i;
has_negative = true;
}
}
return k * has_negative;
}
signed main(){
const int n = 5;
vector<vector<int>> a(n, vector<int> (n));
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
cin >> a[i][j];
for(int i = 0; i < n; i++)
cout << "Product of negatives in " << i + 1 << " line is " << f(a[i]) << "\n";
}