CCCPaste
#include
#include
#include
#include
#include

using namespace std;

const int m = 1000; //предел массива от - m/2 до + m/2 в


int create_num(int A) //рандомное число (переменная rank)
{
	int number;
	srand(time(NULL) + A);
	number = (rand() % m) - m / 2;

	return number;
}

int file_read() // считываем количество потоков
{
	ifstream fileout;
	fileout.open("run.bat");//открытие файла
	int max = -1;

	if (fileout.is_open())//Если открытие файла прошло успешно
	{
		string line;
		getline(fileout, line);
		getline(fileout, line);

		line = line.substr(line.find("n ") + 2);
		line = line.substr(0, line.find(" "));

		fileout.close(); //Закрываем файл
		max = stoi(line);
	}
	else
	{
		cout << "file not open" << endl;
	}

	return max;
}

int main(int argc, char** argv)
{
	int rank, size, n = 0;
	int max = file_read() ; // считываем количество вызовов
	int* rbuf = new int[max];

	for (int i = 0; i < max; i++)
		rbuf[i] = 0;

	MPI_Init(&argc, &argv);
	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
	MPI_Comm_size(MPI_COMM_WORLD, &size);

	n = create_num(rank);

	MPI_Gather(&n, 1, MPI_INT, rbuf, 1, MPI_INT, 0, MPI_COMM_WORLD);

	cout << "Rank: " << rank << " Number: " << n << endl;

	if (rank == 0)
	{
		if (max != -1) //проверка считалось ли значение из файла
		{
			int sum = 0;
			for (int i = 0; i < max; i++)
				 sum += rbuf[i];
			cout << "summ = " << sum << endl;
		}
		else
		{
			cout << "value undefined";
		}
	}

	MPI_Finalize();
	return 0;
}