Даны три числа: А= 2110, В= 1610, С= 110112. Переведите числа в двоичную систему счисления и выполните поразрядно логические операции Av(¬B^C). ответ дайте в десятичной системе счисления.
// PascalABC.NET 3.1, сборка 1219 от 16.04.2016 type Matrix=array[,] of integer;
procedure MatPrint(a:Matrix; w:integer); begin for var i:=0 to Length(a,0)-1 do begin for var j:=0 to Length(a,1)-1 do Write(a[i,j]:w); Writeln end end;
procedure MatProd(a,b,c:Matrix); begin for var i:=0 to Length(a,0)-1 do for var j:=0 to Length(b,1)-1 do begin var s:=0; for var k:=0 to Length(a,1)-1 do s+=a[i,k]*b[k,j]; c[i,j]:=s end end;
begin var a,b,c:Matrix; var m,n,p:integer; Write('Число строк матрицы А: '); Read(n); Write('Число столбцов матрицы А и строк матрицы В: '); Read(m); Write('Число столбцов матрицы В: '); Read(p); a:=MatrixRandom(n,m,-50,50); Writeln('Матрица А'); MatPrint(a,4); b:=MatrixRandom(m,p,-50,50); Writeln('Матрица B'); MatPrint(b,4); SetLength(c,n,p); Writeln('Матрица C'); MatProd(a,b,c); MatPrint(c,7) end.
type
Matrix=array[,] of integer;
procedure MatPrint(a:Matrix; w:integer);
begin
for var i:=0 to Length(a,0)-1 do begin
for var j:=0 to Length(a,1)-1 do Write(a[i,j]:w);
Writeln
end
end;
procedure MatProd(a,b,c:Matrix);
begin
for var i:=0 to Length(a,0)-1 do
for var j:=0 to Length(b,1)-1 do begin
var s:=0;
for var k:=0 to Length(a,1)-1 do s+=a[i,k]*b[k,j];
c[i,j]:=s
end
end;
begin
var a,b,c:Matrix;
var m,n,p:integer;
Write('Число строк матрицы А: '); Read(n);
Write('Число столбцов матрицы А и строк матрицы В: '); Read(m);
Write('Число столбцов матрицы В: '); Read(p);
a:=MatrixRandom(n,m,-50,50);
Writeln('Матрица А'); MatPrint(a,4);
b:=MatrixRandom(m,p,-50,50);
Writeln('Матрица B'); MatPrint(b,4);
SetLength(c,n,p);
Writeln('Матрица C');
MatProd(a,b,c);
MatPrint(c,7)
end.
Тестовое решение:
Число строк матрицы А: 4
Число столбцов матрицы А и строк матрицы В: 8
Число столбцов матрицы В: 7
Матрица А
33 -30 20 7 1 5 10 -47
-6 -1 -22 6 -33 41 4 -1
-10 -45 -16 6 -13 9 1 37
5 37 15 -48 42 -19 1 26
Матрица B
-19 42 -14 -36 38 -18 -41
-24 -20 26 -50 -36 -5 -32
-1 5 -43 15 11 49 0
-44 -35 -27 20 33 -49 14
40 7 -38 -37 48 2 -26
-24 5 -11 12 -43 47 -42
-24 11 8 -13 -9 -13 -12
-41 46 -24 20 3 -25 -25
Матрица C
1372 -179 -1176 -295 2387 1475 524
-2463 -580 1701 1697 -3622 575 -525
-1255 1857 -989 3806 353 -1214 957
2160 2631 -460 -4040 341 1340 -3017
//Обьявляем дополнительные переменные и главный массив, а также два дополнительных - они будут "половинками".
var
a, b, c: array [1..100] of longint;
i, min, n, j, t: longint;
begin
//Читаем количество элементов в нашем массиве.
readln(n);
//Читаем массив.
for i := 1 to n do read(a[i]);
//Заполняем первую "половинку".
for i := 1 to n div 2 do b[i] := a[i];
//Заполняем вторую "половинку". Но раз это уже вторая "половинка" главного массива, то и
//цикл теперь должен начинаться со второй части массива, а заканчиваться уже в его конце.
for i := n div 2 + 1 to n do c[i - n div 2] := a[i];
//Теперь отсортируем первую "половинку" методом выбора. Идея этого метода
//основывается на том, что мы ищем минимальный среди неотсортированных элемент,
//а затем аем его с тем, который стоит сразу после отсортированных.
for i := 1 to (n - 1) div 2 do
begin
min := i;
for j := i + 1 to n div 2 do
if b[min] > b[j] then
min := j;
if min <> i then begin
t := b[i];
b[i] := b[min];
b[min] := t;
end;
end;
//Затем вторую точно также, только стоит обратить внимание на сравнения.
//Так как надо отсортировать по убыванию, то теперь сравнение перед "swap"-ом
//будет другим.
for i := 1 to (n - 1) div 2 do
begin
min := i;
for j := i + 1 to n div 2 do
if c[min] < c[j] then
min := j;
if min <> i then begin
t := c[i];
c[i] := c[min];
c[min] := t;
end;
end;
//А теперь по очереди выводим готовые "половинки", не забывая ставить
//пробел после вывода каждого элемента.
for i := 1 to n div 2 do write(b[i], ' ');
for i := 1 to n - n div 2 do write(c[i], ' ');
end.