Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2011, 23:20   #1
Alexander1205
Пользователь
 
Аватар для Alexander1205
 
Регистрация: 22.01.2011
Сообщений: 78
По умолчанию arrays_rand

Всем доброго времени суток! Кто подскажет,как:
1.Модифицировать прогу так,чтобы кол-во элементов в массиве задавал пользователь?
2.Реализовать прогу,которая генерирует 100 чисел от -50 до 50,выводит их на экран,после чего заменяет отрицательные числа на 0,а положительные на 1.Интересная задачка,правда?
Alexander1205 вне форума Ответить с цитированием
Старый 27.01.2011, 23:26   #2
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

На каком языке?
В чём проблема?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 28.01.2011, 00:55   #3
Alexander1205
Пользователь
 
Аватар для Alexander1205
 
Регистрация: 22.01.2011
Сообщений: 78
По умолчанию

на С++.Не получается с отрицательным числом..Спасибо зараннее
Alexander1205 вне форума Ответить с цитированием
Старый 28.01.2011, 01:48   #4
Dayman
Форумчанин
 
Аватар для Dayman
 
Регистрация: 12.01.2011
Сообщений: 186
По умолчанию

Перед генерацией самого числа, делаете рандом [0;1]
В случае 0 генерируемое число домножите на -1.

Правда зачем замена чисел тогда я хз - проще сразу генерить [0;1].

Остался такой быдлокод уж не помню с какого курса.
Код:
int RANDOMIZE(void)
{
	bool To_Negotiate=false;

	To_Negotiate=rand()%2;
	if(To_Negotiate)
		return((rand()%50+1)*-1);
	else
		return(rand()%50+1);
}
Код:
int main()
{
	wcout.imbue(locale(".866"));
	double a=0;
	ofstream outf("out1.txt");
	vector<double>V(100);
	srand((unsigned int)time(NULL));

	generate(V.begin(),V.end(),RANDOMIZE);
	for(vector<double>::iterator i=V.begin();i<V.end();i++)
	{
		outf<<*i;
		if(i<V.end()-1)outf<<endl;
		a+=*i;
	}
	a/=V.size();
	wcout<<L"Среднее арифметическое: "<<a<<endl;
	outf.close();
	return 0;
}
Lingua c++ non penis caninus est.

Последний раз редактировалось Dayman; 28.01.2011 в 01:55.
Dayman вне форума Ответить с цитированием
Старый 28.01.2011, 05:43   #5
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Вот именно что быдлокод. Не проще ли из rand()%100 вычесть 50? Тем более, с твоим подходом 0 будет выпадать чаще прочего.

Alexander1205, покажи имеющийся код.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 28.01.2011 в 05:45.
Obey-Kun вне форума Ответить с цитированием
Старый 28.01.2011, 12:39   #6
Alexander1205
Пользователь
 
Аватар для Alexander1205
 
Регистрация: 22.01.2011
Сообщений: 78
По умолчанию

Код:
int arr[100];

for (int i = -50; i < 50; i++) {
   arr[i+50] = i;
}

for (int i = 0; i < 100; i++) {
   if (arr[i] > 0)
        arr[i] = 1;
   else 
        arr[i] = 0;
}

Последний раз редактировалось ACE Valery; 29.01.2011 в 00:16.
Alexander1205 вне форума Ответить с цитированием
Старый 28.01.2011, 14:35   #7
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

ха, во втором форе у вас будут всегда одни единицы, зачем он вобще? Вам надо массив заполнить числами-50...50, что вы и сделали в первом форе, а второй все затирает единицами =)

пардон 2-ую часть задания не увидел

Последний раз редактировалось NiCola999; 28.01.2011 в 17:35.
NiCola999 вне форума Ответить с цитированием
Старый 28.01.2011, 17:03   #8
Alexander1205
Пользователь
 
Аватар для Alexander1205
 
Регистрация: 22.01.2011
Сообщений: 78
По умолчанию

Код:
#include <iostream>
#include <ctime>
#include <cstdlib>
 
int main()
{
    int size, i;
    std::cout<<"Enter size:\n> ";
    std::cin>>size;
    int* array = new int[size];
    for(i = 0; i < size; ++i)
        array[i] = rand() % 100 - 50;
 
    std::cout<<"Input array:\n";
    for(i = 0; i < size; ++i)
        std::cout<<array[i]<<' ';
 
    for(i = 0; i < size; ++i)
        array[i] = array[i] < 0 ? 0 : 1;
 
    std::cout<<"Output array:\n";
    for(i = 0; i < size; ++i)
        std::cout<<array[i]<<' ';
 
    delete [] array;
    return 0;
}

Последний раз редактировалось ACE Valery; 29.01.2011 в 00:16.
Alexander1205 вне форума Ответить с цитированием
Старый 28.01.2011, 17:37   #9
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

всё верно =)
чтобы значения не повторялись, можно связать их со временем на компе:
Код:
srand(time(NULL));
...
rand()%...

Последний раз редактировалось NiCola999; 28.01.2011 в 17:39.
NiCola999 вне форума Ответить с цитированием
Старый 28.01.2011, 18:28   #10
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Хороший код, придраться не к чему, кроме разве что того, что ты забыл инициализировать генератор случайных чисел (srand'ом) и не переносишь строки где надо. То есть получается так:
Цитата:
Enter size:
> 10
Input array:
33 36 27 -35 43 -15 36 42 -1 -29 Output array:
1 1 1 0 1 0 1 1 0 0
А лучше так:

Цитата:
Enter size:
> 10
Input array:
33 36 27 -35 43 -15 36 42 -1 -29
Output array:
1 1 1 0 1 0 1 1 0 0
И в конце вывода всегда лучше делать пустую строку.

Ещё можно выводить числа через табуляцию ('/011'), чтобы получалось типа таблицы.

И вот ещё:
Код:
for(i = 0; i < size; ++i) 
array[i] = rand() % 100 - 50;
Лучше писать так:
Код:
for(i = 0; i < size; ++i) {
    array[i] = rand() % 100 - 50;
}
Ибо читается лучше и в случае правки программы сложней ошибиться. Да и вообще лучше всегда отсутпы по 4 пробела делать для блоков.

Вот готовое:
Код:
#include <iostream>
#include <ctime>
#include <cstdlib>

int main()
{
    int size, i;
    std::cout << "Enter size:\n> ";
    std::cin >> size;
    int *array = new int[size];
    srand(time(NULL));
    for(i = 0; i < size; ++i) {
        array[i] = rand() % 100 - 50;
    }
    
    std::cout << "Input array:\n";
    for(i = 0; i < size; ++i) {
        std::cout << array[i] << '\011';
    }
    
    std::cout << std::endl;
    
    for(i = 0; i < size; ++i) {
        array[i] = array[i] < 0 ? 0 : 1;
    }
    
    std::cout << "Output array:\n";
    for(i = 0; i < size; ++i) {
        std::cout << array[i] << '\011';
    }
    
    std::cout << std::endl;
    
    delete [] array;
    return 0;
}
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц