Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Assembler] Подсчитать количество положительных элементов в ма


Автор: ROKI 25.1.2009, 19:58
Привет всем!!! Кому не трудно, помогите пожалуйста доделать программу. Большую часть я уже сделал, осталось реализовать следующее задание:

"Подсчитать количество положительных элементов в массиве, которые удовлетворяют условию: c<=a[i]<=d "

Вот код программи в которой вводятся элементы "с" и "d", размерность массива ("n"), и сам массив:
Код

stak segment stack
     db 256 dup(0)
stak ends
data segment
array db '         $'
masx db '   $'
newl db 0ah,0dh,'$'
sizemes db 'Size of array:$'
elem db 'mas[i]=$'
c_in db 'Enter c:$'
d_in db 'Enter d:$'
error1 db 'Menyshe 30h$'
error2 db 'Bolyshe 39h$'
result db 'Result:$'
line db '-------------$'
buffer label byte
maxlen db 20
actl db ?
masiv db 20 dup(0)
des db 10
buf db 0
n db ?       ;array size
c db ?
d db ?
rez dw 0
k db 0       ;counter
data ends
code segment
Assume cs:code,ds:data,ss:stak

;-----------------New line------------------------------
newline proc
        push ax
        push dx
        mov dx,offset newl 
        mov ah,09h
        int 21h
        pop dx
        pop ax
        ret
endp newline
;----------------------StrToNum------------------------
StrToNum proc
      push ax
      push cx
      push dx
      mov buf,0
      xor cx,cx
      xor si,si
      mov cl,actl
      mov si,cx
      dec si
      mov ax,1
mit:
      cmp si,0
      jne nemin
      mov bl,masiv[si]
      cmp bl,45
      jne last
      mov al,buf
      neg al
      mov buf,al
      jmp exit
nemin:
      mov bl,masiv[si]
      cmp bl,30h
      jb er1
      cmp bl,39h
      ja er2
      sub bl,30h
      push ax
      mul bx
      add buf,al
      pop ax
      mul des
      xor bx,bx
      dec si
      loop mit
last:
      mov bl,masiv[si]
      cmp bl,30h
      jb er1
      cmp bl,39h
      ja er2
      sub bl,30h
      push ax
      mul bx
      add buf,al
      pop ax
      mul des
      xor bx,bx
      jmp exit
exit:     
      xor ax,ax
      mov al,buf
      pop dx
      pop cx
      pop ax
      ret
er1:
      mov dx, offset newl
      mov ah,09h
      int 21h
      mov dx,offset error1
      mov ah,09h
      int 21h
      jmp exit
er2: 
      mov dx, offset newl
      mov ah,09h
      int 21h
      mov dx,offset error2
      mov ah,09h
      int 21h
      jmp exit
endp StrToNum
;--------------------Ввод----------------------------
Input proc
      push ax
      push dx
      mov dx,offset buffer
      mov ah,0ah
      int 21h
      pop dx
      pop ax
      ret
endp Input 


;---------------------NumToStr-------------------- 
NumToStr proc
      xor ax,ax
      mov al,k
      mov cl,actl
      mov si,cx
      cmp ax,0
      jg mitx
      neg ax
      mov masx[0],'-'
mitx:
      div des
      add ah,30h
      mov masx[si],ah
      xor ah,ah
      dec si
      cmp al,0
      je exitx
      cmp al,10
      jg mitx
      add al,30h
      mov masx[si],al
      jmp exitx
exitx:
      mov ah,09h
      mov dx,offset masx
      int 21h
      ret
endp NumToStr   

start:
      mov ax,data
      mov ds,ax
      ;-------Enter C
      mov dx,offset c_in
      mov ah,09h
      int 21h
      call input
      call strtonum
      xor ax,ax
      mov al,buf
      mov c,al
      call newline
      ;-------Enter D
      mov dx,offset d_in
      mov ah,09h
      int 21h
      call input
      call strtonum
      xor ax,ax
      mov al,buf
      mov d,al
      call newline
      ;--------Enter mas size
      call newline
      mov dx,offset sizemes
      mov ah,09h
      int 21h
      call input
      call strtonum
      xor ax,ax
      mov al,buf
      mov n,al
      call newline
      
      xor cx,cx
      mov cl,n
      xor bx,bx
cycl:
      jcxz quit
      mov dx,offset elem
      mov ah,09h
      int 21h
      call input
      call strtonum
      xor ax,ax
      mov al,buf    
      mov array[bx],al
      inc bx
      call newline
      loop cycl
      
      call newline
      mov dx,offset line
      mov ah,09h
      int 21h
      call newline      
      mov dx,offset result
      mov ah,09h
      int 21h
      call NumToStr
      call newline
      mov dx,offset line
      mov ah,09h
      int 21h

            

quit:      
      mov ah,4ch
      int 21h
code ends
end start


Зарание спасибо !!!

Автор: dumb 26.1.2009, 00:54
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: airyashov 26.1.2009, 08:52
если Вы сами написали эту программу, то добавить такой код не составит труда.
если за финансы стучите, недорого
icq: 3(один)7748666
mail: airyashov(собака)inbox.ru


Автор: grigiv 27.1.2009, 08:08
Здравствуйте!
Еще нужна помощь?
Помогу за вознаграждение.

Обращайтесь:
grigiv@rambler.ru
http://www.grigiv.h15.ru

P.S. Высылайте подробное задание и сообщите желаемый срок выполнения работы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)