Функция 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д