Q: Наличие/отсутствие cout меняет результаты вычислений программы Нужна помощь, я не очень силен в программировании, а тут в программе какая то совсем чертовщина творится. 
Проблема возникает в функции main (она в самом конце программы). В ней есть два цикла - в первом массив Weights инициализируется случайными числами от -5 до 5, во втором цикле значения этого массива присваиваются массиву Pweights, и выполняются некоторые другие действия. Очевидно что массивы Weights и Pweights должны быть идентичны. А проблема заключается в следующем: если раскомментировать вывод cout значений массива Weights в первом цикле, то все выводится как и должно - сначала значения массива Weights, затем значения массива Pweights, оба массива идентичны, заполнены случайными числами в нужном диапазоне. 

Но если cout'ы в первом цикле закомментировать, начинаются странности. Значения Weights, выведенные ПОСЛЕ первого цикла все так же совпадают со значениями Pweights, но сами значения явственно теряют "случайность" - они располагаются уже таким образом что в каждом столбце числа одинаковы до второго знака после запятой. 

Различия эти обусловлены только наличием cout внутри первого цикла: если он есть - значения во всех массивах правильные, если его нет - они располагаются в такой вот странной последовательности (а нужна именно последовательность случайных чисел!). Внутри самого cout никаких преобразований нет. 
Помогите пожалуйста, потому что я в тупике. Использовалась Visual Studio 2010.
#include <iostream>
#include <cmath>
#include <fstream>
#include <ctime>
#include <cstdlib>
#pragma warning(disable: 4305)
using namespace std;

float RandomNumber(int a, int b, int q, int seed)
{
    float s;
    srand(seed);

    if (q == 1) //нужен ли нам дробный промежуток
    {
        s = rand();
        s = s / 32767 * (b + 1) -
            b; //Если b = 0 то получаем несмещенный промежуток (0, 1), если b = 1 - то смещенный (-1, 1)
    }
    else
    {
        s = rand() % (a + 1); //При a=1000 получаем промежуток от 0 до 1000

        if (b == 1)
        {
            s = s - a / 2;
        }
    }

    return s;
}

int main()
{
    int i, seed, part;
    float r;
    float Weights[4][15];// Веса синаптических связей между нейронами

    for (part = 0; part < 4; part++)
    {
        for (i = 0; i < 15; i++)
        {
            seed = (i + 1) * clock() * time(NULL) + part;
            r = RandomNumber(1, 1, 1,
                             seed); //(верхняя граница, смещенный/несмещенный, дробный/целый, зерно)
            Weights[part][i] = r;
            //cout<<Weights[part][i]<<" ";
        }

        //cout<<endl;
    }

    //cout<<endl;

    for (part = 0; part < 4; part++)
    {
        for (i = 0; i < 15; i++)
        {
            cout << Weights[part][i] << " ";
        }

        cout << endl;
    }

    getchar();
    return 0;
}


A: Предполагаю, что это связано с использованием seed. Инициализировать ГСЧ для каждого числа - это как раз угробить его характеристики! Его нужно инициализировать один раз. Иначе вы теряете его качество...
Вывод притормаживает выполнение программы, и хоть немного, но меняется clock() - без вывода это будет одно и то же значение.
Закомментарьте srand
float RandomNumber(int a, int b, int q, int seed)
{
    float s;
    //srand(seed);

Внесите его сюда:
float Weights[4][15];// Веса синаптических связей между нейронами

seed=time(NULL);
srand(seed);

и посмотрите на результаты. Думаю, вы получите то, что хотели...
