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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2012, 13:56   #1
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию С++ Найти все четные четырехзначные числа, цифры которых следуют в порядке возрастания или убывания.

Этот код выводит одни нули. В чём тут дело? подскажите, пожалуйста
Код:
// Найти все четные четырехзначные числа, цифры которых следуют в порядке возрастания или убывания.
#include<iostream>
using namespace std;

int main()
{
	setlocale(0, "");
	int i, // какое-то четырёхзначное число
		n, k, vspm=0;
	for(int i=1000; i<10000; i=i+2) // определяем чётные четырёхзначные числа
	{
		while(i!=0)
		{
			n=i%10; // последняя цифра
			i=i/10;
			k=i%10; // предпоследняяя цифра
				if(n<k || n>k)
					vspm+=1;		
		}
		if (vspm>0)
			cout << i << endl;

	}
		
	system("pause");
	return 0;
}

Последний раз редактировалось Anya She; 13.12.2012 в 14:20.
Anya She вне форума Ответить с цитированием
Старый 13.12.2012, 14:40   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Прогоните код в отладчике и посмотрите. Или добавьте в цикл вывод значения i на каждой итерации и посмотрите.

Рекомендуемый способ лечения, когда осознаете проблему: написать отдельную функцию bool HasDigitsOrdered(int) и вызывать её в цикле.
Abstraction вне форума Ответить с цитированием
Старый 13.12.2012, 15:04   #3
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

У меня происходит зацикливание, если добавить в цикл вывод i. Проблему не нашла...
Anya She вне форума Ответить с цитированием
Старый 13.12.2012, 15:12   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Аня, ну так очевидно.
вы же i в цикле изменяете!!
Так делать НЕЛЬЗЯ!

Код:
for(int i=1000; i<10000; i=i+2) // определяем чётные четырёхзначные числа
	{
                         int Test = i;
		while(Test!=0)
		{
			n=Test%10; // последняя цифра
			Test=Test/10;
			k=Test%10; // предпоследняяя цифра
				if(n<k || n>k)
					vspm+=1;		
		}
		if (vspm>0)
			cout << i << endl;

	}
Хотя совет насчёт отдельной функции - это очень правильный совет. Рекомендую им воспользоваться.

Последний раз редактировалось Serge_Bliznykov; 13.12.2012 в 15:14.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.12.2012, 15:32   #5
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

Да, точно. нельзя изменять начальную переменную. Я ведь знала и упустила!! Но теперь у меня новая проблема. выводит просто все четырёхзначные чётные числа.. И это нужно написать без новой функции, такова задача.
Anya She вне форума Ответить с цитированием
Старый 13.12.2012, 15:37   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Отладчик.
Обратите внимание на то, когда срабатывает (и сколько раз проверяется) условие (n<k || n>k).
Abstraction вне форума Ответить с цитированием
Старый 13.12.2012, 16:55   #7
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

проверяется 4 раза, срабатывает, когда s становится =0. Этим мы определяем что цифры в числе идут по возрастанию или по убыванию..
Anya She вне форума Ответить с цитированием
Старый 13.12.2012, 17:07   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
проверяется 4 раза, срабатывает, когда s становится =0.
Кто такой s?
И срабатывать оно будет всякий раз, когда n!=k. А поскольку последний раз проверка сравнивает первую цифру числа с 0, то...
Abstraction вне форума Ответить с цитированием
Старый 13.12.2012, 17:12   #9
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

давайте подумаем функция main
она генерирует рандомом кучу значений.
с начало мы в цикле делаем числа,
потом в цикле гоним все числа на синтаксис % 2
все элементы, ровняющийся 0, значит остатка нет и это чётное...
их мы заложим в отдельный массив.
после чего сортируем в порядке возрастания. за одно и провряем на критичность не выше 9999... и не ниже 1000... вот в целом идея.

Код:
const int max_size = 10000;
int randint[max_size], destint[max_size], i, len = 0, j = 0;
for(i = 0; i < max_size; i++)
   randint[i] = rand() % 100000;

memset(destint, -1, sizeof(int) * max_size);
for(i = 0; i < max_size; i++)
{
  if(!(randint[i] % 2)) 
  {
     destint[len] = randint[i];
     len++;
  }
}

memset(randint, -1, sizeof(int) * max_size);
for(i = 0; i < len; i++)
{
  if((destint[i] > 999) && (destint[i] < 10000)) 
  {
    randint[j] = destint[i];
    j++;
  }
}

//сортировка

//вывод
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 13.12.2012, 17:20   #10
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Найти все четные четырехзначные числа, цифры которых следуют в порядке возрастания или убывания.
Цитата:
давайте подумаем функция main
она генерирует рандомом кучу значений.
Только мне кажется, что выделенные слова друг с другом плохо сочетаются?
Abstraction вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано натуральное число. Верно ли, что его цифры следуют в порядке возрастания справа налево? iwataman Помощь студентам 12 04.12.2012 17:03
Программа, которая выводит на экран все четырехзначные числа, сумма цифр которых равна 7 vitaaly Паскаль, Turbo Pascal, PascalABC.NET 3 06.02.2012 15:46
найти все четырехзначные числа, в которых ровно две одинаковые цифры (турбо паскаль) SkuLLL Помощь студентам 5 23.01.2012 19:23
С .в матрице, строку где все числа четные, расположить в обратном порядке. daimonTM Помощь студентам 1 22.12.2010 10:02
Упорядочить цифры в порядке возрастания/убывания doter Общие вопросы C/C++ 2 05.10.2010 17:57