/** * Returns a Pascal distributed non-negative integer. * NOTE: use n > 0 and 0.0 < p < 1.0 */ Rand::intType Rand::pascal(intType n, floatType p){ intType i, x = 0; for (i = 0; i < n; ++i) x += geometric(p); return x; }
int * find_sequences(int *arr, int len) { int *res; int i = 0, d1, d2, diff,k=0,r=0; res = (int *)malloc(6 * sizeof(int)); /*for (i = 1; i < len; i++) { //d1 = arr[len] - arr[len - 1]; if (arr[i] - arr[i - 1] == arr[i + 1] - arr[i]) { diff = arr[i] - arr[i - 1]; //as(arr, len); } break; }*/ if (len < 0 || arr == '\0') return NULL; else { while (i < 4) { if (arr[k + 1] - arr[k] == arr[k + 2] - arr[k + 1]) { res[r] = k; r++; diff = arr[k + 1] - arr[k]; k = arithmetic(k, diff, arr, len); res[r] = k; r++; } else if (((float)arr[k + 1] / (float)arr[k]) == ((float)arr[k + 2] / (float)arr[k + 1])) { res[4] = k; diff = arr[k + 1] / arr[k]; k = geometric(k, diff, arr, len); res[5] = k; } i++; } } return res; //Return final array which has 6indexes [AP1_S,AP1_E,AP2_S,AP2_E,GP1_S,GP2_E] return NULL; }
T& Random< T, G, I, F >::geometric(T &t, F p) { return const_cast< T& >(geometric(const_cast< const T& >(t), p)); }