|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.12.2012, 14:51 | #1 |
Регистрация: 31.10.2012
Сообщений: 7
|
Поиск минимального слова в массиве и вывод его на экран
Помоги переделать программу, пожалуйста!!! Данная программа ищет самое длинное слово и его выводит. Помогите, пожалуйста,сделать так, что-бы она искала самое маленькое слово и его выводило на экран.
stk segment stack 'stack' db 256 dup ("?") stk ends data segment para public 'data' string db 40,?,40 dup('$') max_word db 40 dup('$') max_lenght dw 0 count db 0 new_word dw 2 nw dw 2 current_lenght dw 0 nl db 13,10,'$' . data ends code segment para public 'code' BEGIN PROC FAR ASSUME CS:code,DSata,SS:stk,ESata PUSH DS ; Записати DS в стек SUB AX,AX ; Записати в стек PUSH AX ; нульову адресу MOV AX,data ; Розмістити адресу DATASG MOV DS,AX ;в регістр DS ; Вводимо рядок з клавіатури mov ah,0ah lea dx,string int 21h ;Переходимо на екрані на новий рядок mov ah,09h lea dx,nl int 21h mov ah,1 int 21h MOV AX,DS MOV ES,AX ; SCAS використовує ES:DI, тому копіюємо DS у ES CLD ; сканувати будемо в прямому напрямку MOV AL,' ' ; шукаємо перше входження пробілу mov bx,0 mov bl,string[1] cbw MOV CX,bx; сканувати будемо кількість байтів рівну кількості введених символів у рядку (CX використовується в REPNE) LEA DI,string[2] ; засилаємо стартову адресу в DI REPNE SCAS string ; шукаємо ' ' JE FOUND ; ознака ZF дорівнює 1, якщо ми знайшли ' ' NOTFOUND : jmp exit ; якщо ми потрапили сюди, то ' ' не виявлено FOUND: mov new_word,di DEC DI ; повертаємо покажчик DI на перше виявлене входження ' ' dec di ;повертаємо покажчик DI на кінець "просканованого" слова cld mov cx,di dec cx mov max_lenght,cx ;зберігаємо перше слово як найдовше lea si,string[2] lea di,max_word rep movsb ;переходимо на новий рядок mov ah,09h lea dx,nl int 21h ;виводимо слово, прийняте за найдовше mov ah,09h lea dx,max_word int 21h exit: poisk: MOV AX,DS MOV ES,AX ; SCAS використовує ES:DI, тому копіюємо DS у ES CLD ; сканувати будемо в прямому напрямку MOV AL,' ' ; шукаємо пробіл mov bx,0 mov bl,string[1] sub bx,new_word cbw MOV CX,bx mov si,new_word LEA DI,string[si] ; засилаємо стартову адресу в DI REPNE SCAS string ; шукаємо ' ' JE FOUND1 ; ознака ZF дорівнює 1, якщо ми знайшли ' ' NOTFOUND1 : mov ax,0 mov al,string[1] cbw add ax,3 mov di,ax ;jmp exit1 FOUND1: ;Р1.3.1. Знаходимо довжину поточного слова mov nw,di dec di ;dec di mov bx,di sub bx,new_word mov current_lenght,bx mov ax,current_lenght cmp ax,max_lenght ja net mov bx,current_lenght mov max_lenght,bx mov cx,current_lenght mov si,new_word lea si,string[si] lea di,max_word rep movsb net: mov ax,nw mov new_word,ax ;перевіряємо чи всю строку обробили mov bx,0 mov bl,string[1] cbw cmp new_word,39 jb poisk exit1: mov ah,09h lea dx,nl int 21h mov ah,09h lea dx,max_word int 21h mov ah,09h lea dx,nl int 21h mov cx,max_lenght xor si,si count_letter: mov al,max_word[si] ;1.4.1. Якщо код символа більший коду "а", перевіряємо далі cmp al,'a' jb not_letter ;1.4.1.1. Якщо код символа менший коду "z", збільшуємо лічильник літер count на 1 cmp al,'z' ja not_letter inc count ;1.4.2. Якщо код символа менший коду "а", переходимо до наступного символа у слові not_letter: inc si loop count_letter ;1.5. Виводимо кількість літер у слові mov ah,09h lea dx,nl int 21h mov ah,2 mov dl,count add dl,30h int 21h mov ah,09h lea dx,nl int 21h mov ah,1 int 21h RET ; Повернутися в DOS BEGIN ENDP code ENDS END BEGIN |
08.12.2012, 19:01 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 27.11.2012
Сообщений: 5,657
|
Код:
Код:
Благими намерениями устлана дорога на programmersforum.ru
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рекурсия. Поиск минимального элемента в массиве. | Маленыч | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 05.04.2012 08:33 |
Строка. Поиск и удаление минимального слова. | Катакомба | Помощь студентам | 8 | 21.11.2011 18:34 |
Задача на поиск минимального элемента в массиве | 2517 | Помощь студентам | 12 | 30.06.2011 15:19 |
Поиск минимального элемента в перевернутом массиве | Kovax | Паскаль, Turbo Pascal, PascalABC.NET | 11 | 27.02.2011 14:38 |
Поиск максимального и минимального значения в массиве | WIN32APIist | Общие вопросы C/C++ | 5 | 28.12.2010 00:24 |