![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 15.12.2009
Сообщений: 2
|
![]()
Пожалуйста!!! помогите с дз...
Задан одномерный массив натуральных чисел. Массив вводится с клавиатуры. Размерность больше 10; необходимо наличие как положительных, так и отрицательных чисел. Найти сумму ненулевых элементов в этом массиве. Результат вывести на экран. очень сроооочно... ![]() хотя бы подскажите, как ввести с клавиатуры двузначные и отрицательные числа... Последний раз редактировалось Варвара; 16.12.2009 в 00:15. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 03.02.2008
Сообщений: 213
|
![]()
Напрямую никак! Числа нужно вводить как строку символов а потом их из строки переводить в числовой формати, для отрицательних чисел их нужно в дополнительний код переводить, или почитай про арифметические операции над числами в формате ASCII но это тоже не из легких методов, плюс в том что числа видно в отладчике так как они есть в жизни в десятичной системе, минус то что муторно это легко ошибится и постоянно делать коррекцию результата после каждой операции... Вобщем легких путей нет, муторно это... Да и вобще ручной ввод чисел на ассемблере не простое дело!
Пишу программы на заказ, контакты под аватаром!
Отзывы тут |
![]() |
![]() |
![]() |
#3 |
Экспериментатор
Форумчанин
Регистрация: 16.04.2008
Сообщений: 218
|
![]()
Зачем с клавиатуры? Не надо мучить программиста и пользователя! Заполняем массив рандомайзом...
Для создания сложных вещей не нужны сложные интерфейсы. (с) Линус Торвальдс
|
![]() |
![]() |
![]() |
#4 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
![]() в задании же ясно сказано: Цитата:
|
||
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 31.05.2009
Сообщений: 786
|
![]()
За ввод с клавиатуры отвечает функция 0ah int 21h:
INT 21 - BUFFERED KEYBOARD INPUT AH = 0AH DS:DX = ADDRESS OF BUFFER FIRST BYTE OF BUFFER MUST HAVE MAX LENGTH ON RETURN SECOND BYTE HAS ACTUAL LENGTH Но она возвращает по адресу в DS:DX текстовую строку, которую нужно будет посимвольно разобрать и преобразовать в число со знаком. Согласен со Stepler - муторное это дело. |
![]() |
![]() |
![]() |
#6 |
Новичок
Джуниор
Регистрация: 15.12.2009
Сообщений: 2
|
![]()
.model small
.stack 100h .data MaxLen db 5 Len db 0 buff db 5 dup (0) minus db 0 mas db 10 dup (0) sum db 0 min db 7Fh ErrInpMsg db 'Error Input!!!',13,10,'$' InpMsg db 'Input ' Count db 0,' element (-128..127) :',13,10,'$' Otvet db 'Otevet: $' .code start: mov ax,@data mov ds,ax mov es,ax xor ax,ax call input call Do call output mov ah,8 int 21h mov ax,4c00h int 21h input proc xor di,di mov cx,10 inputLoop: call inputEl inc di loop inputLoop ret endp inputEl proc push cx inputElMain: mov mas[di],0 call InputMsg mov ah,0Ah mov dx,offset MaxLen int 21h mov dl,10 mov ah,2 int 21h cmp Len,0 je errInputEl mov minus,0 xor bx,bx mov bl,Len mov si,offset Len add si,bx mov bl,1 xor cx,cx mov cl,Len inputElLoop: std lodsb call checkSym cmp ah,1 je errInputEl cmp ah,2 je nextSym sub al,'0' mul bl test ah,ah jnz errInputEl add mas[di],al jo errInputEl js errInputEl mov al,bl mov bl,10 mul bl test ah,ah jz ElNextCheck cmp ah,3 jne errInputEl ElNextCheck: mov bl,al jmp nextSym errInputEl: call ErrorInput jmp inputElMain nextSym: loop inputElLoop cmp minus,0 je exitInputEl neg mas[di] exitInputEl: pop cx ret endp checkSym proc cmp al,'-' je minusSym cmp al,'9' ja errCheckSym cmp al,'0' jb errCheckSym jmp exitCheckGood minusSym: cmp si,offset Len je exitWithMinus errCheckSym: mov ah,1 jmp exitCheckSym exitWithMinus: mov ah,2 mov minus,1 cmp Len,1 je errCheckSym jmp exitCheckSym exitCheckGood: xor ah,ah exitCheckSym: ret endp ErrorInput proc mov dx,offset ErrInpMsg mov ah,9 int 21h ret endp InputMsg proc mov ax,di add al,'0' mov Count,al mov ah,9 mov dx,offset InpMsg int 21h ret endp DoEl proc mov ah,min cmp mas[di],ah jnl notNewMin mov ah,mas[di] mov min,ah notNewMin: cmp mas[di],-5 jl notSum cmp mas[di],15 jg notSum mov ah,mas[di] add sum,ah notSum: ret endp Do proc xor di,di mov cx,10 DoLoop: call DoEl inc di loop DoLoop ret endp output proc mov di,offset Otvet+11 mov minus,0 mov bl,10 mov al,sum imul min test ax,ax jns notMinusOut mov minus,1 neg ax notMinusOut: div bl xchg ah,al add al,'0' std stosb sub al,'0' xchg ah,al xor ah,ah test al,al jz CheckForMinus jmp notMinusOut CheckForMinus: cmp minus,0 je endOutput mov al,'-' std stosb endOutput: mov ah,9 mov dx,offset Otvet int 21h ret endp end start |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Random. отрицательные и положительные числа | Seran4ek | Общие вопросы Delphi | 10 | 18.03.2014 22:16 |
Ввести имя файла с клавиатуры,открыть если существует,перименовать и переместить его | mulatoschka1990 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 23.10.2009 16:18 |
как ввести числа с клавиатуры и запомнить их в переменные | mandarinka27 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 18.05.2009 17:03 |
двузначные числа которые при умножении на 3 будут заканчиваться на цифру 4 | Ases_51 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 13.01.2008 11:37 |