Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2012, 23:37   #1
D9bolic
Новичок
Джуниор
 
Регистрация: 18.09.2011
Сообщений: 2
По умолчанию Assembler, tasm цепочечные команды для работы с строками

Госпада если кто может помогите плиз с лабороторной. Вот условие:
Дан текст, слова которого отделяются друг от друга пробелами. Выбрать в тексте по порядку слово с наибольшим числом вхождений буквы ”а”, и заменить на него все слова, не содержащие буквы “а”. Если эта буква не входит ни в одно слово, то текст оставить без изменения.
Буксанул на подчеркнутом моменте
D9bolic вне форума Ответить с цитированием
Старый 12.05.2012, 11:21   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

нужно писать(брать готовую) реализацию работы со строками на ассме.
при вставке слова на место другого остальные слова (в общем случае, когда длина вставляемого слова <> длине заменяемого) сдвигаются (как к началу строки, так и к концу).
это несложно, но муторно и нужно быть аккуратным (как впрочем, и во всех других случаях).

Думаю, что у Вас будет гораздо больше шансов получить помощь, если вы опубликуете тот кусок кода, который Вы уже написали (и который работает с выделением слов и подсчётом буквы а в этих словам, поиском слова, где это число наибольшее, ведь, если я правильно понял, то эта часть у Вас не вызвала трудностей..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2012, 13:24   #3
D9bolic
Новичок
Джуниор
 
Регистрация: 18.09.2011
Сообщений: 2
По умолчанию

собствено код, только тут я постарался сам реализовать изменение слов, если не трудно проверьте саму суть), ошибки укажет кампилятор.
Код:
extrn vvod:near,disp:near
dseg segment para public 'data'
		string1 db '           asda  adss       dfsdf     a         awef sdfs$'
		string2 db 100 dup('$')
		s3 db 100 dup('&')
		flags1 dw 30 dup(?)
		flags2 dw 30 dup(?)
		fkol dw 0
		a dw ?
		b dw ?
		two db 2
		ppckaknado dw 0
		dlina dw 0
		beg_pos dw 0
		end_pos dw 0
	        kol dw 0
 		max dw -1000
		lngh dw 0
		mes1 db 'Ishodnaya stroka: $'
		mes2 db 'Novaya stroka: $'
		newstr db 10,13,'$'
dseg ends
sseg segment para stack 'stack'
		db 256 dup (0)
sseg ends
cseg segment para public 'code'
osn proc near
		assume cs:cseg,ds:dseg,ss:sseg,es:dseg
		mov ax, 03     
		int 10h
		mov ax,dseg
		mov ds,ax
		mov es,ax

		mov ax,0900h
		lea dx,mes1
		int 21h
		call Nnewstr		
		lea dx,string1
		int 21h
		call Nnewstr
		lea dx,mes2
		int 21h
; находим длину нашей строки
		mov cx,255
		mov al,'$'
		cld
		lea di,string1				
		repne scas string1
		je found
found:
		mov ax,254
		sub ax,cx ; в ах хранится длина первой строки
;__________________________________________________		
		mov cx,ax
; вставляем пробел в конец строки
		mov bx,cx
		mov string1[bx],' '
		inc bx
		mov string1[bx],'$'
;__________________________________________________
		xor bx,bx
		mov al,'a'
		inc cx
		mov lngh,cx
		cld
		lea di,string1
		mov si,di;есть ли хоть 1-а "а"
		je sss
		jmp exit
		
sss:		xor bx,bx
		mov al,' '
		сld
		lea di,string1
		mov si,di
		push cx
vvv:
		pop cx
		mov bx,di
		sub bx,si
		mov beg_pos,bx
		repne 	scas string1
		je fnd
		jmp part2
fnd:
		dec di
		dec di
		mov ax,di
		sub ax,si
		mov end_pos,ax
; занесение слова
		push cx
		push bx
		mov bx,beg_pos
		dec bx
slovo_cykl:
		mov kol,0
		inc bx
		mov cl,string1[bx]
		cmp cl,'a'
		jne ept	
		inc kol
ept:
		cmp bx,end_pos
		jle slovo_cykl
;==============================================
		cmp kol,0
		jne m1
		push si
		mov si,fkol
		mov flags1[si],beg_pos
		mov flags2[si],end_pos
		inc fkol
		pop si
		m1: 
		cmp max,kol
		jge vvv
		mov max,kol
		mov a,beg_pos
		mov b,end_pos
		jmp vvv	

part2:
		push cx
		mov cx,b
		sub cx,a
		inc cx
		mov lngh,cx			
ciklik:
		mov s3[cx],string1[cx]
		loop ciklik
		pop cx
		mov bx,0
		mov si,0
		mov di,0
;=====================================================================		
cikla: ;newstr
		cmp si,fkol
		jg  lol
		cmp bx,flag1[si]	
		jne lol
		push cx
		push si
		mov si,0 ;???
		mov cx,lngh
		mov ax,bx	
ciklb:
		push cx
		mov cl,s3[si]
		add ax,dlina	
		mov string2[ax],cl
		pop cx	
		
		inc ax	
		inc si
		cmp si,cx
		jne ciklb
		
		push bx
		mov bx,dlina
		add bx,lngh
		mov dlina,bx
		pop bx
	
		
		pop cx
		pop si
		mov ax,flags2[si]
		sub ax,flags1[si]
		inc ax
		add bx,ax
		inc si
		jmp next

lol:		
		push cx
		mov ax,bx
		mov cl,string1[ax]
		add ax,dlina
		mov string2[ax],cl
		pop cx
next:		
		inc bx
		cmp bx,cx
		jle cikla

;=========================================================================
exit:
		call Nnewstr
		lea dx,string2
		mov ax,0900h
		int 21h
		call Nnewstr
		call vvod
		mov ax,4c00h
		int 21h
osn endp




Nnewstr proc near
		push dx
		push ax
		lea dx,newstr
		mov ax,0900h
		int 21h
		pop ax
		pop dx
		ret
Nnewstr endp

cseg ends
end osn
D9bolic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции библиотеки для работы со строками и символами на С++ Ice_Cherry Помощь студентам 0 03.06.2011 17:19
Цепочечные команды jciml Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 12.05.2011 14:59
Библиотека для работы со строками kloffelin Общие вопросы C/C++ 14 24.10.2010 13:04
Цепочечные команды Несогласный Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 12.05.2010 20:49
Цепочечные команды Opiym Помощь студентам 4 12.03.2010 22:09