Ответы пользователя по тегу Программирование
  • Как программно подсчитать въехавшие и выехавшие авто?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    OpenCV здесь не очень нужен, это как из пушки по воробьям. Достаточно двух фотобарьеров на въезде (ну или двух камер, если так хочется).

    Если проехал первый барьер, потом второй - +1
    Если проехал второй барьер, потом первый - -1
    Ответ написан
    2 комментария
  • Как начать программировать серьезно?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Скажем так, изучается не язык, изучается технология, что-то вроде "Написание графических приложений на Qt/C++" или "Написание прошивок для микроконтроллеров на С". От самого языка придется знать синтаксис (впрочем, вы и так уже знаете синтаксис в общих чертах) и поведение языка - то есть его стандарт - во что компилятор превращает буковки, что на этом языке писать нельзя и так далее....

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

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

    В качестве первых практических задач можно взять классику программирования - самостоятельно написать реализацию классических алгоритмов и структур данных.

    Далее - разные варианты - можно брать задачи из разных областей (сегодня численно решаем диффуры, завтра - организуем поиск в десяти гигабайтах за секунду, послезавтра - рисуем трехмерки на микроконтроллере) и решать, решать, решать. Это позволит в общих чертах ознакомится с разными направлениями писания программ и выбрать наиболее удобное.

    Я привел вариант "долгий и тернистый путь", есть более короткие, но менее интересные, разумеется.
    Ответ написан
    3 комментария
  • Нужно найти чему равен главный минор квадратной матрицы?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Главный минор - это квадратная подматрица, взятая из левого верхнего угла. Всего главных миноров для квадратной матрицы порядка N N-1 штук - матрицы 1x1 2x2 3x3 4x4 .... N-1xN-1
    Ответ написан
    Комментировать
  • Как найти определитель матрицы методом гаусса по столбцу?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Методом Гаусса можно привести матрицу к треугольному виду, после чего получится, что ее определитель равен произведению элементов главной диагонали.
    Ответ написан
    Комментировать
  • Как можно проверить код на безопасность?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Выкладывать код как-то не хочется, так точно безопасность пострадает.

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

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    1. Счет массивов в С начинается с 0
    2. Инициализация строк сразу после создания бессмысленна, они и так пустые
    3. К главной ошибке вас привел поганый паскальский стиль объявлять одну индексную переменную на все циклы - счетчик должен быть объявлен прямо в операторе for(int j=0....; у вас же j после цикла равна n и таким образом находится за границей массива, отсюда - падение программы.
    4. Еще одно место для падения F >> s; - если строка длиннее 14(!)* символов - будет переполнение
    5. С каких пор поэлементное суммирование стало называться хэшированием? Коллизий будет огромное количество. C++11 например имеет встроенные средства для хэширования. В любом случае, на вход хэширующей функции лучше передавать константную ссылку на std::string а не массив символов


    HNKHENM: если вы заинтересованы в улучшении этого кода:
    • замените массивы на контейнеры (массив символов - на строку, массив строк - на вектор из них);
    • включите С++11, если компилятор не поддерживает, отправьте его на пенсию.
    • перебор символов в строке реализуйте циклом for из стандарта C++11
    • повсеместно используйте auto
    • откажитесь от дурной привычки для итерации сущностей с неотрицательным индексом использовать int, используйте size_t

    ______________________________________________________
    *Не забывайте, что самый последний символ в строке - маркер ее окончания \0
    Ответ написан
  • Один "многофункциональный" метод или несколько?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Первый, потому как ясно написано, какой метод что делает, а не переданный параметр определяет, что методу стоит делать.
    При разборе этого кода придется очень внимательно изучить метод (или документацию к нему), и только потом работать.
    А геттер и сеттер - это очевидные всем программистам методы со знакомым поведением.

    Кроме того, интерпретатор вместо непосредственной работы будет вынужден решать на основе параметров, а что же ему сейчас делать?

    И использовать эту штуку будет неудобно - захотели мы что-то прочитать в непустую переменную, так надо эту переменую сначала обнулить, и только потом вызывать ваш чудо метод. А если мы забыли это сделать? Так метод сделает все наоборот, и испортит данные - получится трудноуловимая ошибка.

    Второе решение - бедокод. Никогда не делайте так.
    Пишите код, исходя из того, что все программисты, которые будут сопровождать вашу программу, — склонные к насилию психопаты, знающие, где вы живёте.
    Мартин Голдинг
    Ответ написан
  • Язык Ассемблер для новичка, что нужно для этого?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Лично я рекомендую три учебника:
    • Юров
    • Калашников
    • Кулаков
    Желательно экспериментировать не на виртуальной машине. Если все же на ней, лучше всего - bochs.
    Обзорная статья
    Ответ написан
  • Как двойной знак равенства влияет на строки в С++?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Тут все плохо:
    1. Длина массива не связана с его содержимым, нужно заменить
      char str[10]="Привет!";
      на
      char str[]="Привет!";
    2. Привязанность к магической константе 10 и лишний счетчик. Измерение длины строки можно сделать вот так:
      size_t len=0;
      for(;str[len];len++);

      после чего в len будет искомая длина строки.
    3. Если необходима защита от строк чрезмерной длины:
      #define MAX_LEN (9000)
      ...
      size_t len=0;
      for(;(str[len])&&(len<MAX_LEN);len++);

    Ответ написан
    Комментировать
  • Как использовать USBasp, как USB-SPI преобразователь?

    gbg
    @gbg Куратор тега Электроника
    Любые ответы на любые вопросы
    В протоколе usbasp есть нужные инструкции:
    #define USBASP_FUNC_TPI_RAWREAD 13
    #define USBASP_FUNC_TPI_RAWWRITE 14

    Драйверы к программатору лежат на гитхабе
    Пример общения с программатором можно посмотреть в исходниках avrdude, в архиве есть файл usbasp.c
    Ответ написан
    Комментировать
  • Почему я получаю 2 лишних нуля?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Два бага сразу:
    Лишняя итерация цикла:
    for(i=0;i<=8;i++){
    i или должна быть <8 или <=7
    Не использован модификатор длины:
    sprintf (ch1, "0x%X", temporary[i]);
    Исправление:
    sprintf (ch1, "0x%2X", temporary[i]);
    Ответ написан
    Комментировать
  • Как лучше хранить введенные данные?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Обычно такой "Мастер" реализуется как окно со вкладками, в котором кнопки Вперед и Назад эти вкладки переключают. То есть данные остаются в тех же контролах, просто вкладка переключается на следующую. А когда надо вернуться - пользователь просто попадает на ту же вкладку и все.
    И никакой сериализации не нужно.
    Ответ написан
  • Совместная работа ардуино и линукс?

    gbg
    @gbg Куратор тега Linux
    Любые ответы на любые вопросы
    Изучайте QT5 и QSerialPort в частности.
    Ответ написан
    Комментировать
  • Вывод информации в консоль, при ожидании ввода с клавиатуры. Возможно?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Этот вопрос обсуждался:
    Как сдвинуть пользовательский ввод в Си (консоль, многопоточность)?
    Как организовать параллельные процессы в С++ ?
    Дополню, что это можно сделать без дополнительного потока, при помощи накладываемых (OVERLAPPED) операций, если речь идет о windows.
    Ответ написан
  • Какие таймеры автоотключения компьютера можете посоветовать (для контроля проводимого за компьютером времени)?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    shutdown -s -t 30
    Выдает предупреждение и вырубает машину через полминуты. Неотменяем.

    Можно поставить в Назначенные задания.
    Ответ написан
  • Как организовать параллельные процессы в С++ ?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Идея состоит в том, чтобы ждать малое время (0.1с), потом проверять наличие символа в буфере клавиатуры, если он есть - стоп, если нет - повторяем цикл.

    #include <conio.h>
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    bool waitKey(const size_t secondsToWait)
    {
        int i=secondsToWait*10;
        for(;(i)&&(!_kbhit());i--)
        {
             Sleep(100);
             if(i%10==0)
             {
                 cout<<i/10<<endl;
             }
        }
        //очистка буфера клавиатуры
        while(_kbhit())
        {
            getch();
        }
        return(i);
    }
    
    int main()
    {
      cout<<"press any key..."<<endl;
      if(waitKey(5))
      {
          cout<<"Countdown was stopped by key" << endl;
      }
      else
      {
          cout<<"Countdown was not stopped"<<endl;
      }
      return 0;
    }
    Ответ написан
    1 комментарий