Функция Rand с вещественными числами - C (СИ)

Узнай цену своей работы

Формулировка задачи:

День добрый, есть вот такая программа, которая вычисляет разность между суммой поддиагональных и наддиагональных элементов матрицы, размер матрицы вводится пользователем, диапазон чисел от A до B также вводится с клавиатуры. Дело в том, что ввод диапазона работает только с целочисленным типом, а мне нужен вещественный, т.е. пользователь, например, водит диапазон от 5,5 до 1,5, и массив заполняется случайными вещественными числами в этом диапазоне. Собственно проблема в функции rand, она работает только с целым типом, а вот реализовать с вещественными не получается. Если кто то поможет, буду очень благодарен. Заранее спасибо
#include <stdio.h> 
#include <process.h> 
#include <stdlib.h> 
#include <ctime> 
#include <conio.h> 
#include <math.h>
 
int main()
{
    srand(time(NULL));
 
    // Получаем размер массива 
    printf("Vvedite razmer matricy:\n");
    int N = 0;
    if (scanf_s("%i", &N) != 1)
    {
        printf("ne korrektnye dannye\n");
        exit(0);
    }
    printf("matrica razmera %i * %i\n\n", N, N);
    int M = N;
 
    // Получаем диапазон 
    printf("Vvedite diapazon:\n");
    int A = 0, B = 0;
    if (scanf_s("%i%i", &A, &B) != 2)
    {
        printf("ne korrektnye dannye\n");
        exit(0);
    }
    printf("diapazon ot %i do %i\n\n", A, B);
 
    // Создаем массив (матрицу) 
    int **mass;
    // N -количество строк в массиве, M - длина строк в массиве 
    mass = (int **)malloc(sizeof(int*)*N);// выделяем память для указателя на указатель 
    for (int i = 0; i < N; i++)
    {
        mass[i] = (int*)malloc(sizeof(int)*M);// выделяем для каждой строки пмять 
    }
 
    // Заполняем двумерный массив (матрицу) числами из диапазона 
    for (int i = 0; i<N; i++)
        for (int j = 0; j<N; j++)
        {
            mass[i][j] = rand() % ((A - 1) - B) + A;
        }
    int a = 3;
 
    // Выводим массив (матрицу) 
    for (int i = 0; i < N; i++)
    {
        printf("( ");
        for (int j = 0; j < N; j++)
        {
            printf("%-4i ", mass[i][j]);
        }
        printf(")\n");
    }
 
    // вычисляем разность суммы поддиагональных элементов и наддиагональных элементов квадратной матрицы
    int pod = 0.0, nad = 0.0, raz = 0.0;
    int i, j;
 
    for (i = 1;i<N;i++)
    {
        for (j = 0;j<i;j++)
        {
            pod = pod + mass[i][j];
        }
    }

    for (i = 1;i<N;i++)
    {
        for (j = 0;j<i;j++)
        {
            nad = nad + mass[j][i];
        }
    }
    printf("summa pod glovnoi diagonaliu = %i\n", pod);
    printf("summa nad glovnoi diagonaliu = %i\n", nad);
    raz = abs(pod - nad);
    printf("raznost' = %i\n", raz);
 
    // Освобождение памяти 
    for (int i = 0; i < N; i++)
    {
        free(mass[i]);
    }
    free(mass);
    _getch();
    return 0;
}
Вот сама функция rand, которая генерирует случайные целые числа и которую нужно переделать
    for (int i = 0; i<N; i++)
        for (int j = 0; j<N; j++)
        {
            mass[i][j] = rand() % ((A - 1) - B) + A;
        }

Решение задачи: «Функция Rand с вещественными числами»

textual
Листинг программы
double A, B, **mass;
  // соответственно, меняется ввод и выделение памяти для mass
double r = rand() % 1000;
r *= 0.001;  
mass[i][j] = A + (B-A)*r;

Объяснение кода листинга программы

  1. Объявляются три переменные типа double: A, B, **mass.
  2. **mass инициализируется с помощью функции malloc.
  3. Задается значение переменной r с помощью функции rand().
  4. Значение переменной r умножается на 0.001.
  5. Значение переменной r используется для вычисления значения переменной mass[i][j].
  6. Значение переменной mass[i][j] вычисляется как сумма переменных A и (B-A)*r.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.3 из 5
Похожие ответы