Функция Rand с вещественными числами - C (СИ)
Формулировка задачи:
День добрый, есть вот такая программа, которая вычисляет разность между суммой поддиагональных и наддиагональных элементов матрицы, размер матрицы вводится пользователем, диапазон чисел от A до B также вводится с клавиатуры. Дело в том, что ввод диапазона работает только с целочисленным типом, а мне нужен вещественный, т.е. пользователь, например, водит диапазон от 5,5 до 1,5, и массив заполняется случайными вещественными числами в этом диапазоне. Собственно проблема в функции rand, она работает только с целым типом, а вот реализовать с вещественными не получается. Если кто то поможет, буду очень благодарен. Заранее спасибо
Вот сама функция 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;
- }
Листинг программы
- 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;
Объяснение кода листинга программы
- Объявляются три переменные типа double: A, B, **mass.
- **mass инициализируется с помощью функции malloc.
- Задается значение переменной r с помощью функции rand().
- Значение переменной r умножается на 0.001.
- Значение переменной r используется для вычисления значения переменной mass[i][j].
- Значение переменной mass[i][j] вычисляется как сумма переменных A и (B-A)*r.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д