Мне было поручено создать очень простую программу случайного блуждания для класса C ++. Я написал это и был уверен, что все было правильно, но я получаю эту странную ошибку. От 0 до 10 шаги выстраиваются в линию, хотя координаты показывают, что они чередуются влево и вправо.
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int steps,i,pos=10;
srand(13699);
cout << "Please enter the amount of steps to be taken: ";
cin >> steps;
cout << endl;
for (i=0;i<=steps;i++)
{
if (rand()%2)
pos+=1;
else
pos-=1;
cout << i << ": " << pos-10 << ": " << setw(pos) << "*" << endl;
}
} // main
Совершенно очевидно, что здесь есть какая-то закономерность, но я не могу понять, насколько я понимаю … Вот ссылка на скриншот с выводом, если это поможет. http://i.stack.imgur.com/USx4U.png Спасибо за любую помощь, которую вы можете оказать!
Ответ не в коде, а в вашей интерпретации результатов.
Если значение pos-10 меньше 0, то область, в которой вы печатаете это значение, длиннее (из-за знака минус), тогда ваш «ходок» смещается вправо на позицию в выводе.
Аналогичная причина, когда она идет от 9 до 10, это не правильно.
Подумайте о том, что означает, что двоеточия слева расположены не по прямой линии.
«Выстраивание» для i
между 1 и 10 имеет смысл.
Возьмите первые две строки, например:
i == 1
, у тебя есть pos == 10
и *
печатается через 10 пробелов после :
,i == 2
, у тебя есть pos == 9
и *
печатается через 9 пробелов после :
,Но потому что вы печатаете 0
(один символ) в первой строке и -1
(два символа) во второй строке *
в конечном итоге на том же месте в каждой строке.
Кстати, вы используете одно и то же значение (13699) для заполнения RNG при каждом запуске вашей программы.
Попробуйте использовать более «случайное» значение, например, основанное на времени:
srand((unsigned int)time(NULL));
Вам нужно будет #include <time.h>
в вашем исходном файле.