Страница 1 из 1

исправить ввод массива

Добавлено: 24 апр 2010, 17:25
amago
написал программу, все нормально работает, но в массив можно вводить только односимвольные числа, а по заданию должны вводиться числа трехсимвольные. помогите исправить прогу, в ней находится медиана массива. делаю в emu8086.


.model tiny
.stack
.data
end_str equ 13
mas dw 10 dup(0)
mes1 db 0dh, 0ah,'Enter massiv: $'
mes3 db 0dh, 0ah, 'Vasch massiv: $'
mes4 db 0dh, 0ah, 'Vveden simval $'
mes5 db 0dh, 0ah, 'Vveden razmer massiva $'
mes7 db 0dh, 0ah, ' i $'
mes6 db 0dh, 0ah, 'Mediana massiwa: $'
mes2 db 0ah, 0dh,'Otsortirovanniy massiv - $',0ah,0dh
buf db 200,0,200 dup('$')
buf1 db 200,0,200 dup('$')
tmp dw 0 ; vremennoe hranilishe elemeta massiva
i dw 0
j dw 0
p dw ?
t dw 2
r dw ?


.code

main:

mov ax,@data
mov ds,ax
xor ax,ax

mov dx,offset mes5
mov ah,09h
int 21h
mov dx,offset buf1
mov ah,0Ah
int 21h
mov si,2
mov al,buf1[si]
sub al,30h
mov ah,0
mov r,ax
xor ax,ax
mov dx,offset mes1
mov ah,09h
int 21h
mov cx,r
add cx,r
mov di,0

; index massiva

vvod:
mov dx,offset buf
mov ah,0Ah
int 21h
mov si,2

sravnenie:
mov al,buf[si]
cmp al,39h
jge m1

m1:
cmp al,30h
jge m2

m2:
sub al,30h
mov ah,0
mov mas[di],ax
add di,2h
cmp di,cx
jl vvod
je m4

error:

mov dx,offset mes4
mov ah,09h
int 21h
jmp vvod

m4:
mov si,0
sub dx,dx
mov dx,offset mes3
mov ah,09h
int 21h
sub cx, r
pechat: ; pechataem novuju stroku
mov ah,02h
mov dx,mas[si]
add dl,30h
int 21h
add si,2h
loop pechat




internal:
sub r,1
mov di,r
mov j,di
add r,1
jmp cycl_j

exchange:

mov bx,i
shl bx,1
mov ax,mas[bx] ; ax=mas
mov bx,j
shl bx,1
cmp ax,mas[bx] ; mas ? mas[j]
jle lesser ; esli mas men'she, to dvigaemsja dal'she po massivu
mov bx,i ; inache men'aem elementy massiva mestami
shl bx,1
mov tmp,ax ; tmp=mas
; mas=mas[j]
mov bx,j ; bx=j
shl bx,1
mov ax,mas[bx] ; ax=mas[j]
mov bx,i
shl bx,1
mov mas[bx],ax ; mas=mas[j]
; mas[j]=tmp
mov bx,j
shl bx,1
mov ax,tmp ; ax=tmp
mov mas[bx],ax ; mas[j]=tmp

lesser:

dec j ; --j

cycl_j:

mov ax,j
cmp ax,i ; sravnivaem j ? i
jg exchange ; esli j>i, to men'aem
; inache cikl po i
inc i
; i++
cmp i, 9 ; sravnivaem i?n doshli li do konca massiva
jl internal ; esli i<n znachit net
; vivod otsort massiva
mov ah,09h
lea dx,mes2
int 21h

prepare:

mov cx,r
mov si,0

pechat1: ; pechat' novoj stroki
mov ah,02h
mov dx,mas[si]
add dl,30h
int 21h
add si,2h
loop pechat1


exit:
mov dx,offset mes6
mov ah,09h
int 21h
mov dx,0
mov ax,r
div t
add ax,1
cmp dx,0
je bez_ostatka
mov dx,ax
mov bx,dx
mov ax,0
mov ax,mas[bx]
cmp ah,0
je prov
vivod:
add ah,30h
mov dl,ah
mov ah,02h
int 21h
mov ax,4c00h
int 21h

bez_ostatka:
mov dx,ax
mov bx,dx
mov ax,0
mov ax,mas[bx]
cmp ah,0
je prov1
vivod1:
add bx,2
add ah,30h
mov dl,ah
mov ah,02h
int 21h

mov dx,offset mes7
mov ah,09h
int 21h

xor ax,ax
mov ax,mas[bx]
cmp ah,0
je prov2
vivod2:
add ah,30h
mov dl,ah
mov ah,02h
int 21h
mov ax,4c00h
int 21h
prov:
mov ah,al
jmp vivod
prov1:
mov ah,al
jmp vivod1
prov2:
mov ah,al
jmp vivod2
end main

Re: исправить ввод массива

Добавлено: 26 апр 2010, 08:07
airyashov
можно посмотреть здесь
http://www.cyberforum.ru/assembler/thread54461.html