С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 17
1
TASM

Удалить из строки каждое чётное по счёту слово

04.04.2012, 16:40. Показов 2530. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
РЕбят помогите плиз, дали задание на практике препод очень плохо объясняет, и не получаеться сделать, вот само задание!
1)вводиться строка символов, удалить из строки каждое чётное по счёту слово.
есть исходник но он заменяет только на ! знак слова оканчивающиеся на 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
include macro.lib
sts segment stack 'stack'
dw 256 dup(?)
sts ends
dts segment 'data'
stroca label byte
maxlen db 130
actlen db ?
str db 130 dup('$')
p db 'Vvoditsya stroka slov, pereimenovat na ! vse slova, zak na a $'
p3 db 'otvet: $'
p2 db 'Vvedite stroku $'
s1 dw (0)
r2 dw (1)
k dw 0
k1 dw 0
dts ends
 
cds segment 'code'
begin proc far
assume cs:cds, ds:dts, ss:sts
push ds
sub ax,ax
mov ax, dts
mov ds, ax
cls
crlf
message p
crlf
crlf
message p2
crlf
mov ah, 0ah
lea dx, stroca
int 21h
crlf
mov al, actlen
cbw
mov cx, ax
lea di, str
m1:
mov al, [di]
cmp al, ' '
jne mm
push di
sub di, 1
mov al, [di]
cmp al, 'a'
jne m2
;inc k1
push cx
mov cx, k
mov al, '!'
m5:
mov [di], al
dec di
loop m5
pop cx
m2:
mov k, 0
pop di
inc di
mm:
inc k
inc di
loop m1
crlf
message p3
crlf
message str
mov ax, 4c00h
int 21h
ret
begin endp
cds ends
end begin
Ещё нужно сделать 2торое задание:
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
sts segment stack 'stack'
dw 256 dup(?)
sts ends
dts segment 'data'
p1  db 'vvedite stroku: $'
crlf    db 0dh,0ah,'$'
p2  db 'otvet: $'
input   db 80
len db 0
stri    db 80 dup ('$')
error   db 'error$'
dts ends
 
cds segment 'code'
assume cs:cds, ds:dts, ss:sts
start:
mov ax,dts
push    ax
push    ax
pop ds
pop es
lea dx,p1
mov ah,9
int 21h
mov ah,0ah
lea dx,input
int 21h
lea dx,crlf
mov ah,9
int 21h
xor cx,cx
mov cl,len
lea di,stri
mov al,';'
repne   scasb
jcxz    m1
mov bx,di
repne   scasb
jne m1
dec di
mov byte ptr [di],'$'
lea dx,p2
mov ah,9
int 21h
mov dx,bx
int 21h
jmp m2
m1:
lea dx,error
mov ah,9
int 21h
m2:
mov ax,4c00h
int 21h
end start
cds ends
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2012, 16:40
Ответы с готовыми решениями:

Удалить из строки каждое чётное по счёту слово
РЕбят помогите плиз сделать это задание! Дали задание на практике препод очень плохо объясняет и не...

Удалить каждое четное слово из строки
Прошу помогите написать программу.:cry: Необходимо удалить каждое четное слово из строки. При...

Удалить каждое четное слово из строки
Задача: Удалить каждое четное слово из строки. Это то что надо получить в конце, но т.к. я пытаюсь...

Удалить каждое четное слово из строки
Тема: строки в c++ Задание: Удалить каждое четное слово из строки.

Удалить каждое четное слово из строки
Удалить каждое четное слово из строки. Есть такое начало: #include <iostream> #include...

16
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
04.04.2012, 16:58 2
Задание то есть тока эти исходники не есть исходники.
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 17
04.04.2012, 17:11  [ТС] 3
Ну хоть чтото, ладно первое это мы с другом пытались нашаманить, а второе то оно всё делает просто нужно исправить чтобы не между первой и второй ";" а между первой и последней ";".
Пожалуйста сделайте очень надо!!!

Добавлено через 9 минут
IOAN, а ты не мог-бы исправить то что есть или написать новою программу пожалуйста!! БУду очень благодареН! 2торая программа то работает там подправить нужно, а что не знаю(
задание вроди-бы не сложное! паскаль и с++ я осилил ещё както а вот ассемблер совсем плохо объясняют ((((
0
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
04.04.2012, 17:20 4
Попробуй добавь между строчками 40 и 41 следующие:
Assembler
1
2
3
4
5
6
go:
mov dx,di;Сохраним адрес последнего символа + 1
repne   scasb;Ищем
je go;Если находим то ещё
mov di,dx;Берём последнее + 1
dec di;-1
Тут продолжаю поиск пока не будет найден последний символ.
Возможно не сработает сам не проверял.
Вот ещё строка 40: dec di;убери
1
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 17
04.04.2012, 17:25  [ТС] 5
Цитата Сообщение от IOAN Посмотреть сообщение
Попробуй добавь между строчками 40 и 41 следующие:
Assembler
1
2
3
4
5
6
go:
mov dx,di;Сохраним адрес последнего символа + 1
repne   scasb;Ищем
je go;Если находим то ещё
mov di,dx;Берём последнее + 1
dec di;-1
Тут продолжаю поиск пока не будет найден последний символ.
Возможно не сработает сам не проверял.
Да помогло, спасибо большое)!
Эх теперь бы первое задание сделать как-нибудь!!!
0
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
04.04.2012, 17:28 6
Цитата Сообщение от Eneron Посмотреть сообщение
Эх теперь бы первое задание сделать как-нибудь!!!
Попробуй сам. Если что-то будет не получится пиши поможем!
Мир ассемблера увлекателен и интересен
Изначально правда
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 17
04.04.2012, 17:34  [ТС] 7
Цитата Сообщение от IOAN Посмотреть сообщение
Попробуй сам. Если что-то будет не получится пиши поможем!
Мир ассемблера увлекателен и интересен
Изначально правда
Просто многое не понятно, многие команды типа lea dx,p1 , int 21h , repne scasb ; что-то понятно что-то нет может есть перевод команд этих?? mov вроди понятен cmp как я понял сравнение je, jne m# типа прыжок ну вобщем не всё ясно!((
0
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
04.04.2012, 18:11 8
Eneron, давай поступим след. образом чтобы не получилось как
Mikl___ говорил.
Напиши подробный алгоритм действий или блок схему. Ну а потом дело за малым.
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 17
04.04.2012, 18:25  [ТС] 9
Цитата Сообщение от IOAN Посмотреть сообщение
Eneron, давай поступим след. образом чтобы не получилось как
Mikl___ говорил.
Напиши подробный алгоритм действий или блок схему. Ну а потом дело за малым.
ну вот как это должно выглядеть:
введите строку символов: aaa bbbb cccc ffff gggg
ответ: aaa cccc gggg

слово можно заменить на пробелы вот оно как-бы и удалиться

я думаю нужно сделать что-то типа счётчика который считал бы пробелы и допустим после каждого второго пробела удалял слово(или заменял в слове каждую букву на "пробел")
но при этом тогда нужно будет вводить слова так : _aaa_bbbb_cccc_ffff_gggg_ ( _ это пробел)
0
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
04.04.2012, 18:44 10
Eneron, напиши подробный алгоритм действий или как вариант если
Цитата Сообщение от Eneron Посмотреть сообщение
паскаль и с++ осилил
напиши исходник процедуры {не суть важно на чём именно} а потом
поджарим на ассемблере, то что приготовишь в микроволновке.

Кстати в задании надо удалять, а не заменять.
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 17
04.04.2012, 19:10  [ТС] 11
Цитата Сообщение от IOAN Посмотреть сообщение
Eneron, напиши подробный алгоритм действий или как вариант если

напиши исходник процедуры {не суть важно на чём именно} а потом
поджарим на ассемблере, то что приготовишь в микроволновке.

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

Я делал на си программу которая добавляет контакты и номера телефонов, и чтобы можно было их удалять и редактировать что-то в этом духе!
0
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
04.04.2012, 19:37 12
Eneron, пробуй! Что не так пиши поможем {в плане алгоритма} т.к. форум ассемблера а не паскаля или с++.
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 17
04.04.2012, 21:33  [ТС] 13
РЕбят помогите плиз сделать это задание! Дали задание на практике препод очень плохо объясняет и не получаеться сделать, вот само задание!
1)вводиться строка символов, удалить из строки каждое чётное по счёту слово.

вот как должно выглядеть задание:
введите строку символов: aaa bbbb cccc ffff gggg
ответ: aaa cccc gggg

есть такой вот исходник но он заменяет только на ! знак слова оканчивающиеся на 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
include macro.lib
sts segment stack 'stack'
dw 256 dup(?)
sts ends
dts segment 'data'
stroca label byte
maxlen db 130
actlen db ?
str db 130 dup('$')
p db 'Vvoditsya stroka slov, pereimenovat na ! vse slova, zak na a $'
p3 db 'otvet: $'
p2 db 'Vvedite stroku $'
s1 dw (0)
r2 dw (1)
k dw 0
k1 dw 0
dts ends
 
cds segment 'code'
begin proc far
assume cs:cds, ds:dts, ss:sts
push ds
sub ax,ax
mov ax, dts
mov ds, ax
cls
crlf
message p
crlf
crlf
message p2
crlf
mov ah, 0ah
lea dx, stroca
int 21h
crlf
mov al, actlen
cbw
mov cx, ax
lea di, str
m1:
mov al, [di]
cmp al, ' '
jne mm
push di
sub di, 1
mov al, [di]
cmp al, 'a'
jne m2
;inc k1
push cx
mov cx, k
mov al, '!'
m5:
mov [di], al
dec di
loop m5
pop cx
m2:
mov k, 0
pop di
inc di
mm:
inc k
inc di
loop m1
crlf
message p3
crlf
message str
mov ax, 4c00h
int 21h
ret
begin endp
cds ends
end begin
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 17
06.04.2012, 11:45  [ТС] 14
Ребята!! не у кого нету идей на счёт моего задания?!(
Я вот нашёл задание которое удаляет каждую вторую букву может быть её легче исправить будет??
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
.model small
.data
maxlen db 20
actlen db ?
buf db 20 dup(' ')
vvod db 'vvedite slovo $'
vyvod db 10,13,'rezult $'
.code
begin:
mov ax,@data
mov ds,ax
mov es,ax
lea dx,vvod
mov ah,9
int 21h
 
lea dx,maxlen
mov ah,0ah
int 21h
lea si,buf
lea di,buf
mov cl,actlen
n1:
movsb
inc si
sub cl,2
ja n1
lea dx,vyvod
mov ah,9
int 21h
mov [di],'$'
lea dx,buf
mov ah,9
int 21h
 
mov ax,4c00h
int 21h
 
end begin
Помогите пожалуйста!
0
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
06.04.2012, 12:10 15
Eneron, у меня была идея здесь.
Цитата Сообщение от Eneron Посмотреть сообщение
Я вот нашёл задание которое удаляет каждую вторую букву может быть её легче исправить будет??
Вместо того чтобы темы клепать с тем что нашёл, лучше немного потрудись!
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 17
06.04.2012, 12:42  [ТС] 16
Я думал здесь откликнется кто-нибудь другой =( а там ты бы помог если не трудно было!
0
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
06.04.2012, 13:56 17
Цитата Сообщение от Eneron Посмотреть сообщение
Я думал здесь откликнется кто-нибудь другой
Если кто-то ещё и откликнулся то там бы и написал, зачем столько тем с одним и тем же вопросом(3).
Посмотрим чем сможем помочь, только тем больше не создавай с этим же вопросом.

Добавлено через 41 минуту
Eneron, вот алгоритм сам не тестировал. Добавь ввод данных и вывод.
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
si;Указатель на введённую строку должна заканчиваться 0
dx;Указатель на 0 символ
xor bx,bx;bx=0
next:;
lodsb;
cmp al,' ';
je space;
cmp al,0;
je fin;
bt bx,0;Установлен - слово начато
jc next;к след символу
bts bx,0;
mov di,si;Сохраним 
dec di   ;начало слова
jmp next;след. символ
space:;
bt bx,0 ;Проверка если пред. символ 
jnc next;тоже был пробел к след символу
btr bx,0;Сброс бита слова 
btc bx,1 ;Установлен - слово счётное 
jnc next ;^(проверка и изменение)
push di;Начало удаляемого слова
mov cx,dx
sub cx,si
rep movsb; Удаляем слово
pop si
jmp next;
fin:;
bt bx,2;Установлен - конец цикла
jc finyes;
bts bx,2;Установим
dec si;След символ тоже будет 0
jmp space;проверка
finyes:;
0
06.04.2012, 13:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2012, 13:56
Помогаю со студенческими работами здесь

Удалить каждое четное слово из текстовой строки
СТРОКИ: Удалить каждое четное слово из строки.

В тексте удалить каждое четное слово, продублировать каждое нечетное слово, заменив все вхождения букв 'д' на букву 'т'
Помогите, совсем не могу разобраться в написании программы: "В тексте удалить каждое четное слово,...

В тексте удалить каждое четное слово, продублировать каждое нечетное слово
Не могу решить данную задачу, много чего перечитал, за помощь буду благодарен" "В тексте удалить...

В тексте удалить каждое четное слово, продублировать каждое нечетное слово
Не могу решить данную задачу, много чего перечитал, за помощь буду благодарен В тексте удалить...

Ввести с клавиатуры строку символов, используя функции, и удалить каждое четное слово из строки
Всем доброго времени суток) Учусь на программиста, программируем на с++, на данный момент...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru