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

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

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

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

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

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

Помогите, люди! я жутко туплю. Объясните, пожалуйста что тут делается в этой программе. а именно: зачем задавать ещё одну переменную tmp, кроме nom, а потом приравнивать их. И что такое происходит в цикле while?? и зачем задавать ещё переменную pre ?? что она обозначает? и если она приравнена к 9, то может вместо неё использовать просто 9??
Код:
#include<iostream>
using namespace std;

int main()
{
setlocale(0, "");
int nom, tmp, prev=9;  
cout << "vvedite chislo" << endl;
cin >> nom; 
tmp=nom;
	while (tmp!=0)
	{
	if (tmp%10<=prev)
		{
		prev=tmp%10;
		tmp=tmp/10;
		}
	else
	break;
	}
if (tmp==0)
cout << "Образует" << endl;
else
cout << "Не образует" << endl;
system ("pause");
return 0;
}
Извините, если вопросы глупые, но я сама не могу разобраться.
Anya She вне форума Ответить с цитированием
Старый 10.12.2012, 14:20   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Anya She

зачем задавать ещё одну переменную tmp, кроме nom, а потом приравнивать их

наверное, чтобы сохранить оригинальное число nom.
в программе оно не используется, так что в данном случае tmp не нужна.


И что такое происходит в цикле while?

последовательное получение цифр числа.
задача решается методом от пра-а-ативного (((Ж числа в обратном порядке должны образовывать убывающую последовательность. это сделано из-за особенностей работы остатка от деления.


и если она приравнена к 9, то может вместо неё использовать просто 9??

нельзя. ты что, не видишь, что далее по коду переменная prev пере-присаивается?
Rififi вне форума Ответить с цитированием
Старый 10.12.2012, 14:25   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

1) nom - это, логически, входная переменная алгоритма проверки. Модифицировать входные данные, даже если они в дальнейшем нигде не используются - дурной тон. В основном потому, что иначе при модификации программы есть приличный шанс внести в неё трудноуловимые ошибки. Поэтому nom копируется в переменную tmp, которая и используется.

2) prev - "предыдущая цифра", tmp%10 - "текущая цифра". Обратите внимание, что prev меняется в цикле, так что использовать вместо неё константное выражение 9 не выйдет. Изначально она приравнивается "самой большой цифре" - ход сомнительный, но имеющий право на жизнь.
Abstraction вне форума Ответить с цитированием
Старый 10.12.2012, 14:43   #4
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

если я правильно понимаю, то
Код:
if (tmp%10<=prev) // если текущая цифра меньше либо равна предыдущей, то 
		{
		prev=tmp%10; //  почему мы присваиваем предыдущей цифре значение настоящей????
		tmp=tmp/10; // и число делим на 10
Anya She вне форума Ответить с цитированием
Старый 10.12.2012, 14:45   #5
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
prev=tmp%10; // чтобы было с чем сравнивать дальше
tmp=tmp/10; // чтобы потом забрать следующую цифру
а вот если писать программы самому(ой) то подобных вопросов обычно не возникает
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 10.12.2012, 14:51   #6
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

Спасибо... вроде понятно теперь. Не смогла додуматься до этой задачи, поэтому пришлось прибегнуть к помощи.
Anya She вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выяснить, является ли последовательность цифр натурального числа при просмотре их справа налево возрастающей последовательностью Al'f!ra Паскаль, Turbo Pascal, PascalABC.NET 2 05.03.2012 19:13
Натуральное число - Определить, образуют ли все цифры числа возрастающую последовательность Sasha2011 Паскаль, Turbo Pascal, PascalABC.NET 1 18.10.2011 09:25
напечатать в возрастающем порядке все цифры, не входящие в запись данного натурального числа Aimet Паскаль, Turbo Pascal, PascalABC.NET 1 18.06.2011 19:57
напечатать в убывающем порядке все цифры, не входящие в запись данного натурального числа Aimet Паскаль, Turbo Pascal, PascalABC.NET 0 16.06.2011 21:18
Найти количество различных цифр данного натурального числа. stalker Паскаль, Turbo Pascal, PascalABC.NET 10 22.05.2007 17:45