Затруднение с реализация алгоритма рандомизации значения точек
У меня вопрос следующего порядка. Есть программа в одном .cpp, с главной функцией, остальными функциями. Есть очень важный, предопределяемый вне тела каждой из функций, "параметр", а именно, массив координат пяти точек. Нужно сделать так, чтоб их значения менялись в зависимости от rand коэффициента (от тех значений, которые приведены в коде). Я пытался и через объявление srand time null в int main + непосредственно после инклюдов рассчитать этот коэфф в определенном целочисленном диапазоне, однако он никоим образом (что очевидно), не изменялся. Инициализацию массива точек в тело главной функции green_poly_points кидал - однако тогда вся программа ничего не видит (необъявленные идентификаторы). Как мне решить данную проблему?
//
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <time.h>
using namespace std;
int koeff = 1 + rand() % 4 ;
double xx1 = koeff*45-35;
double xx2 = koeff*50-35;
double xx3 = koeff*30-25;
double xx4 = koeff*15-10;
double xx5 = koeff*10-5;
double yy1 = koeff*45-15;
double yy2 = koeff*28-18;
double yy3 = koeff*35-10;
double yy4 = koeff*25-10;
double yy5 = koeff*50-25;
int green_poly_points [20][2] = {{xx1,yy1}, {xx2,yy2},
{xx3,yy3}, {xx4,yy4},
{xx5,yy5}};
--///функции разнообразной обработки значений точек
int main(int argc,char *argv[])
{
srand(time(0));
}
Ответы (1 шт):
Прежде всего, в Си (вопрос помечен меткой c )
эта программа компилироваться не будет.
Предполагаю, что вы используете С++ компилятор.
В таком случае, все действия по инициализации переменных вне функций выполняется перед вызовом main().
Поэтому вызов srand() внутри main() не влияет на число, возвращаемое rand() при инициализации koeff.
Перенесите всю вашу инициализацию в функцию, (например, init_data()), которую вызывайте из main() после вызова srand().
UPDATE 1
#include <cstdlib>
#include <iostream>
#include <time.h>
using namespace std;
int koeff;
double xx1, xx2, xx3, xx4, xx5,
yy1, yy2, yy3, yy4, yy5;
int green_poly_points [20][2];
void init_data ()
{
koeff = 1 + rand() % 4 ;
xx1 = koeff*45-35;
xx2 = koeff*50-35;
xx3 = koeff*30-25;
xx4 = koeff*15-10;
xx5 = koeff*10-5;
yy1 = koeff*45-15;
yy2 = koeff*28-18;
yy3 = koeff*35-10;
yy4 = koeff*25-10;
yy5 = koeff*50-25;
green_poly_points[0][0] = xx1; green_poly_points[0][1] = yy1;
green_poly_points[1][0] = xx2; green_poly_points[1][1] = yy2;
green_poly_points[2][0] = xx3; green_poly_points[2][1] = yy3;
green_poly_points[3][0] = xx1; green_poly_points[3][1] = yy4;
green_poly_points[4][0] = xx5; green_poly_points[4][1] = yy5;
}
///функции разнообразной обработки значений точек
int
main(int argc,char *argv[])
{
srand(time(0));
init_data();
cout << green_poly_points[0][0] << " "
<< green_poly_points[0][1] << " "
<< green_poly_points[1][0] << " "
<< green_poly_points[1][1]
<< '\n';
}
Проще сразу показать работающий вариант.
avp@avp-desktop:~/avp/hashcode$ g++ txx.cpp
avp@avp-desktop:~/avp/hashcode$ ./a.out
55 75 65 38
avp@avp-desktop:~/avp/hashcode$ ./a.out
10 30 15 10
avp@avp-desktop:~/avp/hashcode$
С примером компиляции и двумя запусками, демонстрирующими работу srand()