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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2009, 21:27   #1
Horknee
Пользователь
 
Регистрация: 21.09.2008
Сообщений: 70
По умолчанию Работа с массивом

Подскажите, пожалуйста, как найти в массиве число, ближайшее к заданному. Мне код не нужен, только идея, если можно.
Заранее благодарен))
Horknee вне форума Ответить с цитированием
Старый 12.04.2009, 21:53   #2
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Перебор всего "массива" в цикле, каждое число проверяем на приближенность и если новое число приближенне старого - записываем его адрес в переменную. И так после работы цикла останется самое приближенное число. Но самое главное что таких числа может быть 2 - приближенное-меньшее и приближенное-большее. Например число 8.
7 и 9 имеют одинаковую приближенность.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 12.04.2009, 22:03   #3
Horknee
Пользователь
 
Регистрация: 21.09.2008
Сообщений: 70
По умолчанию

Это в целом я так и хотел делать. Как же можно находить эту самую приближенность? Каким-то вычитанием и сравнением...
Horknee вне форума Ответить с цитированием
Старый 12.04.2009, 22:57   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в языке высокого уровня отнимаете от текущего числа заданное и берёте модуль полученной разности:
priblizhenie = abs(tekuschee_chislo - zadannoe_chislo)

а ассембле или поступайте так же (отнимаете, потом операция сравнения с нулём, если полученная разница меньше нуля - то отнимаете её от нуля)
либо, лучше - перед вычитанием сравнивайте и отнимайте всегда от большего меньшее:
Код:
   СРАВНИТЬ ЗАДАННОЕ ЧИСЛО и ТЕКУЩЕЕ
   ПЕРЕЙТИ НА метку M1, ЕСЛИ ТЕКУЩЕЕ БОЛЬШЕ
   ПРИБЛИЖЕНИЕ  равно ЗАДАННОЕ - ТЕКУЩЕЕ
   ПЕРЕХОД НА метку M_Next
M1:
   ПРИБЛИЖЕНИЕ  равно ТЕКУЩЕЕ - ЗАДАННОЕ
M_Next:
   ...
p.s. кстати, цикл можно немного оптимизировать - если нашли совпадение текущего числа с заданным, то можно прерывать цикл - более приближённых чисел уже не будет
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.04.2009, 23:39   #5
Horknee
Пользователь
 
Регистрация: 21.09.2008
Сообщений: 70
По умолчанию

Огромное спасибо! Очень помогло. Теперь допишу код до конца)))
Horknee вне форума Ответить с цитированием
Старый 13.04.2009, 20:11   #6
Horknee
Пользователь
 
Регистрация: 21.09.2008
Сообщений: 70
По умолчанию

Вот еще вопрос, немного не в тему правда, но все же. Что такое exit code 13? Что это значит?
Программа нормально все делает, а когда доходит до строчки INT 21h в самом конце, то выдает этот код=((
Horknee вне форума Ответить с цитированием
Старый 14.04.2009, 07:46   #7
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

значит на момент вызова int 21h в конце в al у вас число 13 содержится.
видимо вы делали так:
Код:
mov ah,4Ch
int 21h
а надо так:
Код:
mov ax,4C00h
int 21h
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 14.04.2009, 16:00   #8
Horknee
Пользователь
 
Регистрация: 21.09.2008
Сообщений: 70
По умолчанию

Min, да, Вы правы, все помогло. А чем они отличаются в целом mov ah, 4ch от mov ax, 4c00h ?
Horknee вне форума Ответить с цитированием
Старый 14.04.2009, 16:03   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Размерностью данных
в ah ты байт вгонишь а в ax слово (два байта)
В Ax числа больше 255 влазят
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.04.2009, 16:20   #10
Horknee
Пользователь
 
Регистрация: 21.09.2008
Сообщений: 70
По умолчанию

Ааа, ну если так, то все понятно. Ну у меня и программа получилась. Не хотите взглянуть, она уже готова...просто из спортивного интереса. Я там намудрил правда...как никак только начинаю ассемблер покорять...
Horknee вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с массивом begemotikdin Паскаль, Turbo Pascal, PascalABC.NET 2 21.06.2008 21:40
Работа с массивом: n на n ! Angst Помощь студентам 1 24.01.2008 22:14
работа с одномерным массивом _Solomon_ Помощь студентам 1 07.06.2007 12:06