По пути обучения встретился с данным заданием, не могу придумать принцип решения, может у кого возни

Тема в разделе "TASM", создана пользователем Solo_, 5 дек 2019.

  1. Solo_

    Solo_ New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2019
    Сообщения:
    1
    По пути обучения встретился с данным заданием, не могу придумать принцип решения, может у кого возникнут идеи? Я дошел только до принципа полного реверса строки и последующего реверса каждого слова, но организовать его пока не получилось

    Задание: Ввести с клавиатуры строку, содержащую несколько слов, разделенных пробелом. Переставить в ней слова, поменяв местами первое слово с последним, второе с предпоследним и т.д. Вывести результаты на экран.

    Встречал решения подобных задачек, но так и не смог в них разобраться, так как еще не сильно шарю.
    Из уточнений: Должен быть организован ввод(и вывод) через прерывание, именно в командной строке, а не в самом коде, сам код желательно должен быть как можно проще, либо же помогите в последствии мне разобраться во всем.
     
  2. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    стэк?
     
    njeen нравится это.
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    вроде все просто.
    по ходу ввода запоминаем пробелы (смещения строк) и их количество. После окончания ввода (Enter?) - выводим слова по смещениям, в обратном порядке, начиная с последнего смещения.
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Если нет подробностей по архитектуре, а сказано что то про прерывания(аппаратно-зависимое решение), то это не иначе как лаб работа в досе. Значит нужно открыть справочник по сервисам мсдос.
     
  5. njeen

    njeen Active Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    138
    Адрес:
    Ташлинск
    Тут или стек, где индексы начал слов заталкивать в процессе прямого обхода строки,
    либо что-то вроде псевдомашины Тьюринга сделать:

    (строка должна заканчиваться нулем или пробелом, состоять только из алфавитных
    символов. Впрочем, набор символов алфавита можно сделать относительно
    произвольным)

    Строка введена, лежит в буфере. Начальное состояние - 0.

    Состояния:
    0. Мы в конце введенной строки:
    Если текущий символ не алфавитный - движемся по символу влево, записывая 0 в
    тот, откуда ушли, пока не встретим алфавитный.
    Если дошли до начала буфера - останов.
    Если дошли до алфавитного - оказывается в состоянии 1.

    1. Движемся влево по символу, пока не встретим пробел или начало буфера.
    Если начало - останов.
    Если пробел - идем на символ вправо (стоим на начале слова), выводим
    побуквенно до пробела или 0, записывая пробелы в покидаемый символ, пока не кончатся алфавитные
    символы. Кончились - значит в состоянии 0.
     
  6. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.173
    Адрес:
    подполье
    Самое простое решение это стэк плюс рекурсия. А вы ждали код который это делает? Так его не будет
     
    TermoSINteZ и Mikl___ нравится это.