88. Задача с собеседования

แชร์
ฝัง
  • เผยแพร่เมื่อ 4 ก.พ. 2025

ความคิดเห็น • 25

  • @MikeTroitskiy
    @MikeTroitskiy ปีที่แล้ว +1

    Отличный разбор, спасибо. Предлагаю чаще разбирать подобные задачки

  • @Алексей-и1ф3ь
    @Алексей-и1ф3ь ปีที่แล้ว +3

    Отличное видео, спасибо! Кстати, если при решении подобных задач у испытуемого не возникает затруднений, то его можно попросить оптимизировать свой код. Это может дать дополнительную информацию о нём. Например, в данной задаче первый цикл можно сократить до трёх проходов и убрать "IF", во втором цикле убрать вложенность, а также избавиться от двух массивов и некоторых строк кода:
    IF xDoIt THEN
    sMaskBuffer := sMask;
    dwMask := 0;
    FOR i := 1 TO 3 DO
    iDotPos := FIND(sMaskBuffer, '.');
    dwMask := SHL(dwMask OR TO_DWORD(LEFT(sMaskBuffer, iDotPos - 1)), 8);
    sMaskBuffer := DELETE(sMaskBuffer, iDotPos, 1);
    END_FOR
    dwMask := (dwMask OR TO_DWORD(sMaskBuffer));
    byBitOnMask := 0;
    FOR i := 0 TO 31 DO
    byBitOnMask := byBitOnMask + BOOL_TO_BYTE(dwMask.0);
    dwMask := SHR(dwMask, 1);
    END_FOR
    sCidr := CONCAT(CONCAT(sIp, '/'), TO_STRING(byBitOnMask));
    xDoIt := FALSE;
    END_IF

    • @klm3852
      @klm3852 ปีที่แล้ว

      скажите, как вот эта строка работает?
      dwMask := SHL(dwMask OR TO_DWORD(LEFT(sMaskBuffer, iDotPos - 1)), 8);
      зачем там OR?

  • @АндрейТрепаков-с8н
    @АндрейТрепаков-с8н ปีที่แล้ว +4

    На питоне такую задачу рассматривать не спортивно.
    А вот на ST эта простая вещь превращается в увлекательное приключение ))

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      так и задумано - на контрасте очень интересно посмотреть на решение одной и той же задачи на разных языках. =)
      Плюс можно обсудить концептуальные отличия Python и ST, парадигмы программирования и т.д.

    • @Эрик-щ7н
      @Эрик-щ7н ปีที่แล้ว

      @@CodesysOneLove а в функциональном программировании тоже есть парадигмы, или они только в ООП?

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      @@Эрик-щ7н и то, и то другое - это и есть парадигмы.

    • @Эрик-щ7н
      @Эрик-щ7н ปีที่แล้ว

      @@CodesysOneLove Да? спасибо, не знал
      я думал, что парадигмы - это инкапсуляция, наследование и так далее

  • @СергейБазылев-й4е
    @СергейБазылев-й4е ปีที่แล้ว +1

    В CDS, после заполнения стрингового массива asOctets, как вариант далее - DEC_TO_DWORD, далее BIT_COUNT, далее снова Ваш код. Давать соискантам возможность обнаружить свой кругозор, (на примере того же OSCAT BASIC) - не есть плохо.

  • @АртемИльин-п3с
    @АртемИльин-п3с ปีที่แล้ว

    Как всегда отличное видео!

  • @Xoxlik75
    @Xoxlik75 ปีที่แล้ว +2

    Попробуйте выполнить программму более одного раза. byBitOnMask хорошо бы обнулять не на этапе объявления. Спасибо за ролик.

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      Спасибо, совершенно справедливое замечание.

  • @PsevdonimX
    @PsevdonimX ปีที่แล้ว +3

    Ожидаем 192.168.10/16, а результат 192.16.10/16 - вторые октеты отличаются. В ожидаемом результате опечатка.

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว +2

      да, вы, безусловно, правы. Строго говоря, опечатка в исходном значении sIp - должно быть '192.168.0.10' - это заводской IP-адрес наших контроллеров. Я только к концу видео заметил эту опечатку, к сожалению. =(

  • @VIvend111
    @VIvend111 ปีที่แล้ว

    Здравствуйте. Очень хотелось бы увидеть инструкцию по управлению двигателем с помощью ПЧ AFD-L. Проблема с управлением пуском и остановом. В шаблоне значения состояний имеют тип UINT. Есть блок в библиотеке, который расшифровывает значения UINT. Но блок в проект CFC добавить нельзя. Чтобы отдельными BOOL переменными переключать состояния. С разрешением быть включенной только одному состоянию. Как это реализовать? Спасибо

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว +1

      Добрый день. Не очень понятно, о каком блоке речь. В данном ПЧВ нет командного слова, состоящего из битов (я понимаю, что в других ПЧВ оно часто встречается). Но в AFD-L нужно управлять частотчником отдельныим командами - записывайте ее в канал Команда работы и генерируйте единичный импульс в канале Запись команды работы. Если я не до конца ответил на ваш вопрос - задайте его пожалуйста, на нашем форуме, приложив к вопросу пояснительные скриншоты: owen.ru/forum/showthread.php?t=20069&page=570

  • @triceraptors
    @triceraptors ปีที่แล้ว

    Да задачка увлекательная, подобную недавно решал для связки разномастных контроллеров на одну панель- передать несколько различных параметров в ОДНОМ формате... Который пришлось ещё изобрести🤪
    И маленькая поправка к ( th-cam.com/video/uXga71rTo4M/w-d-xo.html ) В байте принято считать ВОСЕМЬ бит... Застал системы где было и пять бит ...

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      Я понимаю, что вы имеете в виду, но системы, где 1 байт не равен 8 бит в настоящее время интересны только с исторической и "пытливой" точки зрения, как мне кажется (на уровне рассуждений о формальном определении размера CHAR в спецификации ANSI C, макроса CHAR_BIT в limits.h и т. д.).

  • @ДмитрийФримен-щ5т
    @ДмитрийФримен-щ5т ปีที่แล้ว

    Как делается сдвиг выделенных строк в сторону как на 23 минуте 16 сек?

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      Собственно, там сдвига не происходит. Так как к этому моменту строка уже разбита на 4 подстроки - мы просто проходимся по ним в цикле FOR с i от 0 до 3.

    • @ДмитрийФримен-щ5т
      @ДмитрийФримен-щ5т ปีที่แล้ว

      Я имел ввиду в редакторе ST как сдвинуть выделенные строки. А не каждую по отдельности, например TABулировать

    • @CodesysOneLove
      @CodesysOneLove  ปีที่แล้ว

      @@ДмитрийФримен-щ5т а, точно так же - выделить несколько строк и нажать TAB.

    • @ДмитрийФримен-щ5т
      @ДмитрийФримен-щ5т ปีที่แล้ว

      Это так на столько элементарно ))) попробую