Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 14.12.2015
Сообщений: 14

Потоки, увеличить скорость работы программы

30.05.2016, 15:13. Показов 1239. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как увеличить скорость работы программы
входные параметры
8,00000
0,01
5
0 0
0 4
4 0
4 4
5 5
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading;
 
namespace Ekz
{
    class 
    class Program
    {
        static int N;//глобальная переменная для хранения количества точек
        static int countThreads, countThreadsEnd;//глобальная переменная для хранения количества потоков и количества завершенных потоков
        static double[,] matrix;//глобальная переменная для хранения координат точек
        static int count;//глобальная переменная для хранения количества треугольников
        static double S;//глобальная переменная для хранения заданной площади
        static double E;//глобальная переменная для хранения заданной точности
        static Semaphore hSemaphore;//глобальный семафор
 
        static void Main(string[] args)
        {
            int i;
            count = 0;
            S = Convert.ToDouble(Console.ReadLine());//Считывание из файла значения площади
            E = Convert.ToDouble(Console.ReadLine());//Считывание из файла значения точности
            N = Convert.ToInt32(Console.ReadLine());//Считывание из файла значения количества точек
            matrix = new double[N, 2];//создание матрицы, для считывания в нее координат точек
            string s = "";//объявление строки
            for (i = 0; i < N; i++)
            {
                s = Console.ReadLine();//считывание координат одной точки в строку
                matrix[i, 0] = Convert.ToDouble(s.Split(' ')[0]);//занесение первой координаты из строки в матрицу
                matrix[i, 1] = Convert.ToDouble(s.Split(' ')[1]);//занесение второй координаты из строки в матрицу
            }
        
 
            hSemaphore = new Semaphore(0, 1);//создание семафора
            countThreads = 10;//задание количества потоков
            countThreadsEnd = countThreads;//задание количества завершенных потоков
 
            for (i = 0; i < countThreads; i++)
            {
                //WaitCallback start = delegate { Program.Ckeck(k); };//делегат для передачи в метод потока параметров
                object m = i;
                ThreadPool.QueueUserWorkItem(Ckeck, m);//добавление потока в пул потоков
            }
            hSemaphore.WaitOne();//ожидание, пока освободится семафор методом Release
            Console.WriteLine(count);//вывод количества треугольников подходящих под условие
            Console.ReadKey();
        }
 
        static void Ckeck(object ind)//Метод выполняемый в потоке
        {
            int index=(int) ind;
            int dx = N / countThreads;//интервал точек, который будет проверяться в потоке
            int a = dx * index;//начало интервала
            int b = dx * (index + 1);//конец интервала
 
            if (index == countThreads - 1)//если это последний поток
                b = N;//то конец интервала будет равняться оличеству точек
            int i, j, k;
            for (i = a; i < b; i++)
                for (j = i + 1; j < N - 1; j++)
                    for (k = j + 1; k < N; k++)
                    {
                        double ss = triangleArea(matrix[i, 0], matrix[i, 1], matrix[j, 0], matrix[j, 1], matrix[k, 0], matrix[k, 1]);//определение площади треугольник
                        if (Math.Abs(S - ss) <= E)//проверка, если площадь найденного треугольника равна заданной площади S с заданной точностью E
                            Interlocked.Increment(ref count);//увеличение значения переменной count на еденицу, с помощью атомарной операции
                    }
            int l = Interlocked.Decrement(ref countThreadsEnd);//уменьшение значения переменной количества завершенных потоков countThreadsEnd на еденицу, с помощью атомарной операции
            if (l == 0)//если это был последний поток
                hSemaphore.Release();//то освобождаем семафор
        }
 
        static double triangleArea(double x1, double y1, double x2, double y2, double x3, double y3)//метод для определения площади треугольника
        {
            double a, b, c, p;
            c = Math.Sqrt(Math.Pow(y1 - y2, 2) + Math.Pow(x1 - x2, 2));//длина стороны c
            a = Math.Sqrt(Math.Pow(y2 - y3, 2) + Math.Pow(x2 - x3, 2));//длина стороны a
            b = Math.Sqrt(Math.Pow(y1 - y3, 2) + Math.Pow(x1 - x3, 2));//длина стороны b
 
            p = (a + b + c) / 2;//определение полупериметра
            return (Math.Sqrt(p * (p - a) * (p - b) * (p - c)));//возврат значения площади
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2016, 15:13
Ответы с готовыми решениями:

Как увеличить скорость работы программы?
Всем привет! Программа проходит 6/8 тестов (тесты неизвестны), а на последние 2 превышен лимит времени. Прошу помощи. Задача: ...

Увеличить скорость выполнения программы и уменьшить ее объем
Помогите пожалуйста. Какие есть способы для увеличения скорости выполнения программы и уменьшения ее объема? Например этой: using...

Что влияет на скорость запуска и работы программы
Здраствуйте ув. програмисты! Есть вопрос (хотя скорее проблема) упала скорость запуска и выполнения программы, причём резко в несколько...

1
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
30.05.2016, 17:43
Цитата Сообщение от findus Посмотреть сообщение
как увеличить скорость работы программы
А сколько она у вас выполняется на пяти точках-то ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2016, 17:43
Помогаю со студенческими работами здесь

Скорость работы программы с потоками и без
Написал небольшую программу с потоками. Решил проверить как будет работать быстрее - с потоками или без. Если в двух словах: 1 функция,...

Надо увеличить скорость работы программы
std::string separators(&quot;.:,;()-?!'+-/|&quot;); std::map&lt;std::string, int&gt; repeatedWords; size_t index; std::fstream fin(fileName); ...

Как увеличить скорость работы?
Всем доброго времени суток. Разрабатываю веб-приложение для организации. Моё приложение должно работать с большим объёмом данных...

Увеличить скорость работы макроса
Помогите пожалуйста увеличить скорость работы макроса. Макрос открывает файл с большим количеством данных (более 10000 строк) и...

Как увеличить скорость работы эмулятора?
Есть способы как улучшить скорость работы эмулятора ?Как это сделать? медленно загружается и работает.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru