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

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

Войти
Регистрация
Восстановить пароль
 
Гоблин
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 29
#1

Рекурсивная функция. - C++

12.12.2010, 12:07. Просмотров 843. Ответов 6
Метки нет (Все метки)

Доброго времени суток. Мне необходимо написать рекурсивную функцию для решения задачи:
проверить, соответствует ли введенная последовательность символов понятию список_списков:
<список_списков> :: = <список>[;<список>]
<список> :: = <элемент>[,<элемент>]
<элемент> : = a|b|c|d|e|...|x|y|z
Помогите пожалуйста придумать алгоритм, никак не могу понять как сделать такую проверку именно в рекурсии.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2010, 12:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рекурсивная функция. (C++):

Рекурсивная функция - C++
Выручайте! Очень нада сдать, сам не знаю как сделать. Описать рекурсивную функцию Combin2(N, K) целого типа, находящую C(N, K) — число...

рекурсивная функция - C++
Составить программу с рекурсивною функцией n!+m! де n=4,m=6.

рекурсивная функция - C++
Разработать рекурсивную функцию, удаляющую из строки все лишние пробелы. Пробелы считаются лишними, если их подряд идет более двух, если...

рекурсивная функция - C++
Всем привет! Нужна помощь с программкой. Можете пожалуйста обьяснить, с чего начинать? Дана последовательность из ста целых чисел....

Рекурсивная функция - C++
Написать рекурсивную фукцию вычисления

рекурсивная функция - C++
Описать рекурсивную функцию Digits(S) целого типа, находящую количество цифр в строке S без использования оператора цикла. С помощью этой...

6
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
13.12.2010, 14:10 #2
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//////////////////////////////////////////////////////////////////////////////////////
//проверить, соответствует ли введенная последовательность символов понятию список_списков:
//<список_списков> :: = <список>[;<список>]
//<список> :: = <элемент>[,<элемент>]
//<элемент> : = a|b|c|d|e|...|x|y|z
//////////////////////////////////////////////////////////////////////////////////////
#include <cctype>
#include <iostream>
#include <string>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
//////////////////////////////////////////////////////////////////////////////////////
//Объявления функций:
bool  parse_list   (T_str&  s);
bool  parse_lists  (T_str&  s);
//////////////////////////////////////////////////////////////////////////////////////
bool  parse_symb(T_str&  s, const char  c)
{
    bool  res_bool =    !s.empty() 
                     && s[0] == c;
    if(res_bool)
    {
        s.erase(0, 1);        
    }
    return res_bool;
}
//////////////////////////////////////////////////////////////////////////////////////
bool  parse_comma(T_str&  s)
{
    return parse_symb(s, ',');
}
//////////////////////////////////////////////////////////////////////////////////////
bool  parse_semicolon(T_str&  s)
{
    return parse_symb(s, ';');
}
//////////////////////////////////////////////////////////////////////////////////////
bool  parse_elem(T_str&  s)
{
    return    !s.empty() 
           && isalpha(s[0])
           && islower(s[0])
           && parse_symb(s, s[0]);
}
//////////////////////////////////////////////////////////////////////////////////////
bool  parse_list_tail(T_str&  s)
{
    return  !parse_comma(s)
            || parse_list(s);
}
//////////////////////////////////////////////////////////////////////////////////////
bool  parse_lists_tail(T_str&  s)
{
    return  !parse_semicolon(s)
            || parse_lists(s);
}
//////////////////////////////////////////////////////////////////////////////////////
bool  parse_list(T_str&  s)
{
    return  parse_elem(s)
            && parse_list_tail(s);
}
//////////////////////////////////////////////////////////////////////////////////////
bool  parse_lists(T_str&  s)
{
    return  parse_list(s)
            && parse_lists_tail(s);
}
//////////////////////////////////////////////////////////////////////////////////////
bool  is_lists_list(T_str  s)
{
    return     parse_lists(s)
            && s.empty();           
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите строку для проверки, не является ли она списком списков,"
              << std::endl
              << "где списки разделены точкой с запятой, а элементы списка "
              << std::endl
              << "(строчные латинские буквы) - запятой, например a,b,c;d,e"
              << std::endl;
 
    T_str s;
    for(;;)
    {
        std::cout << std::endl
                  << "-> ";
        getline(std::cin, s);        
        if(s.empty()) break;
        std::cout << "Строка "
                  << (is_lists_list(s) ? "" : "НЕ ")
                  << "является списком списков."
                  << std::endl;    
    }
}
1
Гоблин
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 29
14.12.2010, 15:45  [ТС] #3
Спасибо большое! Только на строке 91 должно быть std::getline(std::cin, s);
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.12.2010, 16:53 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Гоблин Посмотреть сообщение
... на строке 91 должно быть std::getline(std::cin, s);
Это вы где такое вычитали? На самом деле не обязательно, так как здесь применяется ADL (argument-dependent lookup), называемый также поиском Кёнига, согласно которому функция ищется в том пространстве имен, к которому принадлежат ее аргументы.
3
Гоблин
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 29
15.12.2010, 08:02  [ТС] #5
В общем-то нигде не вычитал... Компилятор Embarcadero C++ 2010 подсказал) Точнее без пространства имен он просто не cмог найти функцию getline.
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
15.12.2010, 08:22 #6
Цитата Сообщение от Гоблин Посмотреть сообщение
В общем-то нигде не вычитал... Компилятор Embarcadero C++ 2010 подсказал) Точнее без пространства имен он просто не cмог найти функцию getline.
Значит косяк компилятора.
0
Гоблин
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 29
16.12.2010, 00:13  [ТС] #7
Цитата Сообщение от Mr.X Посмотреть сообщение
Значит косяк компилятора.
Действительно, Borland C Builder 6 спокойно компилирует без std. Спасибо еще раз!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2010, 00:13
Привет! Вот еще темы с ответами:

Рекурсивная функция - C++
Как быть? Мне надо вызывать рекурсивную функцию очень много раз,вплоть до того что вылетает ошибка unhandled exception at ......

Рекурсивная функция - C++
Помогите, нужна задача, звучит так: Напечатать в обратном порядке последовательность чисел, признаком конца которой является 0. ...

рекурсивная функция - C++
Требуется разработать рекурсивную функцию, возвращающую значение для вычисления n-го члена последовательности b1=5, bn+1=bn/n2+n+1 ...

Рекурсивная функция - C++
Последовательность многочленов определяется рекуррентными соотношениями: Т0(x) = 1, Т1(x) = x, Тn(x) = 2хТn-1(x) – Тn-2(x) ...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
16.12.2010, 00:13
Ответ Создать тему
Опции темы

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