0 / 0 / 0
Регистрация: 16.11.2021
Сообщений: 7
1

Описать рекурсивную функцию проверяющую является ли симметричной указанная часть строки

16.11.2021, 19:00. Показов 1915. Ответов 19

Author24 — интернет-сервис помощи студентам
Помогите решить задачу, пожалуйста. Желательно с полным кодом. Описать рекурсивную логическую функцию Simm (S, I, J), проверяющую, является ли симметричной часть строки S, начинающаяся I-м и заканчивающаяся в J-м ее элементами.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2021, 19:00
Ответы с готовыми решениями:

Описать рекурсивную логическую функцию Simm(S,I,J), проверяющую, является ли симметричной часть строки S
Описать рекурсивную логическую функцию Simm(S,I,J), проверяющую, является ли симметричной часть...

Описать рекурсивную логическую функцию Simm(S,I,J), проверяющую, является ли симметричной часть строки S, начинающаяся i
Описать рекурсивную логическую функцию Simm(S,I,J), проверяющую, является ли симметричной часть...

Написать рекурсивную функцию, определяющую, является ли симметричной указанная часть заданной строки
Необходимо написать рекурсивную функцию, определяющую, является ли симметричной часть строки s,...

Нужно написать рекурсивную функцию, которая определит - является ли симметричной часть строки от n, до z
Нужно написать рекурсивную функцию, которая определит - является ли симметричной часть строки от n,...

19
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
16.11.2021, 19:17 2
C++
1
2
3
4
5
6
bool Simm (const char* S, size_t I, size_t J){
while (i<j)
 if (s[i]!=s[j]) return false;
 else ++i, --j;
return true;
}
0
0 / 0 / 0
Регистрация: 16.11.2021
Сообщений: 7
16.11.2021, 19:29  [ТС] 3
... ... size_t J){ на этой фигурной скобке вылезает ошибка
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
16.11.2021, 19:45 4
imsteelalibreat, пиши маленьким регистром
C++
1
2
3
4
5
6
bool Simm(const char* s, size_t i, size_t j) {
    while (i < j)
        if (s[i] != s[j]) return false;
        else ++i, --j;
    return true;
}
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
17.11.2021, 01:02 5

C++
1
bool simm (std::string s, int i, int j) { return i>=j || s[i]==s[j] && simm(s, i+1, j-1); }
2
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
17.11.2021, 14:25 6
_Ivana, специально, чтоб ученики ничего не поняли?
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
17.11.2021, 20:21 7
Kuzia domovenok, ты у меня в блек-листе, чтобы не читать бред, который ты пишешь. Но уведомления при упоминании ника все равно приходят. Поэтому отвечу тебе на твою необоснованную претензию, которую ты предъявляешь мне уже раз десятый, наверное - шел бы ты со своими учениками, их непониманием и своим мнением Среди большинства идиотов на этом форуме иногда встречаются здравомыслящие люди, для них и пишу свои посты. А ты можешь аналогично добавить меня в ЧС, если мои коты вызывают у тебя такую реакцию.

2 All
PS в этой теме приведено 2 примера кода. Один из них не удовлетворяет заданию и при этом до безобразия скучный. Другой удовлетворяет заданию и при этом интересный, элегантный, достойный восхищения и изучения Это мое мнение. Желающие могут высказать свои.
0
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,588
17.11.2021, 22:27 8
Лучший ответ Сообщение было отмечено imsteelalibreat как решение

Решение

Цитата Сообщение от imsteelalibreat Посмотреть сообщение
с полным кодом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
template<typename RandomAccessIterator>
bool isSymmetrical(RandomAccessIterator first, RandomAccessIterator last) {
    return first >= last || *first == *last && isSymmetrical(first+1, last-1);
}
 
int main() {
    std::string line("This is abba group.");
 
    int i = 8;
    int j = 11;
 
    std::cout << "'" << line << "'" << " is "
        << (isSymmetrical(line.begin() + i, line.begin() + j) ? "symmetrical" : "not symmetrical")
        << " starting at " << i << " and ending at " << j << "." << std::endl;
 
    return 0;
}
1
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
17.11.2021, 22:43 9

Не по теме:

_Ivana, а я думал, цель форума помогать с контрольными, а не развлекать.

Цитата Сообщение от _Ivana Посмотреть сообщение
Это мое мнение.
"это моё мнение" не значит, что его можно писать и настаивать на правоте, когда его опровергают. Иначе мы придём к миру, в котором кто угодно может говорить что угодно и не отвечать за базар. К сожалению, зуммерское поколение действительно куда-то в этом направлении катится. Раньше такого не было.


Цитата Сообщение от _Ivana Посмотреть сообщение
Один из них не удовлетворяет заданию и при этом до безобразия скучный.
моя функция не только удовлетворяет заданию, но её к тому же можно без палева принести в универ, колледж ПТУ лицей или школу! Потому что когда её покажешь учителю у него не возникнет вопроса "где ты списал???"
А по поводу скуки: эти лабы школьного уровня и не для развлечения пишутся, для них нормально быть скучными.
0
2832 / 2337 / 707
Регистрация: 29.06.2020
Сообщений: 8,653
17.11.2021, 23:09 10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
но её к тому же можно без палева принести в универ, колледж ПТУ лицей или школу!
На этот счет есть только один выход, написать самому. Те кто сюда приходят за помощью, должны это учитывать.
Или хотя бы как минимум переписать и разобраться что-где-куда.
Иначе толковый преподаватель обязательно поставит вопрос на который "списыватель" ответить : "еее - ууу"

А на счет использования рекурсивных функций, я категорически против.
Их использование всегда накладывает много ограничений.
Если есть возможность не использовать рекурсию, так нужно и поступать.
С длиной строки больше 100’000 стека почти наверняка не хватит.
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
18.11.2021, 00:45 11
Вы можете быть сколько угодно
Цитата Сообщение от SmallEvil Посмотреть сообщение
категорически против
и даже пытаться обосновывать эту позицию, но это требование явно указано в задании

ЗЫ ну и на закуску

Иначе мы придём к миру, в котором кто угодно может говорить что угодно и не отвечать за базар. К сожалению, зуммерское поколение действительно куда-то в этом направлении катится. Раньше такого не было.
моя функция не только удовлетворяет заданию, но её к тому же можно
яркий пример, как представитель зумерского поколения, не способный понять ни условие задания, ни его чужие реализации, надменно и с помпой несет полную дичь, рассуждает об упадке нравов, кидает претензии направо и налево, сам при этом не отвечая за базар... Непроходимая тупость в сочетании с самоуверенностью - страшная вещь...

Добавлено через 25 минут
Едем дальше, по поводу "зуммеров, говорящих что угодно"
Цитата Сообщение от SmallEvil Посмотреть сообщение
Их использование всегда накладывает много ограничений.
Кто вам внушил это заблуждение?
Цитата Сообщение от SmallEvil Посмотреть сообщение
Если есть возможность не использовать рекурсию, так нужно и поступать.
Возможность не использовать рекурсию есть всегда. Клини гарантировал.
Цитата Сообщение от SmallEvil Посмотреть сообщение
С длиной строки больше 100’000 стека почти наверняка не хватит.
C++
1
2
3
4
5
typedef unsigned long long int ull;
 
bool f(ull s, ull i, ull j) { return i>=j ? true : i+j != s ? false : f(s, i+1, j-1); }
 
int main() { ull i=1, j=1E9; std::cout << f(i+j, i, j); }
1
1E9, Карл. Больше просто не укладывается в ограничение 5 секунд на рекстестере. Не строка (не влезла в память на рекстестере), но тот же самый алгоритм - проверка равенства суммы симметричных от середины значений части натурального ряда. Рекурсия, никакого SO. Компиляторы умнее тех, кто боится рекурсии
0
2832 / 2337 / 707
Регистрация: 29.06.2020
Сообщений: 8,653
18.11.2021, 00:58 12
Цитата Сообщение от _Ivana Посмотреть сообщение
Рекурсия, никакого SO. Компиляторы умнее тех, кто боится рекурсии
При чем тут : "боюсь". Я не один раз сталкивался с SO при рекурсиях.
Ну да ладно. Удачи.
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
18.11.2021, 01:04 13
Цитата Сообщение от SmallEvil Посмотреть сообщение
При чем тут : "боюсь". Я не один раз сталкивался с SO при рекурсиях.
В том и смысл, чтобы использовать, но не сталкиваться.
Цитата Сообщение от SmallEvil Посмотреть сообщение
Ну да ладно. Удачи.
Взаимно и аналогично.
0
0 / 0 / 0
Регистрация: 16.11.2021
Сообщений: 7
18.11.2021, 15:19  [ТС] 14
2 All
Ребят, я конечно понимаю что вы стараетесь постоянно сделать красивый и понятный код, но я же в свою очередь только начал изучать этот язык и сделал буквально три работы в пару строк и сразу же после них я получил это задание. Я надеялся получить полный код чтобы потом сидеть и разбираться в интернете что каждая строка делает(что и сделал lemegeton ,но я только зашел на форум и только начну проверять). Я просто хочу сказать что пользователям как я лучше не стоит кидать красивый и умный код в одну строку ведь я просто не пойму его ,а еще хуже если я принесу это учителю ничего не поняв и он увидев это по любому поймет что я не способен такое сделать на таком этапе обучения
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
18.11.2021, 15:41 15
imsteelalibreat, и я об этом, бро
0
2832 / 2337 / 707
Регистрация: 29.06.2020
Сообщений: 8,653
18.11.2021, 15:50 16
imsteelalibreat, специально для тебя, корявый "простой" код.
Комментарии нужны ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
bool Simm(const char* S, size_t I, size_t J){
    bool res = true;
    if (I <= J)
        if (S[I] == S[J]){
            res = res && Simm(S, I+1, J-1);
        }else
            return false;
    return res;
}
int main()
{
    cout<<Simm("kolobok", 3, 5); // [3, 5] = "obo"
 
    return 0;
}
Добавлено через 3 минуты
щас я так дообрезаюсь ))
2
0 / 0 / 0
Регистрация: 16.11.2021
Сообщений: 7
18.11.2021, 15:56  [ТС] 17
Давай, если не трудно , то я был бы благодарен за комментарии
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
18.11.2021, 16:05 18
SmallEvil, res всё-таки только усложняет и на первый взгляд, его можно выкинуть
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
#include <iostream>
 
using namespace std;
/*
принцип - симметричная строка - строка, у которой равны начальная и 
конечная буквы + остальная часть в середине симметрична
это рекурсивное "условие"
*/
bool Simm(const char* S, size_t I, size_t J) {
    if (I <= J)
        if (S[I] == S[J]) {//если верна первая половина "условия"
            return Simm(S, I + 1, J - 1);//то проверить остальную часть строки
            //"остальная" часть это строка S начинающаяся I+1-м и заканчивающаяся в J-1 -м ее элементами
        }
        else
            return false;//иначе строка не симметрична.
    return true;
}
int main()
{
    cout << Simm("kolobok", 3, 5); // [3, 5] = "obo"
 
    return 0;
}
1
2832 / 2337 / 707
Регистрация: 29.06.2020
Сообщений: 8,653
18.11.2021, 16:14 19
Лучший ответ Сообщение было отмечено imsteelalibreat как решение

Решение

imsteelalibreat,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
// I, J - индексы, в задании ожидаются порядковые номера
// переделать - ваше домашнее задание 
bool Simm(const char* S, size_t I, size_t J){
    bool res = true; // изначальное осстояние, личный выбор программиста.
    if (I <= J) // пока левый индекс не больше правого 
        if (S[I] == S[J]) // если символы равны
            res = res && Simm(S, I+1, J-1);  // сохраняем наш изначальный статут (true) и совмещаем с рекурсивным вызовом
            // если Simm ыернет аalse то и результат станет false
        else // если символы S[I] b S[J] не равны, значит подстрока не симметрична
            return false;
    return res; // res определен
}
int main()
{
    cout<<Simm("kolobol", 2, 6); // [2, 6] = "lobol" // 1-ый символ - имеет индекс 0
 
    return 0;
}
Добавлено через 50 секунд
Kuzia domovenok, согласен, но я же старался накосячить, написать по нубски )))
1
0 / 0 / 0
Регистрация: 16.11.2021
Сообщений: 7
18.11.2021, 16:57  [ТС] 20
2 All
спасибо большое ,ребят
0
18.11.2021, 16:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2021, 16:57
Помогаю со студенческими работами здесь

Написать рекурсивную функцию, определяющую, является ли симметричной часть строки x, начиная с i-ого элемента
Написать рекурсивную функцию, определяющую, является ли симметричной часть строки x, начиная с...

Описать рекурсивную логическую функцию, проверяющую, является ли симметричной часть строки
3 Задачи решить надо.. Описать рекурсивную логическую функцию, проверяющую, является ли...

Описать рекурсивную логическую функцию Sym(S, i, j), проверяющую, является ли симметричной часть строки S
Описать рекурсивную логическую функцию Sym(S, i, j), проверяющую, является ли симметричной часть...

Описать рекурсивную логическую функцию Simm(S,l, J), проверяющую, является ли симметричной часть строки S
Привет всем, помогите сделать спуск и возврат по этому коду function...

Описать рекурсивную логическую функцию Simm(S,I,J), проверяющую, является ли симметричной часть строки
Составить программы, использующие рекурсивные методы и печатающие результаты вычислений. Для...

Описать рекурсивную логическую функцию cumm (s,I,j),Проверяющую ,является ли симметричной часть строки s,Начинающаяся i-m и кончающаяся j-m ее элем
Описать рекурсивную логическую функцию cumm (s,I,j),Проверяющую ,является ли симметричной часть...

Описать логическую (возможно рекурсивную) функцию, проверяющую является ли симметричной часть массива
Описать логическую (возможно рекурсивную) функцию, проверяющую является ли симметричной часть...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru