Функция 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.