Дополнения к семинару 1.2
Я сегодня уже выкладывал и стирал этот пост т.к. он был не идеален. Теперь надеюсь останется.
1.2.1.
В комментариях был отличный вопрос можно ли обобщить русское крестьянское возведение в степень на комплексные числа с целыми действительной и мнимой частями. Ответ разумеется нет, так как такого рода числа (гауссовы целые) не замкнуты относительно возведения в степень. Простой контрпример это i в степени i.
Интересно что я не сразу это понял сам, хотя если бы меня попросили посчитать i в степени i у меня не было бы проблем. К счастью мне всё объяснили: https://cs.stackexchange.com/questions/162098
1.2.2.
Многие заметили что наивное обобщение русского крестьянского умножения и возведения в степень перестаёт работать на сверхстепень и в этом смысле проблема RPS коварна. Всё дело в том, что шагом для возведения в степень является умножение и для умножения (a * b) mod m = ((a mod m) * (b mod m)) mod m. Но для возведения в сверхстепень шагом должно являться возведение в степень, а там это очевидно не так.
Простой контрпример:
(2 ^ 4) mod 5 = 1
(2 ^ 9) mod 5 = 2
То есть кажется RPS надо бы пометить звёздочкой. Тем не менее тесты к этой задаче допускают тривиальное решение -- там просто нигде нет слишком большого показателя сверхстепени и достаточно уметь быстро возводить в степень и писать обычные циклы.
1.2.3.
Один из студентов сделал интересное решение проблемы NS, не использующее дополнительного массива, а вместо этого использующее обратный ход рекурсии: https://youtu.be/oWGrH0R8iwU?t=3508
Интересно, что компиляторы gcc и clang сильно расходятся в вопросе оптимизации этого кода: clang на O3 не делает ничего. Что делает на O3 gcc я бы охарактеризовал как двойной прыжок с переворотом в воздухе: https://godbolt.org/z/o6bjs3aP1
Было бы интересно если бы кто-нибудь исследовал корректность такого рода оптимизации. Мы явно ухудшаем размер кода, но неясно будет ли хотя бы теоретически выигрыш в быстродействии.
#c_graduate
Я сегодня уже выкладывал и стирал этот пост т.к. он был не идеален. Теперь надеюсь останется.
1.2.1.
В комментариях был отличный вопрос можно ли обобщить русское крестьянское возведение в степень на комплексные числа с целыми действительной и мнимой частями. Ответ разумеется нет, так как такого рода числа (гауссовы целые) не замкнуты относительно возведения в степень. Простой контрпример это i в степени i.
Интересно что я не сразу это понял сам, хотя если бы меня попросили посчитать i в степени i у меня не было бы проблем. К счастью мне всё объяснили: https://cs.stackexchange.com/questions/162098
1.2.2.
Многие заметили что наивное обобщение русского крестьянского умножения и возведения в степень перестаёт работать на сверхстепень и в этом смысле проблема RPS коварна. Всё дело в том, что шагом для возведения в степень является умножение и для умножения (a * b) mod m = ((a mod m) * (b mod m)) mod m. Но для возведения в сверхстепень шагом должно являться возведение в степень, а там это очевидно не так.
Простой контрпример:
(2 ^ 4) mod 5 = 1
(2 ^ 9) mod 5 = 2
То есть кажется RPS надо бы пометить звёздочкой. Тем не менее тесты к этой задаче допускают тривиальное решение -- там просто нигде нет слишком большого показателя сверхстепени и достаточно уметь быстро возводить в степень и писать обычные циклы.
1.2.3.
Один из студентов сделал интересное решение проблемы NS, не использующее дополнительного массива, а вместо этого использующее обратный ход рекурсии: https://youtu.be/oWGrH0R8iwU?t=3508
Интересно, что компиляторы gcc и clang сильно расходятся в вопросе оптимизации этого кода: clang на O3 не делает ничего. Что делает на O3 gcc я бы охарактеризовал как двойной прыжок с переворотом в воздухе: https://godbolt.org/z/o6bjs3aP1
Было бы интересно если бы кто-нибудь исследовал корректность такого рода оптимизации. Мы явно ухудшаем размер кода, но неясно будет ли хотя бы теоретически выигрыш в быстродействии.
#c_graduate
🔥29👍13❤1😁1
Третья и завершающая часть первого семинара по языку C,
https://youtu.be/qaCsf7wOpRQ
Мы продолжаем практиковаться в азах языка C и программирования. На этот раз мы посмотрим на простые и красивые алгоритмы связанные с числами Фибоначчи. Мы увидим случай когда математика заводит нас в алгоритмический тупик, разберемся с переполнениями беззнаковых типов, изобретём интересную систему счисления, а в конце — сыграем в игру, в которой очень легко победить.
А впереди нас ждёт допсеминар по Unix Shell, запись которого я выложу в ближайший вторник.
#c_graduate
https://youtu.be/qaCsf7wOpRQ
Мы продолжаем практиковаться в азах языка C и программирования. На этот раз мы посмотрим на простые и красивые алгоритмы связанные с числами Фибоначчи. Мы увидим случай когда математика заводит нас в алгоритмический тупик, разберемся с переполнениями беззнаковых типов, изобретём интересную систему счисления, а в конце — сыграем в игру, в которой очень легко победить.
А впереди нас ждёт допсеминар по Unix Shell, запись которого я выложу в ближайший вторник.
#c_graduate
❤46🔥22👍15💔2
Опрос по итогам выкладки первых трёх видео. Интересно ли уважаемым подписчикам происходящее у меня на первом курсе или всё слишком просто и неинтересно и вообще не формат моего канала?
Anonymous Poll
97%
Продолжаем выкладку, хочется увидеть весь курс.
3%
Эксперимент, очевидно, неудачный
🔥51👍14👏4
Я иногда устраиваю для ребят так называемые "допсеминары". Это с моей стороны чистая благотворительность — предложение собраться у меня в офисе, обычно в выходной, чтобы я рассказал о чём-нибудь интересном. Студенты не обязаны туда приходить и на их успеваемость это никак не влияет (вообще я и на обычных занятиях надеюсь, что они взыскуют более знаний чем оценок).
Тем не менее для видеозаписи полного курса, я склонен включить этот допсеминар в курс, так как он на самом деле очень важный. Также в курс запланирован допсеминар про сборку и некоторые другие, которым ещё предстоит быть прочитанными (если студенты на них придут, разумеется).
https://youtu.be/KLv-5jWlKjM
В этом видео речь пойдёт о работе в консоли. Мы научимся работать с пакетным менеджером, узнаем основы идеологии Unix, научимся писать сначала однострочники, а потом и полноценные bash-скрипты, освоим несколько консольных супероружий, таких как grep sed и awk и многое другое. В конце мы с некоторой грустью поймём границы применения техники.
#c_graduate
Тем не менее для видеозаписи полного курса, я склонен включить этот допсеминар в курс, так как он на самом деле очень важный. Также в курс запланирован допсеминар про сборку и некоторые другие, которым ещё предстоит быть прочитанными (если студенты на них придут, разумеется).
https://youtu.be/KLv-5jWlKjM
В этом видео речь пойдёт о работе в консоли. Мы научимся работать с пакетным менеджером, узнаем основы идеологии Unix, научимся писать сначала однострочники, а потом и полноценные bash-скрипты, освоим несколько консольных супероружий, таких как grep sed и awk и многое другое. В конце мы с некоторой грустью поймём границы применения техники.
#c_graduate
YouTube
Практика языка C (МФТИ, 2023-2024). Допсеминар: unix shell
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
Этот допсеминар был прочитан факультативно. Он посвящён тому, чтобы познакомить студентов первого курса с работой в консоли.
Семинарист: Константин Владимиров.
Дата: 16 сентября…
Этот допсеминар был прочитан факультативно. Он посвящён тому, чтобы познакомить студентов первого курса с работой в консоли.
Семинарист: Константин Владимиров.
Дата: 16 сентября…
🔥163👍45❤🔥9❤6
Начинаем второй логический семинар по языку C. Он будет также из трёх частей и будет посвящён времени и памяти.
В первой его части мы разберёмся с двумя крайне важными концепциями -- со структурами в языке и с асимптотикой алгоритмов. Для иллюстрации и того и другого я выбрал простые числа.
https://youtu.be/duVH3_hp60I
#c_graduate
В первой его части мы разберёмся с двумя крайне важными концепциями -- со структурами в языке и с асимптотикой алгоритмов. Для иллюстрации и того и другого я выбрал простые числа.
https://youtu.be/duVH3_hp60I
#c_graduate
YouTube
Практика языка C (МФТИ, 2023-2024). Семинар 2.1. Простые числа.
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
На этом семинаре мы разберёмся с двумя крайне важными концепциями -- со структурами в языке и с асимптотикой алгоритмов. Для иллюстрации и того и другого я выбрал простые числа.
…
На этом семинаре мы разберёмся с двумя крайне важными концепциями -- со структурами в языке и с асимптотикой алгоритмов. Для иллюстрации и того и другого я выбрал простые числа.
…
🔥61👍17🎉5❤4
Интересный пример предварительной пессимизации (или несовершенства компиляторов, как посмотреть), инспирированный решением одного моего студента.
https://godbolt.org/z/qa59c5MM1
Тут очевидно, что функция double_area делает то же самое, что wicked_double_area (если раскрыть скобки). Мало того, весь контекст локальный и всё доступно для оптимизаций. Но и clang и gcc не справляются — в генерированном коде получается шесть умножений против двух.
Кто возьмётся исследовать что происходит?
#questions
#compilers
https://godbolt.org/z/qa59c5MM1
Тут очевидно, что функция double_area делает то же самое, что wicked_double_area (если раскрыть скобки). Мало того, весь контекст локальный и всё доступно для оптимизаций. Но и clang и gcc не справляются — в генерированном коде получается шесть умножений против двух.
Кто возьмётся исследовать что происходит?
#questions
#compilers
godbolt.org
Compiler Explorer - C++
struct point_t {
int x, y;
};
struct triangle_t {
struct point_t pts[3];
};
int double_area(struct triangle_t tr) {
int s = (tr.pts[1].x - tr.pts[0].x) * (tr.pts[2].y - tr.pts[0].y) -
(tr.pts[2].x - tr.pts[0].x) * (tr.pts[1].y - tr.pts[0].y);…
int x, y;
};
struct triangle_t {
struct point_t pts[3];
};
int double_area(struct triangle_t tr) {
int s = (tr.pts[1].x - tr.pts[0].x) * (tr.pts[2].y - tr.pts[0].y) -
(tr.pts[2].x - tr.pts[0].x) * (tr.pts[1].y - tr.pts[0].y);…
🤔11👍2🥴2
В продолжение предыдущего поста выношу из комментариев обстоятельный диалог с нейросетью на тему упрощения алгебраических выражений.
Я хотел добиться, чтобы мне упростили a * c - a * d - b * c - e * f + e * d + b * f до (a - b) * (c - d) - (e - b) * (f - d). Там сначала разминочный вопрос который сетка с лёгкостью прошла, а вот дальше...
https://chat.openai.com/share/8894392f-253b-4ade-a059-d2dad90619da
У меня не получилось.
Хочется обратиться к экспертам в инжиниринге запросов на моём канале. А вы сможете добиться от нейросети правильного ответа?
#llm
#questions
Я хотел добиться, чтобы мне упростили a * c - a * d - b * c - e * f + e * d + b * f до (a - b) * (c - d) - (e - b) * (f - d). Там сначала разминочный вопрос который сетка с лёгкостью прошла, а вот дальше...
https://chat.openai.com/share/8894392f-253b-4ade-a059-d2dad90619da
У меня не получилось.
Хочется обратиться к экспертам в инжиниринге запросов на моём канале. А вы сможете добиться от нейросети правильного ответа?
#llm
#questions
ChatGPT
ChatGPT - Арифметические реассоциации
Shared by Konstantin Vladimirov via ChatGPT
👍12🗿5
Вторая часть второго логического семинара посвящена работе с отдельными битами. Мы начнём с мотивирующего примера решета с побитовым хранением признаков и разберем многие интересные битовые трюки и техники.
https://youtu.be/ZizuOhdl5oA
Когда я записывал семинар у меня был небольшой насморк, что особенно заметно во второй части. Я даже по аудитории в перерыве ходил в маске чтобы не перезаражать особо студентов. Надеюсь это не сильно сказалось на качестве записи.
#c_graduate
https://youtu.be/ZizuOhdl5oA
Когда я записывал семинар у меня был небольшой насморк, что особенно заметно во второй части. Я даже по аудитории в перерыве ходил в маске чтобы не перезаражать особо студентов. Надеюсь это не сильно сказалось на качестве записи.
#c_graduate
YouTube
Практика языка C (МФТИ, 2023-2024). Семинар 2.2. Побитовые вычисления.
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
Весь этот семинар посвящён работе с отдельными битами. Мы начнём с мотивирующего примера решета с побитовым хранением признаков и разберем многие интересные битовые трюки и техники.…
Весь этот семинар посвящён работе с отдельными битами. Мы начнём с мотивирующего примера решета с побитовым хранением признаков и разберем многие интересные битовые трюки и техники.…
🔥56👍16❤1
Заканчиваем семинар посвященный времени и памяти: разбираем функции для работы со временем и псевдослучайные числа. Начинаем со времени, знакомимся с функциями для работы с ним. Далее мы мотивируем рандомизированные алгоритмы и знакомимся с псевдослучайными числами. После перерыва на решение задач я также разберу структуры и побитовое решето с прошлого семинара.
https://youtu.be/qpSCYugCknk
#c_graduate
https://youtu.be/qpSCYugCknk
#c_graduate
YouTube
Практика языка C (МФТИ, 2023-2024). Семинар 2.3. Время и случайность.
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
В первой части семинара мы знакомимся со временем и с функциями для работы с ним. Далее мы мотивируем рандомизированные алгоритмы и знакомимся с псевдослучайными числами. После перерыва…
В первой части семинара мы знакомимся со временем и с функциями для работы с ним. Далее мы мотивируем рандомизированные алгоритмы и знакомимся с псевдослучайными числами. После перерыва…
🔥51👍17❤6🎉2🥰1🌚1
В семинаре 2.3 кто-то мог в конце пропустить небольшой шедевр от одного из студентов.
Вот чуточку причёсанная мной но близкая к оригиналу студенческая трактовка Problem FT. Определяет простоту числа через тест Ферма.
https://godbolt.org/z/PsvMs3fG1
Обратите внимание: программа совершенно корректно справляется с 49979687 (простое) и с 271747319 (составное 15791×17209).
Разумеется проблема тут в том что вместо настоящего случайного числа rand() использован просто адрес функции rand и он себя показывает неплохим случайным числом (!)
Но давайте заметим ещё кое-что, чего я на семинаре не упомянул. Именно в этом коде замена rand на rand() способна ухудшить ситуацию. Кто увидит почему? Кто также назовёт ещё одну потенциальную проблему в этом коде из-за которой (даже при rand() как вызове) на самом деле легко подобрать тест который не будет пройден?
#questions #c_graduate
Вот чуточку причёсанная мной но близкая к оригиналу студенческая трактовка Problem FT. Определяет простоту числа через тест Ферма.
https://godbolt.org/z/PsvMs3fG1
Обратите внимание: программа совершенно корректно справляется с 49979687 (простое) и с 271747319 (составное 15791×17209).
Разумеется проблема тут в том что вместо настоящего случайного числа rand() использован просто адрес функции rand и он себя показывает неплохим случайным числом (!)
Но давайте заметим ещё кое-что, чего я на семинаре не упомянул. Именно в этом коде замена rand на rand() способна ухудшить ситуацию. Кто увидит почему? Кто также назовёт ещё одну потенциальную проблему в этом коде из-за которой (даже при rand() как вызове) на самом деле легко подобрать тест который не будет пройден?
#questions #c_graduate
godbolt.org
Compiler Explorer - C
unsigned long long pow_m(unsigned long long n, unsigned long long k, unsigned long long m);
int ft(unsigned long long x);
int main() {
unsigned long long n = 0;
int isprime, res;
srand(time(NULL));
res = scanf("%llu", &n);
if (res != 1)
abort();…
int ft(unsigned long long x);
int main() {
unsigned long long n = 0;
int isprime, res;
srand(time(NULL));
res = scanf("%llu", &n);
if (res != 1)
abort();…
🤯24👍6😁6🔥3🥱1
Вести с полей систем сборки и управления пакетами.
1. Наконец-то cmake 3.28 + clang 17 позволяют использовать модули.
https://www.kitware.com/import-cmake-the-experiment-is-over/
2. Выложили (пока что по ссылке) доклад на CppCon'23 где тот же Хоффман содокладчик по Common Package Specification.
https://www.youtube.com/watch?v=IwuBZpLUq8Q
Таймлайн. В скобках -- мои примечания.
00:00 Начало и цели доклада
05:16 Зачем вообще управлять зависимостями: результаты интересного опроса что самое болезненное в C++, обзор наиболее неприятных проблем.
13:50 План исправления ситуации: замена зоопарка пекеджей единым стандартом. Плавный переход с CMake. Модули добавляют срочности этому плану.
21:43 Локальный максимум управления зависимостями: в больших компаниях уже функционирует нечто самописное (и всё что я видел было невероятно уродливым), в маленьких компаниях люди джедайствуют как могут (обычно у каждого свой build shell script врапает частые строчки для вызова CMake). Проблемы монореп и сабмодулей.
30:30 Решение: международный стандарт для экосистемы C++.
Тут микрофон уходит к Хоффману.
32:20 Что такое вообще библиотека?
34:30 Взаимодействие системы сборки с менеджментом зависимостей (я бы тут усилил тезис: почему все ненавидят менеджмент зависимостей). Подход через autotools. Эволюция CMake. Уроки которые мы выучили из модулей CMake. Пример FindQT4 и почему в CMake нет FindQT6 как отдельной команды.
48:45 Спецификация Common Package Specification и простое демо CPS в CMake. Некоторые планы на будущее развитие CMake в этом направлении.
59:20 Более высокоуровневые цели для будущей экосистемы в целом и ответы на вопросы.
Собственно спецификацию можно посмотреть вот тут:
https://cps-org.github.io/cps/index.html
#talks
1. Наконец-то cmake 3.28 + clang 17 позволяют использовать модули.
https://www.kitware.com/import-cmake-the-experiment-is-over/
2. Выложили (пока что по ссылке) доклад на CppCon'23 где тот же Хоффман содокладчик по Common Package Specification.
https://www.youtube.com/watch?v=IwuBZpLUq8Q
Таймлайн. В скобках -- мои примечания.
00:00 Начало и цели доклада
05:16 Зачем вообще управлять зависимостями: результаты интересного опроса что самое болезненное в C++, обзор наиболее неприятных проблем.
13:50 План исправления ситуации: замена зоопарка пекеджей единым стандартом. Плавный переход с CMake. Модули добавляют срочности этому плану.
21:43 Локальный максимум управления зависимостями: в больших компаниях уже функционирует нечто самописное (и всё что я видел было невероятно уродливым), в маленьких компаниях люди джедайствуют как могут (обычно у каждого свой build shell script врапает частые строчки для вызова CMake). Проблемы монореп и сабмодулей.
30:30 Решение: международный стандарт для экосистемы C++.
Тут микрофон уходит к Хоффману.
32:20 Что такое вообще библиотека?
34:30 Взаимодействие системы сборки с менеджментом зависимостей (я бы тут усилил тезис: почему все ненавидят менеджмент зависимостей). Подход через autotools. Эволюция CMake. Уроки которые мы выучили из модулей CMake. Пример FindQT4 и почему в CMake нет FindQT6 как отдельной команды.
48:45 Спецификация Common Package Specification и простое демо CPS в CMake. Некоторые планы на будущее развитие CMake в этом направлении.
59:20 Более высокоуровневые цели для будущей экосистемы в целом и ответы на вопросы.
Собственно спецификацию можно посмотреть вот тут:
https://cps-org.github.io/cps/index.html
#talks
Kitware
import CMake; the Experiment is Over!
At last the experiment is over, and CMake 3.28 has official support for C++ 20 named modules enabled without having to set the CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API variable. This has been a long adventure involving the coordination of the SG15 tooling…
👍55❤19🔥14
Выложил промежуточный семинар для первого курса, посвящённый памяти. На этом семинаре не будет новых задач. Только углубление понимания концепции памяти, которая очень нам понадобиться дальше. Начнём мы со своего рода мультфильма, который называется Genesis и к которому мы вернемся на втором курсе. Также будет немного бенчмаркинга в конце.
#c_graduate
https://youtu.be/5LSAiYAchbk
Возврат к генезису на втором курсе: https://www.youtube.com/watch?v=e5__34DFz5Y в самом начале видео.
#c_graduate
https://youtu.be/5LSAiYAchbk
Возврат к генезису на втором курсе: https://www.youtube.com/watch?v=e5__34DFz5Y в самом начале видео.
YouTube
Практика языка C (МФТИ, 2023-2024). Углубление пройденного: логическая память и виртуальная память.
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
Мы временно берем передышку. На этом семинаре не будет новых задач. Только углубление понимания концепции памяти, которая очень нам понадобиться дальше. Начнём мы со своего рода мультфильма…
Мы временно берем передышку. На этом семинаре не будет новых задач. Только углубление понимания концепции памяти, которая очень нам понадобиться дальше. Начнём мы со своего рода мультфильма…
👍60🔥12❤6🆒1
Выложил первую часть третьего логического семинара.
Мы уверенно закончили с теорией чисел и переходим угадайте к чему. Правильно — к сортировке и поиску. Начнём мы с довольно простых сортировок и довольно прямолинейного поиска. Кроме того я добавил немного вещей, касающихся языка C — например чтение cdecl, указатели на функции и основы константности.
https://youtu.be/6hTaAwUNbiw
P. S. На этой неделе дети писали контрольную, так что на следующей неделе выкладки не будет. До 3.2 будет двухнедельная пауза.
#c_graduate
Мы уверенно закончили с теорией чисел и переходим угадайте к чему. Правильно — к сортировке и поиску. Начнём мы с довольно простых сортировок и довольно прямолинейного поиска. Кроме того я добавил немного вещей, касающихся языка C — например чтение cdecl, указатели на функции и основы константности.
https://youtu.be/6hTaAwUNbiw
P. S. На этой неделе дети писали контрольную, так что на следующей неделе выкладки не будет. До 3.2 будет двухнедельная пауза.
#c_graduate
YouTube
Практика языка C (МФТИ, 2023-2024). Семинар 3.1. Линейный поиск и простые сортировки.
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
На этом занятии мы познакомимся с понятием константности, линейным поиском, двумя простейшими алгоритмами сортировок (вставками и выбором) а также научимся читать и писать cdecl и…
На этом занятии мы познакомимся с понятием константности, линейным поиском, двумя простейшими алгоритмами сортировок (вставками и выбором) а также научимся читать и писать cdecl и…
👍58❤6🔥4🤩2
Всем привет. Ближайшие события с моим участием.
18 ноября буду рассказывать про открытую архитектуру RISCV на митапе Сбердевайса
21 ноября участвую в дискуссии про технические интервью для C++ разработчиков на митапе Yadro
На митапе Yadro кстати осталась ещё тонна свободных мест для бесплатного оффлайн-участия так что не бойтесь регистрироваться.
#conference
18 ноября буду рассказывать про открытую архитектуру RISCV на митапе Сбердевайса
21 ноября участвую в дискуссии про технические интервью для C++ разработчиков на митапе Yadro
На митапе Yadro кстати осталась ещё тонна свободных мест для бесплатного оффлайн-участия так что не бойтесь регистрироваться.
#conference
🔥65👍12❤6😁1
Выложил вторую часть третьего семинара по языку C для первого курса.
На этом занятии мы плотно займёмся анализом алгоритмов. Начнём мы с бинарного поиска и сортировок, использующих стратегию разбиения пополам. А дальше погрузимся в доказательство основной теоремы (master theorem) которую далее будем использовать в анализе асимптотической сложности. Я попробую не только доказать эту теорему но и объяснить как она работает. Ну а закончим поучительным перемножением полиномов.
https://youtu.be/f2f5zXqptFY
#c_graduate
На этом занятии мы плотно займёмся анализом алгоритмов. Начнём мы с бинарного поиска и сортировок, использующих стратегию разбиения пополам. А дальше погрузимся в доказательство основной теоремы (master theorem) которую далее будем использовать в анализе асимптотической сложности. Я попробую не только доказать эту теорему но и объяснить как она работает. Ну а закончим поучительным перемножением полиномов.
https://youtu.be/f2f5zXqptFY
#c_graduate
YouTube
Практика языка C (МФТИ, 2023-2024). Семинар 3.2. Стратегия "разделяй и властвуй".
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
На этом занятии мы плотно займёмся анализом алгоритмов. Начнём мы с бинарного поиска и сортировок, использующих стратегию разбиения пополам. А дальше погрузимся в доказательство основной…
На этом занятии мы плотно займёмся анализом алгоритмов. Начнём мы с бинарного поиска и сортировок, использующих стратегию разбиения пополам. А дальше погрузимся в доказательство основной…
🔥50👍15❤1😁1
Немного странного C++.
Уважаемый читатель моего канала @MSerhiy обнаружил забавную вещь: для структур и для примитивных типов вот в этом примере действуют разные правила перегрузки: https://godbolt.org/z/YT9bo7ore
Я довольно быстро раскопал ответ в стандарте.
C++20, [expr.type] "If a prvalue initially has the type “cv T”, where T is a cv-unqualified non-class, non-array type, the type of the expression is adjusted to T prior to any further analysis"
Но я что-то задумался в процессе. Вот чисто гипотетически: а зачем так было сделано? Чему и когда это поможет? У меня нет идей.
Предлагаю в этой ветке поспекулировать насчёт источника этого правила.
#questions
Уважаемый читатель моего канала @MSerhiy обнаружил забавную вещь: для структур и для примитивных типов вот в этом примере действуют разные правила перегрузки: https://godbolt.org/z/YT9bo7ore
Я довольно быстро раскопал ответ в стандарте.
C++20, [expr.type] "If a prvalue initially has the type “cv T”, where T is a cv-unqualified non-class, non-array type, the type of the expression is adjusted to T prior to any further analysis"
Но я что-то задумался в процессе. Вот чисто гипотетически: а зачем так было сделано? Чему и когда это поможет? У меня нет идей.
Предлагаю в этой ветке поспекулировать насчёт источника этого правила.
#questions
🤔18🔥10🤡1
Выложил завершение третьего семинара по языку C для первого курса.
На этом занятии мы займёмся цифровыми сортировками и поиском. Начнём с интересной задачи определения большинства, рассмотрим сортировку подсчётом и поразрядную сортировку. Также в конце обсудим двумерные массивы.
https://youtu.be/dT-KU-BagyU
#c_graduate
На этом занятии мы займёмся цифровыми сортировками и поиском. Начнём с интересной задачи определения большинства, рассмотрим сортировку подсчётом и поразрядную сортировку. Также в конце обсудим двумерные массивы.
https://youtu.be/dT-KU-BagyU
#c_graduate
YouTube
Практика языка C (МФТИ, 2023-2024). Семинар 3.3. Цифровые сортировки.
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
На этом занятии мы займёмся цифровыми сортировками и поиском. Начнём с интересной задачи определения большинства, рассмотрим сортировку подсчётом и поразрядную сортировку. Также в…
На этом занятии мы займёмся цифровыми сортировками и поиском. Начнём с интересной задачи определения большинства, рассмотрим сортировку подсчётом и поразрядную сортировку. Также в…
👍50🔥19❤2
Техническое.
Вчера случайно выяснилось (пили на афтепати после конференции с коллегами) нечто неприятное. Оказывается когда люди случайно добавляются в технический чат, а я их оттуда, соответственно, удаляю, они внезапно оказываются забанены и теряют возможность комментировать просто по факту удаления. Всех разбанил, всем мои извинения. Увы, телеграм вынуждает меня держать этот чат чтобы комментарии были в принципе возможны. Большая просьба туда не добавляйтесь, для комментариев есть ветки под постами.
#official
Вчера случайно выяснилось (пили на афтепати после конференции с коллегами) нечто неприятное. Оказывается когда люди случайно добавляются в технический чат, а я их оттуда, соответственно, удаляю, они внезапно оказываются забанены и теряют возможность комментировать просто по факту удаления. Всех разбанил, всем мои извинения. Увы, телеграм вынуждает меня держать этот чат чтобы комментарии были в принципе возможны. Большая просьба туда не добавляйтесь, для комментариев есть ветки под постами.
#official
👌39👍9❤4🤔4😁2👾2💅1💊1
Выложил промежуточный семинар по языку C для первого курса.
На этот раз — никаких новых заданий. Мы рассматриваем работу с файлами и решаем интересную задачу, предполагающую поиск в нескольких файлах. Для этого нам также понадобятся аргументы командной строки а в конце и функции с переменным числом аргументов.
https://www.youtube.com/watch?v=2ZiXINFqFnU
#c_graduate
На этот раз — никаких новых заданий. Мы рассматриваем работу с файлами и решаем интересную задачу, предполагающую поиск в нескольких файлах. Для этого нам также понадобятся аргументы командной строки а в конце и функции с переменным числом аргументов.
https://www.youtube.com/watch?v=2ZiXINFqFnU
#c_graduate
YouTube
Практика языка C (МФТИ, 2023-2024). Интермедия: командная строка, файлы и вариабельные аргументы.
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
На этом занятии мы поговорим о файлах и всём что естественно затронуть вокруг них, в частности про аргументы командной строки и про функции с вариабельным числом аргументов.
Семинарист:…
На этом занятии мы поговорим о файлах и всём что естественно затронуть вокруг них, в частности про аргументы командной строки и про функции с вариабельным числом аргументов.
Семинарист:…
🔥52❤7👍1😘1
Выложил первую часть четвертого семинара.
Займёмся структурами данных и начнём с односвязных списков. Посмотрим базовые алгоритмы: корзинную сортировку, разворот списка, поиск петли. После первой половины будет детальный разбор задач с написанием кода.
https://youtu.be/djXpCfEzO34
#c_graduate
Займёмся структурами данных и начнём с односвязных списков. Посмотрим базовые алгоритмы: корзинную сортировку, разворот списка, поиск петли. После первой половины будет детальный разбор задач с написанием кода.
https://youtu.be/djXpCfEzO34
#c_graduate
YouTube
Практика языка C (МФТИ, 2023-2024). Семинар 4.1. Односвязные списки.
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
На этом занятии мы начнём знакомство с динамическими структурами данных и рассмотрим односвязные списки. С прошлым семинаром этот связан через идею корзинной сортировки, но это не…
На этом занятии мы начнём знакомство с динамическими структурами данных и рассмотрим односвязные списки. С прошлым семинаром этот связан через идею корзинной сортировки, но это не…
👍41🔥29❤8