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

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;

}