예제 #1
0
        void GenerateTasks()
        {

    
            Task temp;
            int k1 = 0;
            int k2 = 5;

            for (int j=0; j<2; j++)
            {
               
                temp = new Task();

                for (int i = k1; i < k2; i++)
                {
                    temp.indexes.Add(i);
                }
                pendingTasks.Enqueue(temp);
                k1 += 5;
                k2 += 5;



            }
        }
예제 #2
0
        public int sort()
        {
                            task = obj.GetTask();
                if (task == null)
                    return 0;

                arr = obj.FetchData(task);
               
                Console.Out.WriteLine("Полученные данные:");
                display();

                int  outer;
                max = arr[0];
                min = arr[0];
               
                for (outer = 0; outer < task.stop - task.start; outer++)
                {
                    if (max < arr[outer]) max = arr[outer];
                    if (min > arr[outer]) min = arr[outer];

                    
                }


                Console.Out.WriteLine("Обработанные данные:");
                Console.Out.WriteLine("Max: " + max + ". Min: " + min);
                obj.Finish(task, max, min);
            
                task.stop = 10; 
                task.start = 6;
            return 1;
        }
예제 #3
0
        public int sort()
        {

                task = obj.GetTask();
                if (task == null)
                    return 0;

                arr = obj.FetchData(task);
               
                Console.Out.WriteLine("Полученные данные:");
                display();

                int  outer;
                float sum=0;
    
                for (outer = 0; outer < task.stop - task.start; outer++)
                {
                    sum += arr[outer];
                }
   
                Console.Out.WriteLine("Сумма элементов задания:");
                Console.Out.Write(sum);
                Console.Out.WriteLine("  ");

                obj.Finish(sum);

            return 1;
        }
예제 #4
0
        public int sort()
        {
            //try
            //{
                task = obj.GetTask();
                if (task == null)
                    return 0;

                arr = obj.FetchData(task);
               
                Console.Out.WriteLine("Полученные данные:");
                display();

                int inner, outer, temp;
                for (outer = 1; outer < task.indexes.Count; outer++)
                {
                    temp = arr[outer];
                    inner = outer;
                    while (inner > 0 && arr[inner - 1] >= temp)
                    {
                        arr[inner] = arr[inner - 1];
                        inner--;
                    }
                    arr[inner] = temp;
                }

                //int inner, outer, temp;
                //int h = 1;

                //while (h <= task.size / 3)
                //    h = h * 3 + 1;

                //while (h > 0)
                //{
                //    for (outer = h; outer < task.size; outer++)
                //    {
                //        temp = task.data[outer];
                //        inner = outer;

                //        while (inner > h - 1 && task.data[inner - h] >= temp)
                //        {
                //            task.data[inner] = task.data[inner - h];
                //            inner -= h;
                //        }
                //        task.data[inner] = temp;
                //    }
                //    h = (h - 1) / 3;
                //}

                Console.Out.WriteLine("Обработанные данные:");
                display();
                obj.Finish(task, arr);
            //}
            //catch (System.Net.WebException e)
            //{
            //    Console.Out.WriteLine("Error " + e.Message);
            //}

            return 1;
        }
예제 #5
0
        public int[] FetchData(Task task, int n)
        {
            Log.Print("Client has fetched data");

            if (n==0)
            { 
                int[] tempA = new int[task.stop-task.start];
            int j = 0;
            for (int i = task.start; i < task.stop; i++)
            {
                tempA[j] = dataArrayA[i];
                j++;
            }
                return tempA;
            }
            else
            {
                int[] tempB = new int[task.stop - task.start];
                int j = 0;
                for (int i = task.start; i < task.stop; i++)
                {
                    tempB[j] = dataArrayB[i];
                    j++;
                }
            return tempB;
            }
        }
예제 #6
0
        public int sort()
        {
                task = obj.GetTask();
                if (task == null)
                    return 0;

                arr = obj.GetData(task);
               
                Console.Out.WriteLine("Полученные данные:");
                display();

            for (int i = 0; i <= arr.Length - 1; i++)
            {
                for (int j = i + 1; j < arr.Length; j++)
                {
                    if (arr[j] < arr[i])
                    {
                        var spam = arr[i];
                        arr[i] = arr[j];
                        arr[j] = spam;
                    }
                }
            }


            Console.Out.WriteLine("Обработанные данные:");
                display();
                obj.Finish(task, arr);
            return 1;
        }
예제 #7
0
        void GenerateTasks()
        {
            Task temp;
            int step = dataCount / tasksCount; // на каждую задачу приходится равная порция массива
            for (int i = 0; i < tasksCount; i++)
            {
                temp = new Task();
                temp.start = i * step;
                temp.stop = temp.start + step - 1;
                pendingTasks.Enqueue(temp);
            }

            //int k1 = 0;
            //int k2 = 5;

            //for (int j=0; j<2; j++)
            //{
            //    temp = new Task();
            //    for (int i = k1; i < k2; i++)
            //    {
            //        temp.indexes.Add(i);
            //    }
            //    pendingTasks.Enqueue(temp);
            //    k1 += 5;
            //    k2 += 5;
            //}
        }
예제 #8
0
        public double[] FetchData(Task task)
        {
            Log.Print("Client has fetched data");
            double[] temp = new double[task.stop-task.start];

            return temp;
        }
예제 #9
0
        public int sort()
        {      
                task = obj.GetTask();
      
                if (task == null)
                    return 0;
                int[,] ATemp;
                int[] BTemp;
                int[] C;
                 obj.GetData(task, out BTemp, out ATemp);
               C= new int[SharedObject.n];
                Console.Out.Write("Полученные данные:");

            Console.Out.Write("\nСтроки матрицы A:\n");
            for (int i = task.start; i <= task.stop; i++) // строк матрицы взяли столько, сколько указано для данного клиента (от строки start до строки stop)
                {
                Console.Out.WriteLine();
                for (int j = 0; j < SharedObject.n; j++) // столбцов - столько, сколько есть всего 
                    {
                        Console.Out.Write(ATemp[i,j]+"\t");
                    }                   
                }

            Console.Out.Write("\n\nВектор-столбец B:\n");
            Console.Out.WriteLine();
            for (int j = 0; j < SharedObject.n; j++)
            {
                Console.Out.Write(BTemp[j] + "\n");   //кол-во строк вектор-столбца обязательно равно кол-ву столбцов умножаемой на него матрицы
            }

            Console.Out.WriteLine("\nПроверка вычисления C[i]:");
            for (int i = task.start; i <= task.stop; i++)
            {
                C[i] = 0;               
                Console.Out.WriteLine();
                for (int j = 0; j < SharedObject.n; j++)
                {
                    C[i] += ATemp[i, j] * BTemp[j];
                    Console.Out.Write(" {0} * {1} ", ATemp[i, j], BTemp[j]);
                    if (j + 1 != SharedObject.n)
                    {
                        Console.Out.Write("+");
                    }
                    else
                    {
                        Console.Out.Write("= {0}", C[i]);
                    }
                }
                Console.Out.WriteLine();
            }


                obj.Finish(C);

            return 1;
        }
예제 #10
0
        public int[] FetchData(Task task)
        {
            Log.Print("Client has fetched data");
            int[] temp = new int[task.indexes.Count];

            for (int i = 0; i < task.indexes.Count; i++)
                temp[i] = dataArray[task.indexes[i]];

            return temp;
        }
예제 #11
0
 void GenerateTasks () { 
     Task temp;
     int step = dataCount1 / tasksCount ; // на каждую задачу должна приходится равная порция массива
     for ( int i = 0; i < tasksCount ; i++) { 
         temp = new Task();
         temp.start = i∗step;
         temp.stop = temp.start + step − 1; 
         pendingTasks.Enqueue(temp);
     }
 }
예제 #12
0
        public int sort()
        {
            //try
            //{
                task = obj.GetTask();
                if (task == null)
                    return 0;

                arr = obj.FetchData(task);
               
                Console.Out.WriteLine("Полученные данные:");
                display();

                int  outer;
                float sum=0;
               
               // for (outer = 0; outer < task.stop - task.start; outer++)
           //     {
                 //   for (int j = outer + 1; j < task.stop - task.start; j++)
         //           {
                  //
         //   if (arr[j] < arr[outer])
         //               {
          //                  var temp = arr[outer];
        //                    arr[outer] = arr[j];
         //                   arr[j] = temp;
      //                  }
        //            }
       //         }



                for (outer = 0; outer < task.stop - task.start; outer++)
                {
                    sum += arr[outer];
                }
   
                Console.Out.WriteLine("Среднее из задания:");
                Console.Out.Write(Math.Round((sum / 50),0));
                Console.Out.WriteLine("  ");

                obj.Finish(Math.Round((sum / 50)));

            //}
            //catch (System.Net.WebException e)
            //{
            //    Console.Out.WriteLine("Error " + e.Message);
            //}
              // task.stop = 10; //МЕГАКОСТЫЛЬ
          //      task.start = 6;
            return 1;
        }
예제 #13
0
 public int[] GetData(Task task)
 {
     ourServer.Print("Клиент получил следующие данные для обработки:");
     int[] temp = new int[clientPortion];
     int j = 0;
     for (int i = task.start; i <= task.stop; i++)
     {
         temp[j] = dataArray[i];
         Console.Out.Write("{0}\t", dataArray[i].ToString());
         j++;
     }
     return temp;
 }
예제 #14
0
        public int[] FetchData(Task task)
        {
            Log.Print("Client has fetched data");
            int[] temp = new int[task.stop-task.start];
            int j = 0;
            for (int i = task.start; i < task.stop; i++)
            {
                temp[j] = dataArray[i];
                j++;
            }

            return temp;
        }
예제 #15
0
        void GenerateTasks()
        {
            Task temp;

            int step = dataCount / tasksCount; // делим массив на части

            for (int i = 0; i < tasksCount; i++)
            {
                temp = new Task();
                temp.start = i * step;
                temp.stop = temp.start + step - 1;
                pendingTasks.Enqueue(temp);
            }
        }
예제 #16
0
        void GenerateTasks()
        {
            
   
            Task temp;


                temp = new Task();

                for (int i = 0; i < dataCount; i=dataCount)
                {
                    temp.indexes.Add(i);
                }
                pendingTasks.Enqueue(temp);

            }
예제 #17
0
        public int sort()
        {
            //try
        
                task = obj.GetTask();
      
                if (task == null)
                    return 0;
                double[,] arr;
                double[] b1;
                double[] C;
                 obj.FetchData(task, out b1, out arr);
               C= new double[SharedObject.n];
                Console.Out.Write("Полученные данные:");
                    
                for (int i = task.start; i < task.stop; i++)
                {
                    for (int j = 0; j < SharedObject.n; j++)
                    {
                        Console.Out.Write(arr[i,j]+" ");

                    }
                    Console.Out.WriteLine();
                }

           for (int i = task.start; i < task.stop; i++)
            {
                for (int j = 0; j < SharedObject.n; j++)
                {
                    C[i] += arr[i, j] * b1[j];

                }
            }


                obj.Finish(C);

            //}
            //catch (System.Net.WebException e)
            //{
            //    Console.Out.WriteLine("Error " + e.Message);
            //}
              // task.stop = 10; //МЕГАКОСТЫЛЬ
          //      task.start = 6;
            return 1;
        }
예제 #18
0
        public void FetchData(Task task,out double[] b1,out double[,] temp  )
        {
            Log.Print("Client has fetched data");
             temp = new double[m,n];
            b1 = new double[n];
            for (int i = task.start; i < task.stop; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    temp[i,j] = dataArray[i,j];
                }

            }
            for (int j = 0; j < n; j++)
            {
                b1[j] = B[j];
            }
        }
예제 #19
0
        public int sort()
        {
            //try
            //{
                task = obj.GetTask();
                if (task == null)
                    return 0;

                arr = obj.FetchData(task);
               
                Console.Out.WriteLine("Полученные данные:");
                display();

                int  outer;

               
                for (outer = 0; outer < task.stop - task.start; outer++)
                {
                    for (int j = outer + 1; j < task.stop - task.start; j++)
                    {
                        if (arr[j] < arr[outer])
                        {
                            var temp = arr[outer];
                            arr[outer] = arr[j];
                            arr[j] = temp;
                        }
                    }

                    
                }


                Console.Out.WriteLine("Обработанные данные:");
                display();
                obj.Finish(task, arr);
            //}
            //catch (System.Net.WebException e)
            //{
            //    Console.Out.WriteLine("Error " + e.Message);
            //}
              // task.stop = 10; //МЕГАКОСТЫЛЬ
          //      task.start = 6;
            return 1;
        }
예제 #20
0
        public void Finish(Task task, int max, int min)
        {
            Log.Print("Client has finished task");
            lock (dataLock)
            {
                maxes.Add(max);
                mins.Add(min);
            }            
            if (pendingTasks.Count == 0)
            {
                Log.Print("Final task has finished");
  
                for (int i = 0; i < tasksCount; i++)
                {
                    if (maxim < maxes[i]) maxim = maxes[i];

                    if (minim > mins[i]) minim = mins[i];
                }
                Log.Print("Max: " + maxim + ". Min: " + minim);
            }
        }
예제 #21
0
        void GenerateTasks()
        {
            ourServer.Print("Распределение задач...");
            Task temp;

            
            ourServer.Print("Всего элементов в матрице:{0}", dataCount);
            ourServer.Print("Клиентов:{0}", tasksCount);
            ourServer.Print("Кол-во элементов на клиента:{0}", clientPortion);

            for (int i = 0; i < tasksCount; i++)
            {
                temp = new Task();
                ourServer.Print("\nИнициализация счетчика элементов, выделенных для клиента #{0}", i + 1);
                temp.start = i * clientPortion;
                ourServer.Print("Индекс начального элемента: {0}", temp.start + 1);
                temp.stop = temp.start + clientPortion - 1;
                ourServer.Print("Индекс конечного элемента: {0}", temp.stop + 1);
                QueTasks.Enqueue(temp);                      //добавление задачи в конец очереди
            }
            ourServer.Print("\nЗадачи успешно распределены!");
        }
예제 #22
0
        public int Int()
        {      
            task = obj.GetTask();
      
            if (task == null)
                return 0;

            dynamic Cl_Low, Cl_Up, Cl_fun, Cl_N;
            obj.GetData(task, out Cl_Low, out Cl_Up, out Cl_fun, out Cl_N);
            Console.Out.Write("Полученные данные:");

            Console.Out.Write("\nКоординаты отрезка:\n");
            ServerConsole.Print("Начало: {0}", Cl_Low);
            ServerConsole.Print("Конец: {0}", Cl_Up);

            ScriptEngine engine = Python.CreateEngine();
            ScriptScope scope = engine.CreateScope();

            //В вычислительном модуле python используется модуль random.py
            //он находится в IronPython.StdLib
            //для работы программы необходимо подключить папку с StdLib:
            var paths = engine.GetSearchPaths();
            //путь к папке
            paths.Add(@"D:\IronPython.StdLib.2.7.5\content\Lib");
            engine.SetSearchPaths(paths);

            //непосредственный запуск модуля
            engine.ExecuteFile("D://monte-carlo.py", scope);

            //теперь можно "разобрать" запущенный скрипт на части, вытаскивая из него необходимые функции и переменные
            //вытаскиваем интегрирующую функцию
            dynamic monte_carlo = scope.GetVariable("monte_carlo");

            dynamic result = monte_carlo(Cl_fun, Cl_Low, Cl_Up, Cl_N);            

            obj.Finish(result);

            return 1;
        }
예제 #23
0
        void GenerateTasks()
        {
            //Random r = new Random(DateTime.Now.Millisecond);
            //pendingTasks = new Queue<Task>();
            //finishedTasks = new List<Task>();

            
            //for (int i = 0; i < tasksCount; i++)
            //{
            //    Task temp = new Task();
            //    temp.data = new int[partSize];

            //    for (int j = 0; j < partSize; j++)
            //        temp.data[j] = r.Next(0, dataCount * tasksCount);

            //    temp.size = partSize;
            //    pendingTasks.Enqueue(temp);
                
            //}
            int h = 1;
            int j = 0;
            Task temp;

            while (h <= dataCount / 3)
                h = h * 3 + 1;

            while (h > 0)
            {
                temp = new Task();

                for (int i = 0; i < dataCount; i += h)
                {
                    temp.indexes.Add(i);
                }
                pendingTasks.Enqueue(temp);
                h = (h - 1) / 3;
            }
        }
예제 #24
0
        void CreateTasks()
        {
            ServerConsole.Print("\n\nСоздание задач...\n");
            Task temp;

            //распределение массива поровну на каждого клиента
            int clientPortion = dataCount / tasksCount;
            ServerConsole.Print("Всего строк в матрице:{0}",dataCount);
            ServerConsole.Print("Клиентов:{0}",tasksCount);
            ServerConsole.Print("Кол-во строк на клиента:{0}",clientPortion);           

            for (int i = 0; i < tasksCount; i++)
            {
                temp = new Task();
                ServerConsole.Print("\nИнициализация счетчика умножаемых строк для клиента #{0}",i+1);
                temp.start = i * clientPortion;              
                ServerConsole.Print("Начальная строка: {0}",temp.start+1);
                temp.stop = temp.start + clientPortion - 1;  
                ServerConsole.Print("Конечная строка: {0}", temp.stop+1);
                QueTasks.Enqueue(temp);                      //добавление задачи в конец очереди
            }
            ServerConsole.Print("\nЗадачи успешно созданы и распределены!");
        }
예제 #25
0
        public int sort()
        {
            //try
            //{
           
                task = obj.GetTask();
                if (task == null)
                    return 0;

                arr = obj.FetchData(task);
                Console.Out.Write("Получено");
                
                
                double x=0,dx,Pi=0;
                x = 0.0;
                if (task.start != 0) { x =  0.5; }
                dx = 1.0 / 1000000.0;
                int  outer;
 
               


                for (outer = 0; outer < task.stop - task.start; outer++)
                {
                    Pi += Math.Sqrt(1 - x * x)*4*dx;
                    x += dx;

                   
                }

                Console.Out.WriteLine(" S(rec)="+Pi);


                obj.Finish(Pi);

            return 1;
        }
예제 #26
0
        public void GetData(Task task, out int[] Btemp, out int[,] Atemp)
        {           
            Atemp = new int[m, n];
            Btemp = new int[n];
            ServerConsole.Print("\nКлиент начал получение данных для обработки!");
            Console.Out.WriteLine("A[m,n] передаваемое клиенту:");
            for (int i = task.start; i <= task.stop; i++)
            {
                Console.Out.WriteLine();
                for (int j = 0; j < n; j++)
                {
                    Atemp[i, j] = A[i, j];
                    Console.Out.Write("{0}\t", Atemp[i, j].ToString());
                }

            }
            Console.Out.WriteLine("\n\nB[n] передаваемое клиенту:");
            for (int j = 0; j < n; j++)
            {
                Btemp[j] = B[j];
                Console.Out.Write("{0}\n", Btemp[j].ToString());
            }
            ServerConsole.Print("Клиент получил данные для обработки!\n\n");
        }
예제 #27
0
        public void Finish(Task task, int[] data)
        {
            Log.Print("Client has finished task");
            lock (dataLock)
            {
                for (int i = 0; i < task.indexes.Count; i++)
                    dataArray[task.indexes[i]] = data[i];
            }
            //finishedTasks.Add(task);
            if (pendingTasks.Count == 0)
            {
                Log.Print("Final task has finished");

            }
        }
예제 #28
0
 public int [] FetchData(Task task ) { 
     Log.Print (" Клиент получил данные"); 
     int [] res = new int [ task.stop − task.start ];
예제 #29
0
        public void Finish(Task task, int[] data)
        {
            Log.Print("Client has finished task");
            lock (dataLock)
            {
                int j = 0;
                for (int i = task.start; i < task.stop; i++)
                {
                    dataArray[i] = data[j];
                    j++;
                    Console.Out.Write(dataArray[i]+"  ");
                }
                Console.Out.WriteLine();
            }
            //finishedTasks.Add(task);
            if (pendingTasks.Count == 0)
            {
                Log.Print("Final task has finished");
                Console.Out.WriteLine("\n\n");
                Console.Out.WriteLine("Sorting an array(Client)");
                for (int i = 0; i < 100; i++)
                {
                    Console.Out.Write(dataArray[i] + " ");
                }
                Console.Out.WriteLine("\n\n");
                dataArray = Sort(dataArray);

                Console.Out.WriteLine("Sorting an array(MERGE on server)");
                for (int i = 0; i < 100; i++)
                {
                   Console.Out.Write( dataArray[i]+" ");
                }
                Console.Out.WriteLine();
            }
        }
예제 #30
0
        public void Finish(Task task, int max, int min)
        {
          
            Log.Print("Client has finished task");
            lock (dataLock)
            {
                task.maxEl.Add(max);
                task.minEl.Add(min);
            }
            //finishedTasks.Add(task);
            if (pendingTasks.Count == 0)
            {
                Log.Print("Final task has finished");
  
                for (int i = 0; i < tasksCount-1; i++)
                {
                    if (maxim < task.maxEl[i]) maxim = task.maxEl[i];
                }
                
                for (int i = 0; i < tasksCount-1; i++)
                {
                    if (minim > task.minEl[i]) minim = task.minEl[i];
                }

                Console.Write(minim + "  ");
                Console.Write(maxim + "  ");
                Console.WriteLine();
            }
        }