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

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

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2012, 14:51   #1
linnik
 
Регистрация: 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
linnik вне форума Ответить с цитированием
Старый 08.12.2012, 19:01   #2
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,657
По умолчанию

Код:
cmp ax,max_lenght
ja net
Заменить на
Код:
cmp ax,max_lenght
jb net
В весь код не вглядывался, но вроде так. Если заработает, с Вас - 100р.
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия. Поиск минимального элемента в массиве. Маленыч Паскаль, 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