Квадратная матрица порядка 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 - это количество строк в матрице). Список действий, которые выполняются в коде:
- Вывод элементов первой строки матрицы (количество элементов - M).
- Вывод элементов второй строки матрицы (количество элементов - M).
- Вывод элементов третьей строки матрицы (количество элементов - M).
- Вывод элементов четвертой строки матрицы (количество элементов - M).
- Вывод элементов пятой строки матрицы (количество элементов - M).
- Вывод элементов шестой строки матрицы (количество элементов - M).
- Вывод элементов седьмой строки матрицы (количество элементов - M).
- Вывод элементов восьмой строки матрицы (количество элементов - M).
- Вывод элементов девятой строки матрицы (количество элементов - M).
- Вывод элементов десятой строки матрицы (количество элементов - M).
- Вывод элементов одиннадцатой строки матрицы (количество элементов - M).
- Вывод элементов двенадцатой строки матрицы (количество элементов - M).
- Вывод элементов тринадцатой строки матрицы (количество элементов - M).
- Вывод элементов четырнадцатой строки матрицы (количество элементов - M).
- Вывод элементов пятнадцатой строки матрицы (количество элементов - M).
- Вывод элементов шестнадцатой строки матрицы (количество элементов - M).
- Вывод элементов семнадцатой строки матрицы (количество элементов - M).
- Вывод элементов восемнадцатой строки матрицы (количество элементов - M).
- Вывод элементов девятнадцатой строки матрицы (количество элементов - M).
- Вывод элементов двадцатой строки матрицы (количество элементов - M).