![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 14.09.2011
Сообщений: 93
|
![]()
Задан текст - последовательность литер. Распечатать его, обращая каждую групп из 5 следующих друг за другом литер, т.е. печатая литеры этой группы в обратном порядке. Последнюю групп обращать, даже если она содержит менее 5 литер. В программе не должно быть циклов. Использую только рекурсию
|
![]() |
![]() |
![]() |
#2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Наработки в студию.
I'm learning to live...
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 14.09.2011
Сообщений: 93
|
![]()
Вот код программы, которая обращает слово, но на конце слова стоит точка, то есть тут мы можем узнать конец
Код:
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
распиши, что должен делать, и что делает по факту, приведенный выше код.
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 14.09.2011
Сообщений: 93
|
![]()
мы вводим слово с точкой на конце, например "ма."
дальше с помощью Код:
Код:
Аналогично с буквой 'а'. Теперь, что же касается '.' В данном случае условие не сработает и точка напечатается и потом вернемся к двум printf, которые мы не успели сделать. По принципу рекурсии Можно было также сделать, чтобы точка не выводилась например изменить кусок программы: Код:
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
У тебя получается:
Функция sl() 1. мы вводим слово с точкой на конце, например "ма." 2. мы убеждаемся, что 'м' не '.' и вызываем sl(), то бишь снова уходим на пункт 1 Получается: вводим "слово", убеждаемся, что первый символ строки не точка, и снова вводим "слово", убеждаемся, что первый символ строки не точка, и снова вводим.... Ты понял свою ошибку? |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 14.09.2011
Сообщений: 93
|
![]()
Ты имеешь ввиду, что не надо сразу все слово вводить? а по символам ?
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Я имею ввиду, что у тебя ошибка в самом алгоритме.
Не думай о коде. Думай только об алгоритме. Распиши обычными русскими словами, какую именно последовательность действий ты хочешь получить. Например, алгоритм твоей задачи может выглядеть так: 1. Пользователь вводит строку. 2. Нужно шагать по всей строке пока не будет достигнут признак конца строки (специальный символ, символизирующий конец строки) 3. И запоминать позицию каждого очередного пятого символа (что бы знать с какой позиции начать "обратное отображение" 5. Прошагав очередные 5 символов - вывести их в обратном порядке (вывести задом наперед символы, зная позицию последнего символа из очередной пятёрки) 6. Уйти на пункт 2. Дальше конкретизируешь алгоритм, разбивая большую сложную задачку на кучку мелких: 1. Функция инициализации. Отвечает за ввод первоначальных данных. Именно она запустит механизм ввода строки от пользователя. 2. Рекурсивная (так нужно по заданию) функция пробега по всему массиву. Ей нужно знать позицию в строке, с которой она начинает шагать свои 5 символов подряд. Функция либо прошагает 5 символов, и выведет их в обратном порядке, либо прошагает менее 5 символов, и этот остаток выведет в обратном порядке. Или - завершит свою работу. И тем самым, рекурсия будет остановлена. Эту рекурсивную функцию, так же можно при желании раздробить на основную функцию пробега по массиву, и на функцию, задача которой - вывод данных в обратном порядке. Дополнительной функции вывода пятёрки символов в обратном порядке требуется знать позицию последнего символа очередной пятёрки, и точное количество символов в этой очередной пятёрке (количество символов, которое нужно отобразить в обратном порядке необходимо, потому что их может оказаться и меньше пяти) Итого: 1. Инициализация. Требуется знать в какой приёмник данных можно поместить строку. В качестве приёмника может выступать массив, или указатель на данные. 2. Рекурсивный пробег. Требуется знать, с какой позиции в строке осуществляется пробег. Каждая следующая рекурсия выполняется не с самого начала строки, а с этой позиции (а значит, позиция самой первой рекурсии - ноль) 3. Вывод очередной партии символов в обратном порядке. Требуется знать позицию последнего символа в партии, а так же длину этой партии. В общем, прежде, чем приниматься за конструирование кода, ты должен иметь в голове предельно четкий и ясный алгоритм - всю последовательность действий. Тогда написать код будет очень просто. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ввод/вывод на экран литер | masterbet | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 21.11.2011 22:39 |
последовательность | -=Дрюня=- | Помощь студентам | 5 | 15.11.2011 14:27 |
Дана последовательность литер | мурчик | Помощь студентам | 0 | 25.10.2011 22:54 |
Последовательность | aleksei128 | Помощь студентам | 12 | 22.12.2010 23:48 |
"введите текст из 100 литер..." | katya36 | Помощь студентам | 39 | 22.12.2008 17:39 |