Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Dimer-23
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 117
1

Определить, попадает ли точка М(с коорд. Х и У) в квадрат, заданный своей верхней левой вершиной и стороной

31.05.2015, 11:06. Просмотров 484. Ответов 7
Метки нет (Все метки)

Здравствуйте. Для ТАСМ необходимо написать код следующей задачи-
Определить, попадает ли точка М(с координатами Х и Y) в квадрат, заданный своей верхней левой вершиной и стороной. Стороны квадрата параллельны координатным осям.
До этого делал решение простенького квадратного уравненения, но тут просто лес((( Помогите пожалуйста((

Добавлено через 4 часа 44 минуты
сделал так, но что то неработает:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
%nolist
Include mac.lib
%list
Data segment para 
coordx dw 5
coordy dw 5
lenght dw 5
X dw ?
Y dw ?
Mess1 db 10,13, 'Popadaet v Kvadrat$'
Mess2  db 10,13,'Ne Popadaet v Kvadrat$'
Messx db 10,13, 'X= $'
MessY db 10,13, 'Y= $'
 
Data ends
Stk segment para
Db  256 dup (?)
Stk ends
Code segment para 
Assume ds:data, ss:stk, cs:code
 
Begin: mov  ax, data
Mov ds,ax    ;Ввод данных
 
Message messx
Key_$2bin; Ввод числа X с клавиатуры в регистр AX
Mov x,ax 
 
Message messy
Key_$2bin; Ввод числа Y с клавиатуры в регистр AX
Mov y,ax 
 
; Ввод завершен
 
;if ((X-X1)<=L) and ((X-X1)>0)  and ((Y-Y1)<=L) and ((Y-Y1)>0) then 
; writeln('точка попадает в квадрат')
 
mov ax, x
cmp ax, coordx
jl nepopadaet  ;x<coordx
mov ax, y
cmp ax, coordy ;y>coordy
jg nepopadaet
mov ax, coordx
add ax, lenght
cmp ax, x ;x>coordx+lenght
jg nepopadaet
mov ax, coordy
sub ax, lenght
cmp ax, y ; y < coordy-lenght
jl nepopadaet
message mess1
jmp exit
nepopadaet: message mess2
exit:
inkey
mov ah, 4ch
int 21h
Code ends 
End begin
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2015, 11:06
Ответы с готовыми решениями:

Определить, попадает ли точка с заданными координатами в 1 или 3 четверть
Задали написать программку на ассемблере и паскале....со вторым справилась, а в...

Определить попадает ли точка с заданными координатами в первую или 3ю четверть
Помогите с заданиями. Поступил в универ после технаря, а тут Assembler, а я...

С клавиатуры вводятся два числа задающие отрезок [a, b]. Определить, попадает ли третье число c в заданный отрезок
Tasm 1.4, DosBox

Определить, попадает ли точка в заданный треугольник
Я тут подумал и понял что его можно решить через нахождение длин трёх сторон,...

Определить, что заданный элемент является вершиной графа
Всем здравствуйте. Работаю с си шарпом недавно, и не могу сделать программу....

7
Constantin Cat
1961 / 1049 / 365
Регистрация: 28.02.2015
Сообщений: 2,326
Завершенные тесты: 1
01.06.2015, 04:08 2
Так пробывали:
Assembler
1
2
3
4
5
6
mov ax,x
sub ax,coordx
js  no
cmp ax,length
ja  no
y:
аналогично для Y
0
Dimer-23
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 117
01.06.2015, 04:38  [ТС] 3
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Так пробывали:
Нет, еще, пока что ждал ответа преподавателя. Преподаватель указал на ряд ошибок, я их поправил, но по прежнему при вводе ЛЮБых переменных точка не попадает в квадрат(((
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
%nolist
Include mac.lib
%list
Data segment para 
coordx dw 5
coordy dw 5
lenght dw 5
X dw ?
Y dw ?
Mess1 db 10,13, 'Popadaet v Kvadrat$'
Mess2  db 10,13,'Ne Popadaet v Kvadrat$'
Messx db 10,13, 'X= $'
MessY db 10,13, 'Y= $'
 
Data ends
Stk segment stack
Db  256 dup (?)
Stk ends
Code segment para 
Assume ds:data, ss:stk, cs:code
 
Begin: mov  ax, data
Mov ds,ax    ;Ввод данных
 
Message messx
Key_$2bin; Ввод числа X с клавиатуры в регистр AX
Mov x,ax 
 
Message messy
Key_$2bin; Ввод числа Y с клавиатуры в регистр AX
Mov y,ax 
 
; Ввод завершен
 
;if ((X-coordx)<=L) and ((X-coordx)>0)  and ((Y-coordy)<=L) and ((Y-coordy)>0) then 
; writeln('точка попадает в квадрат')
 
mov ax, x
cmp ax, coordx
jl nepopadaet  ;x < coordx
mov ax, y
cmp ax, coordy ;y > coordy
jg nepopadaet
mov ax, coordx
add ax, lenght
cmp ax, x ;x > coordx+lenght
jg nepopadaet
mov ax, coordy
sub ax, lenght
cmp ax, y ; y < coordy-lenght
jg nepopadaet
message mess1
jmp exit
nepopadaet: message mess2
exit:
inkey
mov ah, 4ch
int 21h
Code ends 
End begin
0
Dimer-23
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 117
02.06.2015, 12:19  [ТС] 4
Спасибо, все заработало в таком виде:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
%nolist
Include mac.lib
%list
Data segment para 
coordx dw 5
coordy dw 5
lenght dw 5
X dw ?
Y dw ?
Mess1 db 10,13, 'Popadaet v Kvadrat$'
Mess2  db 10,13,'Ne Popadaet v Kvadrat$'
Messx db 10,13, 'X= $'
MessY db 10,13, 'Y= $'
Data ends
Stk segment stack
Db  256 dup (?)
Stk ends
Code segment para 
Assume ds:data, ss:stk, cs:code
Begin: mov  ax, data
Mov ds,ax    ;Ввод данных
 Message messx
Key_$2bin; Ввод числа X с клавиатуры в регистр AX
Mov x,ax 
Message messy
Key_$2bin; Ввод числа Y с клавиатуры в регистр AX
Mov y,ax 
; Ввод завершен
;if ((X-coordx)<=L) and ((X-coordx)>0)  and ((Y-coordy)<=L) and ((Y-coordy)>0) then 
; writeln('точка попадает в квадрат')
mov ax, x
cmp ax, coordx
jl nepopadaet  ;x < coordx
mov ax, y
cmp ax, coordy ;y > coordy
jg nepopadaet
mov ax, coordx
add ax, lenght
cmp ax, x ;x > coordx+lenght
jg nepopadaet
mov ax, coordy
sub ax, lenght
cmp ax, y ; y < coordy-lenght
jl nepopadaet
message mess1
jmp exit
nepopadaet: message mess2
exit:
inkey
mov ah, 4ch
int 21h
Code ends 
End begin
0
Constantin Cat
1961 / 1049 / 365
Регистрация: 28.02.2015
Сообщений: 2,326
Завершенные тесты: 1
02.06.2015, 14:38 5
У Вас несколько увеличен код(много загрузок данных)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
model   tiny,C
.code
org 100h
start:  lea bx,dbInpX
    call    inpNum,bx
    mov x,ax
    lea bx,dbInpY
    call    inpNum,bx
    lea bx,dbNo
    mov y,ax
    sub ax,coordy
    js  no
    cmp ax,lenght
    ja  no
    mov ax,x
    sub ax,coordx
    js  no
    cmp ax,lenght
    ja  no
    lea bx,dbYes
no: call    outMess,bx
    xor ax,ax
    int 16h
    ret
inpNum  proc line:word;
    call    outMess,line
    xor di,di
    mov bx,10
@@01:   xor ax,ax
    int 16h
    cmp al,13
    jz  @@02
    cmp al,'0'
    jb  @@01
    cmp al,'9'
    ja  @@01
    xor dx,dx
    push    ax
    and ax,0fh
    xchg    di,ax
    xor dx,dx
    mul bx
    add di,ax
    pop ax
    int 29h
    jmp @@01
@@02:   mov ax,di
    ret
inpNum  endp
outMess proc    line:word;
    mov ah,9
    mov dx,line
    int 21h
    ret
outMess endp
 
coordx  dw  5
coordy  dw  5
lenght  dw  5
X   dw  ?
Y   dw  ?
dbYes   db  10,13,'Popadaet v Kvadrat$'
dbNo    db  10,13,'Ne Popadaet v Kvadrat$'
dbInpx  db  10,13,'X= $'
dbInpY  db  10,13,'Y= $'
End start
0
Dimer-23
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 117
02.06.2015, 15:07  [ТС] 6
Спасибо)) Но нас так сложно не научили))
0
Constantin Cat
1961 / 1049 / 365
Регистрация: 28.02.2015
Сообщений: 2,326
Завершенные тесты: 1
02.06.2015, 16:09 7
Dimer-23
Сама проверка простая:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
    lea bx,dbNo
    mov y,ax
    sub ax,coordy
    js  no
    cmp ax,lenght
    ja  no
    mov ax,x
    sub ax,coordx
    js  no
    cmp ax,lenght
    ja  no
    lea bx,dbYes
Берется одно значение и проверяется вхождение в диапазон.
Если Вы о call inpNum,bx, то это стандартный ТАСМовский макрос, который организует передачу параметров через стек, при этом это делается прозрачно и программист практичеки не задумывается над тем, что и где лежит в стеке, сколько байт убрать со стека. Сами посмотрите:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
seg000:0100 ; Base Address: 1000h Range: 10100h-101CDh Loaded length: CDh
seg000:0100 ; Segment type: Pure code
seg000:0100 seg000      segment byte public 'CODE'
seg000:0100         assume cs:seg000
seg000:0100         org 100h
seg000:0100         assume es:nothing, ss:nothing, ds:seg000
seg000:0100         public start
seg000:0100 start       proc near
seg000:0100         mov     bx, 1C1h
seg000:0103         push    bx
seg000:0104         call    sub_10147
seg000:0107         add     sp, 2
seg000:010A         mov     word_10190, ax
seg000:010D         mov     bx, 1C7h
seg000:0110         push    bx
seg000:0111         call    sub_10147
seg000:0114         add     sp, 2
seg000:0117         mov     bx, 1A9h
seg000:011A         mov     word_10192, ax
seg000:011D         sub     ax, word_1018C
seg000:0121         js      loc_1013B
seg000:0123         cmp     ax, word_1018E
seg000:0127         ja      loc_1013B
seg000:0129         mov     ax, word_10190
seg000:012C         sub     ax, word_1018A
seg000:0130         js      loc_1013B
seg000:0132         cmp     ax, word_1018E
seg000:0136         ja      loc_1013B
seg000:0138         mov     bx, 194h
seg000:013B loc_1013B:
seg000:013B         push    bx
seg000:013C         call    sub_1017E
seg000:013F         add     sp, 2
seg000:0142         xor     ax, ax
seg000:0144         int     16h
seg000:0146         retn
seg000:0146 start       endp
seg000:0147 sub_10147       proc near
seg000:0147 arg_0       = word ptr  4
seg000:0147         push    bp
seg000:0148         mov     bp, sp
seg000:014A         push    [bp+arg_0]
seg000:014D         call    sub_1017E
seg000:0150         add     sp, 2
seg000:0153         xor     di, di
seg000:0155         mov     bx, 0Ah
seg000:0158 loc_10158:
seg000:0158         xor     ax, ax
seg000:015A         int     16h
seg000:015C         cmp     al, 0Dh
seg000:015E         jz      loc_1017A
seg000:0160         cmp     al, 30h
seg000:0162         jb      loc_10158
seg000:0164         cmp     al, 39h
seg000:0166         ja      loc_10158
seg000:0168         xor     dx, dx
seg000:016A         push    ax
seg000:016B         and     ax, 0Fh
seg000:016E         xchg    ax, di
seg000:016F         xor     dx, dx
seg000:0171         mul     bx
seg000:0173         add     di, ax
seg000:0175         pop     ax
seg000:0176         int     29h
seg000:0178         jmp     short loc_10158
seg000:017A loc_1017A:
seg000:017A         mov     ax, di
seg000:017C         pop     bp
seg000:017D         retn
seg000:017D sub_10147       endp
seg000:017E sub_1017E       proc near
seg000:017E arg_0       = word ptr  4
seg000:017E         push    bp
seg000:017F         mov     bp, sp
seg000:0181         mov     ah, 9
seg000:0183         mov     dx, [bp+arg_0]
seg000:0186         int     21h
seg000:0188         pop     bp
seg000:0189         retn
seg000:0189 sub_1017E       endp
seg000:018A word_1018A      dw 5
seg000:018C word_1018C      dw 5
seg000:018E word_1018E      dw 5
seg000:0190 word_10190      dw 0
seg000:0192 word_10192      dw 0
seg000:0194 aPopadaetVKvadr db 0Ah
seg000:0194         db 0Dh,'Popadaet v Kvadrat$'
seg000:01A9 aNePopadaetVKva db 0Ah
seg000:01A9         db 0Dh,'Ne Popadaet v Kvadrat$'
seg000:01C1         db 0Ah
seg000:01C1         db 0Dh,'X= $'
seg000:01C7 aY          db 0Ah
seg000:01C7         db 0Dh,'Y= $'
seg000:01C7 seg000      ends
seg000:01C7         end start
0
Dimer-23
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 117
02.06.2015, 16:30  [ТС] 8
Да, спасибо за разъяснение, я препода пораспросил про этот макрос)) Это будет дальше))
Сейчас у меня проблема в соседней ветке((( Пропустил пары и налип((
0
02.06.2015, 16:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2015, 16:30

Точка наудачу брошена в квадрат со стороной 1. Какова вероятность, что она будет удалена
Точка наудачу брошена в квадрат со стороной 1. Какова вероятность, что она...

Точка А случайным образом ставится в квадрат со стороной 10. Найти вероятность того,что расстояние от А до бли
Точка А случайным образом ставится в квадрат со стороной 10. Найти вероятность...

Проверить, попадает ли точка с заданными координатами в квадрат
3.Даны координаты точки. Определить, попадает ли точка в квадрат


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru