0 / 0 / 0
Регистрация: 25.11.2019
Сообщений: 3
|
|
1 | |
TASM Переставить в строке слова, поменяв местами первое слово с последним, второе с предпоследним25.11.2019, 14:44. Показов 8053. Ответов 10
По пути обучения встретился с данным заданием, не могу придумать принцип решения, может у кого возникнут идеи?
Ввести с клавиатуры строку, содержащую несколько слов, разделенных пробелом. Переставить в ней слова, поменяв местами первое слово с последним, второе с предпоследним и т.д. Вывести результаты на экран.
0
|
|
25.11.2019, 14:44 | |
Ответы с готовыми решениями:
10
Переставить слова, поменяв местами первое слово с последним, второе с предпоследним Переставить символы в строке, поменяв местами первый символ с последним, второй с предпоследним и т.д. Переставить все слова в исходном тексте так, чтобы первое слово стало последним, второе-предпоследним и т.д.
|
Модератор
![]() |
|
25.11.2019, 15:10 | 2 |
Принцип, думаю, простой. Без реализации уже встречал его описание.
1. Реверс всей строки - поменять местами все символы. 2. Выделять в строке слова и выполнять реверс каждого слова. Можно и сложнее: 1. Выделять в строке слова 2. Для каждого слова выполнять циклическое вращение подстроки (от начала слова до конца строки) на величину длины слова Можете отработать алгоритм на любом языке программирования. Потом построчно переводить его на ассемблер - там будет почти "строка на языке" - "строка на ассемблере". Объём кода великоват для выполнения его за вас. Образцы выделения слов и пояснения Описание алгоритма (tasm StrLen) Количество слов, содержащих более 3-х символов Программы на его основе (изменено лишь действие после выделения очередного слова: (tasm StrLen) В строке в словах с четным номером изменить порядок букв на обратный (tasm StrLen) Расположить слова в обратном порядке (tasm StrLen) Найти и вывести все симметричные слова (tasm StrLen) Обмен в исходном файле соседних слов местами (tasm StrLen) Удалить слова с повторяющимися буквами (tasm StrLen) Выяснить, есть ли во введённом тексте слова, начинающиеся с буквы "А", и сколько таких слов (tasm StrLen) Определить сколько слов в тексте начинаются и оканчиваются одной и той же буквой (tasm StrLen) Выяснить, есть ли во введённом тексте слова, оканчивающиеся на "f" (tasm StrLen) Определить сколько слов содержат хотя бы одну букву "В" (tasm StrLen) Вывести последнее слово строки (fasm DOS StrLen) Нахождение короткого слова Обменять слова с максимальным и минимальным количеством букв «а» (tasm обмен двух слов через буфер) Добавлено через 6 минут Циклическое вращение подстроки Сортировка слов в строке по ASCII. Программа зацикливается Дана последовательность от 1 до 30 слов. Вывести все слова в алфавитном порядке
1
|
0 / 0 / 0
Регистрация: 25.11.2019
Сообщений: 3
|
|
25.11.2019, 15:11 [ТС] | 3 |
Благодарю, сейчас буду работать
0
|
Модератор
![]() |
|
25.11.2019, 15:25 | 4 |
Я бы рекомендовал
1. Реверс всей строки - поменять местами все символы. 2. Выделять в строке слова и выполнять реверс каждого слова. Это выглядит наиболее просто. Реверс подстроки можно реализовать процедурой.
0
|
Модератор
![]() |
||||||
27.11.2019, 19:44 | 5 | |||||
![]() Решение
Реверс всей строки и последующий реверс каждого слова
1
|
0 / 0 / 0
Регистрация: 25.11.2019
Сообщений: 3
|
|||||||||||
05.12.2019, 16:49 [ТС] | 6 | ||||||||||
Что идёт не так в программе?
Требуется ввести с клавиатуры строку из слов с разделителями, программа должна поменять местами первое и последнее слово, второе с предпоследним и так далее до конца, после чего вывести начальный вариант и результат. Основываясь на методичках и статьях в интернете написал данный код, но вместо строки выводятся непонятные символы, по всей видимости из кеша Вот код, прошу прощения, что без комментариев (позже могу скинуть скрины диаграммы, по которой писал сам код)
Недавно тут же помогли с кодом, но он оказался слишком замороченным и не подошёл, пришлось писать самому Вот тот код, в нем, к тому же, не организован ввод строки с клавиатуры
0
|
Модератор
867 / 447 / 246
Регистрация: 10.11.2019
Сообщений: 913
|
||||||
06.12.2019, 11:31 | 7 | |||||
Задача
Ввести строку Поменять первое слово с последним, второе с предпоследним и т д Алгоритм. На первый взгляд кажется, что необходимо строку делить на слова, менять слова местами и т д. На самом деле всё проще. Пусть имеется строка one two three Отобразим строку зеркально eerht owt eno Теперь чтобы получить нужный результат надо все слова отразить зеркально: three two one Это можно сделать, занеся символы слова в стек, а затем вытолкнув из стека на печать.
0
|
3405 / 1824 / 489
Регистрация: 28.02.2015
Сообщений: 3,697
|
||||||
06.12.2019, 15:48 | 8 | |||||
Ну Вы тут на упрощали.
Ещё проще:
![]()
0
|
Модератор
![]() |
|||||||||||
06.12.2019, 18:11 | 9 | ||||||||||
Если не решать задачу формирования итоговой строки, а сразу выводить по мере выделения слов, то можно сокращать и сокращать. Честно - не пойму, чем вариант с реверсом всей строки и последующими реверсами отдельных слов создаёт впечатление "слишком замороченного" (аргумент "к тому же, не организован ввод строки с клавиатуры" и видеть не желаю - нашлась, вот, проблема!).
Если вынести повторения в процедуры, убрать комментарии и пустые строки, метки не выделять отдельными строками, сэкономить на объявлении и инициализации сегмента данных, убрать именованные константы, воспользоваться трюками и сэкономить на одном вызове процедуры Show (экономия 1 строки) - так и мой код превращается в короткий образец:
Не, вот так, чтобы усилить эффект
0
|
3405 / 1824 / 489
Регистрация: 28.02.2015
Сообщений: 3,697
|
||||||
08.12.2019, 00:46 | 10 | |||||
Вам бы в политики пойти.
Ревесировать реверсированеое, а "навар" от двойного реверсирования в карман положить. ![]()
Посчитайте целесооброзность использования п/п-м и прямого кода.
0
|
Модератор
![]() |
|
08.12.2019, 15:16 | 11 |
Всё это лирика.
Как понимаю, топикстартер не может понять алгоритм и, естественно, сдать лабу. Пытался что-то изобразить - но из-за отсутствия представления об алгоритме - ничего не получается - ведь опубликовав наработки, он так и не пояснил, как он решает. AlbertBor, вы должны сделать декомпозицию задачи и решать её по частям. При этом, ускорение отладки будет за счёт отсутствия ввода строки - после получения рабочего кода добавите ввод. В любом случае, нужно научиться выделять слова. Значит учитесь выделять и выводить эти слова в кавычках, чтобы видеть, что выделено слово без дополнительных пробелов. А дальше - всё зависит от выбранного способа решения - алгоритма.
1
|
08.12.2019, 15:16 | |
Помогаю со студенческими работами здесь
11
В строке поменять слова первое с последним,второе с предпоследним и т.д. Что нужно поменять что бы программа меняла местами слова первое с последним второе с предпоследним и т.д? Сформировать строку, «склеив» первое слово с последним, второе с предпоследним и т.д. Дана строка. Поменять Первое слово с последним, второе с предпоследним и т.д Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |