Код:
using System;using System.Linq;namespace Mtrx{ static class Program { static void Main(string[] args) { var matrix1 = new double[][] { new [] {1.0, 2}, new [] {3.0, 4} }; var matrix2 = new double[][] { new [] {1.0, 2}, new [] {3.0, 4} }; var A = MMult(matrix1, matrix2); if (!A.Success) { Console.WriteLine(A.Error); return; } Print2DMatrix(A.Data); } private static Result<double[][]> MMult(double[][] A, double[][] B) { if (A[0].Length != B.Length) return Result<double[][]>.GetError("It's imposable to multiply this matrix because of their dimensions"); var result = A.Select( (row, rowIndex) => B[0].Select((_, columnIndex) => B.Select(__ => __[columnIndex]) .Zip(row, (rowCell, columnCell) => rowCell * columnCell).Sum() ).ToArray() ).ToArray(); return Result<double[][]>.GetResult(result); } private static void Print2DMatrix<T>(T[][] matrix) { for (var i = 0; i < matrix.Length; ++i) { for (var j = 0; j < matrix[i].Length; ++j) { Console.Write(matrix[j][i]); Console.Write(" "); } Console.WriteLine(); } } } internal class Result<T> { public T Data { get; } public string Error { get; } public bool Success => Error is null; public static Result<T> GetError(string error) { return new Result<T>(default, error); } public static Result<T> GetResult(T result) { return new Result<T>(result); } private Result(T data, string error = null) { Data = data; Error = error; } }}
Переводим третий байт IP и адреса сети в двоичную систему
50 - 110010
48 - 110000
Так как это байт (а в байте 8 бит), допишем два незначащих нуля к получившимся числам:
00110010 - IP
00110000 - адрес сети
Адрес сети получается с применения поразрядной конъюнкции к маске и IP, проще говоря, при перемножении разрядов маски и IP-адреса. И в маске всегда сначала идут только единицы, а потом только нули. То есть можно записать так:
- маска
00110010 - IP
00110000 - адрес сети
где иксы в маске и цифры в IP-адресе - множители, а разряды адреса сети - произведение.
На 3 и 4 месте в маске однозначно должны быть единицы, т.к. если там будут нули, то и в адресе сети будут нули. Плюс к этому, в маске всегда сначала идут только единицы, а потом только нули, то есть можно записать так:
1111 - маска
00110010 - IP
00110000 - адрес сети
Второй справа разряд IP-адреса - единица, а адреса сети - ноль, значит в маске может быть только ноль:
1111хх00 - маска
00110010 - IP
00110000 - адрес сети
Оставшиеся два икса могут быть и единицами, и нулями. Нужно наименьшее возможное значение, значит поставим на их место нули:
11110000 - маска
00110010 - IP
00110000 - адрес сети
То есть третий байт маски 11110000, переведём в десятичную - получим 240.