diff --git a/1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.sln b/1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.sln
new file mode 100644
index 0000000..9555c72
--- /dev/null
+++ b/1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29613.14
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenMP", "OpenMP.vcxproj", "{1B1C8D32-78CD-45DF-9974-696CB25F6C82}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Debug|x64.ActiveCfg = Debug|x64
+ {1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Debug|x64.Build.0 = Debug|x64
+ {1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Debug|x86.ActiveCfg = Debug|Win32
+ {1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Debug|x86.Build.0 = Debug|Win32
+ {1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Release|x64.ActiveCfg = Release|x64
+ {1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Release|x64.Build.0 = Release|x64
+ {1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Release|x86.ActiveCfg = Release|Win32
+ {1B1C8D32-78CD-45DF-9974-696CB25F6C82}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {6C4D8EEB-51FE-4154-99E4-CDCA1A9EC6A1}
+ EndGlobalSection
+EndGlobal
diff --git a/1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.vcxproj b/1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.vcxproj
new file mode 100644
index 0000000..c4f34d3
--- /dev/null
+++ b/1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.vcxproj
@@ -0,0 +1,154 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 16.0
+ {1B1C8D32-78CD-45DF-9974-696CB25F6C82}
+ OpenMP
+ 10.0
+
+
+
+ Application
+ true
+ v142
+ Unicode
+
+
+ Application
+ false
+ v142
+ true
+ Unicode
+
+
+ Application
+ true
+ v142
+ Unicode
+
+
+ Application
+ false
+ v142
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+
+ Level3
+ true
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ true
+ /Zc:twoPhase- %(AdditionalOptions)
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ true
+ /Zc:twoPhase- %(AdditionalOptions)
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ true
+ /Zc:twoPhase- %(AdditionalOptions)
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ true
+ /Zc:twoPhase- %(AdditionalOptions)
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.vcxproj.filters b/1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.vcxproj.filters
new file mode 100644
index 0000000..7e02311
--- /dev/null
+++ b/1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.vcxproj.filters
@@ -0,0 +1,22 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Файлы ресурсов
+
+
+
\ No newline at end of file
diff --git a/1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.vcxproj.user b/1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.vcxproj.user
new file mode 100644
index 0000000..88a5509
--- /dev/null
+++ b/1706-4/brazhnikov_ea/OpenMPFoxAlg/OpenMP.vcxproj.user
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/1706-4/brazhnikov_ea/OpenMPFoxAlg/Source.cpp b/1706-4/brazhnikov_ea/OpenMPFoxAlg/Source.cpp
new file mode 100644
index 0000000..3be3aee
--- /dev/null
+++ b/1706-4/brazhnikov_ea/OpenMPFoxAlg/Source.cpp
@@ -0,0 +1,167 @@
+#include
+#include
+#include
+#include
+
+using namespace std;
+
+void PrintMatrix(double* matrix, int N) {
+
+ for (int i = 0; i < N; i++) {
+ for (int j = 0; j < N; j++)
+ {
+ cout.width(3);
+ cout << matrix[i * N + j] << " ";
+ }
+ cout << endl;
+ }
+ cout << endl;
+}
+
+void MatrixCreate(double* A, double* B, double* C, double *CSeq, int size) {
+ for (int i = 0; i < size * size; ++i) {
+ A[i] = rand() % 10 + 1;
+ B[i] = rand() % 10 + 1;
+ C[i] = 0;
+ CSeq[i] = 0;
+ }
+}
+
+bool matComparison(double* A, double* B, int size)
+{
+ for (int i = 0; i < size; i++) {
+ for (int j = 0; j < size; j++)
+ {
+ if (A[i * size + j] != B[i * size + j])
+ return false;
+ }
+ }
+ return true;
+}
+
+
+void Multiplication(double* Ablock, double* Bblock, double* Cblock, int _blockSize)
+{
+ double temp;
+ for (int i = 0; i < _blockSize; i++)
+ for (int j = 0; j < _blockSize; j++) {
+ temp = 0;
+ for (int k = 0; k < _blockSize; k++)
+ temp += Ablock[i * _blockSize + k] * Bblock[k * _blockSize + j];
+ Cblock[i * _blockSize + j] += static_cast(temp * 100) / 100;
+ }
+}
+
+void SequentialAlgorithm(double* A, double* B, double* C, int size) {
+ for (int i = 0; i < size * size; ++i)
+ C[i] = 0;
+ Multiplication(A, B, C, size);
+}
+
+void Fox(double* A, double* B, double* C, int size, int procNum) {
+ int Grid = int(sqrt(procNum));
+ int BlockSize = size / Grid;
+ omp_set_num_threads(procNum);
+#pragma omp parallel
+ {
+ int numThreads = omp_get_thread_num();
+ int RowIndex = numThreads / Grid;
+ int ColIndex = numThreads % Grid;
+ for (int iter = 0; iter < Grid; iter++)
+ {
+ for (int i = RowIndex * BlockSize; i < (RowIndex + 1) * BlockSize; i++)
+ {
+ for (int j = ColIndex * BlockSize; j < (ColIndex + 1) * BlockSize; j++)
+ {
+ for (int k = iter * BlockSize; k < (iter + 1) * BlockSize; k++)
+ {
+ C[i * size + j] += A[i * size + k] * B[k * size + j];
+ }
+ }
+ }
+ }
+ } //pragma parallel
+}
+
+int main(int argc, char* argv[])
+{
+ double* A;
+ double* B;
+ double* CSeq;
+ double* CFox;
+ int size, procNum;
+ double StartFoxAlg = 0, FinFoxAlg = 0, StartSeqAlg = 0, FinSeqAlg = 0; //time
+
+ cout << "input the size and then the procnun: " << endl;
+
+ if (argc > 1) {
+ size = atoi(argv[1]);
+ procNum = atoi(argv[2]);
+ }
+ else {
+ cout << "Input the size of matrix and then procnum: " << endl;
+ cin >> size;
+ cin >> procNum;
+ }
+
+ int BlockSize = int(sqrt(procNum));
+
+ if (BlockSize * BlockSize == procNum && size % BlockSize == 0) {
+
+
+ //
+ A = new double[size * size];
+ B = new double[size * size];
+ CSeq = new double[size * size];
+ CFox = new double[size * size];
+ MatrixCreate(A, B, CFox, CSeq,size);
+ //
+
+ //
+ if (size < 30) {
+ cout << "Matrix A" << endl;
+ PrintMatrix(A, size);
+ cout << "Matrix B" << endl;
+ PrintMatrix(B, size);
+ }
+ //
+
+ //FoxAlgPar
+ if (procNum != 1) {
+ StartFoxAlg = omp_get_wtime(); //omp_get_wtime ();
+ Fox(A, B, CFox, size, procNum);
+ FinFoxAlg = omp_get_wtime();
+ }
+ //
+
+ //FoxAlgSeq
+ StartSeqAlg = omp_get_wtime(); //omp_get_wtime ();
+ SequentialAlgorithm(A, B, CSeq, size);
+ FinSeqAlg = omp_get_wtime();
+ //
+
+ //
+ if (size < 30) {
+ cout << "Parallel Alg " << endl;
+ PrintMatrix(CFox, size);
+ }
+ if (size < 30) {
+ cout << "Seq Alg " << endl;
+ PrintMatrix(CSeq, size);
+ }
+
+ if (matComparison(CFox, CSeq, size))
+ cout << "Matrix identical\n" << endl;
+
+ cout << "time of parallel alg is " << (FinFoxAlg - StartFoxAlg) << endl;
+ cout << "time of seq alg is " << (FinSeqAlg - StartSeqAlg) << endl;
+ //
+
+ delete[] A, B, CSeq, CFox;
+ }
+ else
+ {
+ cout << "Error" << endl;
+ }
+
+}
\ No newline at end of file