Генератор случайных чисел в диапазоне от 0 до 1 (не целых) - C (СИ)

  1. Здравствуйте! Помогите пожалуйста. Вроде весь форум просмотрела,но ответа не нашла. Мне нужно сгенерировать случайное число в диапазоне от 0 до 1. У меня все время выдает 0 или 1.C1 2 3 4 5 6 7 8 9 10 11 #include <stdio.h> #include <stdlib.h> #include <time.h>   int main(void) { float r;     srand(time(NULL));     r=0+rand()%2;     printf("%f", r); }А если тип поставить double, то вообще одни нули выводит. Подскажите пожалуйста, что делаю не так и как правильно. Заранее благодарю!


textual

Код к задаче: «Генератор случайных чисел в диапазоне от 0 до 1 (не целых) - C (СИ)»

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
#define rand01() ( fabs(sin(rand())) )
 
int main(void) {
    int i;
    
    srand(time(NULL));
    
    for ( i = 0; i < 10; ++i )
        printf("%f\n", rand01());
    
    return 0;
}

СДЕЛАЙТЕ РЕПОСТ

11   голосов, оценка 4.364 из 5



Похожие ответы
  1. Равномерный код-это когда мы используем рандом? Можно ли назвать это равномерным распределением от 0 до 1:int C1 2 3 4 5 6 fun() {     static unsigned int num = 0;     num++;     return num % 2; }

  1. По лабе задали написать программу которая выводит магический квадрат со стороной n, заполненный числами 1..n^2. Подкиньте идею как сгенерировать магический квадрат.Добавлено через 2 минуты Условие 1..n^2 не обязательно.Добавлено через 6 минут Первая моя идея, это создание квадрата с элементами 1..n(каждое число встречается n раз). Идея решения такова: посимвольно заполняем матрицу элементами, которых еще не было в этом столбце, строке, если это диагональный элемент, то и на диагоналях. Эта идея потерпела крах, в плане реализации(есть некоторые ошибки, которые найти не могу), в плане правильности самого алгоритма(как оказалось, построить магический квадрат из чисел 1..n нельзя). Вот руины моих мыслей:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 #include #include #include #include #include #include   void init(int *boo[], int **a[], int n, int x, int y) {     int i, j;       for(i = 0; i < n; i++) (*boo)[i] = 0;     for(i = 0; i < n; i++)         if ((*a)[x][i] != 0) (*boo)[(*a)[x][i] - 1] = 1;     for(i = 0; i < n; i++)         if ((*a)[i][y] != 0) (*boo)[(*a)[i][y] - 1] = 1;     if (x == y)         for(i = 0; i < n; i++)             if ((*a)[i][i] != 0) (*boo)[(*a)[i][i]- 1] = 1;     if (x + y - 1 == n)         for(i = 0; i < n; i++)             if ((*a)[n - i - 1][i] != 0) (*boo)[(*a)[n - i - 1][i] - 1] = 1; }   void create(int **a[], const int n) {     int i, j, k, l, num, *boo;       boo = (int *)malloc(n * sizeof(int));     *a = (int *)malloc(n * sizeof(int));     for(i = 0; i < n; i++)     {         (*a)[i] = (int *)malloc(n * sizeof(int));     }     for(i = 0; i < n; i++)         for(j = 0; j < n; j++)             (*a)[i][j] = 0;       srand(time(NULL));     for(i = 0; i < n; i++)         for(j = 0; j < n; j++)         {             num = rand() % (n - j);             init(&boo, a, n, i, j);             k = -1; l = 0;             while (k != num) if (!boo[l++]) k++;             (*a)[i][j] = l;         }     free(boo); }   void printArr(const int *a[], const int n) {     int i, j, nn;     char *s;       nn = n * 4 + 1;     s = (char*)malloc(nn * sizeof(char));     strcpy(s, "");     for(i = 0; i < nn; i++) strcat(s, "-");     if (n == 0) printf("Пусто...");     for(i = 0; i < n; i++)     {         printf("%s\n|", s);         for(j = 0; j < n; j++)         {            printf("%3d|", a[i][j]);         }         printf("\n");     }     printf("%s", s);     free(s);     printf("\n\n"); }   int main() {     setlocale(LC_ALL, "Russian");     int **a, n;     printf("Какого размера магический квадрат?\n");     scanf("%d", &n);     create(&a, n);     printf("Сформирован магический квадрат из %d элементов:\n\n", n * n);     printArr(a, n);     free(a);     return 0; }Добавлено через 3 минуты Вторая идея обратиться к википедии, вдруг есть готовое решение моей проблемы. Но и тут не все хорошо, алгоритм построения зависит от конкретного числа n, а это не то, к чему я стремлюсь.Добавлено через 5 минут Я довольно сильно нагрел стул, пытаясь придумать решение, и теперь мысль о заполнении всей матрицы числом n возникает все чаще. Подробная формулировка задачи: 'Написать программу, генерирующую магические квадраты заданного пользователем размера.'

  1. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include int maxint,b,a,i,j,k; maxint = 32767; b=62; a=0; int i; int p; char u[10]; int main() {     printf ("Генератор паролей");     char gen[64] = {'A','E','I','J','O','U','B','C','D','F','G','H','K','L','M','N','P','Q','R','S','T','V','W','X','Y','Z','a','e','i','j','o','u','b','c','d','f','g','h','k','l','m','n','p','q','r','s','t','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0'};     for (i=1;i=10;i++) {         for (j=0;j=7;i++) {             p = (rand() / (maxint/ (b-a) )) + a;             strcpy(u[j], gen[p]);         }         printf ("Password:");         for (k=0;k=7;k++) {             printf ("%s",u[k]);         }         printf ("\n");     } }сделал вот такой простенький генератор паролей, но как всегда не работает он, может кто подсказать в чем проблема(опять наверное в чтонибудь простом )

  1. Написать программу: чтобы она выводила 50 случайных чисел в диапозпоне от 0 до 99

  1. Написать генератор псевдослучайных чисел по алгоритму f(n) = f(n-1) + f(n-2) + f(n-3) mod 239; f(0) = f(1) = f(2) = 30. Подсчитать частоту каждого числа при выборке 100000.

  1. Числа m, n и k (3≤ k  10) вводятся с клавиатуры. Сгенерировать и вывести на экран m целых случайных чисел из промежутка, указанном в пункте а, и n действительных чисел (выводить на экран с указанной точностью) из промежутка, указанном в пункте b. Вывод на экран осуществлять по k чисел в строке. a [-11, 111] b [ 2, 6 ] с точностью до тысячных

  1. Составить одномерный массив. В заданиях необходимо заполнить элементы массивов, используя генератор случайных чисел.

  1. Доброго времени суток ув. форумчане. Не могу въехать как написать эту задачу: Задана последовательность значений элементов некоторого массива до и после преобразования по некоторому правилу. Определите алгоритм преобразования и напишите программу, которая: 1) формирует массив из заданного количества случайных целых чисел в заданном диапазоне и выводит элементы массива на экран; 2) по определенному вами алгоритму преобразовывает этот массив и выводит на экран элементы преобразованного массива. 3) производит заданные вычисления (рекомендуется оформить в виде отдельной функции) и выводит результат на экран. Массив K = (5, –5, 4, 9, –7, –11, 0) преобразован к виду K = (0, 1, 0, 0, –1, –5, 0). Размер массива K - 21 элемент из диапазона [–56,56]. Вычислить сумму тех элементов преобразованного массива, которые находятся в диапазоне [–1, 16]. Просто не понимаю куда и что, читаю статьи про массивы как об стенку горох.. буду признателен за подсказки и помощь в написании. Для начала как сформировать массив из заданного диапазона, в условии не понимаю по какому алгоритму преобразоваться массив и как это отобразить в программном коде. Добавлено через 39 минут Вот что то нашел похожее на мое задание и постарался адаптировать под себя.. ок допустим, верно адаптировал кхе кхе.. или все же чего то не хватает Кликните здесь для просмотра всего текста C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #include "stdafx.h" #include "stdio.h" #include "math.h" #include "iostream" #include "time.h" #include "stdlib.h"   const int N = 21; int random(int N) { return rand() % N; }   int _tmain(int argc, _TCHAR* argv[]) {     system("CLS");     int i, A[N], a = -56, b = 56, sum;     for (i = 0; i < N; i++)         A[i] = random(b - a + 1) + a;     printf("\nmassiv1\n");     for (i = 0; i < N; i++)         printf("%4d", A[i]);     printf("\nmassiv2\n");     for (i = 0; i < N; i++)     {         if (A[i]<0) A[i] = 0;     }     A[i] = random(b - a + 1) + a;     for (i = 0; i < N; i++)         printf("%4d", A[i]);     printf("\nsum\n");       printf("%4d", A[i]);     for (i = 0; i < N; i++)         sum = 0;     for (i = 0; i-16 && A[i]<6)         sum += A[i];     }     printf("%4d", sum);     system("PAUSE");     return 0; }

  1. Программа, выводит пример на умножение двух случайных однозначных чисел, запрашивает ответ пользователя и проверяет его. В результате программа должна вывести сообщения "Правильно!" или "Вы ошиблись". Помогите, мне найти ошибку, дело в том, что моя программа не всегда выводит верный результат. То есть она может вывести сообщение "правильно" , хотя должна вывести сообщение ""вы ошиблись" .C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include #include #include int main() { int num1, num2, c, d; clrscr(); randomize(); num1 = random(10); num2 = random(10); printf("‘Сколько будет: %d", num1); printf("x"); printf("%d? ", num2 ); scanf("%d", &c); d = num1 * num2; if (c=d) { printf ("Правильно!"); } else { printf ("Вы ошиблись"); } getchar(); getchar(); }

  1. У меня есть например 50 кнопок как сделать так чтоб каждая кнопка имела свой номер. но он должен каждый раз меняться и не должен повторяться! А числа которые нужно отгадать нужно будет вписать в специальную ячейку. 10 попыток и 10 ячеек