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

При нахождении очередного простого числа активировать событие

15.10.2017, 17:56. Показов 2960. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задачи на использование событий. Осуществить использование событий в программе с применением синтаксиса обработчика, рекомендованного для среды .NET Framework.

Программа для поиска простых чисел в интервале 0..2млрд методом перебора с проверкой. При нахождении очередного простого числа активировать событие OnPrimeNumber, в обработчике которого вывести это число. После распечатки 10 простых чисел активировать событие OnFullScreen с ожиданием ввода пользователем выбора на продолжение работы программы с очисткой экрана или завершение работы программы.
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
  Console.WriteLine("Enter low limit: ");
                int a = int.Parse(Console.ReadLine());
                Console.WriteLine("Enter high limit: ");
                int b = int.Parse(Console.ReadLine());
                for (int i = a; i <= b; i++)
                {
                    if (isSimple(i))
                    {
                        Console.Write(i.ToString() + "\n");
                    }
                }
                Console.ReadKey();
            }
            //метод который определяет простое число или нет
            private static bool isSimple(int number)
            {
                if (number < 2) // 1 - не простое число
                    return false;
                // перебираем возможные делители от 2 до sqrt(n)
                for (int i = 2; i <= Math.Sqrt(number); i++)
                {
                    // если разделилось нацело, то составное
                    if (number % i == 0)
                        return false;
                }
                // если нет нетривиальных делителей, то простое
                return true;
Само задание достаточно легкое и без событий я его легко сделал, а вот уже с событиями я запутался, помогите пожалуйста разобраться. Как добавить в эту программу события
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.10.2017, 17:56
Ответы с готовыми решениями:

С помощью замыкания напишите генератор очередного простого числа из списка
С помощью замыкания напишите генератор очередного простого числа из заданного списка. lst = ; func = genPrElem(lst); func(); func();...

Выход из цикла при нахождении первого отрицательного числа массива
есть массив, в котором есть минимум 2 отрицательных числа надо найти первое и последнее отрицательное число возникает вопрос, при...

Предложить подходящую альтернативу функции Mod при нахождении последних цифр числа
дан массив, состоящий из n натуральных чисел. образовать новый массив, элементами которого являются элементы, оканчивающиеся на циыру к. ...

4
.NET C#,ASP.NET MVC
Эксперт .NET
 Аватар для lvlkoo
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
15.10.2017, 18:34
Лучший ответ Сообщение было отмечено Кирилл2017 как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Program
{
    public static event EventHandler OnPrimeNumber;
    
    public static void Main()
    {
         OnPrimeNumber += (sender, args) => Console.Write(args.Number.ToString() + "\n");
            
         Console.WriteLine("Enter low limit: ");
                int a = int.Parse(Console.ReadLine());
                Console.WriteLine("Enter high limit: ");
                int b = int.Parse(Console.ReadLine());
                for (int i = a; i <= b; i++)
                {
                    if (isSimple(i))
                    {
                       OnPrimeNumber?.Invoke(this, new MyEventArgs {Number = i});
                    }
                }
                Console.ReadKey();
            }
    }
}
C#
1
2
3
4
class MyEventArgs: EventArgs
{
    public int Number {get; set;)
}
1
2 / 2 / 2
Регистрация: 14.03.2017
Сообщений: 124
18.10.2017, 20:26  [ТС]
Можете, пожалуйста, описать поподробней что происходит в 7 строке
C#
1
OnPrimeNumber += (sender, args) => Console.Write(args.Number.ToString() + "\n");
и в 17
C#
1
OnPrimeNumber?.Invoke(this, new MyEventArgs {Number = i});
0
.NET C#,ASP.NET MVC
Эксперт .NET
 Аватар для lvlkoo
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
18.10.2017, 22:47
Лучший ответ Сообщение было отмечено Кирилл2017 как решение

Решение

Кирилл2017, для того чтобы это понимать вам нужно почитать информацию о делегатах и евентах, не ленитесь, это очень важная часть возможностей C#.

Цитата Сообщение от lvlkoo Посмотреть сообщение
public static event EventHandler OnPrimeNumber;
Эвенты объявляются с помощью типа делегата. Делегат это, простыми словами, ссылка на функцию. EventHandler это делегат типа
C#
1
public delegate void EventHandler(object sender,EventArgs e)
. Тоесть это ссылка на функцию, которая должна соотвествовать этой сигнатуре, возвращать тип void и принимать два аргумента

Вы можете использовать и свои делегаты для оьбьявление эвента.

Цитата Сообщение от Кирилл2017 Посмотреть сообщение
OnPrimeNumber += (sender, args) => Console.Write(args.Number.ToString() + "\n");
тут идет "подписка" на эвент, вы передаете указателю функцию, которая будет вызываться.
То есть
C#
1
 (sender, args) => Console.Write(args.Number.ToString() + "\n")
это так называемая анонимная функция, чтобы понять эту конструкцию вам так же нужно почитать про анонимные функции и лямбда выражения. Это эквивалент

C#
1
2
3
4
public void MyEventCallback(object sender,EventArgs e)
{
    Console.Write(args.Number.ToString() + "\n")
}
Цитата Сообщение от Кирилл2017 Посмотреть сообщение
OnPrimeNumber?.Invoke(this, new MyEventArgs {Number = i});
Так как делегат это ссылка на функцию то эту функцию можно вызвать. К примеру вы можете написать так

C#
1
OnPrimeNumber(this, new MyEventArgs {Number = i})
Но в конструкции выше, идет дополнительная проверка на то что эта ссылка на что-то ссылается (т.е не null). и после этого функция вызывается
1
2 / 2 / 2
Регистрация: 14.03.2017
Сообщений: 124
18.10.2017, 23:27  [ТС]
Спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.10.2017, 23:27
Помогаю со студенческими работами здесь

В чем ошибка при проверке простого числа
После цикла ничего не работает int n, counter = 2; cout &lt;&lt; &quot;Vvedite chislo&quot; &lt;&lt; endl; cin &gt;&gt; n; bool flag = false; ...

Найти все простые числа, меньше данного числа N. Определение простого числа описать в функции
Найти все простые числа, меньше данного числа N. Определение простого числа описать в функции

Написать программы, при выполнении которых в целочисленном массиве определяется число соседств простого числа и четного с нечетным индексом.
:cry: Написать программы, при выполнении которых в целочисленном массиве определяется число соседств простого числа и четного с нечетным...

Ошибка в нахождении числа в последовательности
Помогите, пожалуйста, найти ошибку. Цикл не работает с последним введенным числом. Задача такова: дано натуральное число n и числа...

Событие при активации textbox. Или событие при изменения фокуса
Здравствуйте. Подскажите можно ли создать свое событие происходящий вовремя активации textbox. Имеется ввиду создать свой класс...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru