Консультация № 175080
09.12.2009, 21:13
0.00 руб.
0 1 1
Доброе время суток, уважаемые эксперты. Если кто умеет в этом работать,помогите пожалуйста наваять код программы, которая бы могла бы определять четное или нечетное число введено. Заранее спасибо.

Обсуждение

Неизвестный
09.12.2009, 22:21
общий
это ответ
Здравствуйте, FilipN.

Число нечетное, если младший бит установлен, т.е. равен 1.

Программа в приложении предлагает ввести число (длиной до 5 цифр, проверок на корректность ввода нет), затем проверяет последнюю цифру и выводит сообщение в зависимости от результата. Если есть необходимость, то можно добавить проверку на корректность введенной строки (т.е. что введено действительно число).

Успехов!

Приложение:
.model tiny
.data

msg db "Enter a number: $"
buf db 6, 7 dup(0) ; буфер для введенной пользователем строки

msg_even db 13,10,"The number is even",13,10,"$"
msg_odd db 13,10,"The number is odd",13,10,"$"

.code
org 100h

start:
mov ah,9 ; предлагаем ввести число
mov dx,offset msg
int 21h

mov ah,0Ah ; буферизованный ввод
mov dx,offset buf
int 21h

; Для проверки чет/нечет достаточно проверить последнюю цифру.
; Число нечетное, если младший бит установлен.
; В буфере содержатся коды символов (например, 31h ('1') вместо 1),
; но символ отличается от соответствующей цифры на 30h ('0'),
; поэтому можно проверить код символа.

xor bx,bx
mov bl,[buf+1] ; длина введенной строки
test [buf][bx+1],1 ; проверяем последнюю цифру
mov dx,offset msg_even ; предполагаем четное
jz @@even
mov dx,offset msg_odd ; нечетное
@@even:
mov ah,9
int 21h

xor ah,ah ; ждем нажатия любой клавиши для выхода
int 16h

int 20h ; завершаем программу
end start
Форма ответа