Min и Max в MPI - C#
Формулировка задачи:
программа находит минимальный элемент в каждой строке матрицы, далее из минимальных, находит максимальный
Проблемы:
1. не правильно находит max и min
2. Проблема с выводом, когда выводим max и в каком столбце и строке он был найден( не работает правильно из-за пункта 1)
где ошибки, заранее огромное спасибо
Листинг программы
- class Program
- {
- static void Main(string[] args)
- {
- using (new MPI.Environment(ref args))
- {
- Intracommunicator comm = Communicator.world;
- Stopwatch sWatch = new Stopwatch();
- int x = 0, x1 = 0, n = 0;
- string W = "";
- int Num = comm.Rank, Size = comm.Size;
- if (Num == 0)
- {
- Console.WriteLine("Введите ширину матрицы:");
- x1 = Convert.ToInt32(Console.ReadLine());
- Console.WriteLine("Введите количество строк матрицы:");
- x = Convert.ToInt32(Console.ReadLine());
- Console.WriteLine("Диапазон случайных чисел 0,n:");
- n = Convert.ToInt32(Console.ReadLine());
- }
- comm.Broadcast(ref x, 0);
- comm.Broadcast(ref n, 0);
- comm.Broadcast(ref x1, 0);
- int[,] mas = new int[x, x1];
- if (Num == 0)
- {
- Random rand = new Random();
- if (x <= 10 && x1 <= 10)
- {
- Console.WriteLine("Заданная матрица:");
- }
- for (int i = 0; i < x; i++)
- {
- for (int j = 0; j < x1; j++)
- {
- mas[i, j] = rand.Next(1, n);
- if (x <= 10 && x1 <= 10)
- {
- Console.Write(mas[i, j] + " ");
- }
- }
- if (x <= 10 && x1 <= 10)
- {
- Console.WriteLine();
- }
- }
- Console.WriteLine();
- }
- sWatch.Start();
- comm.Broadcast(ref mas, 0);
- int f = x / Size;
- for (int i = f * Num; i < f * (Num + 1); i++)
- {
- int min = n + 1;
- for (int j = 0; j < x1; j++)
- {
- if (mas[i, j] < min)
- {
- min = mas[i, j];
- }
- }
- W = W + " " + Convert.ToString(min);
- }
- string M;
- if (Num == 0) comm.Send(W, 1, 0);
- else
- {
- if (Num != Size - 1)
- {
- M = comm.Receive<string>(Num - 1, 0) + W;
- comm.Send<string>(M, Num + 1, 0);
- }
- }
- comm.Barrier();
- if (Num == Size - 1)
- {
- sWatch.Stop();
- String M2 = comm.Receive<string>(Num - 1, 0) + W;
- Console.WriteLine("Минимальные значения");
- Console.Write(M2);
- Console.WriteLine();
- Console.WriteLine("Максимальное значение {0}", M2.Max());
- int max = M2.Max();
- int maxx=0;
- for (int i = 0; i < x; i++)
- {
- for (int j = 0; j < x1; j++)
- {
- if (mas[i, j] == max)
- {
- maxx = max;
- Console.WriteLine("строка: {0}", i + 1);
- Console.WriteLine("столбец: {0}", j + 1);
- }
- if (maxx == max)
- {
- break;
- }
- }
- if (maxx == max)
- {
- break;
- }
- }
- Console.WriteLine();
- Console.Write("Нахождение минимальных значений заняло {0} мсек", sWatch.ElapsedMilliseconds.ToString());
- }
- }
- Console.WriteLine();
- Console.ReadLine();
- }
- }
- }
Решение задачи: «Min и Max в MPI»
textual
Листинг программы
- int x1 = 10;
- int y1 = 10;
- int xmin = 0;
- int xmax = 0;
- rowHandle = e.RowHandle;
- for (int i = 0; i < x1; i++)
- {
- for (int y = 0; y < y1; y++)
- {
- xmin = mas[i,j];
- xmax = mas[i, j];
- if (xmin > mas[i, j])
- {
- xmin = mas[i, j];
- }
- if (xmax > mas[i, j])
- {
- xmax = mas[i, j];
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д