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

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

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

День добрый, есть вот такая программа, которая вычисляет разность между суммой поддиагональных и наддиагональных элементов матрицы, размер матрицы вводится пользователем, диапазон чисел от A до B также вводится с клавиатуры. Дело в том, что ввод диапазона работает только с целочисленным типом, а мне нужен вещественный, т.е. пользователь, например, водит диапазон от 5,5 до 1,5, и массив заполняется случайными вещественными числами в этом диапазоне. Собственно проблема в функции rand, она работает только с целым типом, а вот реализовать с вещественными не получается. Если кто то поможет, буду очень благодарен. Заранее спасибо
Листинг программы
  1. #include <stdio.h>
  2. #include <process.h>
  3. #include <stdlib.h>
  4. #include <ctime>
  5. #include <conio.h>
  6. #include <math.h>
  7. int main()
  8. {
  9. srand(time(NULL));
  10. // Получаем размер массива
  11. printf("Vvedite razmer matricy:\n");
  12. int N = 0;
  13. if (scanf_s("%i", &N) != 1)
  14. {
  15. printf("ne korrektnye dannye\n");
  16. exit(0);
  17. }
  18. printf("matrica razmera %i * %i\n\n", N, N);
  19. int M = N;
  20. // Получаем диапазон
  21. printf("Vvedite diapazon:\n");
  22. int A = 0, B = 0;
  23. if (scanf_s("%i%i", &A, &B) != 2)
  24. {
  25. printf("ne korrektnye dannye\n");
  26. exit(0);
  27. }
  28. printf("diapazon ot %i do %i\n\n", A, B);
  29. // Создаем массив (матрицу)
  30. int **mass;
  31. // N -количество строк в массиве, M - длина строк в массиве
  32. mass = (int **)malloc(sizeof(int*)*N);// выделяем память для указателя на указатель
  33. for (int i = 0; i < N; i++)
  34. {
  35. mass[i] = (int*)malloc(sizeof(int)*M);// выделяем для каждой строки пмять
  36. }
  37. // Заполняем двумерный массив (матрицу) числами из диапазона
  38. for (int i = 0; i<N; i++)
  39. for (int j = 0; j<N; j++)
  40. {
  41. mass[i][j] = rand() % ((A - 1) - B) + A;
  42. }
  43. int a = 3;
  44. // Выводим массив (матрицу)
  45. for (int i = 0; i < N; i++)
  46. {
  47. printf("( ");
  48. for (int j = 0; j < N; j++)
  49. {
  50. printf("%-4i ", mass[i][j]);
  51. }
  52. printf(")\n");
  53. }
  54. // вычисляем разность суммы поддиагональных элементов и наддиагональных элементов квадратной матрицы
  55. int pod = 0.0, nad = 0.0, raz = 0.0;
  56. int i, j;
  57. for (i = 1;i<N;i++)
  58. {
  59. for (j = 0;j<i;j++)
  60. {
  61. pod = pod + mass[i][j];
  62. }
  63. }
  64.  
  65. for (i = 1;i<N;i++)
  66. {
  67. for (j = 0;j<i;j++)
  68. {
  69. nad = nad + mass[j][i];
  70. }
  71. }
  72. printf("summa pod glovnoi diagonaliu = %i\n", pod);
  73. printf("summa nad glovnoi diagonaliu = %i\n", nad);
  74. raz = abs(pod - nad);
  75. printf("raznost' = %i\n", raz);
  76. // Освобождение памяти
  77. for (int i = 0; i < N; i++)
  78. {
  79. free(mass[i]);
  80. }
  81. free(mass);
  82. _getch();
  83. return 0;
  84. }
Вот сама функция rand, которая генерирует случайные целые числа и которую нужно переделать
Листинг программы
  1. for (int i = 0; i<N; i++)
  2. for (int j = 0; j<N; j++)
  3. {
  4. mass[i][j] = rand() % ((A - 1) - B) + A;
  5. }

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

textual
Листинг программы
  1. double A, B, **mass;
  2.   // соответственно, меняется ввод и выделение памяти для mass
  3. double r = rand() % 1000;
  4. r *= 0.001;  
  5. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы