Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.12.2016
Сообщений: 11
1

Для каждого столбца матрицы вывести на экран максимальный элемент

10.10.2018, 16:42. Показов 1812. Ответов 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
.model small
.486
LOCALS  @@
.stack  100h
.data
 
Metric  equ     10                      ;система счисления
 
Rows    equ     4               ;максимальное количество строк
Columns equ     4               ;максимальное количество столбцов
elSize  equ     2               ;размер одного элемента матрицы
arSize  equ     Rows*Columns*elSize;максимальный размер матрицы
 
m       dw      Rows            ;текущее количество строк
n       dw      Columns         ;текущее количество столбцов
 
S       dw      16, 24,  0, 35  ;матрица
        dw      28,  5, 16, 34
        dw      55,  6, 28,  1
        dw      17,  3,101,  5
 
asCR_LF db      0Dh, 0Ah, '$'   ;"перевод строки"
asMatrix db     'Matrix M:', '$'
asMax   db      'Max: ',   '$'  ;
 
.code
 
; выводит число из регистра AX на экран
; входные данные:
; ax - число для отображения
Show_AX proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    di
 
        mov     cx, Metric
        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
        pusha
        mov     si, dx  ; строка  (i) - адрес строки матрицы
 
        mov     ax, Columns
        mov     cx, elSize
        mul     cx
        mov     di, ax  ; di - размер строки матрицы
 
        mov     cx, m   ;cx выполняет роль i (0..m-1)
        @@ForI:
                mov     dx, cx  ;сохраняем содержимое счётчика cx (i)
                mov     cx, n   ; теперь cx выполняет роль j (0..n-1)
                mov     bx, 0   ;смещение элемента относительно начала строки
                @@ForJ:
                        mov     ax, [si+bx]     ;считываем очередной элемент в ax
                        call    Show_AX ;вывод числа на экран
 
                        push    dx
                        mov     ah, 02h ;вывод пробела на экран
                        mov     dl, ' '
                        int     21h
                        pop     dx
 
                        add     bx, elSize      ;переход к следующему элементу
                loop    @@ForJ
                push    dx
                mov     ah, 09h ;перевод строки
                lea     dx, asCR_LF
                int     21h
                pop     dx
                mov     cx, dx
                add     si, di  ; si - смещение текущей строки матрицы
        loop    @@ForI
        popa
        ret
ShowMatrix endp
 
Main    proc
        mov     dx, @data
        mov     ds, dx
 
        ;вывод матрицы на экран
        mov     ah, 09h
        lea     dx, asMatrix
        int     21h
        mov     ah, 09h
        lea     dx, asCR_LF
        int     21h
        lea     dx, S
        call    ShowMatrix
 
        ;поиск максимального элемента матрицы,
        ;расположенного на главной диагонали
        lea     si, S  ; строка  (i) - адрес строки матрицы
 
        mov     ax, Columns
        mov     cx, elSize
        mul     cx
        mov     di, ax  ; di - размер строки матрицы
 
        mov     ax, [si]    ;Max:=S[0, 0]
        mov     cx,     m   ;cx выполняет роль i (0..m-1)
@@ForI:
        mov     bx, 0   ;смещение элемента относительно начала строки
        push    cx
        mov     cx,     n
        @@ForJ:
                cmp     ax, [si+bx]     ;сравниваем очередной элемент с al
                jge     @@Next          ;если очередной элемент меньше или равен максимальному
                                        ;то переходим к следующему
                mov     ax, [si+bx]     ;иначе - обновляем значение максимального элемента
        @@Next:
                add     bx, elSize      ;переход к следующему элементу в строке
                loop    @@ForJ
        pop     cx
        add     si, di          ;переход к следующей строке
        loop    @@ForI
 
        ;вывод максимального элемента
        push    ax
        mov     ah, 09h
        lea     dx, asMax
        int     21h
        pop     ax
        call    Show_AX
 
        ;завершение программы
        mov     ax, 4c00h
        int     21h
Main    endp
 
end     Main
0

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

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2018, 16:42
Ответы с готовыми решениями:

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

Вывести максимальный элемент каждого столбца и минимальный элемент каждой строки матрицы
Нужно вывести максимальный элемент каждого столбца и минимальный элемент каждой строки матрицы. С...

Для каждого нечетного столбца матрицы определить максимум, и вывести на экран сам элемент и его индексы
Дано: с клавиатуры вводятся два целых числа – М и К. 1&lt;M&lt;10, 1&lt;K&lt;10. (М – число строк, К – число...

Определить максимальный элемент и его порядковый номер для каждого столбца матрицы
Помогите,пожалуйста,написать программу в паскаль. Ввести с клавиатуры матрицу D1. Определить...

3
Модератор
Эксперт по электронике
7537 / 3723 / 1459
Регистрация: 01.02.2015
Сообщений: 11,571
Записей в блоге: 2
11.10.2018, 21:34 2
Я - знаю! Знаю автора. В чём ваше конкретное участие по доработке этого исходника?

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

Добавлено через 18 минут
denmak1999, предлагаю вам начать изучать предмет. Сейчас ещё не всё потеряно и время позволяет.

Приведённая программа может подойти лишь в качестве шаблона. Полезное действие - поиск максимумов в каждой столбце - нужно выполнять с нуля. Алгоритм полностью идентичен таковому на C/Pascal/BASIC/Pyton/Java.

Попробуйте.
0
Модератор
Эксперт по электронике
7537 / 3723 / 1459
Регистрация: 01.02.2015
Сообщений: 11,571
Записей в блоге: 2
21.10.2018, 16:57 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
.model small
.486
LOCALS  @@
.stack  100h
.data
 
Metric  equ     10                      ;система счисления
 
Rows    equ     4               ;максимальное количество строк
Columns equ     4               ;максимальное количество столбцов
elSize  equ     2               ;размер одного элемента матрицы
arSize  equ     Rows*Columns*elSize;максимальный размер матрицы
 
m       dw      Rows            ;текущее количество строк
n       dw      Columns         ;текущее количество столбцов
 
S       dw      16, 24,  0, 35  ;матрица
        dw      28,  5, 16, 34
        dw      55,  6, 28,  1
        dw      17,  3,101,  5
 
asCR_LF db      0Dh, 0Ah, '$'   ;"перевод строки"
asMatrix db     'Matrix M:', '$'
asMax   db      'Max: ',   '$'  ;
 
.code
 
; выводит число из регистра AX на экран
; входные данные:
; ax - число для отображения
Show_AX proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    di
 
        mov     cx, Metric
        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
        pusha
        mov     si, dx  ; строка  (i) - адрес строки матрицы
 
        mov     ax, [n]
        mov     cx, elSize
        mul     cx
        mov     di, ax          ; di - размер строки матрицы
 
        mov     cx, [m]         ;cx выполняет роль i (0..m-1)
        @@ForI:
                mov     dx, cx  ;сохраняем содержимое счётчика cx (i)
                mov     cx, n   ; теперь cx выполняет роль j (0..n-1)
                mov     bx, 0   ;смещение элемента относительно начала строки
                @@ForJ:
                        mov     ax, [si+bx]     ;считываем очередной элемент в ax
                        call    Show_AX ;вывод числа на экран
 
                        push    dx
                        mov     ah, 02h ;вывод пробела на экран
                        mov     dl, ' '
                        int     21h
                        pop     dx
 
                        add     bx, elSize      ;переход к следующему элементу
                loop    @@ForJ
                push    dx
                mov     ah, 09h ;перевод строки
                lea     dx, asCR_LF
                int     21h
                pop     dx
                mov     cx, dx
                add     si, di  ; si - смещение текущей строки матрицы
        loop    @@ForI
        popa
        ret
ShowMatrix endp
 
Main    proc
        mov     dx, @data
        mov     ds, dx
 
        ;вывод матрицы на экран
        mov     ah, 09h
        lea     dx, asMatrix
        int     21h
        mov     ah, 09h
        lea     dx, asCR_LF
        int     21h
        lea     dx, S
        call    ShowMatrix
        mov     ah,     09h
        lea     dx,     asCR_LF
        int     21h
        ;поиск максимального элемента матрицы,
        ;расположенного на главной диагонали
        lea     si, S  ; строка  (i) - адрес строки матрицы
 
        mov     ax, [n]
        mov     cx, elSize
        mul     cx
        mov     di, ax  ; di - размер строки матрицы
 
        mov     cx,     n   ;cx выполняет роль i (0..n-1)
        @@ForI:
                mov     bx, 0   ;смещение элемента относительно начала строки
                push    cx
                mov     cx, [m]
                mov     dx, [si]    ;Max:=S[0, 0]
                @@ForJ:
                        mov     ax, [si+bx]
                        cmp     dx, ax          ;сравниваем очередной элемент с al
                        jge     @@Next          ;если очередной элемент меньше или равен максимальному
                                                ;то переходим к следующему
                        mov     dx, ax          ;иначе - обновляем значение максимального элемента
                @@Next:
                        add     bx, di          ;переход к следующему элементу в строке
                loop    @@ForJ
 
                mov     ax,     dx
                call    Show_AX
                mov     ah, 02h                 ;вывод пробела на экран
                mov     dl, ' '
                int     21h
 
                pop     cx
                add     si, elSize              ;переход к следующей строке
        loop    @@ForI
 
        ;завершение программы
        mov     ax, 4c00h
        int     21h
Main    endp
 
end     Main
0
0 / 0 / 0
Регистрация: 13.12.2016
Сообщений: 11
23.10.2018, 13:52  [ТС] 4
Благодарю за помощь
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2018, 13:52

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Разделить элементы каждого столбца матрицы на максимальный элемент этого столбца
Дан массив целых чисел. Разделить элементы каждого столбца матрицы на максимальный элемент этого...

Разделить элементы каждого столбца матрицы на максимальный элемент этого столбца.
: Дано матрицу действительных чисел. Составить схему алгоритма и программу обработки двумерного...

Найти минимальный элемент каждой строки и максимальный элемент каждого столбца матрицы
как найти минимальный элемент каждой строки и максимальный элемент каждого столбца матрицы на с++...

Заменить максимальный элемент каждого столбца матрицы нулем
Дан двумерный массив размером n*m, заполненный случайным образом. 1. Заменить максимальный...


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

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

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