Квадратная матрица порядка M - Assembler

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. У меня проблема с квадратной матрицей... Мой код не правильно выводит матрицу. И еще я не знаю как заменить элементы которые выше главной диагонали(включая её) и которые выше побочной диагонали(включая её) на 0. помогите пожалуйста
.model small
.stack 100h
.386
.data
    poriadok dw (?)
    array db 4*4 dup (?)
    msgporiadok db 'Vvedite poriadok kvadratnoi matrici: $'
    crlf db 13,10, '$'
    buf db 3,0,3 dup ('$'), '$'
    msgPress db 'Press any key... $'
    msgEl db 13,10,'Input elements: ',13,10,'$'

.code 
;макрос вывода на экран текстового сообщения 
;str - стока для вывода 
write macro str 
push ax 
push dx 
 
lea dx,str ;адрес строки для вывода 
mov ah,09h ;09h функция 
int 21h 
 
pop dx 
pop ax 
endm 
 
;макрос вывода числа на экран 
;вход: AX - число для вывода на экран 
putdigit macro 
local lput1 
local lput2 
local exx 
 
push ax 
push cx 
push -1 ;сохраним признак конца числа 
mov cx,10 ;делить будем на 10 
lput1: xor dx,dx ;чистим регистр dx 
mov ah,0 
div cl ;Делим 
mov dl,ah 
push dx ;Сохраним цифру 
cmp al,0 ;Остался 0? 
jne lput1 ;нет -> продолжим 
mov ah,2h 
lput2: pop dx ;Восстановим цифру 
cmp dx,-1 ;Дошли до конца -> выход 
je exx 
add dl,'0' ;Преобразуем число в цифру 
int 21h ;Выведем цифру на экран 
jmp lput2 ;И продолжим 
exx: 
mov dl,' ' 
int 21h 
pop cx 
pop ax 
endm 

;макрос ввода числа с клавиатуры 
;выход: AX - введенное число 
indigit macro 
local lin 
push bx 
push cx 
push dx 
 
mov ah,0Ah ;буферизированный ввод 
lea dx,buf 
int 21h 
 
xor ax,ax 
xor cx,cx 
;разбор количества цифр введенного числа 
mov cl,[buf+1] ;количество реально введенных символов 
xor di,di 
lin: 
mov dl,10 
mul dl 
mov bl,[buf+di+2] 
sub bl,30h ;ASCII -> число 
add al,bl 
inc di 
loop lin 
 
pop dx 
pop cx 
pop bx 
endm 
 
start: 
mov ax,@data 
mov ds,ax 
 
write msgporiadok 
indigit 
mov poriadok,ax 
write crlf ;принудительно переводим курсор на след. строку 
 
write msgEl 
;ввод массива 
lea bx,array 
mov cx,poriadok 
in1: ;цикл по строкам 
push cx 
mov cx,poriadok 
mov si,1 
in2: ;цикл по колонкам 
indigit ;макрос ввода числа 
mov [bx][si],al ;bx
inc si 
 
write crlf 
loop in2 
 
add bx,poriadok 
pop cx 
loop in1 

;---------------------------------------------------------------------------------------------------— 
;вывод массива на экран 
lea bx,poriadok 
mov cx,poriadok
out1: ;цикл по строкам 
push cx 
mov cx,poriadok 
mov si,0 
 
write crlf ;нова строка 
out2: ;цикл по колонкам 
xor ax,ax 
mov al,[bx][si] ;Выводимое число в регисте AL 
putdigit ;макрос вывода 
inc si 
loop out2 
 
add bx,poriadok 
pop cx 
loop out1 
 
write crlf 
write crlf 
write crlf 

;press any key 
write msgPress 
mov ah,0 
int 16h 
;exit 
mov ax,4c00h 
int 21h
end start

Решение задачи: «Квадратная матрица порядка M»

textual
Листинг программы
for (int i = 1; i <= poriadok; i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;
 
    for (int i = poriadok + 2; i < poriadok * 2; i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;
 
    for (int i = poriadok * 2 + 3; i <= poriadok * 3 - 2; i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;
    for (int i = poriadok * 3 + 4; i <= poriadok * 3 - 3; i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;
 
    for (int i = poriadok * 4 + 5; i <= poriadok * 4 - 4; i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;

Объяснение кода листинга программы

Код выводит элементы квадратной матрицы порядка M (где M - это количество строк в матрице). Список действий, которые выполняются в коде:

  1. Вывод элементов первой строки матрицы (количество элементов - M).
  2. Вывод элементов второй строки матрицы (количество элементов - M).
  3. Вывод элементов третьей строки матрицы (количество элементов - M).
  4. Вывод элементов четвертой строки матрицы (количество элементов - M).
  5. Вывод элементов пятой строки матрицы (количество элементов - M).
  6. Вывод элементов шестой строки матрицы (количество элементов - M).
  7. Вывод элементов седьмой строки матрицы (количество элементов - M).
  8. Вывод элементов восьмой строки матрицы (количество элементов - M).
  9. Вывод элементов девятой строки матрицы (количество элементов - M).
  10. Вывод элементов десятой строки матрицы (количество элементов - M).
  11. Вывод элементов одиннадцатой строки матрицы (количество элементов - M).
  12. Вывод элементов двенадцатой строки матрицы (количество элементов - M).
  13. Вывод элементов тринадцатой строки матрицы (количество элементов - M).
  14. Вывод элементов четырнадцатой строки матрицы (количество элементов - M).
  15. Вывод элементов пятнадцатой строки матрицы (количество элементов - M).
  16. Вывод элементов шестнадцатой строки матрицы (количество элементов - M).
  17. Вывод элементов семнадцатой строки матрицы (количество элементов - M).
  18. Вывод элементов восемнадцатой строки матрицы (количество элементов - M).
  19. Вывод элементов девятнадцатой строки матрицы (количество элементов - M).
  20. Вывод элементов двадцатой строки матрицы (количество элементов - M).

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы