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

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

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2019, 11:31   #1
lucykekson
Новичок
Пользователь
 
Регистрация: 21.06.2019
Сообщений: 10
Лампочка Помогите понять логику решения

Здравствуйте, я новичок в программировании и столкнулась с задачей определения палиндромов, то есть слов, которые одинаково читаются справа налево и слева направо (функция принимает строку, проверяет палиндром ли она и возвращает true или false). Портал, на котором я учусь, предлагает следующее решение задачи:

Код:
bool IsPalindrom(string s) {
    for (size_t i = 0; i < s.size() / 2; ++i) {
        if (s[i] != s[s.size() - i - 1]) {
            return false;
        }
    }
    return true;
}
я из-за недостаточной базы знаний никак не могу понять логику этого решения. Например, почему нужно делить сроку пополам для сравнения элементов?
В общем, я была бы очень благодарна, если кому-нибудь будет не лень прокомментировать это решение!
lucykekson вне форума Ответить с цитированием
Старый 21.06.2019, 11:34   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Сообщение от lucykekson Посмотреть сообщение
Например, почему нужно делить сроку пополам для сравнения элементов?
А вы напишите любое слово ручками на бумаге и проверьте на палиндром. Что произойдет после половины?
p51x вне форума Ответить с цитированием
Старый 21.06.2019, 11:35   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

абба
сравнивается в цикле 1-ая и 4-ая, 2-ая и 3-ья буквы. совпадают - палиндром. если букв нечетное количество, то среднюю нет необходимости сравнивать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.06.2019, 12:13   #4
lucykekson
Новичок
Пользователь
 
Регистрация: 21.06.2019
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
абба
сравнивается в цикле 1-ая и 4-ая, 2-ая и 3-ья буквы. совпадают - палиндром. если букв нечетное количество, то среднюю нет необходимости сравнивать
Большое спасибо за ответ!
То есть, получается, что s[i] - это первая половина строки, а s[s.size() - i - 1] - вторая?
lucykekson вне форума Ответить с цитированием
Старый 21.06.2019, 12:15   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

А подставить цифирки это проблема для вас?
s[0] и s[s.size()-1]
s[1] и s[s.size()-2]
...
p51x вне форума Ответить с цитированием
Старый 21.06.2019, 12:18   #6
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
абба
сравнивается в цикле 1-ая и 4-ая, 2-ая и 3-ья буквы. совпадают - палиндром. если букв нечетное количество, то среднюю нет необходимости сравнивать
А он хочет так: 1я и 4-я, 2-я и 3-я, 3-я и 2-я, 4-я и 1-я.
taras-proger77 вне форума Ответить с цитированием
Старый 21.06.2019, 14:43   #7
lucykekson
Новичок
Пользователь
 
Регистрация: 21.06.2019
Сообщений: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А подставить цифирки это проблема для вас?
s[0] и s[s.size()-1]
s[1] и s[s.size()-2]
...
Ну да, проблема
Я же написала, я совсем недавно начала учить язык, и мне в принципе в конкретно этом примере не совсем понятно, что происходит в коде, поэтому и попросила мне это разжевать
lucykekson вне форума Ответить с цитированием
Старый 21.06.2019, 14:49   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Причем тут код и язык. Я вам опять предлагаю взять ручку и листок, написать слово и пальцем по буквам проверить на палиндром.
Записать сначала в простейшем варианте алгоритм: типа беру первую букву и сравниваю с последней, беру вторую и ...
Потом делаете второй шаг и заменяете в полученном алгоритме обыденные слова на более алгоритмические - не первая, а с индексом 0, не последняя - а с индексом размер строки-1 и т.д.
Делаете следущий шаг - понимаете, что делаете одно и тоже, и это цикл. Так и пишите ПОВТОРЯТЬ ДЛЯ или ПОВТОРЯТЬ ПОКА.

Заметьте это без каких-либо знаний языка делается...
p51x вне форума Ответить с цитированием
Старый 21.06.2019, 15:11   #9
lucykekson
Новичок
Пользователь
 
Регистрация: 21.06.2019
Сообщений: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Причем тут код и язык. Я вам опять предлагаю взять ручку и листок, написать слово и пальцем по буквам проверить на палиндром.
Записать сначала в простейшем варианте алгоритм: типа беру первую букву и сравниваю с последней, беру вторую и ...
Потом делаете второй шаг и заменяете в полученном алгоритме обыденные слова на более алгоритмические - не первая, а с индексом 0, не последняя - а с индексом размер строки-1 и т.д.
Делаете следущий шаг - понимаете, что делаете одно и тоже, и это цикл. Так и пишите ПОВТОРЯТЬ ДЛЯ или ПОВТОРЯТЬ ПОКА.

Заметьте это без каких-либо знаний языка делается...
Я понимаю, как работает цикл фор, вопрос не совсем в этом.
Про деление на два я теперь тоже поняла. А s[s.size() - i - 1] что конкретно обозначает? Можете, пожалуйста, объяснить?

Последний раз редактировалось lucykekson; 21.06.2019 в 15:13.
lucykekson вне форума Ответить с цитированием
Старый 21.06.2019, 15:17   #10
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
s[s.size() - i - 1] что конкретно обозначает?
взять из строки S елемент с позиции [ДлинаСтроки - 1 - текущаяПозиция"Пальца"]
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять алгоритм решения задачи. Антон18 Паскаль, Turbo Pascal, PascalABC.NET 21 03.08.2016 05:17
Паскаль: Помогите понять основу для написания простейшей программы. Не могу понять суть. romanya Паскаль, Turbo Pascal, PascalABC.NET 2 18.03.2016 20:35
Помогите понять логику программы (Pascal) WeaKill47 Помощь студентам 0 06.10.2014 16:11
Не могу понять женскую логику Smitt&Wesson Свободное общение 160 16.06.2014 09:07
как понять алгоритм и среду решения для скачивания файлов genhoo Помощь студентам 4 05.05.2011 15:19