|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.11.2016, 12:54 | #1 |
Пользователь
Регистрация: 17.11.2015
Сообщений: 62
|
[Pascal] Нужна помощь в решении задачи "Слова-перевертыши"
Добрый день,
Условие: Слова-перевертыши Словом назовем набор символов без пробелов. Текст содержит набор слов, разделенных пробелами (одним или несколькими). Других знаков препинания в тексте нет. Все символы текста строчные буквы английского алфавита. Необходимо найти и вывести слова-перевертыши (читаются одинаково слева-направо и справа-налево) максимальной длины. Если «перевертышей» максимальной длины несколько, то вывести их все в порядке следования в предложении. Повторяющиеся слова выводятся один раз. Если таких слов нет, то вывести сообщение «no». Входные данные: В единственной строке входного файла input.txt записаны символы. Строка состоит не более, чем из 250 символов. Выходные данные: В файл output.txt нужно вывести слова-перевертыши. Если «перевертышей» максимальной длины несколько, то вывести их все в порядке следования в предложении, разделив пробелом. Повторяющиеся слова выводятся один раз. Если таких слов нет, то вывести сообщение «no». Примеры: № input.txt 1 tot sos aaatrr 2 ttot sto aaatrr 3 tt diк tt tt rrra № output.txt 1 tot sos 2 no 3 tt Уже 2 день сижу над этой задачей. Но ничего путного не выходит. Нужна помощь в поиске рационального и компактного алгоритма. Больше всего трудностей вызывает у меня поиск правильного алгоритма для отсеивания повторяющихся слов в строке, а так же определения max длины слова перевертыша в строке. Мой код программы: Код:
Код:
Жду помощи Последний раз редактировалось artems67; 27.11.2016 в 13:48. |
27.11.2016, 13:22 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
По поводу ошибки поищи, где лишний ; поставил в коде.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
27.11.2016, 13:59 | #3 |
Пользователь
Регистрация: 17.11.2015
Сообщений: 62
|
Спасибо. Нашёл лишний ' ; ' после комментария. Теперь код компилируется, но при запуске программы выводит следующее сообщение:
Я так понял ошибка на 27 строке кода ? 27 строка кода: Код:
Не понимаю. Всё тут просто тупик. Начинаю костыли пихать, всё либо ещё хуже либо пустой файл output.txt получаю. |
27.11.2016, 14:04 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
А чего ему не выйти? Цикл по j, а индекс с чего-то i
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
27.11.2016, 14:06 | #5 |
Пользователь
Регистрация: 17.11.2015
Сообщений: 62
|
Аватар, да вы правы, исправил эту нелепость.
Теперь все работает хорошо, за исключением того, что если первым набором символов до пробела окажется слово-перевертыш, то оно будет изначально записываться в файл output.txt, так как строка s2 будет являться пустой а значит length(s1) > length(s2). А надо мне сделать так, чтобы, получается, в строке s2 хранился самый длинный набор символов из исходной строки s, причем этот набор символов должен являть собой слово-перевертыш. Все голова опухла, теперь надо думать как это реализовать и пропихнуть в мой ужас под названием код программы. Последний раз редактировалось artems67; 27.11.2016 в 14:14. |
27.11.2016, 14:12 | #6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Ну сфокусируйся на той строчке, уже и написал что не так. Ошибка того же рода, как и лишняя точка с запятой. Внимательней нужно быть, не думать о девицах в процессе программирования
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
27.11.2016, 14:50 | #7 |
Пользователь
Регистрация: 17.11.2015
Сообщений: 62
|
Its alive ! its alive !
Чуть доработал код, вставив отдельный цикл для нахождения слова перевертыша-макс длины. Переменной х присвоил length макс. слова-перевертыша. Далее в основном цикле просто через условие сравнивал длины символов до пробела с x . Я понимаю, что поиск max length и наверное основной цикл можно оптимизировать, разгрузив его подпрограммами, может попытаюсь сделать это чуть позже. Дам голове остыть. Если кому интересен ниже мой "франкинштейн", в назидание как не стоит уродовать свой код громоздкими конструкциями циклов и операторов выбора. Уродливый, но рабочий код. Код:
|
27.11.2016, 15:26 | #8 |
2 the Nation Glory
Старожил
Регистрация: 27.05.2014
Сообщений: 3,289
|
На досуге посмотри еще такой вариант
Код:
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы. |
27.11.2016, 15:40 | #9 |
Пользователь
Регистрация: 17.11.2015
Сообщений: 62
|
Aleksandr H.,
Ошибка при запуске вашего кода: Индекс находился вне границ массива строка 45 |
27.11.2016, 15:50 | #10 |
2 the Nation Glory
Старожил
Регистрация: 27.05.2014
Сообщений: 3,289
|
Может быть. А на каких входных?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужна помощь в решении задачи | MarcusAurelius | Помощь студентам | 10 | 14.09.2015 19:47 |
нужна помощь в решении задачи! | Elusive Devil | Помощь студентам | 2 | 22.03.2009 16:17 |
Нужна помощь в решении задачек, тема "Циклы с переменным количеством шагов" | DJ Kost | Помощь студентам | 3 | 16.01.2009 13:26 |
Очень нужна помощь по Turbo Pascal...Не могу составить програму,по теме:"Процедуры и файлы"...( | Zara | Помощь студентам | 2 | 02.12.2008 18:23 |