Консультация № 86740
13.05.2007, 18:45
0.00 руб.
0 1 1
Необходимо сделать программу, которая бы для десяти последовательно расположенных в памяти чисел, подсчитывала бы разность суммы четных и суммы нечетных чисел. Ввод данных сделать с клавиатуры, а вывод дисплей.

Обсуждение

давно
Старший Модератор
31795
6196
14.05.2007, 15:56
общий
это ответ
Здравствуйте, Ketor!

Смотрите приложение
В нечетных числах бит 0 равен 1,
при суммировании нечетные числа меняют знак и потом складываются.
В итоге получается разность сумм четных и нечетных.
Удачи!

Приложение:
MODEL smallstack 100.186DATASEGdataArray dw 10 dup(?)error_input db 13,10,‘very big number‘,13,10,‘input again‘,13,10,‘$‘CODESEGstart: mov ax,@DATA mov ds,ax mov es,ax;начинаем ввод mov cx,10 mov di,offset dataArray cld;ввод одного числаinput_Loop: push cx xor dx,dx mov [di],dx mov al,‘:‘ int 29h;вводим цифруinput_numb: mov ah,07h int 21h cmp al,13 jz input_stop;проверяем введеную цифру только от 0 до 9 остальное игнорируем cmp al,‘0‘ jl input_numb cmp al,‘9‘ jg input_numb;выводим цифру push ax int 29h;формируем число mov ax,[di] mov bx,10 mul bx pop bx or ax,ax js input_error and bx,0fh add ax,bx mov [di],ax jmp short input_numb;вывод сообщения об ошибкеinput_error: mov ah,9 mov dx,offset error_input int 21h;ввод снова pop cx jmp short input_Loop;записываем числоinput_stop: add di,2 pop cx mov al,13;перевод строки int 29h mov al,10 int 29h;цикл ввода чисел loop input_Loop;начинаем суммирование mov si,offset dataArray mov cx,10 xor dx,dx;само суммированиеcalc_Loop: lodsw push ax;проверяем чет\нечет shr ax,1 pop ax jnc even_numb;чет переходим;нечет переводим число в отрицательное not ax inc axeven_numb: add dx,ax;суммируем loop calc_Loop;начинаем вывод суммы знакпервым or dx,dx jns no_negativ mov al,‘-‘ int 29h not dx inc dx;вывод числаno_negativ: mov ax,dx call out_dec;выход в дос mov ah,4ch int 21h;вывод в 10-ой формеout_dec: xor cx,cx mov bx,10out_dec_div: xor dx,dx div bx or dx,30h;остаток от деления push dx;сохраняем в стеке inc cx;считаем кол-во цифр or ax,ax;пока не 0 делим jnz out_dec_divout_dec_out: pop ax;извлекаем из стека int 29h;и выводим псчитанное кол-во цифр loop out_dec_out ret end start
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа