С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/48: Рейтинг темы: голосов - 48, средняя оценка - 4.71
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560

Посоветуйте сложные задачи по C#

14.02.2014, 04:48. Показов 10224. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Посоветуйте сложные задачи (ссылки на сайты и т.п.) по C#.
Чтобы задачи были как-бы простыми, но для их решения необходимо глубокое понимание.

Что-то типа такого:
Почему выполняется конструктор с параметром double?
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
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            D myD = new D(null);
            Console.ReadLine();           
        }
 
    }
 
    public class D
    {
        public D(object o)
        {
            Console.WriteLine("Object");
        }
        public D(double[] array)
        {
            Console.WriteLine("Array");
        }
        public D(int i)
        {
            Console.WriteLine("Int");
        }
    }
}
Прошу заметить, что цель данной темы - не получение решения данной задачи!!!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.02.2014, 04:48
Ответы с готовыми решениями:

Сложные задачи
1)Если человек вылетел на ракете из туманности Конская Голова со скоростью в три раза превышающей скорость света, и в то же врем его отец...

Не сложные задачи по с++
Всем привет! нужна помощь Найти в массиве минимальный элемент и удалить.

Задачи (сложные)
Задача 1. Запросы сумм Ограничение по времени: 2 секунды Ограничение по памяти: 64 мегабайта В первой строке файла содержатся...

30
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
14.02.2014, 10:17
Как сделать так, чтобы всегда гарантировано выводило 10000
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    class Program
    {
        static double count;
 
        const int THREAD_COUNT = 1000;
 
        static void Main(string[] args)
        {
            var threads = new List<Thread>();
            for (int i = 0; i < THREAD_COUNT; i++)
            {
                var t = new Thread(() => { count += 10; });
                threads.Add(t);
            }
            threads.ForEach(t => t.Start());
            threads.ForEach(t => t.Join());
 
            Console.WriteLine(count);
            Console.ReadKey();
        }
    }
1
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
14.02.2014, 11:52
Цитата Сообщение от dimakozyr Посмотреть сообщение
Почему выполняется конструктор с параметром double?
а почему?
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
14.02.2014, 12:01
turbanoff, этот код будет выводить 10 000 всегда и гарантировано без изменений.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
14.02.2014, 12:20
Лучший ответ Сообщение было отмечено как решение

Решение

все подобные задачи, это так называемые задачи тесты.... по моему глубокому убеждению такие задачи ничему не учат, хочешь серьезно учить язык, бери любой задачник по программированию, хоть на паскале хоть на фортране, и решай, сделаешь на каждую тему по 10-15 задач на C#, выучить что такое ООП (или не выучить:-) кто знает может тебе больше Lisp понравиться , тогда и более серьезные задачи можно искать, ... хотя если ты так горишь желанием Тесты для джуниора
4
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
14.02.2014, 12:23
Петррр, вы заблуждаетесь. Я пробовал запускать, и я уверен, что приведённый код может вывести не только 10000
1
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
14.02.2014, 14:19
поясните, плз, почему в первом примере вызывается конструктор с double[] ?
0
 Аватар для dirtez0
44 / 44 / 19
Регистрация: 20.01.2014
Сообщений: 87
14.02.2014, 14:34
Цитата Сообщение от da1z Посмотреть сообщение
поясните, плз, почему в первом примере вызывается конструктор с double[] ?
Тут искали решение и вроде как нашли.
конкретней
1
 Аватар для dimakozyr
162 / 29 / 3
Регистрация: 17.08.2013
Сообщений: 560
14.02.2014, 16:24  [ТС]
Цитата Сообщение от da1z Посмотреть сообщение
поясните, плз, почему в первом примере вызывается конструктор с double[] ?
Согласно спецификации 7.5.3.5, если есть два типа T1 и T2 и преобразование типов из T1 в T2 возможно, а из T2 в T1 - нет, то предпочтение отдается T1.

В нашем случае T1 - это double[], а T2 - object. Возможно неявное преобразование из double[] в object а из object в double[] - нет. Поэтому выбирается double[].

Чтобы принудительно использовать конструктор object, нужно написать:
C#
1
D myD = new D((object) null);
Добавлено через 2 минуты
Цитата Сообщение от dimakozyr Посмотреть сообщение
Прошу заметить, что цель данной темы - не получение решения данной задачи!!!
Смотрите строку выше
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.02.2014, 00:34
turbanoff, я бы заменил += на Interlocked.Add

Что касается задач: ответить, что выведет этот код, сколько будет выполнятся программа, ну и почему так:
C#
1
2
3
4
5
6
        static void Main()
        {
            var x = new {MyEnumerator = new List<int>(){1,2,3}.GetEnumerator()};
            while (x.MyEnumerator.MoveNext())
                Console.WriteLine(x.MyEnumerator.Current);
        }
1
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
15.02.2014, 11:07
Psilon, Interlocked.Add не работает с double-ами
0
71 / 70 / 21
Регистрация: 04.04.2012
Сообщений: 351
15.02.2014, 11:39
Цитата Сообщение от turbanoff Посмотреть сообщение
Interlocked.Add не работает с double-ами
добавить любой объект referance-типа и обернуть сумму в lock(ref_object){}
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.02.2014, 12:32
turbanoff, ну тогда обычным локом
0
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
15.02.2014, 14:52
Если без лока, можно вот так.

C#
1
2
3
4
5
6
7
8
9
10
11
12
  var t = new Thread(() =>
  {
    double start;
    double current;
    do
    {
      start = count;
      double temp = count + 10;
      current = Interlocked.CompareExchange(ref count, temp, start);
    }
    while(start != current);
  });
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.02.2014, 14:56
Anklav, я уже попробовал с ним, почему-то все равно неправильно считает. Только с локом правильно.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
16.02.2014, 17:07
Psilon, Разумеется можно без лока обойтись, но в реализации Anklav, есть ошибка.
0
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
16.02.2014, 17:17
turbanoff, а можно подробнее про ошибку, желательно с объяснением?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
16.02.2014, 17:28
Anklav, внутри цикла чтение count происходит дважды. И между этими чтениями могут вклиниться другие потоки, и значение count может поменяться.
1
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.02.2014, 03:37
Цитата Сообщение от Psilon Посмотреть сообщение
Что касается задач: ответить, что выведет этот код, сколько будет выполнятся программа, ну и почему так:
C#
1
2
3
4
5
6
static void Main()
{
 var x = new {MyEnumerator = new List<int>(){1,2,3}.GetEnumerator()};
 while (x.MyEnumerator.MoveNext())
 Console.WriteLine(x.MyEnumerator.Current);
 }
почему так?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
17.02.2014, 10:53
Jupiter, Потому что List.GetEnumerator возващает структуру, а не класс, и каждый вызов x.MyEnumerator возвращает её изначальное значение.

Добавлено через 2 часа 3 минуты
Как сделать так, чтобы программа всегда выводила только "end"? Можно ли обойтись без локов?
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
class AtomicLongWrite
    {
        static long state;
 
        const int THREAD_COUNT = 1000;
 
        public static void Run()
        {
            var readThreads = new List<Thread>();
            var writeThreads = new List<Thread>();
 
            for (int i = 0; i < THREAD_COUNT; i++)
            {
                var w = new Thread(() =>
                {
                    for (int j = 0; j < 1000; j++)
                        state = (j%2 == 0) ? long.MaxValue : 0;
                });
                writeThreads.Add(w);
                
                var r = new Thread(() =>
                {
                    for (int j = 0; j < 1000; j++)
                    {
                        long q = state;
                        if (q != 0 && q != long.MaxValue)
                            Console.WriteLine(q);
                    }
                });
                readThreads.Add(r);
            }
 
            for (int i = 0; i < THREAD_COUNT; i++)
            {
                readThreads[i].Start();
                writeThreads[i].Start();
            }
            writeThreads.ForEach(t => t.Join());
            readThreads.ForEach(t => t.Join());
        }
    }
 
 
    class Program
    {
        static void Main()
        {
            AtomicLongWrite.Run();
            
            Console.WriteLine("end");
            Console.ReadKey();
        }
    }
Запускать с platform target - x86.
Вкратце, что происходит: много потоков, пишут и читают одну и ту же long переменную. Иногда потоки-читатели видят не те значения, которые пишут писатели.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.02.2014, 10:53
Помогаю со студенческими работами здесь

3 задачи на сложные функции
Приветствую всех, не поможете с задачками?

Посоветуйте, где взять сложные макеты psd
Посоветуйте, где можно скачать макеты psd для тренировки, только не статические, а динамические, средней сложности. Допустим с...

Электротехника, сложные цепи (2 задачи)
Нужно решить эти 2 задачи del

Две не сложные задачи про ЭВМ
Помогите с решением этих двух задач, никак не могу понять( вроде первая решается через формулу полной вероятности, но не уверена( 1....

1 курс универа. Задачи, должны быть не сложные
1. (3x-10)(x+6) при x&lt;6, y=(3x-10)/x-6 при x&gt;6 В фигурной скобки эти два выражения. 2. В файле прикреплю, вроде...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru