Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 11

Удалить все слова, число букв в которых будет меньше или равно введенному числу

23.12.2012, 18:22. Показов 1469. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать программу, которая будет вводить строку, число и выводить потом обработанную строку, в которой будут удалены все слова, число букв в которых будет меньше или равно введенному числу

с вводом строки и числ все понятно, а вот как сделать процедуру удаления понятия не имею, прочитала много чего про цепочечные операции и их команды, но толком не смогла понять как они мне помогут в моей программе

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

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
145
146
147
.model small
.stack 100h
.data
 
message db 'Enter string:', 0Dh, 0Ah, '$'
message2 db "Enter number: $"
result db 'Result:', 0Dh, 0Ah, '$'
s db 0Dh, 0Ah, '$'
string db 100, 0, 100 dup('$')
buf db 100, 0, 100 dup('$')
a dw 10
b dw ?
 
 
.code
 
assume ds:@data,es:@data
 
output proc
 push ax
 push bx
 push cx
 push dx
 xor cx, cx
 n1:
 xor dx, dx
 div a
 push dx
 inc cx
 cmp ax, 0
 jne n1
    
 n2:
 pop dx
 add dx, '0'
 mov ah, 02h
 int 21h
 loop n2
 pop dx
 pop cx
 pop bx
 pop ax
 ret
output endp
 
 
 
inputNum proc near
    push ax
    push cx
    push dx
    xor bx, bx
    xor cx, cx
    dot1:
    mov ah, 01h
    int 21h
 
    cmp al, 0dh
    je dot2
    cmp al, 30h
    jc dot1
    cmp al, 3Ah
    jnc dot1
    sub ax, '0'
    mov cl, al
    mov ax, bx
    mul a
    mov bx, ax
    add bx, cx
    jmp dot1
    
    dot2:
    pop dx
    pop cx
    pop ax
    ret
    
 inputNum endp
 
checker proc 
 
lea si, buf
cld
 
@M1:
    cmp byte ptr [di], ' '
    je @word
    cmp byte ptr [di], '$'
    je @exit
    inc di
    inc bx
    jmp @M1
 
@word:
 
    cmp b, bx
    jle @M1
    jmp @fun
 
@fun:
 
    mov cx, bx
    
    repe lodsb si, di
    inc di
    jmp @M1
    
    
 
@exit:
    jmp @O
 
ret
endp
    
 
start:
mov AX, @data
mov DS, AX
mov ES, AX
 
mov AH, 09h
lea DX, message2 ; ввод числа
int 21h
 
call inputNum  ; считывание введеного числа
 
mov b, bx  ; помещаем число в переменную для последующих проверок
 
mov AH, 09h
lea DX, message  ; приглашение к вводу строки 
int 21h
    
lea di, string
 
call checker ; вызов функции обработки строки
 
@O:
 
mov ah, 09h
lea dx, si
int 21h
 
mov ah, 4ch
int 21h
 
end start
Добавлено через 17 часов 30 минут
...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.12.2012, 18:22
Ответы с готовыми решениями:

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

Вводится строка.Удалить из неё все слова,длина которых меньше или равна 3 символам
Вводится строка.Удалить из неё все слова,длина которых меньше или равна 3 символам

Удалить в файле слова, в которых количество согласных букв меньше количества гласных
Помогите, пожалуйста! Файл input.dat содержит несколько строк текста слова в тексте могут разделяться пробелами и знаками препинания....

6
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
23.12.2012, 21:06
Я бы делал примерно так:
1. Выход на начало слово, сохранить его адрес
2. Сканировать строку с подсчетом символов до первого пробела или до конца строки
3. Сравнить число символов с числом введенным с клавы, если меньше или равно, на первый символ следующего слова (п.1)
4. Если больше, берем сохраненный адрес и с этого адреса выводим посимвольно слово, число символов уже есть
1
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 11
23.12.2012, 23:23  [ТС]
вот переделала, но серавно не работает помогите плиз (

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
145
146
147
148
149
150
151
152
153
154
155
156
157
.model small
.stack 100h
.data
 
message db 'Enter string:', 0Dh, 0Ah, '$'
message2 db "Enter number: $"
result db 'Result:', 0Dh, 0Ah, '$'
s db 0Dh, 0Ah, '$'
string db 254, 0, 254 dup('$')
a dw 10
b dw ?
 
 
.code
 
assume ds:@data,es:@data
 
output proc
 push ax
 push bx
 push cx
 push dx
 xor cx, cx
 n1:
 xor dx, dx
 div a
 push dx
 inc cx
 cmp ax, 0
 jne n1
    
 n2:
 pop dx
 add dx, '0'
 mov ah, 02h
 int 21h
 loop n2
 pop dx
 pop cx
 pop bx
 pop ax
 ret
output endp
 
 
 
inputNum proc near
    push ax
    push cx
    push dx
    xor bx, bx
    xor cx, cx
    dot1:
    mov ah, 01h
    int 21h
 
    cmp al, 0dh
    je dot2
    cmp al, 30h
    jc dot1
    cmp al, 3Ah
    jnc dot1
    sub ax, '0'
    mov cl, al
    mov ax, bx
    mul a
    mov bx, ax
    add bx, cx
    jmp dot1
    
    dot2:
    pop dx
    pop cx
    pop ax
    ret
    
 inputNum endp
 
checker proc 
 
;lea si, string
add si, 2
mov dx, [si]
jmp @M1
 
@M0:
    inc si
    mov dx, [si]
 
@M1:
    cmp byte ptr [si], ' '
    je @word
    cmp byte ptr [si], '$'
    je @exit
    inc si
    inc cx
    jmp @M1
 
@word:
    cmp b, cx
    jle @M0
    jmp @fun
 
@fun:
    lodsb
    stosw
    loop @fun
    jmp @M0
        
 
@exit:
    
 
ret
endp
    
 
start:
mov AX, @data
mov DS, AX
mov ES, AX
 
mov AH, 09h
lea DX, message2 ; ввод числа
int 21h
 
call inputNum  ; считывание введеного числа
 
mov b, bx  ; помещаем число в переменную для последующих проверок
xor bx, bx
 
mov AH, 09h
lea DX, message  ; приглашение к вводу строки 
int 21h
 
mov ah, 0ah
lea dx, string
int 21h
 
mov ah, 09h
lea dx, s
int 21h
 
mov ah,09h
lea dx, result
int 21h
 
 
call checker ; вызов функции обработки строки
 
lea DX, string + 2
int 21h
 
mov ah, 4ch
int 21h
 
end start
0
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
24.12.2012, 00:29
Включите строку lea si, string
Assembler
1
2
3
@fun:
    lodsb ; читаете байт
    stosw ;пишите слово. Куда?
Лучше сразу выводить символ на экран.
У меня форум с трудом работает. Как у вас?
0
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 11
24.12.2012, 00:35  [ТС]
да уж, что то с ним не то)

вот более новая версия, тут вся строка выводится почему то(

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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
.model small
.stack 100h
.data
 
message db 'Enter string:', 0Dh, 0Ah, '$'
message2 db "Enter number: $"
result db 'Result:', 0Dh, 0Ah, '$'
s db 0Dh, 0Ah, '$'
string db 254, 0, 254 dup('$')
a dw 10
b dw ?
 
 
.code
 
assume ds:@data,es:@data
 
output proc
 push ax
 push bx
 push cx
 push dx
 xor cx, cx
 n1:
 xor dx, dx
 div a
 push dx
 inc cx
 cmp ax, 0
 jne n1
    
 n2:
 pop dx
 add dx, '0'
 mov ah, 02h
 int 21h
 loop n2
 pop dx
 pop cx
 pop bx
 pop ax
 ret
output endp
 
 
 
inputNum proc near
    push ax
    push cx
    push dx
    xor bx, bx
    xor cx, cx
    dot1:
    mov ah, 01h
    int 21h
 
    cmp al, 0dh
    je dot2
    cmp al, 30h
    jc dot1
    cmp al, 3Ah
    jnc dot1
    sub ax, '0'
    mov cl, al
    mov ax, bx
    mul a
    mov bx, ax
    add bx, cx
    jmp dot1
    
    dot2:
    pop dx
    pop cx
    pop ax
    ret
    
 inputNum endp
 
checker proc 
 
;lea si, string
add si, 2
mov dx, [si]
jmp @M1
 
@M0:
    inc si
    mov dx, [si]
    xor cx, cx
 
@M1:
    cmp byte ptr [si], ' '
    je @word
    cmp byte ptr [si], '$'
    je @exit
    inc si
    inc cx
    jmp @M1
 
@word:
    cmp b, cx
    jle @M0
    
 
@fun:
    mov [si], dx
@f:
    mov al, [si]
    mov ah, 01h
    int 21h
    inc si
    loop @f
    jmp @M0
        
 
@exit:
    
 
ret
endp
    
 
start:
mov AX, @data
mov DS, AX
mov ES, AX
 
mov AH, 09h
lea DX, message2 ; ввод числа
int 21h
 
call inputNum  ; считывание введеного числа
 
mov b, bx  ; помещаем число в переменную для последующих проверок
xor bx, bx
 
mov AH, 09h
lea DX, message  ; приглашение к вводу строки 
int 21h
 
mov ah, 0ah
lea dx, string
int 21h
 
mov ah, 09h
lea dx, s
int 21h
 
mov ah,09h
lea dx, result
int 21h
 
 
call checker ; вызов функции обработки строки
 
;lea DX, string + 2
;int 21h
 
mov ah, 4ch
int 21h
 
end start
0
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
24.12.2012, 01:45
Если после последнего слова не введен пробел, оно не обрабатывается.
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
.model small
.stack 100h
.data
 
message db 'Enter string:', 0Dh, 0Ah, '$'
message2 db "Enter number: $"
result db 'Result:', 0Dh, 0Ah, '$'
s db 0Dh, 0Ah, '$'
string db 254, 0, 254 dup('$')
a dw 10
b dw ?
 
 
.code
 
assume ds:@data,es:@data
 
output proc
 push ax
 push bx
 push cx
 push dx
 xor cx, cx
 n1:
 xor dx, dx
 div a
 push dx
 inc cx
 cmp ax, 0
 jne n1
    
 n2:
 pop dx
 add dx, '0'
 mov ah, 02h
 int 21h
 loop n2
 pop dx
 pop cx
 pop bx
 pop ax
 ret
output endp
 
 
 
inputNum proc near
    push ax
    push cx
    push dx
    xor bx, bx
    xor cx, cx
    dot1:
    mov ah, 01h
    int 21h
 
    cmp al, 0dh
    je dot2
    cmp al, 30h
    jc dot1
    cmp al, 3Ah
    jnc dot1
    sub ax, '0'
    mov cl, al
    mov ax, bx
    mul a
    mov bx, ax
    add bx, cx
    jmp dot1
    
    dot2:
    pop dx
    pop cx
    pop ax
    ret
    
 inputNum endp
 
checker proc 
 
;lea si, string
    lea si, string
add si, 2
;mov dx, [si]
;jmp @M1
 
@M0:
;    inc si
;    mov dx, [si]
    mov dx,si
    xor cx, cx
 
@M1:
    cmp byte ptr [si], ' '
    je @word
;    cmp byte ptr [si], '$'
    cmp byte ptr [si],0Dh ;строка заканчивается Enter
    je @exit
    inc si
    inc cx
    jmp @M1
 
@word:
    inc cx  ;добавить пробел
    inc si  ;на следующее слово
    cmp b, cx
    jle @M0
    
 
@fun:
;    mov [si], dx
    mov si,dx
    mov ah,2
@f:
;    mov al, [si] ;?
;    mov ah, 01h ;?
    mov dl,[si]
    int 21h
    inc si
    loop @f
    jmp @M0
        
 
@exit:
    
 
ret
endp
    
 
start:
mov AX, @data
mov DS, AX
mov ES, AX
 
mov AH, 09h
lea DX, message2 ; ввод числа
int 21h
 
call inputNum  ; считывание введеного числа
    inc bx  ;плюс пробел 
mov b, bx  ; помещаем число в переменную для последующих проверок
xor bx, bx
 
mov AH, 09h
lea DX, message  ; приглашение к вводу строки 
int 21h
 
mov ah, 0ah
lea dx, string
int 21h
 
mov ah, 09h
lea dx, s
int 21h
 
mov ah,09h
lea dx, result
int 21h
 
 
call checker ; вызов функции обработки строки
 
;lea DX, string + 2
;int 21h
 
mov ah, 4ch
int 21h
 
end start
Добавлено через 6 минут
Надо добавить еще две команды:
Assembler
1
2
3
4
5
6
7
8
;lea DX, string + 2
;int 21h
 
xor ax,ax    ;ждать нажатия клавиши
int 16h
 
mov ah, 4ch
int 21h
1
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 11
24.12.2012, 21:11  [ТС]
спасибо) но она выводит слова меньше введенного числа, а нужно те которые больше будут)

Добавлено через 22 минуты
все, сама разобралась поменяла проверку jle на jge и все заработало
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.12.2012, 21:11
Помогаю со студенческими работами здесь

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

Удалить из файла все слова, длина которых меньше половины длины самого длинного слова второй строки
Переписать текст в файл output.txt, удалив из него все слова, длина которых меньше половины длины самого длинного слова второй строки.

Удалить все слова, длина которых меньше 3 символов
Дан текст. Удалить все слова, длина которых меньше 3 символов. Все слова, длина которых больше 3 символов, объединить в одно. В конце...

Удалить из строки все слова, длина которых меньше пяти символов
Доброго времени суток, условие в заголовке. Возможно ли добавить символ к строке? #include <iostream> #include <string> ...

Удалить из строки все слова, длина которых меньше пяти символов
1. Вывести на экране строку, введенную пользователем, по диагонали. 2. Добавить в строку пробелы после знаков препинания, если они там...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru