Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Viktor_Repin
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 21
Завершенные тесты: 1
#1

оператор else - C++

29.04.2016, 22:12. Просмотров 155. Ответов 11
Метки нет (Все метки)

Добрый день, точнее вечер, форумчане!
Изучаю С++ по учебнику Шилдта, дошёл до темы рекурсии, сделал задание по книге выводящее цифры до 10 с помощью рекурсии. Всё получилось. но захотелось слегка улучшить программу, чтобы в случае указания значения меньше 2 выдавало сообщение и программа завершалась. Вроде как всё работает. но программа также выдаёт и это сообщение. а она находится в блоке else. помогите чайнику плиз

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
 
int recurse(int x);
 
int recurse(int x) {
    
    if (x > 1) { 
        recurse(x - 1); } 
    else 
    {
        std::cout << "wrong digit";
        return 0;
    }
    std::cout << x << " ";
    return x;
        
}
 
int main()
{
    recurse(10);
    system("pause");
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2016, 22:12     оператор else
Посмотрите здесь:

Оператор [] - C++
Добрый день!!! Необходимо х обьекта А присвоить х обьекта В Хотел через A=B сделать, но не выходит ((( Сделал варворским...

Оператор if - C++
Что не так с оператором if. Помогите кто может) cout &lt;&lt; &quot;Введите ваше уравнение: &quot;; string Text; char Probel = ' '; cin &gt;&gt;...

Оператор for - C++
Всем здравствуйте. Изучаю оператор for, и совершенно не могу понять, как он будет работать в этой программе: Найти сумму целых...

оператор do while - C++
задание следующее: нужно найти произведение n чисел, но используя оператор do while. Я более-менее изучил его основы и элементарные...

Оператор % в C++ - C++
Где можно почитать про % оператор? Желательно примеры\объяснения и тд.

оператор For - C++
Надо использовать оператор For в данной задаче..... Надо сделать программу каторый выводит имя например:alpamis 10 раз

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Stitch Igorek
45 / 45 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
29.04.2016, 22:23     оператор else #2
Цитата Сообщение от Viktor_Repin Посмотреть сообщение
меньше 2
а какое число вводишь? по условию
C++
1
if (x > 1)
блок else у тебя сработает когда if не выполниться, то есть либо if либо else, если введешь 2, то у тебя при первом заходе сработает if и функция пойдет на следующий цикл рекурсии с параметром (2-1), и тут срабоет else и начнется выход из рекурсии
Viktor_Repin
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 21
Завершенные тесты: 1
29.04.2016, 22:25  [ТС]     оператор else #3
по задумке блок
else
{
std::cout << "wrong digit";
return 0;
}
должен выполняться только когда переменная меньше 2, но вот надпись wrong digit у меня выдаётся в любом случае
Stitch Igorek
45 / 45 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
29.04.2016, 22:27     оператор else #4
Цитата Сообщение от Viktor_Repin Посмотреть сообщение
у меня выдаётся в любом случае
так она и будет выдаваться, ты каждый проход рекурсии из переменной вычитаешь единицу, и в конце концов при n-ном заходе в функцию она у тебя будет меньше 2х
Viktor_Repin
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 21
Завершенные тесты: 1
29.04.2016, 22:30  [ТС]     оператор else #5
например, если ставлю 10, то выводит последовательность 2 - 10, а перед ней надпись wrong digit....
если ставлю 1. то делает как и должен - надпись и конец
Stitch Igorek
45 / 45 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
29.04.2016, 22:50     оператор else #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
void recurse(int x)
{
    if (x > 0)
    {
        std::cout << "Заходим в рекурсию: x = " << x << std::endl;
        recurse(x - 1);
        std::cout << "Выходим из рекурсии: x = " << x << std::endl;
    }
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    recurse(10);
    system("pause");
    return 0;
}

запусти этот код, чтобы лучше понять как работает рекурсия

Добавлено через 6 минут
Цитата Сообщение от Viktor_Repin Посмотреть сообщение
например, если ставлю 10, то
вот смотри - поставил 10 - 10 > 1 - запустилась та же функция, но уже с параметром 10-1 - то бишь 9, дальше 9 > 1, опять та же функция но уже с параметром 9-1 и так до тех пор пока if(x > 1) не перестанет выполняться, а если не выполняется if, то выполняется else, вот и все.

Добавлено через 7 минут
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
void recurse(int x)
{
    if (x > 0)
    {
        std::cout << "Заходим в рекурсию: x = " << x << std::endl;
        recurse(x - 1);
        std::cout << "Выходим из рекурсии: x = " << x << std::endl;
    }
    else
        std::cout << "Мы спустились до конца рекурсии, начинаем подъем" << std::endl;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    recurse(10);
    system("pause");
    return 0;
}

а вот так у тебя срабатывает блок else
Viktor_Repin
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 21
Завершенные тесты: 1
29.04.2016, 23:01  [ТС]     оператор else #7
Спасибо огромное за подробный ответ! В принципе, я общее понимание об рекурсии имею, но пока не всё в голове уложилось. Каким образом тогда возможно организовать проверку на условие, только вне рекурсивной функции?
Stitch Igorek
45 / 45 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
29.04.2016, 23:44     оператор else #8
Цитата Сообщение от Viktor_Repin Посмотреть сообщение
Каким образом тогда возможно организовать проверку на условие, только вне рекурсивной функции?
например таким
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
    setlocale(LC_ALL, "Russian");
    int x = 1;
    if (x > 1)
        recurse(x);
    else
        std::cout << "Не бывать рекурсии=)" << std::endl;
    system("pause");
    return 0;
}
Viktor_Repin
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 21
Завершенные тесты: 1
30.04.2016, 11:13  [ТС]     оператор else #9
Stitch Igorek, ну этот вариант. конечно же очевиден, просто думал есть способ заложить всё это в функцию
Stitch Igorek
45 / 45 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
30.04.2016, 12:09     оператор else #10
Цитата Сообщение от Viktor_Repin Посмотреть сообщение
просто думал есть способ заложить всё это в функцию
есть и такой способ=) вот этот например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
 
void recurse(int x)
{
    static int y = x;
    if (y > 1)
    {
        if (x > 0)
        {
            std::cout << "Заходим в рекурсию: x = " << x << std::endl;
            recurse(x - 1);
            std::cout << "Выходим из рекурсии: x = " << x << std::endl;
        }
        else
            std::cout << "Мы спустились до конца рекурсии, начинаем подъем" << std::endl;
    }
    else
        std::cout << "Рекрсии сегодня не будет" << std::endl;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    recurse(10);
    system("pause");
    return 0;
}
Добавлено через 12 минут
Побочный эффект данного метода - при повторном вызове данной функции - работать не будет

Добавлено через 20 минут
А такой вариант многоразовый, но мудреный.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
void recurse(int x)
{
    static int y;
    if (y == 0)
        y = x;
    if (y > 1)
    {
        if (x > 0)
        {
            std::cout << "Заходим в рекурсию: x = " << x << std::endl;
            recurse(x - 1);
            std::cout << "Выходим из рекурсии: x = " << x << std::endl;
        }
        else
            std::cout << "Мы спустились до конца рекурсии, начинаем подъем" << std::endl;
    }
    else
    {
        std::cout << "Рекурсии сегодня не будет" << std::endl;
    }
    y = 0;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    recurse(10);
    recurse(10);
    system("pause");
    return 0;
}
Viktor_Repin
1 / 1 / 0
Регистрация: 26.08.2011
Сообщений: 21
Завершенные тесты: 1
30.04.2016, 12:28  [ТС]     оператор else #11
Stitch Igorek, ещё раз спасибо за доходчивые ответы!
для меня мир С++ ещё только-только начинает приоткрывать свои завесы и не во всё удаётся самоучке самому въехать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2016, 12:49     оператор else
Еще ссылки по теме:

Оператор if - C++
Почему у меня оператор Else выдает как ошибку(Е2054 Misplaced else)? и в операторе if не нравится как я записал if((s==a)&amp;&amp;(f==p)); ? ...

Оператор new - C++
Версия оператора new в виде new(nothrow) и new(nothrow). Чем они отличаются от простого оператора new?

Оператор -> C++ - C++
В статье о С++11 наткнулся на следующий код template &lt;typename T1, typename T2&gt; auto add(T1 t1, T2 t2) -&gt; decltype(t1 + t2) { ...

Оператор with - C++
В C++ есть аналог оператора with как в Delphi?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Stitch Igorek
45 / 45 / 18
Регистрация: 02.04.2016
Сообщений: 308
Завершенные тесты: 1
30.04.2016, 12:49     оператор else #12
Цитата Сообщение от Viktor_Repin Посмотреть сообщение
и не во всё удаётся самоучке самому въехать
я прежде чем начать что то читать просмотрел вот эти видео уроки кстати он рекурсию хорошо объясняет вот тут
Yandex
Объявления
30.04.2016, 12:49     оператор else
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru