#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";
}
¬А->(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
const n=20;
var
a:array [0..n] of integer;
k,i: integer;
begin
randomize;
k:=0;
writeln('Исходный массив:');
for i:=1 to n do
begin
a[i]:=random(100);
write(a[i],' ');
end;
writeln;
writeln('Индексы нечетных элементов:');
for i:=1 to n do
if a[i] mod 2 <> 0 then
begin
write(i,' ');
k:=k+1;
end;
writeln;
writeln('k = ',k);
end.
Пример:
Исходный массив:
62 21 39 17 75 30 10 29 80 1 88 93 50 48 17 9 41 2 1 8
Индексы нечетных элементов:
2 3 4 5 8 10 12 15 16 17 19
k = 11