Как работает строчка кода
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL));
int sign;
unsigned int n, countNeg = 0, countInterv = 0, MAX_a;
double a;
printf("Enter n: ");
scanf("%u", &n);
printf("Enter max a: ");
scanf("%u",&MAX_a);
for (int i = 1; i <= n; i++)
{
sign = rand() % 2;
if(sign == 0)
{
a = (double)rand() / (double)RAND_MAX * (rand() % MAX_a + 1);
if (a >= 1 && a <= 2)
countInterv++;
}
else if(sign == 1)
{
a = ((double)rand() / (double)RAND_MAX * (rand() % MAX_a + 1)) * (-1.0);
countNeg++;
if(a == -0)
a = 0;
}
printf("a%d = %.3lf\n",i,a);
}
printf("Count of negative numbers on interval from A1 to An = %u\n", countNeg);
printf("Count of numbers(A1...An) on interval from 1 to 2 = %u", countInterv);
return 0;
}
Как работает эта строчка кода:
a = ((double)rand() / (double)RAND_MAX * (rand() % MAX_a + 1)) * (-1.0);
Ответы (1 шт):
Автор решения: DmitryK
→ Ссылка
rand() / RAND_MAX - выдает случайное число от 0 до 1 - [0,1] или (1/x)
rand() % MAX_a - это случайное число от 0 до MAX_a - 1
rand() % MAX_a + 1 - это случайное число от 1 до MAX_a - [1,MAX_a]
Дальше [1,MAX_a] умножается на (1/x) и результат делается отрицательным путем умножения на -1.