Си шарп с нуля

Формула программиста

основатель — Волосатов Евгений Витольдович
Робот Шарп в отпуске до 28 июня 21:00, работает только java компилятор

Дмитрий
  • Звание: Рекурсист
  • Накопленный опыт: 190 часов
  • Баланс Мегахешей: собрано 0 Mh, потрачено 0 Mh
  • Баланс Байтов: нет
  • Не состоит в «Клубе формулистов»
  • Последний визит: 2020-04-22 16:33:40
  • Возраст: 33 года

Видеокурсы

Дата активности Видеокурс Прогресс
2020-04-05 gmaps ASP.NET и GMaps 3 из 11 28 %
2020-03-30 sweep Боты Сапёра 4 из 32 13 %
2020-03-28 sokoban Сокобан 21 из 23 92 %
2020-03-02 iterator Итератор 7 из 10 70 %
2018-10-05 chess3 Шахматы по сети 1 из 95 %
2018-07-22 game1 Нано-игры 1 из 9 10 %
2018-07-17 soft0 Демо софт 5 из 8 72 %
2018-07-12 webapi Web API все 1 %
2018-07-09 wpf2 Простой WPF 9 из 12 %
2018-07-01 game0 Демо игры 7 из 10 70 %
Итого: 59 из 211 28 %

Консольные задачи

Дата активности Консольный раздел Прогресс
2020-04-22 task2 Алгоритмика 7 из 20 35 %
2020-04-15 task1 Календарь все 16 100 %
2020-03-12 base Футбольная База 11 из 0 %
2019-01-12 task1 Цифры 11 из 12 92 %
2019-01-11 task1 Целые задачи все 11 100 %
2019-01-06 task1 Геометрия все 8 100 %
2019-01-05 task1 Символы все 5 100 %
2019-01-04 task1 Формулы все 9 100 %
2019-01-03 task1 Лирика 13 из 14 93 %
2018-12-22 task1 Строки все 14 100 %
2018-12-14 task1 Целые числа все 7 100 %
2018-11-15 task1 Семантика все 6 100 %
2018-10-18 club 6203 - Николай 1 из 6 17 %
2018-10-17 cpp С++ 7 из 0 %
2018-10-01 olimp Олимпиада 2 из 40 5 %
Итого: 128 из 168 77 %
Сохранить страницу:

25017. --
Денис
Денис
ответить
→  Дмитрий   / 2020-04-22 19:35

Дима привет! не знаю читаешь ты моё сообщение или нет, но хочу тебе сказать огромное спасибо за твой совет ты мне очень сильно помог. Александр Шевчук крут нереально. Мужское тебе рукопожатие. Хорошего настроений и удачи во всем =)


18953. --
Дмитрий
Дмитрий
ответить
→  Игорь Алексеенко  # Консоль / Алгоритмика / Условный оператор / 2020-04-16 18:01

program.cs(15,2): error CS1513: } expected
Это значит, что на 15 строке во 2 столбце ожидается закрывающая фигурная скобка }.


18953. --
Дмитрий
Дмитрий
ответить
→  Валерий Жданов   / 2020-04-05 19:36

Ясно. Спасибо.


791. --
Валерий Жданов
Валерий Жданов
ответить
→  Дмитрий  # ASP.NET и GMaps / Презентация / 2020-04-05 07:11

кратчайший путь - штука тонкая, здесь много ньюансов надо будет учитывать, которые на картах не видны (рельеф местности, постройки) .  asp.net - поработай обязательно


18953. --
Дмитрий
Дмитрий
ответить
/ 2020-03-31 21:21

И ещё. На первых порах не старайся выучить кучу языков. Язык - это ещё не программирование. Постигай основы программирования (общие конструкции языков: циклы, условные операторы и т. д; алгоритмы и т. д.) на примере одного языка. И вот, когда ты постигнешь основы, то с лёгкостью сможешь изучить не один десяток других языков. Успешного тебе изучения :-)


25017. --
Денис
Денис
ответить
→  Дмитрий   / 2020-03-31 21:21

Спасибо за такой развернутый ответ, да я сейчас в самом начале пути. Тут нравится что практика есть, параллельно метанит читаю, когда вопросы есть. Большое желание стать разработчиком и понимаю что процесс тяжелый, хочу получить первичные знания что бы выполнять простейшие задания, а там по нарастающей буду развиваться. =) если есть Telrgram оставь контакт вдруг вопросы будут, смогу тебе написать может быть поможешь =) или тебе что то надо будет в Краснодаре обращайся помогу чем смогу=)


18953. --
Дмитрий
Дмитрий
ответить
→  Денис   / 2020-03-31 21:06

Денис, прости, сейчас совершенно нет времени (тем более на видеоотчёты). Но при первом же удобном случае обещаю выполнить твою просьбу. О каких нюансах ты говоришь? Показать код я не могу (у меня 99,9 % кода - это код с этого проекта, а публикация материалов этого проекта запрещена его пользовательским соглашением). Почти все замечания я указал в комментариях к урокам. А те, которые не указал касаются архитектуры (проектирования программы, чем в IT-компаниях, в основном, занимаются архитекторы, а не программисты). Я, вообще, изменил бы всю архитектуру игры. А это значит, что придётся переписать весь курс заново, что займёт достаточно много времени, которого, как я уже говорил, у меня сейчас не так много. Изменение архитектуры потребуется тебе только в том случае, если ты соберёшься делать игру на продажу (а это также запрещено пользовательским соглашением данного проекта) или другой платформы (например, Android) надумаешь её в дальнейшем развивать. А это со старой архитектурой, как мне кажется, будет сделать непросто (я поспешил, указав на костыли, потому что уже в следующем уроке Евгений Витольдович сам признаёт, что под конец, к сожалению, получились небольшие костыльки, и что нужно было с самого начала лучше проектировать игру)). Если же ты хочешь написать игру лишь для того, что бы потом самому поиграть, пиши, играй и не заморачивайся. Она написана достаточно хорошо и у меня сбоев в её работе не было. Если же ты планируешь стать высококвалифицированным программистом и хочешь посмотреть чистый, хорошо спроектированный профессиональный код, то с этим могут возникнуть сложности: на этом проекте его, по всей видимости, немного (из того, что я видел на этом проекте, очень хорошо написан на java Сапёр), а в сети найти такой код - большая удача, но об этом чуть позже. Я, вообще, начал прохождение курсов "Сокобан" и "Боты сапёра" с одной лишь целью - посмотреть, как реализованы алгоритмы "поиск вширь" и "чтение памяти другой программы" (хакерский бот сапёра (31 урок!). Но поскольку к урокам нельзя получить произвольный доступ (только последовательный!), то, сам видишь, сколько лишнего времени приходится тратить на ненужное. А, ведь, нужные мне уроки никак не связаны с предыдущими. Например, в уроке "Хакерский бот сапёра", скорее всего, выясняется адрес области памяти, "открывающей" минные поля, и из неё с помощью API-функции системы Windows считываются необходимые данные (не зря же указано, что для эксперимента нужна версия Сапёра для Windows XP!). А вот теперь скажи, как всё это связано с материалом из предыдущих уроков? На мой взгляд, никак. А в Сокобан уроки про тестер, мышку и яблоко мало связаны с предыдущими. Можно сказать, что вообще никак не связаны. А помещены они в конец, по всей видимости, для стимуляции интереса.
Понимаешь, Денис, я сам не являюсь высокопрофессиональным программистом. Программирование - это моё хобби. Начинал его постигать 14 лет тому назад с Turbo Pascal, который привил мне хороший стиль программирования и дал хорошую базу для быстрого освоения более современных языков. Затем были такие языки, как Delphi, C, C++, Java, Assembler. Вот сейчас - C#. И, честно сказать, за всё это время я и сам практически не видел чистый, хорошо спроектированный высокопрофессиональный код. Поэтому, если твоя цель - стать грамотным профессионалом, всё, что я могу - это порекомендовать следующие ресурсы:
1. itvdn.com (курс C# Александра Шевчука (курс платный (нужно купить подписку), но, поверь, он того стоит). На этом ресурсе есть бесплатные вебинары, среди которых встречаются и вебинары Евгения Витольдовича (очень хороший вебинар по пятнашкам для Android), и много ещё чего качественного и интересного.
2. videosharp.info. Преимущество этого сайта в том, что здесь можно хорошо попрактиковаться, но качество кода и подача материала, в большинстве своём, оставляют желать лучшего.
3. М. Дрейер "C# для школьников", учебники Павловской, Шилдта, Рихтера (CLR via C#), Роберт Мартин "Чистый код".
4. ru.stackoverflow.com (ru.stackoverflow.com/questions/416644/%D0%9A%D0%B0%D0%BA-%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C-%D0%BA%D1%80%D0%B0%D1%81%D0%B8%D0%B2%D1%8B%D0%B9-%D0%B8-%D1%87%D0%B8%D1%82%D0%B0%D0%B5%D0%BC%D1%8B%D0%B9-%D0%BA%D0%BE%D0%B4, ru.stackoverflow.com/questions/416584/%D0%9A%D0%BD%D0%B8%D0%B3%D0%B8-%D0%B8-%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B5-%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B-%D0%BF%D0%BE-c)
5. metanit.com
Думаю, для начала достаточно. Будут вопросы - пиши.


25017. --
Денис
Денис
ответить
→  Дмитрий  # Сокобан / Сокобан - Редактор - Сохранение / 2020-03-29 10:11

Хорошая работа! Дмитрий я новичок в программировании, просмотрел уже несколько твоих отчетов по реализации этой игры, вроде не видел, что бы ты записывал видео отчет в конце =) у меня к тебе просьба сделай видео отчет расскажи про нюансы. Тоже хочу реализовать эту игру будет интересно тебя послушать. Спасибо!


24659. --
Виталий
Виталий
ответить
→  Дмитрий   / 2020-03-28 06:17

Пфф.... Ну мне до таких выводов как до луны))) Да косяки и грабли. Но наверное всё же собственные грабли и часы проведенные в их поиске принесут более ценный опыт. Я рассматриваю этот ресурс как совсем базовый. Я вот впервые программировать начал еще в школе, 28 лет назад. Мне это интересно. Но Это не моя профессия. у меня все эти 30 лет перерыв, в силу жизненных обстоятельств. Сейчас хочется в жизни чего то поменять. Дети почти выросли. И профессию хочется для души, а не для "прожить".
Но за 30 лет технлогии ускакали в неведомые дали. И в несколько подходов я никак не мог понять суть ООП. И книжки читал и видео смотрел. Никак. На полиморфизме у меня неминуемо наступал взрыв мозга. И знаете - это единственное место где у меня получилось и до меня дошло, как это работает. На 16 уроке. Все 16 уроков программа разрасталась в ужасного монстра. И вот сейчас красота! В этом курсе костыли натыканы просто в ужасном количестве. Но без них, я бы не озверел и не увидел красоту и необходимость ООП.
За другие курсы сказать пока ничего не могу.
С моей низкой колокольни пока все выглядит оправдано. Возможно через пару лет практики я, так же как вы, буду плеваться от всего здесь происходящего)))


18953. --
Дмитрий
Дмитрий
ответить
→  Денис   / 2020-03-27 22:06

Пожалуйста. Рад был помочь :-)
Успехов в обучении интересному делу, программированию!


18953. --
Дмитрий
Дмитрий
ответить
→  Виталий   / 2020-03-27 21:54

Этот вопрос лучше задать не мне, а Евгению Витольдовичу :-). Судя по тем курсам, которые я видел, могу сказать, что ошибки устраняются не всегда и не везде. И хорошо, если вы их видите. А если нет?..
Если нет, тогда вы будете учиться неправильному, думая, что учитесь правильному. Постепенно у вас сформируется навык писать плохой код. И самое страшное здесь то, что вы об этом даже не будете подозревать.
Вот вам наглядный пример на C++:
void Dangerous()
{
char buf[1024];
char input[2048];
..........................
strcpy(buf, input)
}
В этом примере я копирую содержимое буфера input в локальный буфер buf. Проблема кроется в функции strcpy, которая просто не проверяет количество копируемых данных. Всё, что получено в переменной input, будет скопировано в buf, вне зависимости от размера приёмника, и если приёмник будет меньше, то его данные перепишутся и уничтожатся даже за пределами буфера. Но я этого не вижу (я считаю это правильным кодом, я уже привык так писать!).
Что дальше? А дальше либо выполнение программы аварийно завершится, просто, потому что были "затёрты" важные данные, либо данной уязвимостью воспользуется хакер, который вначале пошлёт мне пакет со своим вредоносным кодом, который запишется в массив buf, а затем заставит процессор выполнить этот код, переписав в стеке адрес возврата из функции Dangerous на адрес переменной buf. И то, и другое достаточно печально, не правда ли?
Как решить данную проблему? Очень просто. Нужно с самого начала приучать себя писать ПРАВИЛЬНЫЙ код. В данном случае нужно было проверить, достаточно ли в буфере-приёмнике места, чтобы принять все входящие данные. Если нет, то можно скопировать только достаточный объём данных, т. е. 1024 байта, которые мы выделили в массиве buf, а можно сгенерировать сообщение об ошибке. Это уже зависит от конкретной ситуации.
Вот ещё один пример на C#:
1      int a = 3;
2      object o = a;
3      int b = (int)o;
Здесь:
- На первой строке объявляется переменная а типа int, которой присваивается значение 3.
- На второй строке объявляется переменная o типа object, которой присваивается значение переменной а.
Поскольку object - ссылочный тип, а int - значимый, в стеке выделяется память для ссылочной переменной о, в управляемой куче - область для хранения переменной типа int. В эту область копируется значение переменной а, и адрес данной области памяти записывается в переменную о. Этот процесс называется упаковкой значимого типа.
- На третьей строке объявляется переменная b типа int, которой присваивается значение переменной o типа object приведённое к типу int.
Поскольку object - ссылочный тип, а int - значимый, в стеке создаётся переменная b, в которую копируется значение расположенное по адресу, хранящемуся в переменной o. Этот процесс называется распаковкой значимого типа.
Оба процесса достаточно ресурсоёмкие. Если подобного кода будет много, можно получить ужасно "тормозную" программу. А потом часами сидеть и недоумевать: почему же так вышло?
Вот видите сколько нюансов нужно учитывать программисту, насколько необходимо быть внимательным, усидчивым и трудолюбивым (И легче ему же самому будет, если он этому станет учиться ПРАВИЛЬНО СРАЗУ!). Ну, и ещё желательно знать предметную область, для которой он пишет программу :-)
Понятно, что этот проект собирает людей с разным уровнем знаний, умений и навыков в области программирования. И не знаю как другим, а мне хочется на этом проекте видеть уже более профессиональный и масштабный курс :-)


25017. --
Денис
Денис
ответить
→  Дмитрий  # Сокобан / Сокобан - Игра - На двоих по сети / 2020-03-27 06:27

Молодец, что написал про то какие можно внести изменения даже скрин сделал себе, потом когда доберусь до этой игры обязательно воспользуюсь советом. Спасибо =)


24659. --
Виталий
Виталий
ответить
→  Дмитрий  # Сокобан / Сокобан - Игра - На двоих по сети / 2020-03-27 06:10

столько написал, аж непонятно кто у кого учится. Как я понимаю по другому курсу, многие костыли здесь втыкаются намеренно и потом по мере развития проекта устраняются с обучательной целью. Не? Не так?


18953. --
Дмитрий
Дмитрий
ответить
→  Сергей   / 2020-03-18 14:53

Спасибо.


24931. --
Сергей
Сергей
ответить
→  Дмитрий  # Сокобан / Сокобан - Создаём свои уровни / 2020-03-18 08:27

При изучении материала, всегда вопрос времени становится на первое место, особенно важно заниматься именно каждый день, чтоб не терялись навыки и был виден прогресс. Успехов в этом не легком деле ;)


18953. --
Дмитрий
Дмитрий
ответить
→  Николай Денисов   / 2020-03-14 05:12

Спасибо за совет. Сам сразу не догадался.


9014. --
Николай Денисов
Николай Денисов
ответить
→  Дмитрий  # Сокобан / Сокобан - Редактор - Загрузка / 2020-03-14 04:36

Зачем менять какие-то настройки,                                                                                                   
когда можно второй скриншот сделать ?


18953. --
Дмитрий
Дмитрий
ответить
# Консоль / Футбольная База / Штрафники / 2020-03-13 01:17

SELECT number, surname, COUNT(*) AS yellow
FROM player, (SELECT player_id, type FROM action
                                  WHERE type = "yellow" OR type = "red"
                          UNION ALL SELECT player_id, type FROM action
                                                        WHERE type = "red") AS act
WHERE player.id = act.player_id
GROUP BY player.id
ORDER BY yellow DESC
Что теперь ему не нравится?! Этот вариант учитывает, что 1 красная карточка = 2 жёлтым.


1. KF
Евгений Волосатов
Евгений Волосатов
ответить
→  Дмитрий   / 2020-03-12 19:35

Подписка в Клуб формулистов обновлена.
Количество дней: +30
Количество байт: +256

Подписка КФ до: 2020-04-11
Остаток байтов: 256
Вы являетесь участником Клуба формулистов.


18953. --
Дмитрий
Дмитрий
ответить
→  Anatoli  # Комбинаторика / Рекурсия. Вступление / 2020-03-12 18:16

Небольшая правка предыдущего сообщения:
РЕКУРСИЯ - это ВЫЗОВ функцией САМОЙ СЕБЯ. И такая ФУНКЦИЯ, которая ВЫЗЫВАЕТ САМУ СЕБЯ, называется РЕКУРСИВНОЙ.


18953. --
Дмитрий
Дмитрий
ответить
→  Anatoli  # Комбинаторика / Рекурсия. Вступление / 2020-03-12 18:05

Ваше определение подходит для РЕКУРСИВНОЙ ФУНКЦИИ, а не РЕКУРСИИ!
Из Википедии:
"В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная или косвенная рекурсия), например, функция вызывает функцию , а функция  — функцию . Количество вложенных вызовов функции или процедуры называется глубиной рекурсии. Рекурсивная программа позволяет описать повторяющееся или даже потенциально бесконечное вычисление, причём без явных повторений частей программы и использования циклов."
Чувствуете разницу между ФУНКЦИЕЙ и её ВЫЗОВОМ? РЕКУРСИЯ - это ВЫЗОВ функцией самой себя. И такая ФУНКЦИЯ, которая вызывает саму себя, называется РЕКУРСИВНОЙ.
Надеюсь, что в будущем путаницы в данных понятиях у вас не будет.


18953. --
Дмитрий
Дмитрий
ответить
# Консоль / Футбольная База / Вклад в успех / 2020-03-12 17:35

Эту задачу решил методом "тыка"!
SELECT number, surname, COUNT(*) AS goals FROM player, action
WHERE player.id = player_id AND type = 'goal'
GROUP BY number
ORDER BY goals DESC
Считаю, что в соответствии с условием задачи правильно было бы группировать по столбцу "player.id" или "player_id", а не по "number" (номера игроков совпадают, и количество голов подсчитывается для номера, а не игрока!!!).
Почему же тогда робот Шарп считает это неправильным?!


18953. --
Дмитрий
Дмитрий
ответить
# Консоль / Футбольная База / Штрафники / 2020-03-12 17:01

SELECT number, surname, COUNT(*) AS yellow FROM player, action
WHERE player.id = player_id AND type = "yellow"
GROUP BY player.id
ORDER BY yellow DESC
Робот Шарп говорит: "Количество строк у вашего запроса и правильного ответа не совпадает".
Подскажите, пожалуйста, что я неправильно написал? Заранее благодарен.


9014. --
Николай Денисов
Николай Денисов
ответить
→  Дмитрий  # Сокобан / Сокобан - Вступление / 2020-03-01 05:02

Надо дать кладовщике по шапки чтобы не безобразничал,                                                                 
А то и что удумал, иногда быстро бегать.


17606. --
Виктор
Виктор
ответить
→  Дмитрий   / 2019-01-13 11:01

Thank you very much, Дмитрий) But it was in May) After that, in November, the marathon on algorithmic and semantics was held on the portal of VideoSharp. And since by that time I had already successfully pumped my skills – as proof of my words - I successufully solved 300 tasks and therefore coped with this))
Thanks anyway)


18953. --
Дмитрий
Дмитрий
ответить
→  Алмаз  # Консоль / Цифры / Чётность цифр / 2019-01-12 06:00

Цифра - это знак для записи числа. Знак не может быть чётным или нечётным. Чётным или нечётным может быть число. Поэтому корректнее сказать так: "0 - тоже число, и оно чётное".


18953. --
Дмитрий
Дмитрий
ответить
→  Виктор  # Консоль / Цифры / Штирлиц / 2019-01-12 02:59

Виктор, вот это лишнее:
"int b;
if (number % 10 == 0)
  b = 0;
else".
Вот такой код
(using System;
class VideoSharp
{
    static void Main()
    {
        int number = int.Parse(Console.ReadLine());
            int a = number / 10;
            int b = number % 10;
            int number2 = b * 10 + a;
                     
            Console.WriteLine("{0:d2}", number2);
    }
}) даст тот же результат.
Проблема в строке "Console.WriteLine("{0:d2}", number2);". Двузначный формат вывода не нужен: "Console.WriteLine(number2);".


18953. --
Дмитрий
Дмитрий
ответить
→  superGrover  # Консоль / Формулы / Формула 0011 / 2019-01-04 02:34

t = Math.Abs(a - b * Math.Pow(x, 1/3.0)) / b * Math.Log(Math.Abs(a*a + x));
Посмотрите, в каком порядке у вас выполняются операции:
1. y = Math.Abs(a - b * Math.Pow(x, 1/3.0)) / b.
2. y * Math.Log(Math.Abs(a*a + x)).
Т. е. Math.Log(Math.Abs(a*a + x)) оказывается в числителе, хотя по условию это выражение стоит в знаменателе.
Измените порядок операций с помощью круглых скобок, и робот Шарп примет решение.
Вот так:  t = Math.Abs(a - b * Math.Pow(x, 1/3.0)) / ( b * Math.Log(Math.Abs(a*a + x)) );


20512. --
Artemhol
Artemhol
ответить
→  Дмитрий  # Консоль / Целые числа / Пирамида / 2018-12-12 09:52

Да я только вникаю. Получается трудно - нет прежней эластичности мозга - старый, но мне всегда нравилось изучение всего нового.  Спасибо Вам за обстоятельную рекомендацию.


18953. --
Дмитрий
Дмитрий
ответить
→  Artemhol  # Консоль / Целые числа / Пирамида / 2018-12-12 08:42

Исправьте строки кода, начиная с int a1 и заканчивая a5, и будет 100 %.

int a1 = line1.Length; //  вы определяете НЕ ЭЛЕМЕНТ, а ДЛИНУ массива строк и присваиваете её переменной a1.
int a1 = int.Parse(line1[line1.Length - 1]); // Надо так:
// Вы определяете длину массива строк line1: line1.Length;
// Вычитаете из неё 1, так как массивы в C# индексируются, начиная с 0 (Следовательно, последний номер массива на 1 меньше его длины).
// Выбираете элемент массива строк line1: line1[...];
// Преобразуете его к типу int: int.Parse();
// И присваиваете полученный результат переменной a1, имеющей тип int.

На мой взгляд, такой код чище:
using System;

public class Program
{
static void Main()
{
string[] num1 = Console.ReadLine().Split();
string[] num2 = Console.ReadLine().Split();
string[] num3 = Console.ReadLine().Split();
string[] num4 = Console.ReadLine().Split();
string[] num5 = Console.ReadLine().Split();

int a1 = int.Parse(num1[num1.Length - 1]);
int a2 = int.Parse(num2[num2.Length - 1]);
int a3 = int.Parse(num3[num3.Length - 1]);
int a4 = int.Parse(num4[num4.Length - 1]);
int a5 = int.Parse(num5[num5.Length - 1]);

Console.WriteLine("{0} {1} {2} {3} {4}", a1, a2, a3, a4, a5);

Console.WriteLine(a1 + a2 + a3 + a4 + a5);
}
}

Смотрите внимательнее видео.


18953. --
Дмитрий
Дмитрий
ответить
# Вебинары C# / Порекомендуй тему для вебинара / 2018-12-03 02:16

Кроссплатформенное (Android, iOS, Windows Phone, Windows) приложение удалённого родительского (административного) контроля. Принцип действия следующий: на контролируемое устройство устанавливается клиент, настраиваемый удалённо с сервера (установлен на устройстве контролирующего). Этот клиент скрытно (не определяется диспетчером задач, антивирусами, файерволами и т. д.) в автоматическом режиме блокирует рекламу и другой нежелательный контент, пресекает контакты пользователя (ребёнка) с незнакомыми людьми путём блокировки звонков с незнакомых номеров, писем с незнакомых адресов, сообщений в мессенджерах (таких, как Viber, WhatsApp и др.) и т. д. Но у контролирующего (родителя, администратора) есть возможность всё это делать самому (вручную, удалённо). И еще: программа прописывается в системную область (становится частью ядра системы) и не удаляется оттуда. Не удаляется она и при аварийном сбросе на мобильном устройстве.
Я понимаю, что тема достаточно "щекотливая". По сути это создание потенциально вредоносной программы. Поэтому скажу сразу: "Я никогда не тратил время на создание вредоносных программ, никого к этому не склонял и не собираюсь это делать. Я лишь хочу:
1. Чтобы использование ИТ было приятным и безопасным.
2. Научиться создавать программы, обеспечивающие эту безопасность.


18953. --
Дмитрий
Дмитрий
ответить
# Консоль / For-to-чки / Трёхзначные числа / 2018-12-02 01:04

Редактор не загружается - не могу ввести текст программы.


18953. --
Дмитрий
Дмитрий
ответить
# Консоль / For-to-чки / Сумма квадратов / 2018-12-01 01:52

Решил!!! Робот Шарп: "ИТОГО: 100%".
Вот код на C++:
//www.VideoSharp.info/Консоль/For-to-чки/Сумма квадратов

#include <iostream>

using namespace std;

class decimal {
private:
int num[38];
int size;

public:
decimal(const long long value = 0) {
*this = value;
}

const decimal& operator =(long long value) {
size = 0;

num[0] = value % 10;
value /= 10;

while (value > 0) {
num[++size] = value % 10;
value /= 10;
}

return *this;
}

friend
const decimal& operator +=(decimal& dec1, long long dec2) {
int buf = 0;

for (int i = 0; i <= dec1.size; i++) {
buf += dec1.num[i] + (dec2 % 10);
dec1.num[i] = buf % 10;
buf /= 10;
dec2 /= 10;
}

while (buf > 0 || dec2 > 0) {
dec1.num[++dec1.size] = (buf % 10) + (dec2 % 10);
buf /= 10;
dec2 /= 10;
}

return dec1;
}

friend
ostream& operator <<(ostream& oStream, const decimal& dec) {
for (int i = dec.size; i >= 0; i--)
oStream << dec.num[i];

return oStream;
}
};

int main() {
long long N;
cin >> N;

long long k = 1;
long long l = 0;
decimal sum(0);

while (k < (N + N)) {
l += k;
sum += l;
k += 2;
}

cout << sum;

return 0;
}


18953. --
Дмитрий
Дмитрий
ответить
→  Степан  # Консоль / For-to-чки / Сумма квадратов / 2018-11-30 19:20

В глаза бросаются лишние строки: "int k;" и "k=10*i+2;". Удалите их. Ещё, возможно, запрещён ввод из файла (нужно с клавиатуры).
Помимо способа, предложенного в видеорешении, есть и такой (умножение заменяется сложением):
using System;

class Sqr
{
static void Main()
{
long N = long.Parse(Console.ReadLine());

long k = 1;
long l = 0;
decimal sum = 0;

while (k < (N + N))
{
l += k;
sum += l;
k += 2;
}

Console.WriteLine(sum);
}
}


18953. --
Дмитрий
Дмитрий
ответить
→  Aleksandr Zaitcev  # Консоль / For-to-чки / Сумма квадратов / 2018-11-30 17:59

Опишите sum как decimal.


18953. --
Дмитрий
Дмитрий
ответить
# Консоль / For-to-чки / Сумма квадратов / 2018-11-30 17:54

В выше приведённом коде реализованы алгоритмы поразрядного сложения и умножения столбиком (надеюсь, правильно), хотя перепробовал я и другие известные мне способы реализации данной задачи (ничего путного не вышло (Точность представления числа оставляет желать лучшего!)).

К чему такие сложности? А к тому, что в C++ и Turbo Pascal нет типа, эквивалентного C#-ому "decimal". В C++ ещё можно описать переменную как "__int128", но дальше этого дело у меня не пошло. Нет подходящих функций-операций, а перегрузить имеющиеся не получается. Есть такое ощущение, будто данный тип не поддерживается компилятором C++.


18953. --
Дмитрий
Дмитрий
ответить
# Консоль / For-to-чки / Сумма квадратов / 2018-11-30 17:25

Подскажите, пожалуйста, что не так с кодом (Тест 005: ТАЙМАУТ 5 СЕК.).
Уже 8-й день голову ломаю над тем, что не нравится роботу Шарпу (ведь у меня всё работает замечательно и на Turbo Pascal, и на C++, и на Java)!

Вот код на C++:
//www.VideoSharp.info/Консоль/For-to-чки/Сумма квадратов

#include <iostream>

using namespace std;

class decimal {

private:
int num[38];
int size;

void AlignBorders(decimal& res, const decimal& dec1,
const decimal& dec2) {

res.size = (dec2.size > dec1.size) ? dec2.size : dec1.size;

for (int i = 0; i <= res.size; i++) res.num[i] = 0;

}

void AlignBorders(decimal& dec1, decimal& dec2) {

if (dec2.size > dec1.size) {

for (int i = dec1.size + 1; i <= dec2.size; i++) {
dec1.num[i] = 0;
}

dec1.size = dec2.size;

} else {
 
  for (int i = dec2.size + 1; i <= dec1.size; i++) {
  dec2.num[i] = 0;
  }
 
  }

}

void UnloadBuf(int& buf) {

while (buf > 0) {
num[++size] = buf % 10;
buf /= 10;
}

}

public:
decimal(const long int value = 0) {

*this = value;

}

const decimal& operator =(long int value) {

size = 0;

num[0] = value % 10;
value /= 10;

while (value > 0) {
num[++size] = value % 10;
value /= 10;
}

return *this;

}

friend decimal operator *(decimal dec1, decimal dec2) {

decimal res(0);
res.AlignBorders(res, dec1, dec2);

int buf = 0;

for (int i = 0; i <= dec1.size; i++) {

for (int j = 0; j <= dec2.size; j++) {

int p = i + j;

if (p > res.size) res.size++;
else buf += res.num[p];

buf += dec1.num[i] * dec2.num[j];

res.num[p] = buf % 10;

buf /= 10;

}

res.UnloadBuf(buf);

}

return res;

}

friend decimal& operator +=(decimal& dec1, decimal dec2) {

dec1.AlignBorders(dec1, dec2);

int buf = 0;

for (int i = 0; i <= dec1.size; i++) {

buf += dec1.num[i] + dec2.num[i];

dec1.num[i] = buf % 10;

buf = (buf > 9) ? 1 : 0;

}

if (1 == buf) dec1.num[++dec1.size] = 1;

return dec1;

}

friend ostream& operator <<(ostream& oStream, decimal& dec) {

for (int i = dec.size; i >= 0; i--) oStream << dec.num[i];

return oStream;

}

};

int main() {
long int N;
cin >> N;

decimal sum(0);

for (long int i = 1; i <= N; i++)
sum += decimal(i) * decimal(i);

cout << sum;

return 0;
}


1. KF
Евгений Волосатов
Евгений Волосатов
ответить
→  Дмитрий  # Повторение задач / Stop. Think. Act. Review. / 2018-11-13 01:00

Только для этого нужно вступить в Клуб формулистов.


1. KF
Евгений Волосатов
Евгений Волосатов
ответить
→  Дмитрий  # Повторение задач / Stop. Think. Act. Review. / 2018-11-13 00:59

Я только за. Но не рекомендую одновременно на нескольких языках решать.
Вы тогда сначала прорешайте на одном языке, потом на другом, затем на третьем.
Так будет занчительно лучше.


18953. --
Дмитрий
Дмитрий
ответить
# Консоль / 6203 - Николай / Перевод из десятичной системы счисления в пятеричную систему счисления / 2018-10-18 00:48

Ошибся!
Корректный код:
using System;
using System.Collections.Generic;

namespace Converter
{
    class Program
    {
        static void Main(string[] args)
        {
            int number = int.Parse(Console.ReadLine());

            List<int> numArray = new List<int>();

            {
                int num = number;
                while (num > 0)
                {
                    numArray.Add(num % 5);
                    num /= 5;
                }
            }

            for (int i = numArray.Count - 1; i >= 0; i--)
                Console.Write(numArray[i]);

            Console.WriteLine();
        }
    }
}


18953. --
Дмитрий
Дмитрий
ответить
→  Степан   / 2018-10-06 01:36

Привет, Стен. В игру "Лабиринт" добавил 3 уровня.


18953. --
Дмитрий
Дмитрий
ответить
→  Александр Балбашов   / 2018-10-06 01:31

Привет, Александр.
Никакого разряда у меня нет. Играю в свободное время с родными и друзьями просто так, "для души".
Что касается программирования, могу порекомендовать в дополнение к этому сайту книги М. Флёнова, Г. Шилдта, Немнюгина, Т. Павловской, М. Дрейера, Страуструпа, Д. Рихтера (Сейчас читаю его книгу "CLR via C#", от которой просто в восторге (хотя и есть в ней мелкие ошибки, но материал подан очень подробно)), сайты metanit.com и ITDVN. Не сочти это за рекламу. Успехов в программировании!


19525. --
Александр Балбашов
Александр Балбашов
ответить
→  Дмитрий  # Шахматы по сети / План Шахматного проекта / 2018-10-05 13:14

Привет Дмитрий,в программирование ты преуспеваешь я смотрю. Молодец! А какой у тебя разряд по шахматам, ели не секрет?


1. KF
Евгений Волосатов
Евгений Волосатов
ответить
→  Дмитрий  # Боты Сапёра / ИГРА - Счастливый сапёр / 2018-07-24 09:37

Главное нашел сам


18842. --
Степан
Степан
ответить
→  Дмитрий  # Демо игры / Камень ножницы бумага / 2018-07-06 03:49

Уроки здесь интересные и понятные, все разъясняют с самого нуля


18842. --
Степан
Степан
ответить
→  Дмитрий  # Демо игры / Игра Быстрощёлк / 2018-07-05 02:33

Привет, быстрощелк прикольная игрушка, мышку от азарта можно поломать


18842. --
Степан
Степан
ответить
→  Дмитрий  # Демо игры / Лабиринт 2D - меню / 2018-07-04 05:43

Интересный получился лабиринт, сколько добавил уровней?


14008. --
Сергей
Сергей
ответить
→  Дмитрий  # Демо софт / Двенадцать месяцев / 2018-07-03 08:17

Молодец очень все хорошо  сделал) Продолжай и все у тебя получиться ))


18681. --
alklokov
alklokov
ответить
→  Дмитрий  # Демо игры / C# чего начать программировать / 2018-07-03 00:11

Раз желание есть, то станешь


1. KF
Евгений Волосатов
Евгений Волосатов
ответить
→  Дмитрий  # Демо игры / Бот для Быстрощёлка / 2018-07-02 09:18

Молодец Дима. Двигай дальше, там будут еще такие уроки.


18953. --
Дмитрий
Дмитрий
ответить
→  Евгений Волосатов   / 2018-07-01 16:43

Хорошо, обращу.
"Я ведь тоже развиваюсь ;)":
Понимаю. Программисты (как и люди многих других профессий) - это "вечные студенты". У немецкого драматурга Фридриха Кристиана Геббеля есть высказывание: "Жизнь - это бесконечное совершенствование. Считать себя совершенным - значит убить себя". Перефразируя это высказывание, можно сказать: "Программирование - это бесконечное совершенствование. Считать себя совершенным - значит убить в себе программиста".


1. KF
Евгений Волосатов
Евгений Волосатов
ответить
→  Дмитрий   / 2018-07-01 14:08

Прочитал твоё сообщение, Дима.
Всё верно ты написал. Этот урок записывался несколько лет назад и я тогда не особо следил за корректностью фраз, поэтому получались такие ляпы. Рекомендую обратить внимание на последние созданные видеокурсы, для сравнения формы подачи. Я ведь тоже развиваюсь :)


18953. --
Дмитрий
Дмитрий
ответить
→  kims   / 2018-07-01 13:05

И не только для новичков. Это уникальнейший (после itvdn.com) проект. Есть, конечно, в нём небольшие неточности. Например, такие как:
1. "Чем мне нравится язык C#? Тем, что мы ещё ни строчки кода не написали, а у нас уже готовая программа, способная транслироваться и запускаться". Только подобное высказывание относится не к конкретному языку программирования, а к среде Visual Studio. На языке C# можно писать программы и в обычном "Блокноте", а затем их транслировать в машинный код, используя интерпретатор компилирующего типа платформы ".Net".
2. "Создадим событие". Событие мы создаём тогда, когда кликаем кнопкой мышки, клавишей на клавиатуре и т. д. Но при написании программы мы создаём не событие, а метод-обработчик события, и привязываем его к определённому событию.
Но всё это меркнет на фоне той пользы, которую данные проекты приносят людям. Да не будет выше сказанное в обиду Евгению Витольдовичу. Кто из нас ни разу не ошибался? Ошибаются все. Только кто-то свои ошибки исправляет и, таким образом, совершенствуется, а кто-то нет. И в заключение: кажется, на данный момент лучше выше названных проектов в сети нет. Во всяком случае, я пока не нашёл. Тем более что данные проекты, как я понял, развиваются. Так пожелаем же успехов их авторам. И ещё: я указал на некоторые недостатки видеоуроков, а не их автора (думаю, что автор и сам их уже заметил), лишь с той целью, чтобы в дальнейшем они стали качественнее. Вообще, прежде, чем обсуждать кого-то или что-то, лучше посмотреть на себя и свои проекты. А каков ты? Так ли ты хорош, как мнишь о себе? Так ли хороши твои проекты. Когда я учился, вначале на химико-биологическом факультете СГУ, а затем на фармацевтическом СГМУ, преподаватели неустанно повторяли нам, своим студентам: "Запомните. Ставить себя выше своих коллег - это признак дурного тона, недостойный профессионала. Вы - команда, которая делает одно дело. И если ты разбираешься в чём-то лучше другого человека, помоги и ему в этом разобраться, а не ходи и не хвастайся, что ты умный, а он глупый".
P. S. Это только моё мнение. Кто-то может считать иначе.


9717. --
kims
kims
ответить
→  Дмитрий  # Демо игры / Картинка с секретом / 2018-06-30 23:44

Для новичков нормальный проект. Кроме проекта конечно много полезного при работе с компонентами, событиями и т.д. С чего-то надо начинать. А так неплохой проект. 


18953. --
Дмитрий
Дмитрий
ответить
→  Евгений Волосатов   / 2018-06-30 22:35

Понятно. Некоторые задачи из раздела "Консоль" я уже решал. Действительно, было интересно и познавательно. Спасибо за те громадные труды, которые были вложены и продолжают вкладываться в этот замечательный ресурс и в людей, его использующих. Дальнейших вам успехов.
С уважением, Дмитрий.


1. KF
Евгений Волосатов
Евгений Волосатов
ответить
→  Дмитрий  # Демо игры / Лабиринт 2D - игра / 2018-06-30 19:52

Дмитрий, молодец. Не зацикливайся на этой программе - двигайся вперёд.
И, поскольку у тебя уже есть некоторый опыт - тебе будет интересно и полезно порешать задачи в рзаделе Консоль


18953. --
Дмитрий
Дмитрий
ответить
# Демо игры / Лабиринт 2D - игра / 2018-06-30 16:53

Извините, из-за усталости ошибся в методе "timer1_Tick". Программа правильно работала только по счастливому стечению обстоятельств. А нужно было вот так:
       
        private void timer1_Tick(object sender, EventArgs e)
        {
            Point point;

            int spaceX, spaceY;

            var stepX = this.stepX;
            var stepY = this.stepY;

            spaceX = moveObstacleX.Location.X - obstacle_1.Width;

            if ( (this.stepX < 0) && (Math.Abs(this.stepX) > spaceX) )
            {
                stepX = -spaceX;

                this.stepX = -this.stepX;
            }

            spaceX = obstacle_3.Location.X - (moveObstacleX.Location.X + moveObstacleX.Width);

            if ( (this.stepX > 0) && (this.stepX > spaceX) )
            {
                stepX = spaceX;

                this.stepX = -this.stepX;
            }

            point = moveObstacleX.Location;
            point.Offset(stepX, 0);
            moveObstacleX.Location = point;


            spaceY = moveObstacleY.Location.Y - obstacle_2.Height;

            if ( (this.stepY < 0) && (Math.Abs(this.stepY) > spaceY) )
            {
                stepY = -spaceY;

                this.stepY = -this.stepY;
            }

            spaceY = obstacle_4.Location.Y - (moveObstacleY.Location.Y + moveObstacleY.Height);

            if ( (this.stepY > 0) && (this.stepY > spaceY) )
            {
                stepY = spaceY;

                this.stepY = -this.stepY;
            }

            point = moveObstacleY.Location;
            point.Offset(0, stepY);
            moveObstacleY.Location = point;
        }


1. KF
Евгений Волосатов
Евгений Волосатов
ответить
→  Дмитрий  # Демо игры / Картинка с секретом / 2018-06-29 11:11

Дальше будет больше нового


18953. --
Дмитрий
Дмитрий
ответить
→  chokayes   / 2018-06-28 13:49

Спасибо.


17947. --
Dmitry Sinitsin
Dmitry Sinitsin
ответить
→  Дмитрий  # Демо софт / Двенадцать месяцев / 2018-06-28 08:19

Поверхностное натяжение прекрасно. Зимой таких картинок не хватает.


9752. --
chokayes
chokayes
ответить
→  Дмитрий  # Демо игры / C# чего начать программировать / 2018-06-28 03:36

Приветствую, Дмитрий! Ты зарегистрировался на уникальном ресурсе, посвященном языку программирования С# и не только, здесь изучается процесс создания программ с нуля до работающего прототипа с использованием широкого спектра современных технологий по принципу MVP, остальное ты можешь улучшать, добавлять, рефакторить по своему усмотрению. Желаю успехов!


17947. --
Dmitry Sinitsin
Dmitry Sinitsin
ответить

1. KF
Евгений Волосатов
Евгений Волосатов
ответить
→  Дмитрий  # Демо софт / Вступительное слово / 2018-06-27 14:16

Удачи, Дмитрий. У тебя всё самое интересное впереди. Всё получается!


18953. --
Дмитрий
Дмитрий
ответить
→  Роман  # Консоль / Алгоритмика / Подпрограммы / 2018-06-27 13:23

Пропустили операцию вызова функции "( )" и описание параметра "int a":
нужно написать "static int fakt(int a) {" вместо "static int fakt{".


18953. --
Дмитрий
Дмитрий
ответить
# Консоль / Алгоритмика / Математика / 2018-06-26 23:30

Я решил так:
            byte N = byte.Parse(Console.ReadLine());
           
            double sum = 0;

            for (byte i = 1; i <= N; i++)
                sum = Math.Sqrt(i + sum);

            Console.WriteLine("{0:0.00000}", sum);


18953. --
Дмитрий
Дмитрий
ответить
# Консоль / Алгоритмика / Веченость / 2018-06-26 16:46

А можно и так:
код
[
        byte month = byte.Parse(Console.ReadLine());
        switch (month / 3)
        {
            case 1: Console.WriteLine("der Fruhling"); break;
            case 2: Console.WriteLine("der Sommer"); break;
            case 3: Console.WriteLine("der Herbst"); break;
            case 4: case 0: Console.WriteLine("der Winter"); break;
        }
].


  • Звание: Рекурсист
  • Накопленный опыт: 190 часов
  • Собранный капитал: нет
  • Участник «Клуба формулистов»: до 2020-04-11

Клуб формулистов

Формулист За сегодня За неделю
Разминка Обучение Бонусы Сумма
1 KF Anatoli 24765 5 5 10 140
2 KF Татьяна 25392 37
3 KF MaxB 25450 5 5 34
4 KF Николай Миролюбов 6203 23
5 -- Фомичева Наталья 1232 16
6 -- Валерий Жданов 791 7 7 12
7 KF Yefim 11589 10 10 11
8 -- Посетитель 0 5 5 10
9 -- Толстых Александр 26171 5 5 5
10 KF Евгений Волосатов 1 5
11 -- Алексей В. 10494 5
12 KF Дмитрий 20302 5
13 KF Vdonsk 26175 5
14 -- kirpav 26187 5
15 -- roman 27947 1 1 1
16 -- Эля 27948 1 1 1
17 KF Александра 26325 1
18 -- Олег 27918 1
19 -- Сергей 27939 1
20 -- Павел Овчинников 27943 1
21 -- иван 27944 1

Правила клуба формулистов

У каждого формулиста есть задача минимум на каждый день:
+ зайти на сайт, проверить один отчёт, получить 1 байт.
Задача максимум - выполнить все остальные ежедневные задачи.
Нажмите здесь чтобы перейти к ежедневному чек-листу.

В 24:00 МСК накопленные за сутки байты переносятся в недельный актив.
В воскресение 24:00 МСК все накопленные байты переходят на баланс формулиста.

Собранные байты можно обменивать на доступные видеокурсы (1 байт = 1 рубль, без скидок)
Приобретённые за байты видеокурсы доступны только во время нахождения в автобусе/клубе формулистов!

При завершении подписки в автобусе/клубе формулистов все накопленные байты обнуляются, а доступ к видеокурсам, приобретённым за байты, закрывается.
Продлевайте подписку заблаговременно.

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Десериализировать JSON в класс. Позже добавлю возможность конвертации в другие валюты и элемент "ComboBox".



Научился: Ничему новому не научился. Но этот урок понравился больше предыдущих уроков из этого курса. Спасибо его создателю.
Трудности: Сложностей не было.