0 / 0 / 0
Регистрация: 03.04.2017
Сообщений: 6
1
TASM

Найти в матрице строку с минимальным значением суммы элементов

14.04.2017, 08:58. Показов 1812. Ответов 3
Метки нет (Все метки)

Нужно решить задачу
Задать с клавиатуры матрицу размером 4х4. Найти строку с минимальным значением суммы элементов и заменить все элементы найденной строки на 0. Предусмотреть:
1)Приглашение к вводу матрицы
2)Проверку разрядности элементов матрицы, разрядность не меньше 2
3)Вывод сформированной матрицы
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2017, 08:58
Ответы с готовыми решениями:

В матрице поменять местами столбцы с максимальным и минимальным значением суммы элементов
Народ, задача звучит так: необходимо в задаче размерностью N<=5, M<=10 (кол-во строк столбцов...

Заполнить матрицу произвольного размера с клавиатуры. найти в матрице столбец с минимальным значением произведения элементов
Заполнить матрицу произвольного размера с клавиатуры. найти в матрице столбец с минимальным...

В матрице найти строку с минимальным количеством нулевых элементов
Не подскажете как в матрице найти строку с минимальным количеством нулевых элементов, а затем ее...

Дан массив.найти номера всех элементов:с минимальным значением,с максимальным значением.
Привет всем!!!помогите решить задачи на С#. 1.Дан массив.найти номера всех элементов:с минимальным...

3
1647 / 812 / 246
Регистрация: 26.05.2012
Сообщений: 2,946
14.04.2017, 12:58 2
выкладывай свои размышления..
0
0 / 0 / 0
Регистрация: 03.04.2017
Сообщений: 6
14.04.2017, 14:55  [ТС] 3
proc3nt, у меня нет мыслей по этой задаче, т.к. я ноль в ассемблере. Поэтому прошу решить кому не лень
0
Модератор
Эксперт по электронике
7653 / 3817 / 1483
Регистрация: 01.02.2015
Сообщений: 11,819
Записей в блоге: 2
15.04.2017, 21:12 4
Лучший ответ Сообщение было отмечено ayelhvs как решение

Решение

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
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
model small
.486
LOCALS @@
.stack  256
.data
 
Rows            equ    4                ;максимальное количество строк
Columns         equ    4                ;максимальное количество столбцов
iSize           equ    Rows*Columns     ;максимальный размер матрицы
 
m               dw     Rows             ;текущее количество строк
n               dw     Columns          ;текущее количество столбцов
 
Matrix          dw     iSize dup(?)     ;матрица
 
asCR_LF         db      0dh, 0ah, '$'   ;"перевод строки"
asTitle0        db      'Input matrix', '$'
asTitle1        db      'Current matrix', '$'
asTitle2        db      'Result matrix', '$'
asPrompt1       db      'a[ ', '$'      ;строка приглашения
asPrompt2       db      ',  ', '$'
asPrompt3       db      ']= ', '$'
 
kbMaxLen        equ     6+1             ;буфер ввода с клавиатуры Fn 0ah
kbInput         db      kbMaxLen, 0, kbMaxLen dup(0)
 
.code
 
; преобразования строки в число
; на входе:
; ds:[si] - строка с числом
; ds:[di] - адрес числа
; на выходе
; ds:[di] - число
; CY - флаг переноса (при ошибке - установлен, иначе - сброшен)
Str2Num PROC
        push    ax
        push    bx
        push    cx
        push    dx
        push    ds
        push    es
        push    si
 
        push    ds
        pop     es
 
        mov     cl, ds:[si]
        xor     ch, ch
 
        inc     si
 
        mov     bx, 10
        xor     ax, ax
 
        ;если в строке первый символ '-'
        ; - перейти к следующему
        ; - уменьшить количество рассматриваемых символов
        cmp     byte ptr [si], '-'
        jne     @@Loop
        inc     si
        dec     cx
@@Loop:
        mul     bx         ; умножаем ax на 10 ( dx:ax=ax*bx )
        mov     [di], ax   ; игнорируем старшее слово
        cmp     dx, 0      ; проверяем, результат на переполнение
        jnz     @@Error
 
        mov     al, [si]   ; Преобразуем следующий символ в число
        cmp     al, '0'
        jb      @@Error
        cmp     al, '9'
        ja      @@Error
        sub     al, '0'
        xor     ah, ah
        add     ax, [di]
        jc      @@Error    ; Если сумма больше 65535
        cmp     ax, 8000h
        ja      @@Error
        inc     si
 
        loop    @@Loop
 
        pop     si         ;проверка на знак
        push    si
        inc     si
        cmp     byte ptr [si], '-'
        jne     @@Check    ;если должно быть положительным
        neg     ax         ;если должно быть отрицательным
        jmp     @@StoreRes
@@Check:                   ;дополнительная проверка, когда при вводе положительного числа получили отрицательное
       or       ax, ax     ;
       js       @@Error
@@StoreRes:                ;сохранить результат
        mov     [di], ax
        clc
        pop     si
        pop     es
        pop     ds
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
@@Error:
        xor     ax, ax
        mov     [di], ax
        stc
        pop     si
        pop     es
        pop     ds
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
Str2Num ENDP
 
; выводит число из регистра AX на экран
; входные данные:
; ax - число для отображения
Show_AX proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    di
 
        mov     cx, 10
        xor     di, di          ; di - кол. цифр в числе
 
        ; если число в ax отрицательное, то
        ;1) напечатать '-'
        ;2) сделать ax положительным
        or      ax, ax
        jns     @@Conv
        push    ax
        mov     dx, '-'
        mov     ah, 2           ; ah - функция вывода символа на экран
        int     21h
        pop     ax
 
        neg     ax
 
@@Conv:
        xor     dx, dx
        div     cx              ; dl = num mod 10
        add     dl, '0'         ; перевод в символьный формат
        inc     di
        push    dx              ; складываем в стэк
        or      ax, ax
        jnz     @@Conv
        ; выводим из стэка на экран
@@Show:
        pop     dx              ; dl = очередной символ
        mov     ah, 2           ; ah - функция вывода символа на экран
        int     21h
        dec     di              ; повторяем пока di<>0
        jnz     @@Show
 
        pop     di
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
Show_AX endp
 
; На входе
;m     - количество строк
;n     - количество столбцов
;ds:dx - адрес матрицы
ShowMatrix PROC FAR
        pusha
        mov     si, 0  ; строка
        mov     di, 0  ; столбец
        mov     bx, dx
 
@@ShowRow:
        mov     ax, [bx]
        call    Show_AX
 
        mov     ah,     02h
        mov     dl,     ' '
        int     21h
 
        add     bx,     2
 
        inc     di
 
        cmp     di, n
        jb      @@ShowRow
 
        mov     dx, OFFSET asCR_LF
        mov     ah, 09h
        int     21h
 
        mov     di, 0
 
        inc     si
 
        cmp     si, m
        jb      @@ShowRow
 
        popa
        ret
ShowMatrix ENDP
 
; На входе
;ds:dx - адрес матрицы
InputMatrix PROC
        pusha
        ;bx - адрес очередного элемента матрицы
        mov     bx,     dx
        ;Вывод на экран приглашения ввести матрицу
        mov     ah, 09h
        mov     dx, OFFSET asTitle0
        int     21h
 
        mov     ah, 09h
        mov     dx, OFFSET asCR_LF
        int     21h
 
        mov     si, 1  ; строка (индекс)
        mov     di, 1  ; столбец (индекс)
@@InpInt:
        ;вывод на экран приглашения 'a[  1,  1]='
        lea     dx, asPrompt1
        mov     ah, 09h
        int     21h
        mov     ax,     si
        call    Show_AX
        lea     dx, asPrompt2
        mov     ah, 09h
        int     21h
        mov     ax,     di
        call    Show_AX
        lea     dx, asPrompt3
        mov     ah, 09h
        int     21h
 
        ;Ввод строки
        mov     ah, 0ah
        mov     dx, OFFSET kbInput
        int     21h
 
        ;Преобразование строки в число
        push    di
        push    si
        mov     si, OFFSET kbInput+1
        mov     di, bx
        call    Str2Num
        pop     si
        pop     di
        jc      @@InpInt  ; если ошибка преобразования - повторить ввод
        ;проверка введенного числа на количество разрядов не менее 2
        cmp     word ptr [bx],  10
        jge     @@Ok
        cmp     word ptr [bx],  -10
        jle     @@Ok
        jmp     @@InpInt
@@Ok:
        ;на экране - перейти к следующей строке
        mov     dx, OFFSET asCR_LF
        mov     ah, 09h
        int     21h
        ;перейти к следующему элементу матрицы
        add     bx,     2
 
        inc     di
 
        cmp     di, n
        jbe     @@InpInt
 
        mov     di, 1
 
        inc     si
 
        cmp     si, m
        jbe     @@InpInt
 
        popa
        ret
InputMatrix ENDP
 
Main    PROC    FAR
        mov     dx, @data
        mov     ds, dx
 
        mov     dx, OFFSET Matrix
        call    InputMatrix
 
        mov     ah, 09h
        mov     dx, OFFSET asTitle1
        int     21h
 
        mov     ah, 09h
        mov     dx, OFFSET asCR_LF
        int     21h
 
        mov     dx, OFFSET Matrix
        call    ShowMatrix
 
        ;поиск строки с минимальным значением суммы элементов
        mov     ax,     7FFFh   ;минимальное значение суммы в матрице
        mov     di,     0       ;номер строки с минимальной суммой
        mov     cx,     m
        lea     si,     Matrix
@@ForI:                         ;цикл по строкам
        mov     bx,     0       ;сумма элементов строки
        push    cx
        mov     cx,     n       ;количество элементов в строке
        @@ForJ:
                add     bx,     [si]
                add     si,     2
                loop    @@ForJ
        pop     cx
 
        cmp     ax,     bx
        jle     @@Next
        mov     ax,     bx
        mov     di,     m       ;di - номер строки с минимальной суммой
        sub     di,     cx
@@Next:
        loop    @@ForI
 
        ;замена элементов строки с минимальной суммой элементов, на нули
        lea     bx,     Matrix
        mov     ax,     n
        mul     di
        shl     ax,     1
        add     bx,     ax
        mov     cx,     n
        mov     ax,     0
@@@ForJ:
        mov     [bx],   ax
        add     bx,     2
        loop    @@@ForJ
 
 
        ;Вывод результатов на экран
        mov     ah, 09h
        mov     dx, OFFSET asTitle2
        int     21h
 
        mov     ah, 09h
        mov     dx, OFFSET asCR_LF
        int     21h
 
        mov     dx, OFFSET Matrix
        call    ShowMatrix
 
        mov     ax, 4c00h
        int     21h
Main    ENDP
 
END     Main
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2017, 21:12

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Определить столбец с минимальным значением суммы положительных элементов (программа не работает)
Задание: В квадратной матрице размером К*К, имеющей имя МА содержаться целые числа. К- число строк...

Определить сумму элементов в каждом столбце матрицы и столбец с минимальным значением этой суммы
В прямоугольной матрице размером M*K, имеющей имя MEM содержаться целые числа. М - число строк, К -...

Удалить из матрицы строку с минимальным значением произведения всех его элементов.
Ввести прямоугольную матрицу действительных чисел. Удалить из матрицы строку с минимальным...

Удалить из целочисленной квадратной матрицы строку с минимальным средним значением элементов
Доброго времени суток.. Помогите пожалуйста решить вот эту задачу,кажется вроде не сложная,но...

Найти номера элементов массива с минимальным значением
Дан массив. Найти номера всех элементов. С минимальным значением

В матрице найти строку с наибольшим значением чётного числа
Найти строку с наибольшим значением чётного числа для произвольной матрицы. вывести строку на...


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

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

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