Найти и вывести индекс первого четного элемента массива, кратный числу 6.
Зарание спасибо..
Добавлено через 2 мин.
Компилятор masm32 и сам массив:
array_20.rar ( 16.41 килобайт )
Кол-во скачиваний: 672
А если индекс первого четного не будет кратным числу 6, его не надо выводить? Задание корректно сформулируй, а то второй раз одно и то же: http://forum.pascal.net.ru/index.php?s=&showtopic=24070&view=findpost&p=132644 - то же самое было, какая-то двусмысленность в задании...
Тебе надо найти первый индекс четного элемента, кратный 6-ти? Или индекс первого четного, кратного 6-ти? Что именно? Уточняй...
индекс первого четного, кратного 6-ти
Тут не сложно ведь, идешь по массиву, делишь на 6 и сравниваешь остаток с нулем.. Как только получишь равенство, вычисляешь индекс исходя из смещения..
Но это если я все правильно поняла, потому что "четный кратный 6" немного смущает.. разве может быть еще и "нечетный кратный шести" ?
Ну я ж тебе дал ссылку на очень похожее задание, чуть-чуть подправь его и получи то, что тебе надо:
.486Говорю сразу: программа проверена, отработала, никаких ошибок или предупреждений не выдает, выводит правильный ответ. Это на случай, если тебе тоже захочется что-нибудь поменять, а потом заявить, что не сработало...
.model flat, stdcall
option casemap :none
include D:\masm32\include\windows.inc
include D:\masm32\macros\macros.asm
include D:\masm32\include\masm32.inc
include D:\masm32\include\kernel32.inc
includelib D:\masm32\lib\masm32.lib
includelib D:\masm32\lib\kernel32.lib
; Подключаем твой файл данных
include array_20.dat
DIVISOR db 6
.code
start:
call main
exit
main proc
mov esi, offset file1
mov edi, esi
mov ecx, fsize1
.while ecx > 0
xor ax, ax
mov al, [esi]
div DIVISOR ; делим на 6
test ah, 0fh ; проверяем остаток на 0
jz found ; ноль? Значит, нашли то, что надо
inc esi
dec ecx
.endw
; а вот если мы здесь, значит, нет такого элемента,
; который делится на 6 нацело. Выведи соотв. сообщение
; самостоятельно, и выходи из процедуры
found:
print chr$('first index = ')
xor eax, eax ; вычисляем индекс, для чего от текущего
mov eax, esi ; значения esi отнимаем смещение начала массива
sub eax, edi
print str$ (eax)
ret
main EndP
end start
Огромное спасибо