Генератор случайных чисел random()

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

24nastya11
Сообщения: 5
Зарегистрирован: 15 июн 2009, 16:14

Здраствуйте, мне нужна Ваша помощь! Буду благодарна!
Есть код программы, мне нужно чтобы матрица создавалась генератором случайных чисел random(). В программе он есть, но не работает. И я не знаю где ошибка.

Код: Выделить всё

#include <math.h>
#include <time.h>
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>

int _tmain(int argc, TCHAR** argv)
{	
	srand(time(0));
	setlocale(LC_ALL,"");
	size_t uRows=0, uCols=0;
	std::vector<std::vector<type> > vMas;
	std::wcout << L"Введите количество строк: ";
	ReadControl(std::wcin,uRows); 
	std::wcout << L"Введите количество столбцов: ";
	ReadControl(std::wcin,uCols);

	if (uRows > 9) uRows = 9;
	if (uCols > 19) uCols = 19;

	std::wcout <<L"Будет создана матрица " <<uRows <<L"x" <<uCols <<std::endl; 
	vMas.resize(uCols); //Assume that the first dimension is number of cols
	for	(size_t col=0 ; col!=uCols ; col++) //correspodingly assume that the second dimension is the rows number	
	{		
		vMas[col].resize(uRows);
	} 	
	//Matrix input 	

		for	(size_t row = 0 ; row!=uRows ; row++)
	{		
		for	(size_t col =0 ; col!=uCols ; col++)
		{			
			massive[i][j] = rand()%10+1; //рандомное число от 1 до 10
		}
	} 
	//Initial matrix	
	std::wcout <<L"\nИсходная матрица: "<<std::endl;
	for	(size_t row = 0 ; row!=uRows ; row++)
	{		
		for	(size_t col =0 ; col!=uCols ; col++)
		{	
			std::wcout <<vMas[col][row] << L" ";	
		} 		
		std::wcout <<std::endl;
	}	std::wcout <<std::endl;  	
	//Exchange position for Min and Max elements;
	for	(size_t col = 0 ; col!=uCols ; col++)
	{		
		std::swap(*(std::max_element(vMas[col].begin(),vMas[col].end())),*(std::min_element(vMas[col].begin(),vMas[col].end())));
	} 	
	//Print final massive
	std::wcout <<L"Преобразованная матрица: "<<std::endl; 
	for	(size_t row = 0 ; row!=uRows ; row++)	
	{		
		for	(size_t col =0 ; col!=uCols ; col++)
		{			
			std::wcout <<vMas[col][row] << L" ";	
		} 		
		std::wcout <<std::endl;
	} 	
	fnIstreamClear(std::wcin); 
	getchar();	
	return 0;
}  
std::wistream & fnIstreamClear(std::wistream & wcin)
{	
	wcin.clear(); 
	do	
	{	
		wcin.ignore(INT_MAX,'\n');
		wcin.putback('\n');
	}
	while(wcin.peek()!='\n'); 	
	wcin.get();	return wcin;
}   
template <typename T>
std::wistream & ReadControl(std::wistream & wcin, T & var)
{	
	T temp=T();	
	wcin >> temp;
	while(!wcin)
	{		
		temp=T();
		std::wcerr <<L"\nНе допустимое значение, повторите ввод: \n";
		fnIstreamClear(wcin);
		wcin >> temp;	
	}; 
	var=temp;	
	return wcin;
	while (true);
}
_SG
Сообщения: 53
Зарегистрирован: 28 фев 2009, 10:43
Откуда: Севастополь

а massive[j] - это что такое?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Вместо massive[j] должно быть massive[row][col].
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
_SG
Сообщения: 53
Зарегистрирован: 28 фев 2009, 10:43
Откуда: Севастополь

А не vMas[col][row]?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Да, ты прав. Я не вникал в код, так что увидел только часть ошибки. Возможно, ошибки там есть ещё.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
24nastya11
Сообщения: 5
Зарегистрирован: 15 июн 2009, 16:14

_SG писал(а):А не vMas[col][row]?
Все равно не получается. Программа как будто бы не видит random
_SG
Сообщения: 53
Зарегистрирован: 28 фев 2009, 10:43
Откуда: Севастополь

гм... по памяти rand(void) random(int) или как там включались в библиотеку stdlib.h. Хотя если компилятор не ругается... то должно работать. Обязано!
lenchnikin
Сообщения: 1
Зарегистрирован: 10 июл 2009, 23:16

Подкрутив константы - Вы можете получить уникальный генератор случайных чисел

Как это работает?
Строится сложная синусоида. А значение берется, начиная со 2-го знака после запятой. Значения принмаются так же, как и стандартным генератором в диапазоне 0,1

Распределение равномерное.
_SG
Сообщения: 53
Зарегистрирован: 28 фев 2009, 10:43
Откуда: Севастополь

Кстати, а чего не получается? Если одно и тоже генерит, то надо проинициализировать генератор чисел вызвав randomize()
24nastya11
Сообщения: 5
Зарегистрирован: 15 июн 2009, 16:14

_SG писал(а):Кстати, а чего не получается? Если одно и тоже генерит, то надо проинициализировать генератор чисел вызвав randomize()
А Вы не можете мне помочь кодом? :rolleyes:
Ответить