Генератор вещественных чисел C++

228
01 марта 2019, 10:30

Пытаюсь выполнить задание:

Создать вещественный массив и преобразовать его таким образом, чтобы в первой его половине располагались элементы, модуль которых не превышает 1, потом все остальные.

Никак не могу сгенерировать значения - получаются либо меньше единицы, либо больше. Дошло до того, что начал делать "примитивно", как в коде ниже, без подобных конструкций:
(double)(rand()) / RAND_MAX * (max - min) + min
Проблема в том, что массив заполняется теперь 0 или 1, не знаю, что делать с заданием. Прошу вашей помощи.
Код ниже:

#include "stdafx.h"
#include "iostream"
#include "stdlib.h"
#include "time.h"
#include <iomanip>
using namespace std;
int main()
{   
int N;
cout << "Enter matrix size: ";
cin >> N;
double *A = new double[N];
srand((unsigned)time(NULL));
for (int i = 0; i < N; i++) {
    int A2  =  rand() % 100 -50;
    if (A2 / 2 == 0) {
        A[i] = 1.0 + (double)(A2 / 100);
    }
    else {
        A[i] = (double)(A2 / 100);
    }
    cout << setw(2) << A[i];
}
cout << endl;
system("pause");

return 0;
}
Answer 1

Не нужно создавать массив в куче, если потом не удаляете, условие поставлено не верное для инициализации отрезков массива и нужно убрать скобочки вокруг A2 / 100 иначе это целочисленный тип, значение которого равно нулю, так как А2 < 100, а после этого вы преобразуете в тип double...

int N;
cout << "Enter matrix size: ";
cin >> N;    
double A[N];
srand((unsigned)time(NULL));
for (int i = 0; i < N; i++) {
    int A2  =  rand() % 100 -50;
    if (i >= N / 2) {
        A[i] = 1.0 + (double)A2 / 100;
    }
    else {
        A[i] = (double)A2 / 100;
    }
    cout << setw(8) << A[i];
}
cout << endl;
Answer 2

Для ваших целей будет достаточно

rand()*a/RAND_MAX

где a - число типа double, равное там 2 или 3 - словом, чтоб генерировались числа от 0 до a.

Answer 3

Если числа от double a до double b, то

rand()*(b-a)/RAND_MAX+a

Ваша проблема в том, что вы неверно применяетте

(double)(A2 / 100)

так что превращаете в double результат целочисленного деления, а надо

double(A2) / 100

или того проще -

A2 / 100.
READ ALSO
Русский язык в консоли

Русский язык в консоли

Учу C++ по книжке Страуструпа, не выводятся русские символыВот код:

209
Ошибка во время выполнении программы

Ошибка во время выполнении программы

Решаю задачу по информатике :

176
Ошибка run-time check failure #2 Stack around the variable &#39;N&#39; was corrupted

Ошибка run-time check failure #2 Stack around the variable 'N' was corrupted

Программа работает, но в конце выдает эту ошибку:

166
Не знаю как исправить проблему с выходом числа за границы допустимых значений long long

Не знаю как исправить проблему с выходом числа за границы допустимых значений long long

Задача популярнаяПросто нужно сделать бинарное возведение в степень по модулю

275