Основы программирования на С++
228 subscribers
51 photos
30 links
Канал курса «Основы программирования на C++» на платформе Stepik.

Группа поддержки: @incredible_cpp
Создатель курса: @souceguy

Ссылка на курс:
https://stepik.org/course/182643
Download Telegram
Кстати, курс «Основы программирования на C++» был создан 10 сентября 2023 года.

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

🎉 Поздравьте этот курс! 🎉

Весь этот год он очень старался!
🍾14🎉4
Мы обновили урок «Массивы символов»!

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

Теперь теория этого урока стала намного понятнее, а также чуть-чуть, самую малость, немножечко так увеличилась в размерах (в 4 раза больше слов). Ещё мы добавили новую тему - escape-последовательности в этот урок.

Быстрая ссылка на урок: *тык*.

#изменения
👍2🔥2
Мы опубликовали новый урок про цикл range-for!

Вы знали, что в C++ существует цикл, который по своей работе очень напоминает цикл for из Python? Вы знали, что на самом деле всё это время можно было итерировать по массивам, не прибегая к использованию этой неудобной и надоедливой переменной i? Что-ж, теперь узнаете!

Новый урок повествует о цикле range-for. Это такой цикл, который позволяет итерировать по контейнерам (н-р, массивам) и другим итерируемым типам. Этот урок необходим, поскольку примерно в течение двух недель мы выпустим урок про умные массивы (std::vector).

Быстрая ссылка на урок: *тык*.

#изменения
🔥3👍21
Немножко о планах на ближайшее время

Этот курс ещё очень-очень долго будет развиваться. Я хочу довести его до своеобразного идеала, поэтому ещё долго буду продолжать его изменять и дополнять. Даже если будет наступать затишье, я всё равно будем продолжать работу над курсом, пока не будет сказано окончательное слово «Стоп!». Тогда можно будет и на упокой :)

После небольшой критической оценки планов на курс оказалось, что:

* Запланированный урок «Умные массивы» (про std::vector) будет лишним в нашем курсе (т.к. он требует знаний итераторов), поэтому, если он будет создан, то в рамках курса для продвинутых.

* Урок «Рекурсия» тоже лишний в нашем курсе. Когда будет создан курс для продвинутых, этот урок будет перемещён туда в модуль про алгоритмы.

* Урок «Запись в файлы» содержит слишком много информации. Было принято решение разделить этот урок на 2 части. Из-за этого будет сброшен прогресс прохождения некоторых заданий, но зато этот урок можно будет перепройти и понять всё чуть-чуть лучше.

Я доделаю уроки 6-го модуля (который про текстовые данные), и затем приступлю к урокам про файлы. Также я собираюсь добавить в первый модуль урок «Шпаргалки», в котором будет краткая выжимка всего курса, в которую можно будет легко подглядеть в любой момент жизни.

Судя по нашим диаграммам курс готов на 60%. Остаётся не так много до того самого "идеала".

#опланах
👍13
Мы обновили урок про тип данных string!

Нельзя сказать, что это был очень плохой урок. Он давал именно тот материал, который необходимо было узнать об этом типе данных, однако теперь этот материал стало легче узнать и потом запомнить.

Теперь почти полностью переписанные конспекты с теорией сопровождают 2 теста и 1 новое задание. Старые задания были улучшены: формулировки стали понятнее, были добавлены блоки с форматом входных/выходных данных.

Быстрая ссылка на урок: *тык*.

#изменения
🆒4
Мы разделили урок «Запись в файлы» на два урока!

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

Теперь те темы, которые были в уроке, логически разделены на два урока: «Запись в файлы» и «Открытие файлов». Я убрал оттуда лишнюю информацию про флаги ios::in и ios::out, которые более относятся к фундаментальной информации, чем к основам C++.

Быстрые ссылки на уроки: «Запись в файлы» и «Открытие файлов».

#изменения
👍3
Кстати, после разделения в уроке 8.4 «Открытие файлов» получилось всего 2 практических задания.

Так уж получается, что на флаг ios::ate все задания, которые я могу придумать, уже есть в уроке 8.2, а на флаг ios::app и тип fstream у меня не получилось придумать ничего оригинального помимо того, что уже есть.

Может у вас есть какие-то идеи?

Наверняка кто-то из вас зайдёт на эти уроки, чтобы пройти новые задания и получить баллы. Если появятся идеи для заданий, обязательно делитесь ими в комментариях.
🤔21
А вы знали? На Stepik нельзя работать с файлами!

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

ofstream myfile("test_file.txt");

myfile.is_open() == false; // * Не удалось создать файл *


Оказалось, что на Stepik нельзя создавать и открывать файлы в языках кроме Python. В Python это нужно для работы с сетью, а в других языках это запрещено ради поддержания безопасности сервиса.

Но как же тогда работают задания в уроках модуля «Работа с файлами»?

Поэтому нового контента не будет ещё пару недель.


Уроки начали выходить только через 5 месяцев после начала работы над ними. В это время я пытался написать библиотеку, которая позволяла бы программам создавать файлы не на диске, а в оперативной памяти. Так можно было бы обойти это злосчастное ограничение.

В итоге получился код в ~1700 строчек. Библиотека реализовывает функционал файловых потоков данных полностью без использования файловых потоков из C.

Кстати, так как на Stepik все решения - это одиночные файлы, эта библиотека скомпонована из одного файла, причём её код автоматически вставляется перед кодом функции main, которую вы обычно пишете для решения заданий.

Ссылка на репозиторий с кодом: *тык*. Хотя вряд ли кому-то интересен получившийся код, тем более что он написан специально под Stepik.

#интересные_факты
👍2🔥1🤯1🆒1
11.11: Сегодня распродажа на AliExpress, а ещё сегодня наш курс достиг красивой цифры в 9111 учащихся.

🍾 🎉
🎉3👍1
Вообще иногда довольно интересно наблюдать за статистикой, за теми графиками, которые Stepik рисует для нашего курса.

Я вот совершенно не ожидал, что число сертификатов с отличием превысит количество обычных сертификатов. Это значит, что много кто среди вас очень-очень любит быть отличником.

Хотя с другой стороны лучшее в курсах - это не сертификаты, а зелёные полосочки. Как же всё-таки приятно заполнять эту серую безжизненную полость живым зелёным цветом!
😁7👍2
Мы улучшили урок «Рекурсия»!

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

Осталось что-то непонятно по поводу рекурсии? Наверно стоит перепройти этот урок, тем более что он был качественно обновлён.

Быстрые ссылки:

- Урок: *тык*
- Курс: *тык*

Теперь я намерен разделить оставшиеся 2 урока по функциям на 3 отдельных урока. Сейчас функции - самая скомканная тема на курсе, но скоро её станет намного легче изучать.

#изменения
👍3❤‍🔥21
Кстати, на этот канал теперь подписано больше 100 человек!

Может показаться, будто мы следим только за цифрами, но вообще-то так и есть. Нас просто завораживают большие цифры!
🍾9❤‍🔥1🔥1😁1🏆1
До нового года осталось всего 4 дня!

🔔 Скоро ещё раз сменится эта заветная цифра в календаре, для многих это станет новой главой их жизни. Это идеальное время, чтобы задуматься о том, как вы хотите провести новый год.

Зимний сезон - лучшее время для обучения!


Согласно статистике Stepik по нашему и другим курсам большинство людей обучаются именно после Нового года, причём усиленно. В новом году у вас есть ещё один шанс начать или продолжить саморазвиваться: не упустите его!

📚 Главное - это никогда не оставлять обучение. Оно требует вложения времени, сил, самоорганизацию и дисциплину, однако всё затраченное для этого окупится, если вы не остановитесь на полпути к цели.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2👍2🤩21🔥1💯1
Ещё, чтобы вам не было скучно в новом году, мы подготовили обновление уроков про функции:

• Обновится теория
• Добавятся новые задачи
• Сами уроки станут интереснее и понятнее!

Скоро (надеюсь, до Нового года) мы опубликуем изменения, так что у вас появится возможность перепройти эти уроки и углубить свои знания.
👍2🔥21🆒1💘1
Мы обновили уроки модуля про функции!

Во первых, теперь в этом модуле содержится 4 урока, а не 3:

7.1 Функции
7.2 Возврат значений
7.3 Композиция функций
7.4 Рекурсия

Во вторых, уроки этого модуля стали намного более интересными и понятными.

Мы очень переписали всю теорию, так что у вас больше не возникнет вопросов о том, что такое void и почему у меня в коде функция не возвращает. Ещё мы перекомпоновали задания, так что задачи на комбинирование функций больше не будут такими сложными.

Ссылка на курс: *тык*.

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

Что-ж, в следующем году вас будет ждать новый курс (ориентировочно летом). Не теряйте нас.

#изменения
🔥3👍2
Худшая новость года: К сожалению, в ходе публикации изменений был утерян главный мем курса.

Если кто-то не понимает, то раньше немного как магистр Йода автор курса говорил. В части про параметры функций этот кусочек текста раньше был.

Жаль, но теперь такую речь в курсе не встретишь.

#скорбим_по_мемам
😭6😁2
Подводим итоги года!

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

За этот год мы:

• Добавили 8 новых уроков
• Написали целую API на 2000 строчек кода для уроков про файлы
• Создали этот канал
14 раз вносили значительные изменения в уроки
• Подключили выдачу сертификатов для прошедших курс

За этот год вы:

• Увеличили население курса с 3000 до почти 10 000 человек
• Прошли 30 наших уроков и решили почти 150 задач и тестов
• Получили более 500 сертификатов, большая часть из которых с отличием
• Оставили более 100 отзывов и написали более 1000 комментариев
• Увеличили население группы курса до 270 человек и канала до 115 человек

❤️ Спасибо, что проходили наш курс и продолжаете его проходить
🔥14🤯3
Вот и наступил новый год!

💡В году есть всего два хороших сезона для того, чтобы начать своё обучение: осень 🍂 и зима ❄️. По крайней мере именно осенью и зимой люди начинают массово вспоминать свои пароли от Stepik и обучаться.

Зимний сезон - лучшее время для обучения!


📚 Обычно именно после нового года мотивации обучаться больше всего. Не упустите ваш шанс начать или продолжить саморазвиваться в новом году!

Я надеюсь помимо развития курса начать иногда писать посты с интересными и полезными фактами о C++ и о программировании в целом. Так что ждите!
🆒2
🎉 А ещё, кстати, 31 числа население нашего курса вновь преодолело красивую и большую отметку:

Нас с вами теперь 10 000!


❤️ Спасибо, что обучаетесь вместе с нами!
❤‍🔥2
А вы знали? Дробные числа нельзя сравнивать!
Точнее проверять равенство между ними.

Как вы обычно сравниваете числа? Самый простой способ сравнения - это написать num1 == num2 в условии, где это нужно. Это достаточно очевидно, но, к сожалению, ведёт к неочевидным и странным последствиям.

Равны ли числа 1 и 1.1? Очевидно, нет. А равны ли числа 1 и 1.001? Тоже вроде нет. А если мы сравним 1 и 1.0000000001? Вроде эти два числа очень-очень близки, но даже такое маленькое различие делает их разными. Так работает равенство чисел в арифметике.

А что насчёт программирования?


Вы ведь знаете, что числа в памяти хранятся с определённой ограниченной точностью? Все числа в C++ занимают определённое конкретное количество байт памяти, которое зависит от типа данных. У целых чисел это влияет на диапазон возможных значений, а у чисел типа float на точность этих самых чисел.

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

Давайте представим простой пример:
cout << boolalpha; // Для вывода true/false вместо 1/0

float num = 1.0 / 3;

cout << (num * 3.0 == 1); // 1/3*3 == 1

Этот код выведет false. То есть мы по сути нашли доказательство того, что 1 иногда не равен 1. Из-за неточностей вычислений эти два числа оказались разными, хотя cout оба числа выведет как 1.

Ещё один пример:
cout << boolalpha;

cout << (1.1 + 2.2 == 3.3);

Здесь тоже выведется false. Это уже похоже на какой-то абсурд.

Примечание: Вывод этих примеров зависит от выбранного компилятора, от платформы, на которой запускается код, и от точности вычислений процессора.

Лучшее решение - это просто использовать операторы < и > вместо ==. Например, следующим образом:
// Если разница между числами меньше, чем 0.001
if (abs(a - b) < 0.001)
...


В общем избегайте сравнения дробных чисел через оператор == в вашем коде. Иначе вы можете наткнуться на незаметные ошибки, о которых даже и не подозревали.

#интересные_факты
👍3🤯3🆒1
Как интересно наблюдать такие графы в процессе разработки!

Если вдруг кому неизвестно, я намерен создать курс-продолжение по C++ и охватить в нём такие темы, как указатели, ООП и т.п.

Любой курс - это в первую очередь программа курса.


Чтобы составить программу, то есть написать список тем и уроков и расположить их в определённом порядке, я составил такую вот mind-карту с различными темами, их очерёдностью и взаимодействием.

Сверху находятся темы из предыдущего курса, а снизу - из следующего. Новые темы уже могут сравниться по количеству со старыми, а ведь ещё осталось много того, что ещё стоит добавить.

В общем, у кого как, а у меня ожидается весьма насыщенный год. Повезёт, если это чудо хотя бы в 40 уроков уложится.

#опланах
❤‍🔥5🔥3👍2