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

Найти номера наибольших по абсолютной величине элементов двух заданных массивов

24.04.2016, 14:39. Просмотров 210. Ответов 3
Метки нет (Все метки)

Ребят, опять я, нерадивый студент, прога неправильно считает, как быть, что не так написал?
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
include 'emu8086.inc'
 
#make_EXE#
 
a_data segment para
 
About db 10,13, 'Автор программы: Александр Владимирович гр. ЭВМбзс,10,13,
 
db 10,13, 'Задание:',10,13
 
db 10,13, 'Заданы два массива X[10] и Y[12], состоящих из целых чисел со знаком.'
 
db 10,13, 'Найти номера наибольших по абсолютной величине элементов этих двух массивов.',10,13,'$'
 
message1 db 10,13,'Введите элемент массива $'
 
err db 10,13,'Ошибка ввода. Повторите! $'
 
message2 db 10,13,'Массив введен',10,13,'$'
 
message3 db 10,13,'Номер максимального элемента равен $'
 
pusto db ' $'
 
a dw 8 dup(?)
 
a_data ends
 
a_stack segment para stack
 
dw 128 dup(?)
 
a_stack ends
 
a_code segment para
 
assume cs:a_code, ss:a_stack, ds:a_date
 
Main:
 
mov ax, a_data
 
mov ds,ax
 
lea dx, About
 
call print_t
 
;вызов функции ввода массива
 
mov cx, 10;Размер массива(Счетчик)
 
call VvodMass
 
;вызов функции вывода массива
 
mov cx, 10
 
call VivodMass
 
mov cx, 10
 
call FindMass
 
;;;;;;;;;;;;;;;;;;;;;;;
 
mov cx, 12;Размер массива(Счетчик)
 
call VvodMass
 
mov cx, 12
 
call VivodMass
 
mov cx, 12
 
call FindMass
 
mov ah, 4ch
 
int 21h
 
print_t proc near
 
mov ah,9
 
int 21h
 
ret
 
print_t endp
 
;
 
VvodMass proc near
 
;bx - смешение массива
 
;cx - количество элементов в массива
 
mov ax, a_data
 
mov ds,ax
 
;Начало ввода массива
 
mov bx, offset a;адрес начала массива А
 
;lea bx, a
 
cikl:
 
push cx;cx в стек (Сначало ?)
 
lea dx, message1;Сообщение: Введите элемент массива
 
call print_t;Вызов процедуры print_t
 
call scan_num;Ждем ввода числа(Запись идет в cx)
 
mov [bx], cx; [bx] - обращение к памяти с адресом ds:[bx]
 
add bx, 2 ;Прибавляем 2 к di(Переход к следующему элементу)
 
pop cx ; Выталкиваем из стека (Пока там 8)
 
dec cx ;Уменьшаем CX на 1 (Тоесть 8 -1 =7)
 
jz M1 ; Переход на метку M1, если CX будет равен 0
 
jmp cikl ;Безусловный переход на начало цикла
 
M1: lea dx, message2 ; message2 db 10,13,'Массив введен $'
 
call print_t ;
 
ret
 
VvodMass endp
 
;
 
VivodMass proc near
 
;Процедура вывода массива
 
;bx- смещение массива
 
;cx - количество элементов массива
 
mov bx, offset a;адрес начала массива А
 
cikl1:
 
push cx
 
mov ax, [bx]
 
call print_num
 
lea dx, pusto
 
call print_t
 
add bx, 2
 
pop cx
 
loop cikl1
 
ret
 
VivodMass endp
 
;
 
FindMass proc near
 
;Основное условие задачи
 
M2:
 
mov di, 0
 
mov si, 0
 
mov ax, a[di]
 
M3:
 
push cx
 
cmp ax, a[di]
 
jg next
 
mov ax, a[di]; Zamena max
 
mov si, di
 
next: add di, 2
 
pop cx
 
dec cx
 
jnz M3
 
mov ax, si
 
mov si, 2
 
cwd
 
idiv si
 
push ax
 
lea dx, message3
 
call print_t
 
pop ax
 
call print_num
 
ret
 
FindMass endp
 
;
 
a_code ends
 
define_scan_num
 
define_print_num
 
define_print_num_uns
 
end main
При вводе таких значений должен быть ноль, а у меня выводит последнею запись массива.
Найти номера наибольших по абсолютной величине элементов двух заданных массивов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2016, 14:39
Ответы с готовыми решениями:

Найти наименьшее по абсолютной величине число в массиве байт. Найти ошибку
Найти наименьшее по абсолютной величене числа-массив байт (не работает) Добавлено через 21...

Составить процедуру нахождения наибольшего по абсолютной величине элемента массива
Составить процедуру нахождения наибольшего по абсолютной величине элемента массива. Передача...

Найти номера одинаковых элементов массива и вывести эти номера на экран
Дан целочисленный массив , содержащий ровно два одинаковых элемента. Найти номера одинаковых...

Найти среднее геометрическое всех элементов массива,за исключением пяти наибольших по абсолютной величине элементов
Дан массив C(N)N<=50 Найти среднее геометрическое всех элементов массива,за исключением пяти...

Найти номера первых трех максимальных по абсолютной величине элементов вектора
При помощи случайных чисел ввести вектор Z=(z1,z2...,zn),n=15.Вывести на экран вектор номера...

3
R71MT
3708 / 1336 / 291
Регистрация: 29.07.2014
Сообщений: 2,388
Записей в блоге: 5
24.04.2016, 15:07 2
Цитата Сообщение от Sektor38 Посмотреть сообщение
Найти номера наибольших по абсолютной величине элементов этих двух массивов.
--------------------------------------------
При вводе таких значений должен быть ноль
..почему нуль? Ты-же вводишь: -1 и 9
0
Sektor38
1 / 1 / 0
Регистрация: 17.03.2015
Сообщений: 16
24.04.2016, 15:34  [ТС] 3
Цитата Сообщение от R71MT Посмотреть сообщение
..почему нуль? Ты-же вводишь: -1 и 9
Преподаватель сказал, что прога должна в ошибку уходить, типа ноль выводить. По мне так это тоже не совсем правильно.

Добавлено через 2 минуты
Или какой то месседж бы вывести, что все элементы одинаковы.
0
R71MT
3708 / 1336 / 291
Регистрация: 29.07.2014
Сообщений: 2,388
Записей в блоге: 5
24.04.2016, 19:28 4
Sektor38, абсолютная величина = модуль = число без знака.
Ты вводишь в первый массив 9 (или сколько там) чисел, и находишь в из них максимальное. То же самое и со-вторым массивом.. Теперь смотришь, какое из них больше и выводишь его на экран. Так что-ли? Если да, то при чём здесь нуль, если числа у тебя -1 и 9 ?

У тебя в задании сказано:
Найти номера наибольших по абсолютной величине элементов этих двух массивов.

Какие "номера наибольших элементов"? Порядковые что-ли?
Определись уже, что тебе нужно и объясни нормальным языком.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2016, 19:28

Среднее арифметическое наибольших по абсолютной величине элементов каждого столбца матрицы под главной диагональю
Среднее арифметическое наибольших, по абсолютной величине, элементов каждого столбца матрицы под...

Из трех заданных чисел найти наибольшее по абсолютной величине
Составить программу, позволяющую из трех заданных чисел найти наибольшее по абсолютной величине.

Вывести на экран вектор номера первых трех максимальных по абсолютной величине элементов
При помощи случайных чисел ввести вектор Z=(z1,z2...,zn),n=15.Вывести на экран вектор номера первых...


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

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

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