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];
                        }
                    }
                }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы