Я пытаюсь разработать симуляцию случайного блуждания в одном измерении. Я моделирую частицу вдоль линии с 10 дискретными позициями, которые может занимать частица. Частица может перемещаться только влево или вправо на одну позицию каждый раз, когда она «прыгает». В этой симуляции я получаю код для учета 20 прыжков. Генератор случайных чисел выдает 0 — слева и 1 — справа перед выполнением каждого «прыжка», чтобы указать «частице» двигаться влево или вправо. Пожалуйста, смотрите код ниже и дополнительные комментарии.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int randomInt( int max); // declaration of function //
int main()
{ // declaration of variables //
int i, j = 0;
int totalHops=20;
int seed;
int sites[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *location;
location = &sites[j];
seed = time(NULL);
printf("The seed value for this 'random walk' is: %d.\n\n", seed); //keeping track of the seed used//
// setup the random number generator //
srandom(seed); // random path sequence //
printf("Initial location of the particle is at site %d.\n\n", *location);
for ( i=1; i<totalHops+1; i++ )
{
int direction = randomInt(2); // Two possible directions for particle to move, 0 = left, 1 = right //
if (direction == 1) {
location+= 1; // pointer moves right one space on array //
}
else {
location-= 1; // pointer moves left one space on array //
}
printf("After %2.d hop(s), the particle is at site %d.\n", i, (*location)%10); // I would prefer to be printing the entry of my array rather than relying on the fact the array is lablled with each entry the positon I have changed the pointer to //
}
printf("\n");
}
// function definition //
int randomInt(int max)
{
return (random() % max);
}
Мой вывод не каждый раз следует шаблонам, которые я ожидаю. Получается, что частица находится в положении 0 на одной итерации, а на следующей внезапно оказывается в положении 4, например. Я бы предпочел, чтобы я печатал запись массива сайтов [] вместо того, чтобы вводить позицию в каждую запись и печатать значение указателя.
Я был бы очень благодарен за любую помощь здесь. Я новичок в указателях, поэтому любая помощь будет высоко оценена.
time()
—time_t
. Вашint
может быть слишком маленьким. Это также означает: включите предупреждения вашего компилятора! - person Paul Ogilvie   schedule 13.04.2020