Практика языка C (МФТИ, 2023-2024). Семинар 1.1. Алгоритм Евклида.

Поділитися
Вставка
  • Опубліковано 18 гру 2024

КОМЕНТАРІ • 136

  • @adasdadsadas604
    @adasdadsadas604 Рік тому +107

    Никто не верил, но курс по С появился, Спасибо!

    • @napalm20005
      @napalm20005 Рік тому +17

      Ахахахах, при чем, большиснтво ожидавших - зрители курса по C++)

    • @Rinatanski
      @Rinatanski 7 місяців тому

      @@napalm20005 такой курс уже есть

  • @СергейМ-в9е
    @СергейМ-в9е 9 місяців тому +12

    Искренняя благодарность Константину Игоревичу за великолепные лекции! Смотрю на одном дыхании.

  • @ЮрийМедведев-у1ш
    @ЮрийМедведев-у1ш 6 місяців тому +21

    Отличный препод!
    1. Врубается в тему.
    2. Норм относится к своим ученикам.
    3. Умеет донести до своих учеников знания.
    Спасибо!
    🙏

  • @АндрейШевелёв-г2щ

    Трехкратное "УРА" в честь выхода курса по Сям🥳🥳🥳. Огромное спасибо автору

  • @nmg_prm
    @nmg_prm Рік тому +26

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

  • @SlavaVy0
    @SlavaVy0 13 днів тому

    Константину больше спасибо, это очень интересный алгоритм Евклида, когда сначала пеберм два числа, получаем 3е (например справа), делаем сдвиг и повторяем, когда визуализируешь этот алгос - очень интересно.
    Вообще такие лекции, от разработчика такого уровня на русском языке - это прям национальное достояние, без шуток.

  • @requ1em939
    @requ1em939 6 місяців тому +3

    Спасибо огромное за то, что выкладываете подобные семинары. Очень приятно и поучительно Вас слушать.

  • @profprogrammer9003
    @profprogrammer9003 Рік тому +4

    Контента такого уровня на ютубе нет .
    Спасибо .

  • @Alex_LinuxTommy
    @Alex_LinuxTommy Рік тому +3

    Так мало курсов по чистому С, огромное спасибо! С первых минут видео ясно, что курс будет стоящий!

  • @Evedol-Race
    @Evedol-Race 22 дні тому

    Очень круто) даже порешал контест на 97 балов:)

  • @mikhail_dudek
    @mikhail_dudek Рік тому +5

    Константин Игоревич, спасибо, было интересно и познавательно!

  • @kamsikamsa
    @kamsikamsa Рік тому +8

    От души!!! Я не верил, что такое может быть) но надеялся) спасибо!🎉😂

  • @ill4374
    @ill4374 8 місяців тому +6

    Спасибо за то, что снимаете!

  • @makaedg
    @makaedg Рік тому +5

    Я ждал этого курса все лето, ураа!!)

  • @РусланКарнеенко
    @РусланКарнеенко 2 місяці тому

    Действительно, очень познавательно и подача супер.
    Спасибо

  • @TurboGamasek228
    @TurboGamasek228 2 місяці тому +2

    он приветствуется, а я уже многое понял

  • @user-jj7xq3lf1l
    @user-jj7xq3lf1l Рік тому +4

    Безумно рад новым видео на канале! Спасибо!

  • @назовименятаккакпосчитаешьнужн

    реально курс по C? это сон?
    лучший подарок на др, спасибо

  • @anton_sosnitzkij
    @anton_sosnitzkij 11 місяців тому +1

    Спасибо большое за видеозаписи с курса!
    14:51 слайд 8 сначала указатель назван p, а затем используется pa

  • @rrrrr5042
    @rrrrr5042 Рік тому +2

    спасибо вам большое, пожалуйста, не останавливайтесь

  • @vanhelsing4214
    @vanhelsing4214 Рік тому +3

    Еее! А вот и классика подъехала)

  • @moshamiracle
    @moshamiracle Рік тому +3

    родная сишечка, как же я ждала

  • @yaroslaveremenko4900
    @yaroslaveremenko4900 Рік тому +4

    Круто!

  • @babichfx
    @babichfx Рік тому +3

    Миллион тысяч лайков!

  • @alexeytrukhachev
    @alexeytrukhachev 7 місяців тому +1

    Спасибо за курс!

  • @marktsyst
    @marktsyst Рік тому +1

    Класс, супер лектор

  • @OstretsovArtem
    @OstretsovArtem 7 місяців тому

    часто в последнее время залезаю в исходники PostgreSQL и решил все-таки почитать про C и вот тут такой полезный плейлист! спасибо автору, очень выразительно, точно и компактно излагает материал.

  • @ivankorotkov2563
    @ivankorotkov2563 Рік тому +3

    51:30, опечатка на слайде 29 диапазон целых знаковых типов от -2^{x-1} до 2^{x-1} - 1, а не от -(2^{x-1} -1) - т.е. отрицательных значений на одно больше чем положительных. Позже (1:21:10) кстати упоминается что инт ассиметричен.
    Вспомнился в какой-то книжке по ассемблеру пример кода (которым автор очень гордился), который вычислял abs за две x86 команды - изменить знак (neg) и условный переход на предыдущую команду если результат предыдущей команды отрицателен (вроде js, но могу и ошибаться за давностью лет). Разумеется на минимальных числах он зацикливался, потому что там neg всегда возвращал отрицательный результат.

    • @tilir
      @tilir  Рік тому +2

      Да всё так. Я убрал с этого слайда асимметричность целых для простоты. Но она действительно есть. У нас будет (не скоро) занятие где мы будем специально говорить о кодировках для int, float и других типов и о трюках с этими кодировками вроде быстрого приближённого логарифма и т.п.

  • @alexanderspeshilov839
    @alexanderspeshilov839 Рік тому +1

    50:00 слайд 29: диапазоны знаковых типов разве такие? Нижняя граница же -(2^n) - чётное число.

  • @999poll
    @999poll 7 місяців тому +1

    Ютуб в последнее время рекомендует хорошие вещи 😮

  • @slonbeskonechen8310
    @slonbeskonechen8310 6 місяців тому +2

    как же не хватало подобных лекций лет 20 назад....

    • @tilir
      @tilir  5 місяців тому +1

      И мне ))

  • @maxs4535
    @maxs4535 Рік тому +12

    Ой йой йой, как здорово! Курс по С это шикарно, спасибо вам большое! Интересно, а к лекционной части будет доступ на UA-cam?

    • @tilir
      @tilir  Рік тому +10

      Увы лекции читаю не я. Не знаю пишутся ли они, вероятно нет. Я рекомендую заменять лекционную часть Керниганом и Ричи. По тем вопросам которых там нет я запланировал несколько похожих на лекции допсеминаров.

  • @hatiko8227
    @hatiko8227 Рік тому +1

    Сразу же к указателям и ассертам :) Я так понял курс для тех, кто уже знаком с программированием. Интересно было послушать.
    Хочется еще придраться что вывод не на stderr)

    • @tilir
      @tilir  Рік тому +1

      Я пока не объяснял файловый вывод, это будет позже.

  • @MisterX-hu3pt
    @MisterX-hu3pt 11 місяців тому

    Спасибо.

  • @BARABUMBS
    @BARABUMBS 11 місяців тому

    Добрый день! Спасибо за лекции. Кажется алгоритм на 39:42 некоторые случаи не учитывает. Если b

  • @ode2877
    @ode2877 9 місяців тому +3

    С таким преподом я бы точно не прогуливал пары

  • @ДенисКолчев-щ4с
    @ДенисКолчев-щ4с Рік тому +6

    Смотреть уроки с "Базового курса по С++" не так кофортно, ибо присутствует чувство, что что-то прошло мимо тебя (но эти студенты в видео понимают о чём речь).
    Так что да здравствует consistency!

  • @holl_tv293
    @holl_tv293 10 днів тому +1

    полез углюбится в С++ но пришлось учить заново С

  • @mister-ace
    @mister-ace 10 місяців тому +1

    Большое спасибо за то, что Вы делаете.
    Подскажите, пожалуйста, какие разделы математики необходимо изучить , чтобы понимать и математические кейсы в курсе?

  • @elkiaora
    @elkiaora Рік тому +2

    Я правильно понимаю, что на 16:29 ошибка на доске с перенаправлением стрелки? *pa = b должно быть pa = &b, и тогда уже *pa = 3 запишет 3 в b

    • @tilir
      @tilir  Рік тому

      На доске для студентов было правильно, я при подготовке видео ошибся. Спасибо, добавлю в errata.

    • @weerbox
      @weerbox Рік тому +1

      ​@@tilirещё на 14:33 в коментариях фигурирует *pa == 1 и *pa == 2, хотя определялся только указатель int *p = &a;

    • @tilir
      @tilir  Рік тому

      @@weerbox да должно быть pa

  • @yaroshchenko_creative
    @yaroshchenko_creative Рік тому +1

    Можно больше сделать уроков по чистому си. ANSI C, если я не потаю...

  • @insane_tux
    @insane_tux Рік тому +3

    Спасибо Константин за ваши видео, хотелось бы узнать все ли семинары по Практике языка С будут публиковатся на вашем канале ?

    • @tilir
      @tilir  Рік тому +1

      Надеюсь все если с продакшном справимся.

  • @urbilya1
    @urbilya1 8 місяців тому

    На слайде с суффиксами констант (на ~53:30) у "abc" указан тип const char[4] вместо char[4] (мы всё-таки в C, а не в C++ :))

    • @tilir
      @tilir  8 місяців тому

      Фактически это readonly то есть const. То что по стандарту он трактуется как char[4] это забавный бюрократический выверт, не более того.

  • @exx-ns4tt
    @exx-ns4tt 4 місяці тому +2

    Константин Игоревич, Вы будете где-либо дублировать семинары в случае блокировки\тотального замедления youtyb'а?

    • @tilir
      @tilir  4 місяці тому +2

      У себя в тг всё написал: t.me/cpp_lects_rus/185

  • @antonpetrenko9176
    @antonpetrenko9176 Рік тому

    Очень интересно и позновательно. Спасибо! Единственный негативный осадок остался от gdb.
    1:02:45 не удается запустить отладчик :
    warning: opening /proc/PID/mem file for lwp 40.40 failed: No such file or directory (2)
    Cannot insert breakpoint 1.
    Cannot access memory at address 0x80011fa
    Патчи по типу echo -ne '\x90\x90' | sudo dd of=/usr/bin/gdb seek=$((0x335bad)) bs=1 count=2 conv=notrunc - так же ситуацию не решают =(

    • @tilir
      @tilir  Рік тому

      Да это известная проблема.
      Обычно если не хочется грязных хаков помогает просто пересборка GDB
      github.com/microsoft/WSL/issues/8516#issuecomment-1526257546
      Или ещё проще установка из PPA:
      github.com/microsoft/WSL/issues/8516#issuecomment-1762849202

  • @MVZ1983
    @MVZ1983 8 місяців тому

    Переменную q в скобках for можно объявлять. Это локальная для блока for переменная, и после цикла она не действительна

  • @weFromRussia
    @weFromRussia Рік тому

    минута 51 - должно быть - начало отрицательного диапазона для int-а -(2^(x-1)) , на видео -(2^(x-1) - 1). Длина отрицательного диапазона числа равна длине положительного плюс ноль (то есть длиннее чем чисто положительного)

    • @tilir
      @tilir  Рік тому +2

      Да спасибо в комментах уже обсуждали. Пока что это сознательное упрощение. Мы дойдём до тонкостей и последствий кодировки целых и плавающих чисел довольно скоро.

  • @MikhailGoncharov-tl4cr
    @MikhailGoncharov-tl4cr 7 місяців тому

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

    • @tilir
      @tilir  7 місяців тому

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

  • @alexanderkuptsov6117
    @alexanderkuptsov6117 7 місяців тому

    Здравствуйте, а люди с улицы могут присоединиться к контестам? Просто 43:45 как бы намекает )

    • @tilir
      @tilir  7 місяців тому +1

      Пока что да. Если их закроют я что нибудь придумаю.

    • @alexanderkuptsov6117
      @alexanderkuptsov6117 7 місяців тому

      @@tilir Ого, ничего себе! Вы не против, если я посдаю что-нибудь?

  • @johntrucena4947
    @johntrucena4947 11 місяців тому

    там в функции gcd должен не сам y возвращаться, а iabs(y)
    при вводе 14 -2 выдаёт -2

  • @kratodns9777
    @kratodns9777 3 місяці тому

    А не подскажете , изучаю лекции Дербышевой Т.Н. из МФТИ, подойдут ли они к этому практикуму ?

  • @b0ryakha
    @b0ryakha Рік тому

    Видео супер! Планируется ли в будущем курс по библиотекам c++? например как правильно работать с QT?

  • @antonzhurba865
    @antonzhurba865 Рік тому +1

    После 10 слайда возник вопрос: когда всё таки правильно использовать abort() а не тот же exit(). И можно ли давать функциям возможность закрывать программу, в даном случае я бы возвращал код ошибки в read_inputs и в main вызывал abort() на основание кода.

    • @tilir
      @tilir  Рік тому

      Насчёт проблем abort я буду говорить когда буду говорить о разработке библиотек. Пока что заставлять обвешиваться лапшой ифов не гуманно: это просто один бинарник, ему некому прокидывать возврат.
      Выбор между abort, _Exit и exit надо бы проговорить, раньше в этом курсе не было. Я подумаю куда включить, спасибо за идею.

  • @ypohut1673
    @ypohut1673 11 місяців тому

    Ассемблер пожалуйста❤

  • @stanislavstanislavius7618
    @stanislavstanislavius7618 Рік тому +3

    Ждем ассемблер

    • @tilir
      @tilir  Рік тому +8

      Будет в этом курсе во втором семестре.

    • @stanislavstanislavius7618
      @stanislavstanislavius7618 Рік тому +3

      @@tilir как подарок на Новый год!) Спасибо большое)

  • @DART2WADER
    @DART2WADER Рік тому +4

    С++ Россия: назад к базовой базе)))

    • @tilir
      @tilir  Рік тому +4

      Это не курс по C++. Мы там будем дальше уходить в ассемблер и всё такое.

    • @DART2WADER
      @DART2WADER Рік тому

      @@tilir ну и хорошо. Всё равно много всякого на PIC12, PIC16 и других "убогих" камнях делается, а там кроме с90-99 ничерта нет.

  • @alexmo6538
    @alexmo6538 6 місяців тому

    Было бы вообще отлично, если бы все команды используемые для работы в VIM были записаны на отдельном слайде или в комментариях!

    • @tilir
      @tilir  5 місяців тому

      Или в инструкции к виму? ))

    • @alexmo6538
      @alexmo6538 5 місяців тому

      @@tilir Требовать невозможно, т.к. курс бесплатный. Просто лезть в интернет и искать инструкцию, когда засел проходить урок по видео только лишь сбивает с толку.
      П.С. Спасибо вам за уроки.

  • @MVZ1983
    @MVZ1983 8 місяців тому +2

    Получается, что не только % ведет себя иначе, но и /
    По Евклиду -8 / 6 = -2 с остатком 4
    По си -8 / 6 = -1 c остатком -2

    • @tilir
      @tilir  8 місяців тому

      Вы совершенно правы ))

  • @ДенисТюльков-ш2и
    @ДенисТюльков-ш2и 7 місяців тому

    Эх, Константин Игоревич. Если бы мне в своё время Вячеслав Юрьевич так же доходчиво объяснял бы специфику указателей в Си. Я, конечно, потом всё уяснил. Но так не хватало лекций подобного плана.

    • @tilir
      @tilir  7 місяців тому

      Вячеслав Юрьевич это, если не секрет, кто?

    • @ДенисТюльков-ш2и
      @ДенисТюльков-ш2и 4 місяці тому

      Да не суть важно. Мне бы оказаться на ваших лекциях 20 лет назад...

  • @АндрейШерстобитов-в8д

    Интересно стало, а Вы нарочно в gdb не пользуетесь словом start? Или вы хотели показать, что можно указывать имена функций при установке breakpoint?

    • @tilir
      @tilir  Рік тому +2

      Второе. Я хотел показать break. Объяснить потом что start = b main + r куда проще.

  • @strtel3186
    @strtel3186 Рік тому

    Константин Игоревич, скажите, пожалуйста, почему в функции "int gcd(int x, int y)" мы предполагаем, что второй аргумент не равен нулю? Ведь по определению: НОД(x,0) равен 0, если x

    • @tilir
      @tilir  Рік тому

      Это странное определение. Если x < 0 то НОД не нулевой, например НОД(-2, -4) = 2. Случай x = 0 я вычеркиваю для простоты. Для программиста 0 это не делитель ))

    • @strtel3186
      @strtel3186 Рік тому

      Хорошо, спасибо!

  • @napalm20005
    @napalm20005 Рік тому +1

    А cmake будет на этом практическом курсе?

    • @tilir
      @tilir  Рік тому +4

      Будет серия допсеминаров по консоли и сборке если студенты захотят. Если проведем тоже выложу ))

    • @napalm20005
      @napalm20005 Рік тому +1

      @@tilir Большущее спасибо, что так оперативно отвечайте на вопросы в ютубе. Я даже себе представить не могу как вы на все это находите время. Дай бог, чтобы ваши студенты захотели. Еще вопрос, в МФТИ нету заочки или онлайн курсов по С/С++?

  • @Андрей-с6у6ч
    @Андрей-с6у6ч 5 місяців тому

    Такой вопрос, почему вы вызываете abort() при ошибки в функции ввода вместо кода возврата? Чтобы не возвращаться в main и сразу выйти из программы?

    • @tilir
      @tilir  5 місяців тому +3

      Для простоты, это всё-таки первое занятие. Педагогическая стратегия такая: на первом занятии учим детей использовать abort, потом до конца магистратуры отучаем. Те, кого удаётся отучить, становятся программистами ))

  • @mychannel-m5e
    @mychannel-m5e 6 місяців тому

    Здравствуйте! Домашние задания это внутренний ресурс только для студентов, или не-студентам тоже можно зарегистрироваться посмотреть?

    • @tilir
      @tilir  6 місяців тому

      Открыто пока что для всех. Ссылка в описании.

  • @StudyAndWork-n6p
    @StudyAndWork-n6p 5 місяців тому

    Подскажите, где можно найти задачи? В контесте на eJudge пишут: server is not available. Есть ли возможность как то порешать контесты?)

    • @tilir
      @tilir  5 місяців тому

      Я это не контролирую. Но если что всё выложено тут: github.com/tilir/c-graduate/tree/master/coursework/contests
      Просто без удобного интерфейса.
      И я на последнем семинаре как раз кинул клич: кто может помочь поднять более стабильные контесты, welcome.

  • @АндрейШерстобитов-в8д

    Константин, а какая мотивация пользоваться if & endif вместо комментария? И то и то насколько мне известно убирается препроцессором.
    Сам вижу возможный аргумент, что добавление/удаление комментария рушат историю в гите и засоряют блейм, а других аргументов привести не могу
    Спасибо за лекцию!

    • @tilir
      @tilir  Рік тому +3

      Комментарии созданы для комментирования. Для условного отключения коды созданы директивы условного отключения кода. Мы просто используем инструменты по назначению.

  • @АндрейПолетимов

    А как несколько кусков кода не связанных друг с другом убрать из компиляции? #if 0 #endif в нескольких местах компилятору не понравилось.

    • @tilir
      @tilir  Рік тому

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

  • @darkeliphant1843
    @darkeliphant1843 5 місяців тому

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

    • @tilir
      @tilir  5 місяців тому

      Пока что всем доступны. Ссылка в описании. Обратите внимание: http.

  • @fedorbabkin
    @fedorbabkin Рік тому

    Если реализовывать алгоритм Евклида для очень больших чисел, то их сначала надо как-то научиться хранить? А в C это удобно делать?

    • @tilir
      @tilir  Рік тому

      Есть почти стандартные решения, такие как gmp.

  • @1sheix
    @1sheix 8 місяців тому

    не слышно что отвечает зал:(

  • @antonzhurba865
    @antonzhurba865 Рік тому

    На 14 слайде, утверджений a = max(n | (n/x)∧(n/y)) верно ли оно? Мы же ищем наибольший общий целый делитель что делит x и y ( max(n | (x/n)∧(y/n)) ?

    • @tilir
      @tilir  Рік тому

      Запись n \ x читается как "n делит x" и на 14-м слайде max(n | (n\x)∧(n\y)) слеши в другую сторону.

  • @Str3ps1ls
    @Str3ps1ls 8 місяців тому

    увы, но доступ к задачнику отсутствует... по поиску аналогично - nothing found

    • @tilir
      @tilir  8 місяців тому

      У вас в адресной строке https скорее всего. Сделайте http.

    • @Str3ps1ls
      @Str3ps1ls 8 місяців тому

      @@tilir спасибо большое! Все верно, теперь можно и задачи порешать 😏

  • @ДанилаМакляков-м4н
    @ДанилаМакляков-м4н 6 місяців тому

    не подскажите как перейти к контесту, до этого начинал решать, а теперь не могу снова зайти

    • @tilir
      @tilir  6 місяців тому +1

      Есть в описании видео: olymp1.vdi.mipt.ru/

    • @ДанилаМакляков-м4н
      @ДанилаМакляков-м4н 6 місяців тому

      я понял в чем была проблема, переходя по ссылке у меня все равно открывался https, а не http, будьте внимательнее, если у кого то так же

  • @dimon_ksi
    @dimon_ksi Рік тому

    Чему равен iabs() от INT_MIN ?

    • @tilir
      @tilir  Рік тому

      Да я упоминаю несимметриченость int. Но ещё раз -- пока рано обращать на это особое внимание. Мы пока что считаем что int это от -(2^n-1) до (2^n-1). Детали последуют в развитии курса.

  • @bonjovi8610
    @bonjovi8610 4 місяці тому

    Какой уровень, для кого семинар?

    • @cuniapapa5370
      @cuniapapa5370 3 місяці тому

      Написано же: "Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики."

  • @dmitrii-329d
    @dmitrii-329d Рік тому +1

    База

  • @wewsectos
    @wewsectos 8 місяців тому

    Кто-нибудь дайте логин пасс, хочется делать дз(

    • @tilir
      @tilir  8 місяців тому

      Регистрация открытая.

  • @АндрейПолетимов

    А почему просто тупо при поиске НОД сразу не брать числа по модулю, а проверять только на 0? Меньше гимора.

    • @tilir
      @tilir  Рік тому

      Уточните пожалуйста в чём идея?

    • @АндрейПолетимов
      @АндрейПолетимов Рік тому +1

      @@tilir идея в том, что при поиске наибольшего общего искать НОД не для введенных значений, а от их модулей. Ведь для его поиска знак не имеет значение. Останется только проверка на 0, что можно сделать типа if(x==0|y==0) return 1

    • @artemfediai7206
      @artemfediai7206 7 місяців тому

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

  • @DIY_PLC
    @DIY_PLC Рік тому

    uint64_t красивее чем unsigned long long int

    • @tilir
      @tilir  Рік тому

      Пожалуйста не используйте типы с фиксированной длиной без точного обоснования их применения. Есть ситуации когда они нужны, но выбором по умолчанию должны быть обычные типы. Язык задуман и построен вокруг них.

    • @SeregaKai
      @SeregaKai 11 місяців тому

      @@tilir В программирование под микроконтроллеры использование типов фиксированной длины довольно частая практика. Ну и кажется что для переносимости кода это тоже одно из правил.

  • @ВладиславГришин-ш7ш
    @ВладиславГришин-ш7ш 10 місяців тому

    откуда появилось foo ?

  • @linuxgik-ru
    @linuxgik-ru 5 місяців тому

    Прошу, произведите переезд на rutube. Да сдохнет ютуб!!!!!

    • @tilir
      @tilir  5 місяців тому

      Вообще то мой канал есть на рутубе. Увы меня там не смотрят. Тот же самый бакалаврский курс который здесь набирает 100к там набирает типа 200 просмотров всего.