Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Оператор цикла.Задача.


Автор: max29 28.4.2016, 16:02
Вот задача: Дано натуральное число n. Выяснить входит ли цифра 3 в запись числа n, и поменять порядок цифр на обратный.
1) Выводило на печать слово "Ошибка" по else-у только 1 раз.
2) Печатало число в обратном порядке полностью а не только до искомого числа.
Вот программа:

Код

setlocale(LC_ALL, "Russian");

    int n,k;
    cin>>n;

    for(int i=0; n!=0; i++, n/=10)
    {
        if(n % 10 == 3)
        {
        while(n!=0)
        {
            k = n%10;   
            n = n/10; 
            cout << k;
        }
        }
        else
            cout<<"Ошибка";
    }
    system("pause");
    return 0;
 

Буду очень благодарен.

Автор: rudolfninja 28.4.2016, 16:23
Цитата(max29 @  28.4.2016,  16:02 Найти цитируемый пост)
1) Выводило на печать слово "Ошибка" по else-у только 1 раз.

Делаете какую-нибудь bool перменную,  которая сигнализирует о том, была ли найдена цифра 3 в числе. Изначально считаем, что цифры 3 в записи числа нет (т.е. значение переменной == false). Как только находим, меняем значение этой переменной на true. После завершения цикла смотрим значение этой переменной и в случае если оно == false, выводим ошибку.

Цитата(max29 @  28.4.2016,  16:02 Найти цитируемый пост)
Печатало число в обратном порядке полностью а не только до искомого числа.

Во-первых, в условии задачи нужно всегда менять порядок цифр, а не только если в записи числа есть цифра 3. Во-вторых, вам нужно поменять порядок цифр числа, а не напечатать число в обратно порядке (или все же, напечатать число в обратном порядке?)
Если вывести число на экран в обратном порядке, то вам нужно использовать только внутренний цикл, т.к. во внешнем цикле вы "обрезаете" число и выводите не все цифры.

Автор: max29 28.4.2016, 18:00
Вот прога НО как сделать так чтоб прога  печатала в обратном порядке только если в записи числа есть цифра 3.
Код

int n,k;
    cin>>n;
 
    bool fl = false;
 
    for(int i=0; n!=0; i++, n/=10)
    {
        if(n % 10 == 3) fl = true;
            cout << n%10 ;
    }
 
    if (!fl) cout << "\nОшибка" << endl;
    system("pause");
    return 0;

Автор: max29 28.4.2016, 18:21
 smile 

Автор: baldman88 28.4.2016, 20:42
Задания я так и не понял (учитесь лучше формулировать вопросы), но может как-то так?
Код

int n;
cin >> n;
int normal = n;
int reverse = 0;
bool flag = false;
while (n != 0)
{
    if(n % 10 == 3)
    {
        flag = true;
    }
    reverse = (reverse * 10) + (n % 10);
    n /= 10;
}
if (flag == true)
{
    cout << reverse << endl;
}
else
{
    cout << normal << " (Ошибка!)" << endl;
}
system("pause");
return 0;

Автор: max29 28.4.2016, 22:52
Как сделать чтобы эта прога печатала введённое число в обратном порядке только если в него входит цифра 3 т.е. не печатало в обратном порядке всегда а только при соответствии условию  if(n % 10 == 3) А в случае не соответствия условию печатало только "Ошибка".
Код

int n,k;
    cin>>n;
 
    bool fl = false;
    
    for(int i=0; n!=0; i++, n/=10)
    {
        if(n % 10 == 3) fl = true;
            cout << n % 10 ;
    }
 
    if (!fl) cout << "\nОшибка" << endl;
    cout<<endl;
    system("pause");
    return 0;

Автор: baldman88 28.4.2016, 23:22
А Вы пробовали запускать приведенный мной вариант? Он печатает число в обратном порядке только если в него входит цифра "3". Если она не входит в введенное число, то оно печатается так, как есть + (Ошибка!).
А вот если Вы не понимаете, как убрать вывод числа и оставить только вывод сообщения об ошибке, то это печально.

Автор: max29 28.4.2016, 23:26
А можно как нибудь по проще написать прогу просто я только начал изучать С++.

Вроде бы разобрался как ваша прога работает.
Такой вопрос а reverse это как я понимаю только имя переменной так ведь?
Я могу назвать её как нибудь иначе? Или это какая та действующая функция?

Автор: baldman88 28.4.2016, 23:40
Конечно можно. В чем проблема? Нужно просто посидеть и подумать  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)