decimal r_rand(const decimal& min,const decimal& max) { #ifdef USE_CGAL CGAL::Gmpfr m; mpfr_urandom(m.fr(),state,MPFR_RNDN); return r_round_preference((min>max)?decimal(m)*(min-max)+max:decimal(m)*(max-min)+min,true); #else return (min>max)?r_rand()*(min-max)+max:r_rand()*(max-min)+min; #endif }
Value* RandFunction::evaluate(const Context& ctx) const { decimal min=0; auto* minVal=dynamic_cast<NumberValue*>(getParameterArgument(ctx,0)); if(minVal) min=minVal->getNumber(); decimal max=0; auto* maxVal=dynamic_cast<NumberValue*>(getParameterArgument(ctx,1)); if(maxVal) max=maxVal->getNumber(); int count=1; auto* countVal=dynamic_cast<NumberValue*>(getParameterArgument(ctx,2)); if(countVal) count=countVal->toInteger(); auto* seedVal=dynamic_cast<NumberValue*>(getParameterArgument(ctx,3)); int seed=time(nullptr); if(seedVal) seed=seedVal->toInteger(); r_rand_seed(seed); QList<Value*> results; for(auto i=0; i<count; ++i) results.append(new NumberValue(r_rand(min,max))); return new VectorValue(results); }
int main (void) { int Vect[ARRAY_SIZE], i, lastVal = 11, currSequStart = -1, maxSequence[2] = { 0, 0 }; /* { NbRepetition, Start } */ srand(time(NULL)); printf("Vecteur :\n"); for (i = 0; i < ARRAY_SIZE; i++) { Vect[i] = r_rand(0, 10); printf("%d\t", Vect[i]); if (lastVal >= Vect[i]) /* RàZ */ { currSequStart = i; } lastVal = Vect[i]; if (maxSequence[0] < (i - currSequStart) + 1) { maxSequence[0] = (i - currSequStart) + 1; maxSequence[1] = currSequStart; } } printf("\n"); printf("La plus longue sequence en ordre croissant est " "de %d et commence a l'index %d\n", maxSequence[0], maxSequence[1]); for (i = maxSequence[1]; i < maxSequence[1] + maxSequence[0]; i++) { printf("%d\t", Vect[i]); } printf("\n"); }