Обучение по c#

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

основатель — Волосатов Евгений Витольдович
Робот Шарп опять работает.
Open shop Итератор

Итератор

На этом курсе мы познакомимся с интерфейсами IEnumerable + IEnumerator.
На примере решения задачи разложения числа на простые множители
мы будем создавать итератор, который будет перебирать простые числа.

Содержание курса
+ создание класса по интерфейсу IEnumerable
+ создание класса по интерфейсу IEnumerator
+ подробное объяснение, зачем нужно два класса.
+ использование yield для удобной реализации итератора.
+ создание итератора через функцию, не создавая спец. класса.

9 миниуроков.
1 час 22 минут.
Доступ на 15 дней.


Список уроков | фото | видео

# Название видеоурока Видео / Тесты Решило Рейтинг Доступ
1 Итератор. Разложение числа на простые множители. 00:09:22
1 тест
131 чел. ★ 4.9 Done
  На этом уроке мы создадим очевидный алгоритм,
который будет раскладывать число на просты множители.
Отчёт отправил: 10588. kalobyte Выполнено за 15 мин. [Показать отчёт]
Научился: Услышал про какие-то простые числа. 
Сложности: Ничего. 
Комментарии: Пока сказать нечего. Дальше гляну. Часто видел этот интерфейс, а тут и уроки по нему попались. 
2 Итератор. Создание пустого итератора. 00:11:21
118 чел. ★ 4.8 Done
  На этом уроке мы подберём ключ к циклу foreach.
создадим класс, который позволит создать свой алгоритм
для перебора значений в обычном цикле foreach.

Нaпиши, что такое итератор, своими словами.
Отчёт отправил: 10588. kalobyte Выполнено за 15 мин. [Показать отчёт]
Научился: Узнал, что можно делать return this;. 
Сложности: Ничего. Потому что ничего не понял. 
Комментарии: У меня было интуитивное чутье, что в коде что-то лишнее и можно переделать. Так и оказалось. А что такое енумератор я не понял. И как он выглядит? Посмотрим дальше. Внезапно вспомнил из сей enum. он нужен, когда лень писать значения дефайнов. Используется для определения состояний конечного автомата, если кто знаком с программированием контроллеров. Сейчас еще подумал и понял, что наверное в этом классе будут храниться заранее посчитанные простые числа? Узнаем в следущей серии. 
3 Итератор. Перебор чисел в итераторе. 00:09:04
113 чел. ★ 4.9 Done
  На этом уроке мы добавим в созданный класс перебор чисел.
Начнём с двойки и будем его всё время увеличивать "до бесконечности".
В конце урока добавим ограничение, чтобы итератор останавливался.
Отчёт отправил: 10588. kalobyte Выполнено за 15 мин. [Показать отчёт]
Научился: Ничему. 
Сложности: Ничего. 
Комментарии: Вот посмотрел еще одну серию и все равно вопрос остался открытым. Ну я там еще тоже сначала думал, что если функция будет всегда возвращать true, то будет работать до бесконечности и надо ввести механизм ограничения. Правда все это ни на байт не приблизило к пониманию итератора в шарпе. 
4 Итератор. Перебор простых чисел. 00:10:28
1 тест
111 чел. ★ 4.9 Done
  На этом уроке мы сдеаем так, чтобы наш класс возвращал в цикл
только простые числа, как и было задуманно изначально.
Отчёт отправил: 10588. kalobyte Выполнено за 30 мин. [Показать отчёт]
Научился: Понял примерно return this; А еще у меня опять интуитивно в голове возник вопрос: есть 2 интерфейса и в них куча функций. А какая функция к какому интерфейсу? Потом дошло. 
Сложности: Отлавливать опечатки. 
Комментарии: Перепутал IEnumerator.ххх с IEnumerable.ххх. Специально вчитывался и все равно не замечал. Ощущаю себя в овощном состоянии. На сегодня с меня хватит. 4 Урока осилил. 
5 Итератор. Зачем нужно два класса 00:16:21
1 тест
99 чел. ★ 4.9 Done
  На этом уроке мы разберёмся, зачем всё-таки нужно два класса
один для создания итератора, второй для его использования.
Для демонстрации напишем программу, которая выведет
на экран таблицу умножения простых чисел.
Отчёт отправил: 10588. kalobyte Выполнено за 40 мин. [Показать отчёт]
Научился: Рисовать таблицу умножения. Еще в пту мне училка показала, как в 2х циклах нарисовать таблицу bcd кодов. Я бы не догадался, что там 2 цикла надо. 
Сложности: Все.  
Комментарии: Я посмотрел ролик 3 раза и все это время смотрел как баран на новые ворота. Сделал себе пометки для отчета по всему курсу. Я уже вижу, что тут было неправильно с самого начала. 
6 Итератор. Волшебное слово yield. 00:11:03
2 теста
97 чел. ★ 4.9 Done
  На этом уроке мы узнаем, как упростить создание итератора.
Для этого достаточно просто написать нужный нам цикл,
внутри которого воспользоватся волшебным словом yield.

Отчёт отправил: 10588. kalobyte Выполнено за 40 мин. [Показать отчёт]
Научился: Узнал про yield. Видел его в коде, но не интересовался. Думал, что это что-то из высшего программирования и мне это не надо знать. 
Сложности: Понимать, что происходит. 
Комментарии: Посмотрел очередной урок 2 раза. Ничего не понял, но поставлю 5 звезд, т.к. еще не до конца прошел курс и наверное в конце все должно стать понятно. 
7 Итератор. Список простых чисел. 00:08:42
92 чел. ★ 5 Done
  На этом уроке мы перепишем алгоритм перебора простых чисел с использованием списка,
который будет постепенно, по мере необходимости, пополняться новыми простыми числами.

Отчёт отправил: 10588. kalobyte Выполнено за 20 мин. [Показать отчёт]
Научился: Вроде понял, что какие-то нужные числа добавляются в список, которые заранее считаются по какому-то там алгоритму. Потом из списка выводятся. 
Сложности: Все. 
Комментарии: Так и не понял, как этот елд работает и почему куда-то там прыгает. С гото понятно, а это непонятно. И заметьте, я не лез в гугл за определением елда. Специально не лез. Накапливаю инфу об ошибках курса. 
8 Итератор. Один метод вместо классов. 00:06:19
90 чел. ★ 4.9 Done
  На этом уроке мы увидим, что класс, оказывается, создавать не обязательно.
Магия слова yield сделает всё за тебя, можно просто один раз организовать перебор нужных элементов,
и потом его можно использовать через обычный foreach в любом месте программы.
Вся прелесть в том, что перебор элементов происходит по мере необходимости.

Отчёт отправил: 10588. kalobyte Выполнено за 20 мин. [Показать отчёт]
Научился: Затрудняюсь даже сказать. 
Сложности: Понимание происходящего. 
Комментарии: Вот я закончил курс. Почему курс оказался плох? Не знаю как для других, я про себя скажу. Самая главная ошибка всех обучающих курсов или преподов в том, что они либо сами не понимают до конца тему, либо не могут применить правильно инструмент. Либо применяют его примерно так: розовый банан скачет по космосу. Я долго думал над этой фразой, чтобы она как можно более упоротей звучала. Примерно то же я вижу у себя на экране: черное окно и там столбик каких-то цифр. Я понятия не имею, что такое простые множители или там цифры. Для меня если я могу запомнить цифры в голове, то они простые, а 233459089 для меня сложная цифра. Курс называется "разложение числа на простые множители". Сначала я подумал, что число 123 будет раскладываться на 1, 2 и 3. С этим примером у меня связано одно событие. В пту году в 2005 был день открытых дверей и надо было что-то сделать и показать для посетителей, типа чем мы занимаемся тут. У меня валялась плата с тремя индикаторами от спутникового приемника и там было 3 регистра для статической индикации. Я еще раньше с корешем ходил к нему в общагу и он показывал мне, как написать прошивку для контроллера под эту плату. Типа вот есть число 123 и оно влазит в 1 байт, а плата с индикаторами - это 3 байта. Как бы так разобрать число на отдельные цифры? Я пришел к нашей училке по матану и программированию и спросил ее, а она мне и рассказала. Я это написал в коде и оно заработало. С тех пор я до конца жизни это буду помнить. Тут я не понял, что такое простые множители и зачем они мне нужны в этой проге. Я тупо не видел образа или конкретного применения. Поэтому у меня в голове розовый банан скачет по космосу. Я пошарился часа 2 по гуглу и нашел пару боле менее годных визуальных примеров. http://csharphelper.com/blog/2017/04/enumerate-treeview-nodes-c/ http://brain-it.blogspot.de/2009/08/c-yield.html http://flash2048.com/post/yield http://www.c-sharpcorner.com/UploadFile/40e97e/iterator-pattern/ Вот тут есть очень хороший рисунок, который расписывает маппинг методов интерфейса к переменным цикла foraech. Одна эта картинка уже решает 50% вопросов. Как я понял - елд нужен для составления какого-то списка в памяти по критериями фильтрации какого-то массива данных. Потом этот список можно использовать дальше в своем коде. И как там пишут - linq заменил почти елд, т.к. фильтры стали делаться sql подобными запросами. В конечном эффекте я все равно не понял про итераторы и елды. Перебрать дерево вроде можно и так. Мне в реальной проге надо было перебирать радиокнопки отмеченные в разных группах и я делал в цикле. Интуитивно я ощущаю, что эта штука нужна для реализации фильтра в контролах типа gridview или как его там, который рисует таблицы со столбцами как в екселе или типа того. Но этот курс из категории профи, так что неудивительно, что ничего непонятно. Что нужно было сделать? 1 Дать простое определение итератору. 2 Что такое IEnumerator и IEnumerable. 3 В каком реальном проекте их использовали и что было бы, если бы не использовали. 4 Yield это обязательное слово в связке IEnumerator и IEnumerable или идет дополнением? 5 Какой с него профит в реальном софте и что было бы без него. 6 Когда это нужно использовать и когда не нужно. Такие дела. 
9 ФИНАЛЬНЫЙ УРОК без видео
77 чел. ★ 4.9 Done
  Поздравляю с окончанием курса!
Оставь, пожалуйста, отзыв о курсе.

Какой курс ты будешь проходить следующим?
Отчёт отправил: 10588. kalobyte Выполнено за 5 мин. [Показать отчёт]
Научился: Узнал про итераторы. Вроде когда учился с++ там было что-то типа vector для перемещения по массиву. Тоже вроде итераторами называлось.  
Сложности: Синтаксис и какие-то числа непонятные в черном окне. 
Комментарии: Про курс написал в прошлом каменте, думал последний урок. Следущий курс у меня уже в избранном - Базы данных - Книжка оценок. Потом БД - Управление гостиницей, Сетевые технологии, Новые технологии, API Telegram, Бурные потоки. 
10 VIP. Оптимизация поиска простых чисел 01:19:28
1 тест
41 чел. ★ 5 Done
  Пишем функцию для поиска простых чисел и
поэтапно оптимизируем её в двух направлениях.
Отчёт отправил: 10588. kalobyte Выполнено за 2 час. 30 мин. [Показать отчёт]
Научился: Посмотрел делегаты опять. Посмотрел процесс эволюции кода и оптимизации. Люблю оптимизировать. 
Сложности: Вроде бы ничего. 
Комментарии: Самое смешное началось, когда у 10 000 000 убрали 000 и поместили в другое место. После этого у меня разультаты стабильно стали почти равными (разница в 100 чисел). А до исправления разница была раза в 3 стабильно. У меня это вызвало приступ смеха. Вы только вдумайтесь - оптимизация алгоритма стала ненужна. Нужно было оптимизировать время вычисления производительности. Хотя тут многие могут меня неправильно понять, типа быстрей тот, кто сам определяет, как и в чем считать. Но я хотел сказать, что похоже либо Компилятор оптимизирует, либо процессоры настолько крут, что ему по барабану такие оптимизации. Процессор и5-4443. Когда же стали писать is_prime_each_by_3 и запускать, то я заметил, что числа различаются только в младшем разряде и тут я понял, что что-то пошло не так. Оказалось, что в find_primes неправильно написано if (is_prime__each_by_0(number))                 {                     count_primes++;                 } а надо if (is_prime(number))                 {                     count_primes++;                 } Вот так вот у меня возникло ложное представление о прогрессе и о своем превосходстве с понтовым процессором. Процессор оказался самый обычный. Потом когда с корнем сделали, то я был в шоке. Я и не ожидал такого скачка. Думал примерно будет линейно расти. И вот как только люди придумывают такие оптмизации в матане? Я один раз for на while заменил в прошивке под контроллер и экономия памяти программ вышла порядка 53 или 56 байт, что для контроллера с 8кб тоже неплохо. Иногда и один байт решает. http://we.easyelectronics.ru/Asticon/istoriya-odnogo-bayta.html Второй шок у меня был от is_prime_each_by_P. Я так и не понял, зачем нужно это все             if (number == 2)             {                 primes.Clear();                 primes.Add(2);                 return true;             } Однако по мере просмотра ролика выяснилось, что пропущена строка primes.Add(number);. А я это интуитивно ощутил, т.к. еще в начале говорилось, что будет строиться таблица заранее рассчитанных чисел, а добавления в список не было. Такие таблицы используются для работы с тригонометрическими функциями - таблицы синуса и косинуса, т.к. 8битному контроллеру на 16мгц довольно трудно считать их не имея математического сопроцессора или дсп блока. Вобщем добил я до конца. Правда так и не понял, как работает тестирование функций. Почему сравнивается с is_prime_each_by_0? Она 100% рабочая? Было бы интересно вебинар сделать по юнит тестированию. Все давно пишут, а я даже не читал и понятия не имею. Еще было бы неплохо сделать платные курсы по алгоритмам цифровых модуляций. Сколько я ни парился, а даже простую афск модуляцию двумя тонами на передачу не осилил. У меня еще есть исходники демодуляторов разных и тоже не разобрался. Да и инфы нет никакой. Что сказать по этому уроку? Получился как отдельный курс прям. То ли я упорот в этот день, то ли курс и правда интересный вышел. Я не ожидал даже. Думал будет скучно, но выжать попугаев оказалось довольно интересно, хоть я и не понимал в этих алгоритмах. Спасибо преподу по алгоритмам в быдловузе 2011. Отбил все желание. Камент писал по ходу урока. 
  Итого:   10 видеоуроков 2 час. 42 мин.
6 тестов
41 чел. ★ 4.91  
  Финалисты:   Иван Воронин,   Елена,   Артём,   Новопашин Владимир,   Алексей В.,   Фомичева Наталья,   Rita,   Станислав,   Neverwinter 2,   Permitin Alexey,   aleksey-k,   Николай Денисов,   Денис,   Bazel,   kalobyte,   Yefim,   Tekashnik,   Алексей Малышев,   Sergio,   Роман,   konstantin,   Сергей Стефаненко,   chokayes,   ser2018,   vip,   Виктор,   Дмитрий,   Максим Лапшинов,   FireWolf,   Слава,   Денис,   Александр,   New programist,   no name,   Deep Network,   Кирилл,   Max,   Kitsuneco,   Дмитрий,   Anatoli,   MaxB .

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





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

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

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

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


Научился: Использованию интерфейсов со страшными названиями IEnumerable и IEnumerator. И супер-мощному yield ), последний урок вообще хирургический, все без сожаления повырезали и упростили, класс. В общем, суперский курс Итератор. Вместо того, чтобы ждать пока у вас заполнится массив и т.д. вы сразу на месте используете элементы. Это ж круто и суперэффективно. Кто еще не прошел всем советую срочно все бросить и пройти его, чтобы разобраться с итерацией, не смотрите на цену, у него цена неадекватная содержанию! Следующий курс у меня как раз коллекции в Java, хочу сравнить. )



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