Вопрос по уроку 16

В этой теме 2 ответа, 2 участника, последнее обновление Павел Букреев Павел Букреев 10 мес. назад.

Просмотр 3 сообщений - с 1 по 3 (из 3 всего)
  • Автор
    Сообщения
  • #2864
    Alex
    Alex
    Участник
    Сообщений:41

    Зарегистрирован:
    19.01.2016

    Репутация:19

    Добрый день, я еще новичок в программировании поэтому не всегда все сразу понимаю

    Который день не могу понять, саму формулу в функции :

    void randomMapGenerate(){//рандомно расставляем камни

    int randomElementX = 0;//случайный элемент по горизонтали
    int randomElementY = 0;//случ эл-т по вертикали
    srand(time(0));//рандом
    int countStone = 2;//количество камней

    while (countStone>0){
    randomElementX = 1 + rand() % (WIDTH_MAP – 1);//рандомное по иксу от 1 до ширина карты-1, чтобы не получать числа бордюра карты
    randomElementY = 1 + rand() % (HEIGHT_MAP – 1);//по игреку так же

    if (TileMap[randomElementY][randomElementX] == ‘ ‘) {//если встретили символ пробел,
    TileMap[randomElementY][randomElementX] = ‘s'; //то ставим туда камень.
    //std::cout << “coordinate of Stone X:” << randomElementX << “\n” << “coordinate of Stone Y:” << randomElementY << “\n\n”;
    countStone–;
    }
    }
    }

    вот это место randomElementX = 1 + rand() % (WIDTH_MAP – 1);, алгоритм я понял из урока и что число генерируется от и до,

    не понятно следующие: randomElementX мы присваиваем остаток от деления 1 + rand() на (WIDTH_MAP – 1) ? или % = здесь выполняет другую функцию?

    #2865
    +1
    Alex
    Alex
    Участник
    Сообщений:41

    Зарегистрирован:
    19.01.2016

    Репутация:19

    Все разобрался, получается строка randomElementX = 1 + rand() % (WIDTH_MAP – 1); работает так :

    rand() генерирует число и далее вычисляется остаток от деления нa (WIDTH_MAP – 1). это могут быть числа только oт 1 до (WIDTH_MAP – 1) то есть 39, так как WIDTH_MAP = 40 . Например генерируется 40,прибавляется 1 = 41, остаток от деления нa 39 будет равен 2 , если генерируется число меньше 39,
    например 38+1 =39 разделим на 39 в остатке получим 0.Если число больше 39 и при этом кратно 39
    например 77 +1 =78 разделим на 39 в остатке так же получим 0.

    #2866
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:584

    Зарегистрирован:
    04.01.2015

    Репутация:103

    зачёт)

Просмотр 3 сообщений - с 1 по 3 (из 3 всего)

Для ответа в этой теме необходимо авторизоваться.