• Возможно ли избежать ошибку чтения в массиве если алгоритм задействует ячейку которой нет?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Для игры "жизнь" есть несколько вариантов:
    1) Увеличить поле на 2 клетки по каждому измерению, поле будет храниться с 1, а индексы 0 и n+1 - всегда будут пустыми. Потребление памяти это почти не увеличит, а код упростит.
    2) Если соседние клетки считаются циклами, то можно границы области 3x3 пересечь с полем:
    for (int nx = max(0, x-1); nx < min(x+2, n); ++nx) {
      for (int ny = max(0, y-1); ny < min(y+2, n); ++ny) {
        if (nx == x && ny == y) continue;
        // {nx, ny} - сосед в поле, обрабатываем его.
      }
    }

    Можно код чуть ускорить, предподсчитав границы.
    3) Более читаемый, но чуть более медленный метод - явно проверять, а не за границей ли соседняя клетка:
    for (int nx = x-1; nx <= x+1; ++nx) {
      for (int ny = y-1; ny <= y+1; ++ny) {
        if ((nx == x && ny == y) || nx < 0 || ny < 0 || nx >= n || ny >= n) continue;
        // {nx, ny} - соседняя клетка.
      }
    }


    Я бы просто раздул поле - так код сильно проще.

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

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Граничные значения обрабатывать особенным образом:
    - Если это первая и последняя строка, то не берем в учет верхнюю или нижнюю строки соответственно
    - Если это самый левый или правый столбец, то не берем в учет левый или правый (относительно текущего) столбец соответственно

    Т.е. в каждый цикл дополнительно вставляются окаймляющие участки (для этих случаев)
    Ответ написан
    Комментировать
  • Какой хостинг выбрать для ТГ бота на .Net?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Боты используют лонг-поллинг, поэтому DNS имя покупать/арендовать не надо, ровно как и платить за HTTP траффик приходящий (запросы). P.S. если ты на кол-беках делаешь, то надо.

    В данном случае подойдет любой хостинг, который поддерживает контейнеры.
    Такими могут служить:
    - Яндекс.Облако
    - Selectel
    - Hostinger
    - Digital Ocean

    и т.д. Просто вбиваешь - хостинг докер контейнеров.

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

    Лично я пользовался яндекс облаком - разворачивал полноценный Backend-Frontend на докеркомпозе. При регистрации дают бесплатные деньги (около 3тыс.)
    Ответ написан
    5 комментариев
  • Почему не выводит остальные элементы при работе со списком в C++?

    Adamos
    @Adamos
    // создание ещё пяти

    Один поверх другого ( original->next = newNote; ) вместо записи каждого из них после предыдущего.

    while (tempNote->next != NULL) {

    Исключает последний элемент (у него уже нет следующего), а в списке всего два элемента (см. выше).
    Ответ написан
    1 комментарий
  • Не могу решать задачи по программированию?

    rqdkmndh
    @rqdkmndh
    Web-разработчик
    но когда доходит до задач, у меня появляются проблемы

    Просто, наверное никто не сказал вам, что правильная постановка задачи - это уже половина решения. Помню физичка, на меня дико орала в школе, когда я на доске сразу начинал писать решение - она требовала, чтобы сначала я писал секцию: 'Дано:'. Потом, я понял насколько это было важным. Перед решением любой задачи, сначала необходимо осмыслить все исходные данные и четко прописать их. Почему, это нужно делать? - потому что некоторые важные условия могут быть заданы неявно и ускользать от внимания. К примеру, в условиях пишут: 'машина начала двигаться и достигла скорости 70км/ч' - если вы просто прочитаете это, то в голове у вас будет вертеться только одна цифра (скорость 70). Но если обратить внимание на фразу начала двигаться - можно записать что начальная скорость была 0. И уже имеем: v0 = 0км/ч, v1 = 70км/ч После того как все исходные данные выписаны и установлены - остается протоптать из них дорожку к результату - это и будет решение, которое обычно само напрашивается при таком подходе.
    Ответ написан
    3 комментария
  • Можно ли запустить программу на языке C в операционной системе FreeDOS или MSDOS?

    Нужно компилировать под DOS, а ты скомпилировал под Windows.
    Каждая программа на Windows содержит в себе маленькую программу для DOS, которая выводит такое сообщение.

    Скорее всего - тебе понадобится компилятор и среда разработки примерно из тех же годов, что и DOS
    Ответ написан
    3 комментария
  • Можно ли запустить программу на языке C в операционной системе FreeDOS или MSDOS?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я думаю можно. Поищи такие компилляторы как Watcom C, Borland C.
    Они умеют генерить код для DOS. На ваткоме кажется была написана
    игра Doom for DOS.

    UPD +Линка www.openwatcom.org
    Ответ написан
    Комментировать