Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Assembler Ввод с клавиатуры и вывод на экран 32-разрядных чисел Изучаю совсем недавно ASM, изучение идёт ну очееень тяжело. Помогите пожалуйста всё "по полочкам" разложить. Перечитала многое, всё равно не могу понять что да как. Программу помогли исправить ( за... https://www.cyberforum.ru/ asm-beginners/ thread1980950.html DUP содержит случайные числа Assembler
резервирую данные для массива с помощью dup 30(0). В итоге получается, что незаполненные (после прохождения алгоритма) ячейки содержат случайные значения, причём они меняются при перестановке данных...
Assembler Вывод двойных слов Сап анон, полгода учу MASM 4.0 (Intel 8086). Возникла проблема с красивым выводом двойных слов. Ясно что можно выводить их как: mov ax,word ptr x outint ax mov ax,word ptr x+2 outint ax Однако... https://www.cyberforum.ru/ asm-beginners/ thread1980846.html Assembler Использование системного сервиса.Ввод данных с клавиатуры.Вывод на экран Я пропустил эту тему и теперь не знаю,как сделать это задание. Создать числовой массив в сегменте данных из 10-ти однобайтных чисел , вводимых с клавиатуры в hex-виде.Созданный массив показать на... https://www.cyberforum.ru/ asm-beginners/ thread1980810.html
Assembler Посчитать сумму всех элементов двумерного массива и найти медиану (среднее арифметическое)
Здравствуйте. Не получается вывод вывод для двухбайтового массива. Скажите, пожалуйста, где ошибка в коде. Вот само задание: Посчитать сумму всех элементов двумерного массива и найти медиану...
Assembler Ввести строку и удалить палиндромы https://www.cyberforum.ru/ asm-beginners/ thread1980713.html
Требуется ввести строку символов, состоящую из отдельных слов, разделенных пробелами. В результирующей удалить слова палиндромы. Вывести на экран исходную и результирующую строки.
Assembler Найти номер максимального числа Максимальное число находит, заношу в регистр BX, а номер пишет 5, хотя должен быть 7 , так как макс число 15 в массиве, в чем ошибка?, Потом нужно номер и максимально число перемножить и поместить в... https://www.cyberforum.ru/ asm-beginners/ thread1980604.html Строка: Расставить последовательность латинских букв по алфавиту Assembler
1. Дана последовательность латинских букв длиной 18 символов. Расставить их по алфавиту. 2. Удалить из строки слова, содержащие больше 2 букв «а» нужно сделать задачи для emu8086
Assembler Графический редактор, который позволяет рисовать линии https://www.cyberforum.ru/ asm-beginners/ thread1980523.html
Графический редактор, который позволяет рисовать линии. Начало и конец линии определяется курсором. Turbo Assembler. Помогите, пожалуйста!
Assembler Массив структур: выборка по одному из полей https://www.cyberforum.ru/ asm-beginners/ thread1980459.html
Здравствуйте, 3 день думаю над задачей: Сформировать записи, которые содержат информацию о N поездов, отправляющихся с вокзала станции Хмельницкий (номер поезда, станция назначения, время...
Assembler Неправильное вычисление знаменателя (signed byte)
При компиляции ошибок нет. Числитель вычислен правильно, но знаменатель нет. Помогите, пожалуйста, выявить ошибку (signed byte) .686 .MODEL FLAT, C .data extern...
Assembler Копирование чётных чисел из заданного массива Уважаемые знатоки. Помогите создать программу, либо же укажите ссылочкой на существующие аналоги, которая из заданного массива перепишет в новый массив парные элементы. Буду рад любой информации,... https://www.cyberforum.ru/ asm-beginners/ thread1980262.html
Модератор
Эксперт по электронике
8276 / 4180 / 1595
Регистрация: 01.02.2015
Сообщений: 12,998
Записей в блоге: 3
21.05.2017, 23:08 0

Найти слова, в которых заданный символ встречается наибольшее количество раз - Assembler - Ответ 10462363

21.05.2017, 23:08. Показов 2048. Ответов 3
Метки (Все метки)

Ответ

Можно так, но программа различает регистр букв - буквы 'A' и 'a' разные. Если различать не требуется, то нужно перед обработкой строки привести её к одному регистру.

Информация о всех найденных словах (адрес начала, длина слова, количество искомых символов) сохраняется в стеке. Попутно определяется максимально встреченное количество искомых символов в отдельно взятом слове.
После того, как строка закончилась, начинается извлечение данных из стека. И если очередное слово содержит максимальное количество символов, то оно выводится на экран.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
LOCALS
 
.model small
 
.stack 1000h
 
.data
        ;строка для исследования
        String                  db      'Mateusz Viste writes: DWOL is '
                                db      'a tiny tool that computes and '
                                db      'sends "Wake-on-LAN" packets. '
                                db      'Wake-on-LAN (WOL) is an Ethernet '
                                db      'standard that allows a computer to '
                                db      'be turned on by a network message.', '$'
        Len                     dw      $-String
        ;искомый символ
        Char                    db      'e'
 
        ;символы разделители слов
        DelimChars              db      '.,!?;:"() ', "'"
        LenDelimChars           dw      $-DelimChars
        ;переменные
        CrLf                    db      0Dh, 0Ah, '$'   ;перевод троки
        MaxChars                dw      ?               ;максимальное количество искомых символов в слове
        CountWords              dw      ?       ;общее количество слов
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        lea     si,     String
        mov     cx,     Len
        mov     CountWords,     0
        mov     MaxChars,       1       ;значение не нулевое для того, чтобы
                                        ;при отсутствии символа в строке слова не выводились
        ;пропускаем все разделители
@@WhileDelimiter:
        mov     al,     [si]
        call    IsDelimChar
        cmp     ah,     0
        je      @@NewWord
        inc     si
        loop    @@WhileDelimiter
 
        jcxz    @@Finish        ;если строка закончилась - выйти
        ;найдено новое слово
@@NewWord:
        mov     dx,     0       ;длина очередного слова пока равна 0
        inc     CountWords      ;увеличиваем счётчик слов на 1
        mov     di,     0       ;количество искомых символов в очередном слове
        push    si              ;сохраняем в стеке адрес начала слова
        ;пропускаем все буквы слова до разделителя
@@WhileWord:
        mov     al,     [si]
        call    IsDelimChar
        cmp     ah,     0
        jne     @@Break
        cmp     al,     Char
        jne     @@NextChar
        inc     di
@@NextChar:
        inc     dx              ;увеличиваем длину слова
        inc     si              ;переходим к следующему символу
        loop    @@WhileWord
@@Break:
        push    dx              ;сохраняем в стеке длину слова
        push    di              ;сохраняем в стеке количество искомых символов в слове
        cmp     di,     MaxChars
        jbe     @@Next
        mov     MaxChars,       di
@@Next:
        jcxz    @@Finish
        jmp     @@WhileDelimiter
 
@@Finish:
 
        ;вывод результатов
        ;общее количество слов в строке
 
        mov     cx,     CountWords
@@ShowWords:
        pop     ax
        pop     si
        pop     dx
 
        cmp     ax,     MaxChars
        jne     @@SkipShow
        call    ShowWord
@@SkipShow:
        loop    @@ShowWords
 
 
        mov     ax,     4C00h
        int     21h
main    endp
 
;Определяет, принадлежит ли символ в al разделителям слов
;на входе
; al - символ
;на выходе
; ah -  0 (не разделитель), 1 (разделитель)
IsDelimChar     proc
        mov     ah,     0
        pushf
        push    si
        push    di
        push    cx
        push    es
 
        push    ds
        pop     es
        lea     di,     DelimChars
        mov     cx,     LenDelimChars
        cld
        repne   scasb
        jcxz    @@Skip
        jnz     @@Skip
        mov     ah,     1
@@Skip:
        pop     es
        pop     cx
        pop     di
        pop     si
        popf
        ret
IsDelimChar     endp
 
ShowWord        proc
        push    ax
        push    cx
        mov     ah,     40h
        mov     bx,     1
        mov     cx,     si
        mov     dx,     dx
        int     21h
        mov     al,     ' '
        int     29h
        pop     cx
        pop     ax
        ret
ShowWord        endp
 
end     main


Вернуться к обсуждению:
Найти слова, в которых заданный символ встречается наибольшее количество раз Assembler
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2017, 23:08
Готовые ответы и решения:

Найти в тексте слова, в которых некоторый заданный символ встречается наибольшее число раз
1. Дан текст. Найти в нем слова, в которых некоторый заданный символ встречается наибольшее число...

Найти и напечатать все слова строки, в которые заданный символ входит наибольшее количество раз
Задано текст, слова в котором разделены пробелами и разделительными знаками, и символ. Разработать...

Из вводимых строк найти слова, у которых заданный символ встречается дважды - Не работает scanf
#include <stdio.h> #include <conio.h> #include <string.h> #include <ctype.h> #define N 80...

Найти слова, в которых символ в центре слова и в оставшейся части встречается только один раз
Задание: Слово имеет нечетное количество символов, и символ, находящийся в центре слова, в...

3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2017, 23:08
Помогаю со студенческими работами здесь

Многопоточность: вывести на экран символ, который встречается наибольшее количество раз в каждом из массивов
У меня есть такая задачка: Есть 3 массивы 1 содержит 2 миллиона символов 2 содержит 1000000...

Найти в тексте слово, в котором заданный символ встретится наибольшее число раз
Условие задачи::help: в заданном тексте определить слово, в котором заданный символ встретится...

В заданном массиве строк найти все слова, в которых 2 раза встречается символ и вывести эти слова
не могу сообразить как написать цикл, в котором он выделяет слова, и потом выделяет из этих слов...

Найти слова в которые заданный символ входит не менее двух раз
Очень срочно нужен код пожалуйста! Сижу на ГОСах! помогите Дан текст! Найти слова в которые...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru