
- •Цель работы
- •Лабораторное задание
- •Код программы
- •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)
- •Результаты работы
Void int_to_char(int *a, char *c)
{
string str = "";
for (int i = 0; i < 10; i++)
{
ostringstream s;
s << a[i];
str += s.str();
str += ' ';
}
string_to_char(str, c);
}
Void string_to_char(string s, char *c)
{
int i;
for (i = 0; i < s.size(); i++)
{
c[i] = s[i];
}
c[i] = '\0';
}
void printArray(int arr[siz])
{
for (int i = 0; i < siz; i++)
{
cout << arr[i] << " ";
}
cout << endl << endl;
}
os_file.cpp
#include "header.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <string>
#include <cstdlib>
#include <sstream>
#include <fstream>
using namespace std;
const int siz = 10;
void char_to_mas_int(char* c, int *mas);
int charToInt(char c);
void int_to_char(int *a, char *c);
void string_to_char(string s, char *c);
int char_to_int(char* c);
int* divide(int* arr, int x, int* b);
void printArray(int[siz]);
HANDLE hEventChar;
HANDLE hEventTermination;
HANDLE hEvents[2];
LPCTSTR lpEventName = "$EventName$";
LPCTSTR lpEventTerminationName = "$TerminationName$";
LPCTSTR lpFileShareName = "$ShareName$";
HANDLE memory_handle;
LPVOID memory;
int main()
{
setlocale(LC_ALL, "Russian");
DWORD dwRetCode;
hEventChar = CreateEvent(NULL, FALSE, FALSE, lpEventName);
hEventTermination = CreateEvent(NULL, FALSE, FALSE, lpEventTerminationName);
memory_handle = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, 100, lpFileShareName);
memory = MapViewOfFile(memory_handle, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
hEvents[0] = hEventTermination;
hEvents[1] = hEventChar;
int arr[siz]; int arr1[siz] = {}; int count = 0;
cout << "Unsorted massiv: " << endl << endl;
ifstream fin;
string filename = "C:\\Users\\kseny\\Desktop\\os\\os_file\\os_file\\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 enought numbers in file!" << endl;
delete arr;
return 1;
}
fin >> arr[i];
cout << arr[i] << " ";
}
fin.close();
}
cout << endl << endl;
int x = 1, b1[siz];
for (int i = 0; i < siz; i++) b1[i] = 400;
divide(arr, x, b1);
for (int i = 0; i < siz; i++) cout << b1[i] << " ";
cout << endl;
int x1 = 10, b2[siz];
for (int i = 0; i < siz; i++) b2[i] = 400;
divide(arr, x1, b2);
for (int i = 0; i < siz; i++) cout << b2[i] << " ";
cout << endl;
int x2 = 100, b3[siz];
for (int i = 0; i < siz; i++) b3[i] = 400;
divide(arr, x2, b3);
for (int i = 0; i < siz; i++) cout << b3[i] << " ";
cout << endl;
char message1[255];
char message2[255];
char message3[255];
int_to_char(b1, message1);
int_to_char(b2, message2);
int_to_char(b3, message3);
memcpy(memory, message1, sizeof(message1));
system("start C:\\Users\\kseny\\Desktop\\os\\secondary3\\Debug\\secondary3.exe");
while (TRUE)
{
dwRetCode = WaitForMultipleObjects(2, hEvents, FALSE, INFINITE);
if (dwRetCode == WAIT_ABANDONED_0 || dwRetCode == WAIT_ABANDONED_0 + 1 || dwRetCode == WAIT_OBJECT_0 || dwRetCode == WAIT_FAILED)
{
memcpy(message1, memory, sizeof(message1));
char_to_mas_int(message1, b1);
for (int i = 0; i < siz; i++)
{
if (b1[i] != 400)
{
arr1[count] = b1[i];
count++;
}
}
break;
}
Sleep(500);
}
memcpy(memory, message2, sizeof(message2));
system("start C:\\Users\\kseny\\Desktop\\os\\secondary3\\Debug\\secondary3.exe");
while (TRUE)
{
dwRetCode = WaitForMultipleObjects(2, hEvents, FALSE, INFINITE);
if (dwRetCode == WAIT_ABANDONED_0 || dwRetCode == WAIT_ABANDONED_0 + 1 || dwRetCode == WAIT_OBJECT_0 || dwRetCode == WAIT_FAILED)
{
memcpy(message2, memory, sizeof(message2));
char_to_mas_int(message2, b2);
for (int i = 0; i < siz; i++)
{
if (b2[i] != 400)
{
arr1[count] = b2[i];
count++;
}
}
break;
}
Sleep(500);
}
memcpy(memory, message3, sizeof(message3));
system("start C:\\Users\\kseny\\Desktop\\os\\secondary3\\Debug\\secondary3.exe");
while (TRUE)
{
dwRetCode = WaitForMultipleObjects(2, hEvents, FALSE, INFINITE);
if (dwRetCode == WAIT_ABANDONED_0 || dwRetCode == WAIT_ABANDONED_0 + 1 || dwRetCode == WAIT_OBJECT_0 || dwRetCode == WAIT_FAILED)
{
memcpy(message3, memory, sizeof(message3));
char_to_mas_int(message3, b3);
for (int i = 0; i < siz; i++)
{
if (b3[i] != 400)
{
arr1[count] = b3[i];
count++;
}
}
break;
}
Sleep(500);
}
cout << "Sorted massiv: " << endl;
printArray(arr1);
cout << endl;
CloseHandle(hEventChar);
CloseHandle(hEventTermination);
UnmapViewOfFile(memory);
CloseHandle(memory_handle);
system("pause");
return 0;
}
int char_to_int(char* c)
{
return atoi(c);
}
int charToInt(char c) {
return c - '0';
}
void int_to_char(int *a, char *c)
{
string str = "";
for (int i = 0; i < 10; i++)
{
ostringstream s;
s << a[i];
str += s.str();
str += ' ';
}
string_to_char(str, c);
}
void string_to_char(string s, char *c)
{
int i;
for (i = 0; i < s.size(); i++)
{
c[i] = s[i];
}
c[i] = '\0';
}
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;
}