Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 4 Пантелеева БСТ1904.docx
Скачиваний:
61
Добавлен:
04.03.2022
Размер:
348.78 Кб
Скачать

Int* divide(int* arr, int X, int* b)

{

int max = arr[0], min = arr[0];

for (int i = 1; i < siz; i++)

{

if (max < arr[i]) max = arr[i];

if (min > arr[i]) min = arr[i];

}

int bucket = siz - 2;

int divider = ceil((double)(max + 1) / bucket);

for (int i = 0; i < siz; i++)

{

if (arr[i] / x >= 1 && arr[i] / x <= 9) b[i] = arr[i];

}

return b;

cout << endl << endl;

}

void printArray(int arr[siz])

{

for (int i = 0; i < siz; i++)

{

cout << arr[i] << " ";

}

cout << endl << endl;

}

os_canal.cpp

#include "header.h"

#include <iostream>

#include <Windows.h>

#include <string>

#include <cstdlib>

#include <fstream>

#include <sstream>

using namespace std;

CRITICAL_SECTION cs;

const int siz = 10;

void char_to_mas_int(char* c, int *mas);

void string_to_char(string s, char *c);

int char_to_int(char* c);

void int_to_char(int *a, char *c);

bool read_message(HANDLE my_handle, char *message);

void send_message(HANDLE other_handle, char *message);

int* divide(int* arr, int x, int* b);

void printArray(int[siz]);

int main()

{

setlocale(LC_ALL, "Russian");

HANDLE pipe_handle;

LPCTSTR pipe_name = "\\\\.\\pipe\\$Pipe$";

InitializeCriticalSection(&cs);

int arr[siz]; int arr1[siz] = {}; int count = 0;

cout << "Unsorted massiv: " << endl << endl;

ifstream fin;

string filename = "C:\\Users\\kseny\\Desktop\\os\\os_canal\\os_canal\\matrix.txt";

fin.open(filename.c_str(), std::ifstream::in);

if (!fin.is_open())

cout << "File couldn't be open!\n";

else

{

for (int i = 0; i < siz; i++)

{

if (fin.eof())

{

cout << "Not enough numbers in file!" << endl;

delete arr;

return 1;

}

fin >> arr[i];

cout << arr[i] << " ";

}

fin.close();

}

cout << endl << endl;

pipe_handle = CreateNamedPipeA(pipe_name, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 512, 512, 5000, NULL);

EnterCriticalSection(&cs);

int x = 1;

int b[siz];

for (int i = 0; i < siz; i++) b[i] = 400;

divide(arr, x, b);

for (int i = 0; i < siz; i++) cout << b[i] << " ";

cout << endl;

system("start C:\\Users\\kseny\\Desktop\\os\\sec2\\Debug\\sec2.exe");

cout << "Connection..." << endl;

while (!ConnectNamedPipe(pipe_handle, NULL)) {}

cout << "Connection success" << endl;

char message[512];

int_to_char(b, message);

cout << "1 sending..." << endl;

send_message(pipe_handle, message);

while (!read_message(pipe_handle, message)) {}

cout << "Have 1 result" << endl;

char_to_mas_int(message, b);

for (int i = 0; i < siz; i++)

{

if (b[i] != 400)

{

arr1[count] = b[i];

count++;

}

}

DisconnectNamedPipe(pipe_handle);

LeaveCriticalSection(&cs);

EnterCriticalSection(&cs);

int x1 = 10;

for (int i = 0; i < siz; i++) b[i] = 400;

divide(arr, x1, b);

for (int i = 0; i < siz; i++) cout << b[i] << " ";

cout << endl;

system("start C:\\Users\\kseny\\Desktop\\os\\sec2\\Debug\\sec2.exe");

cout << "Connection..." << endl;

while (!ConnectNamedPipe(pipe_handle, NULL)) {}

cout << "Connection success" << endl;

int_to_char(b, message);

cout << "2 sending..." << endl;

send_message(pipe_handle, message);

while (!read_message(pipe_handle, message)) {}

cout << "Have 2 result" << endl;

char_to_mas_int(message, b);

for (int i = 0; i < siz; i++)

{

if (b[i] != 400)

{

arr1[count] = b[i];

count++;

}

}

DisconnectNamedPipe(pipe_handle);

LeaveCriticalSection(&cs);

EnterCriticalSection(&cs);

int x2 = 100;

for (int i = 0; i < siz; i++) b[i] = 400;

divide(arr, x2, b);

for (int i = 0; i < siz; i++) cout << b[i] << " ";

cout << endl;

system("start C:\\Users\\kseny\\Desktop\\os\\sec2\\Debug\\sec2.exe");

cout << "Connection..." << endl;

while (!ConnectNamedPipe(pipe_handle, NULL)) {}

cout << "Connection success" << endl;

int_to_char(b, message);

cout << "3 sending..." << endl;

send_message(pipe_handle, message);

while (!read_message(pipe_handle, message)) {}

cout << "Have 3 result" << endl;

char_to_mas_int(message, b);

for (int i = 0; i < siz; i++)

{

if (b[i] != 400)

{

arr1[count] = b[i];

count++;

}

}

DisconnectNamedPipe(pipe_handle);

LeaveCriticalSection(&cs);

cout << "Sorted massiv: " << endl;

printArray(arr1);

cout << endl;

DeleteCriticalSection(&cs);

system("pause");

return 0;

}