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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2011, 12:49   #1
AdmS
 
Регистрация: 25.05.2011
Сообщений: 8
По умолчанию Поиск случайных отрицательных чисел

Подскажите пожалуйста в каком направлении двигаться: стоит задача вывести на экран 25 случайных чисел, находящихся в диапазоне от -100 до 100. найти и вывести на экран номер самого первого и самого последнего из максимального из отрицательных чисел в этом ряду
что получается: диапазон случайных чисел я вывел, но как найти первое и последнее отрицательное число, вот это уже вопрос? или же нужно данную задачу решать через массив и там уже искать? У меня получается только найти последнее и то я думаю не правильно. Подскажите пожалуйста как их найти или хотя бы в каком направлении двигаться? Благодарю!
Код:
#include <iostream>
using namespace std;

int main ()
{
	setlocale (LC_CTYPE, "Russian_Russia.1251");
	int i;
	//int sl_ch[25] = {i};
	int sl_ch;
	int fm;
	

	cout << "Вывод 25 случайных чисел от -100 до 100\n"; 
	for (int i = 0;  i <= 25 ; i++)
	{
    	sl_ch = rand() % 200 - 100;
		cout << sl_ch << endl;
	
	if (sl_ch < 0) fm=sl_ch;
	
	}
	cout << "Otr " << fm << endl;
return 0;
}

Последний раз редактировалось ACE Valery; 26.05.2011 в 18:54.
AdmS вне форума Ответить с цитированием
Старый 25.05.2011, 13:20   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Код:
sl_ch = rand() % 201 - 100;
иначе 100 не получишь.
Кроме того, предварительно засей генератор, чтобы не получать одни и те же "случайные" числа при каждом выполнении программы:
Код:
srand(time(NULL));
<ctime> не забудь подключить.
И да -- задачу решай через массив. Заполняешь, выводишь, ищешь в цикле, опять выводишь.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 25.05.2011, 13:29   #3
AdmS
 
Регистрация: 25.05.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
Код:
sl_ch = rand() % 201 - 100;
иначе 100 не получишь.
Кроме того, предварительно засей генератор, чтобы не получать одни и те же "случайные" числа при каждом выполнении программы:
Код:
srand(time(NULL));
<ctime> не забудь подключить.
И да -- задачу решай через массив. Заполняешь, выводишь, ищешь в цикле, опять выводишь.
Благодарю! первое и второе сделал, согласен, постоянно повторяющиеся случайные числа, как-то не очень! буду тогда обрабатывать массив, просто сказали что массив нагружает программу, так скажем, если будет большой объем массива, это заметно замедлит процесс выполнения программы!
AdmS вне форума Ответить с цитированием
Старый 25.05.2011, 21:48   #4
AdmS
 
Регистрация: 25.05.2011
Сообщений: 8
По умолчанию

Код:
#include <iostream>
#include <ctime>
using namespace std;

int main ()
{
	setlocale (LC_CTYPE, "Russian_Russia.1251");
	int i;
	//int sl_ch[25] = {i};
	int sl_ch, nm, max;
	int fm=0, max2=1;
	
	srand(time(NULL));
	cout << "Вывод 25 случайных чисел от -100 до 100\n"; 
	for (int i = 0;  i <= 25 ; i++)
	{
		
    	sl_ch = rand() % 201 - 100;

		cout << sl_ch << endl;
		
		
		{
			if (sl_ch < 0 && fm==0) fm = sl_ch;
			if (sl_ch < 0 && fm!=0) nm = sl_ch;
			//if (sl_ch < 0) max = sl_ch;
			//if (max > max2) max2 = max;
		}
	}
	cout << "Первое отрицательное число =  " << fm << endl;
	cout << "Последнее отрицательное число =  " << nm << endl;
	//cout << "Максимальное отрицательное число =  " << max2 << endl;
	cin.get();
return 0;
}
вот что получается по поиску первого и последнего отрицательных чисел, а на максимальное отрицательное ничего не могу придумать, может у кого-нибудь есть какие-нибудь варианты?
AdmS вне форума Ответить с цитированием
Старый 26.05.2011, 12:59   #5
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Как-то так...
Код:
#include <iostream>
#include <ctime>

int main()
{
    int random_number, first_neg, last_neg, max_neg;

    srand(time(NULL));
    cout << "Вывод 25 случайных чисел от -100 до 100\n"; 
    first_neg = 0;
    for (int i = 0;  i < 25 ; i++)
    {
        cout << (random_number = rand() % 201 - 100) << endl;
        if (random_number < 0)
            if (!first_neg)
                max_neg = first_neg = random_number;
            else
                if ((last_neg = random_number) > max_neg)
                    max_neg = random_number;
    }
    cout << "Первое отрицательное число =  " << first_neg << endl;
    cout << "Последнее отрицательное число =  " << last_neg << endl;
    cout << "Максимальное отрицательное число =  " << max_neg << endl;
    
    return 0;
}
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 26.05.2011, 17:12   #6
AdmS
 
Регистрация: 25.05.2011
Сообщений: 8
По умолчанию

К сожалению в вашем коде результат максимального отрицательного числа не правильный,в причинах не разбирался но все равно вас благодарю за идеи! Подводя итоги данной темы выкладываю готовый вариант в VS 2008:
Код:
#include <iostream>
#include <ctime>
using namespace std;

int main ()
{
	setlocale (LC_CTYPE, "Russian_Russia.1251");
	int sl_ch, last_otr, var_max, max_otr=0;
	int fist_otr=0;
	
	srand(time(NULL));
	cout << "Вывод 25 случайных чисел от -100 до 100\n"; 
	for (int i = 0;  i <= 25 ; i++)
	{
		cout << (sl_ch = rand() % 201 - 100) << endl;
		var_max = sl_ch;
			
		{
			if (sl_ch < 0 && fist_otr==0) fist_otr = sl_ch;
			 if (sl_ch < 0) last_otr = sl_ch;
			  if (var_max < 0) var_max = sl_ch;
			   if (max_otr > var_max) max_otr = var_max;
		}
	}
	cout << "Первое отрицательное число =  " << fist_otr << endl;
	cout << "Последнее отрицательное число =  " << last_otr << endl;
	cout << "Максимальное отрицательное число =  " << max_otr << endl;
	cin.get();
return 0;
}
Еще раз всех благодарю! тему можно считать закрытой!:)
AdmS вне форума Ответить с цитированием
Старый 27.05.2011, 07:52   #7
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от AdmS Посмотреть сообщение
К сожалению в вашем коде результат максимального отрицательного числа не правильный
[/CODE]
Странно.
Всегда провожу "тестовые испытания" перед тем, как выкладываю код на форум.
У меня все правильно считало.

ЗЫ Видимо, дело в том, что мы по-разному понимаем "максимальное из отрицательных чисел".
Я понимаю буквально, а ты -- "максимальное по модулю".
А это, как говорят в Одессе -- две большие разницы.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062

Последний раз редактировалось Mandrivnyk; 27.05.2011 в 07:55.
Mandrivnyk вне форума Ответить с цитированием
Старый 27.05.2011, 09:08   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

- 10 > -20. ТС это имел в виду.
По модулю 10 < 20.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 27.05.2011 в 09:11.
Smitt&Wesson вне форума Ответить с цитированием
Старый 27.05.2011, 11:18   #9
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
- 10 > -20. ТС это имел в виду.
По модулю 10 < 20.
Именно это я и реализовал.
А теперь взгляни на код ТС
Код:
if (max_otr > var_max) max_otr = var_max;
(var_max -- текущее отрицательное число)
Тут как раз наоборот. Если оно _меньше_ максимального отрицательного, то максимальное перезаписывается.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 27.05.2011, 20:15   #10
AdmS
 
Регистрация: 25.05.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
Именно это я и реализовал.
А теперь взгляни на код ТС
Код:
if (max_otr > var_max) max_otr = var_max;
(var_max -- текущее отрицательное число)
Тут как раз наоборот. Если оно _меньше_ максимального отрицательного, то максимальное перезаписывается.
Да, приношу свои изменения, у вас правильно! в задаче условия не где не сказано, что надо выводить максимальное отрицательное число по модулю.
Так что ваш вариант последний и правильный - это уже точно. Я просто позволю себе добавить в ваш код, только две строчки, чтобы в VS2008 правильно работало и отображало русский шрифт
Код:
#include <iostream>
#include <ctime>
using namespace std;

int main()
{
    setlocale (LC_CTYPE, "Russian_Russia.1251");
	int random_number, first_neg, last_neg, max_neg;
    srand(time(NULL));
    cout << "Вывод 25 случайных чисел от -100 до 100\n"; 
    first_neg = 0;
    for (int i = 0;  i < 25 ; i++)
    {
        cout << (random_number = rand() % 201 - 100) << endl;
        if (random_number < 0)
            if (!first_neg)
                max_neg = first_neg = random_number;
            else
                if ((last_neg = random_number) > max_neg)
                    max_neg = random_number;
    }
    cout << "Первое отрицательное число =  " << first_neg << endl;
    cout << "Последнее отрицательное число =  " << last_neg << endl;
    cout << "Максимальное отрицательное число =  " << max_neg << endl;
    
    return 0;
Благодарю за помощь!
AdmS вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод отрицательных чисел в массив Alex1991 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 05.11.2010 17:23
Ввод отрицательных чисел в Ассемблере Alex1991 Помощь студентам 8 30.10.2010 19:36
Считывание с файла отрицательных чисел trinki Общие вопросы C/C++ 2 01.10.2010 01:39
Пщдсчет отрицательных чисел в массиве Ehha1234 Паскаль, Turbo Pascal, PascalABC.NET 2 04.06.2010 12:41
Замена отрицательных чисел нулями DasV Помощь студентам 0 30.04.2010 00:42