- •Цель работы
- •Лабораторное задание
- •Код программы
- •Void single_int_to_char(int a, char *c)
- •Void char_to_mas_int(char* c, int *mas)
- •Int char_to_int(char* c)
- •Void int_to_char(int *a, char *c)
- •Void string_to_char(string s, char *c)
- •Void parent(lpctstr parent_mail, lpctstr child_mail)
- •Void child(handle parent_handle, lpctstr parent_mail, lpctstr child_mail)
- •Int* divide(int* arr, int X, int* b)
- •Int char_to_int(char* c)
- •Void int_to_char(int *a, char *c)
- •Void string_to_char(string s, char *c)
- •Void parent(lpctstr parent_mail, lpctstr child_mail)
- •Void child(handle parent_handle, lpctstr parent_mail, lpctstr child_mail)
- •Int* divide(int* arr, int X, int* b)
- •Void string_to_char(string s, char *c)
- •Int char_to_int(char* c)
- •Void int_to_char(int *a, char *c)
- •Void char_to_mas_int(char* c, int *mas)
- •Int* divide(int* arr, int X, int* b)
- •Void single_int_to_char(int a, char *c)
- •Void char_to_mas_int(char* c, int *mas)
- •Void int_to_char(int *a, char *c)
- •Void string_to_char(string s, char *c)
- •Void char_to_mas_int(char* c, int *mas)
- •Void char_to_mas_int(char* c, int *mas)
- •Void int_to_char(int *a, char *c)
- •Void string_to_char(string s, char *c)
- •Результаты работы
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;
}