- •1.Оформление лабораторных работ.
- •2.Лабораторная работа 1. Вычисление арифметического выражения.
- •3.Лабораторная работа 2. Программа табулирования функций, использующая ввод чисел с клавиатуры.
- •4.Лабораторная работа 3. Обработка одномерных массивов.
- •5.Лабораторная работа 4. Обработка двумерных массивов.
- •6.Лабораторная работа 5. Обработка строковых данных.
- •7.Лабораторная работа 6. Многомодульные программы.
5.Лабораторная работа 4. Обработка двумерных массивов.
Целью лабораторной работы является изучение способов обработки двумерных массивов.
Для выполнения этой лабораторной работы следует переписать с дискеты текст программы “Labn4.ASM”. В сегмент данных вписать свои переменные и их значения. В сегмент кодов в процедуру MAIN ввести операторы, выполняющие действия, соответствующие индивидуальному заданию.
Данное задание использует процедуру печати элементов матрицы PRMATR.
Ниже приведен пример решения следующей задачи:
Задана матрица А(N,M). Образовать массив В из сумм положительных чисел в каждой строке матрицы.
Контрольный пример:
Матрица А: 20 3 -5
-5 0
23 –7
-3 -7 -5
Будет получен массив В (23, 3, 27, 0).
Отметим, что если в строке нет положительных чисел, то сумма равна 0.
При решении данной задачи печать элементов массива В проводилась по мере получения элементов. Другой возможный вариант – напечатать массив В после его полного образования, используя для этого процедуру печати массива (см. лабораторную работу 3).
Рис.3. Блок-схема к лабораторной работе 4
Текст программы:
DSEG SEGMENT
; индивидуальные данные - начало
N=4
M dw 3
А dw 20,3,-5
dw 3,-5,0
dw 4,23,-7
dw -3,-7,-5
B dw N dup(?)
TextA db 'Матрица : ',13,10,'$'
TextB db 'Массив В: ',13,10,'$'
; индивидуальные данные - конец
Prob db ' $'
NL db 13,10,'$' ;перевод строки
Buffer db 6 dup (?),'$'
MST dw ?
MSTR dw ?
DSEG ENDS
Stacks segment
dw 140 dup (?)
Stacks ends
CODES SEGMENT
MAIN PROC FAR
Assume CS:codes, DS:dseg, SS:stacks
Mov AX,Dseg
Mov DS,AX
; индивидуальная часть программы - начало
LEA DX,TextA
call PRT ;печать 'Матрица А : '
LEA BP,A ;в ВР адрес начала матрицы А
Mov AX,M
Mov MST,AX ; MST - количество столбцов матрицы
Mov AX,N
Mov MSTR,AX ; MSTR - количество строк матрицы
CALL PRINTMATR
Lea DX,TextB ; печать "Массив В"
Call PRT
;Пусть i - BX, j - CX
Xor BX,BX ;блок 4
BL5:
Xor CX,CX ;блок 5
Mov SI,BX
Sal SI,1
Mov B[SI],0
BL6:
Mov AX,BX
Imul M
Add AX,CX
Sal AX,1
Mov BP,AX
Mov AX,A[DS:BP]
CMP AX,0
JG BL7
JMP BL8
BL7:
Add B[SI],AX
BL8:
Inc CX ; блок 8
Cmp CX,M ; блок 9
Jl BL6
Mov AX,B[SI] ;блок 10
Call PRN
Lea DX,NL
Call PRT
Inc BX ; блок 11
Cmp BX,N ; блок 12
Jl BL5
; индивидуальная программа – конец
mov ah,1
int 21h
Mov AH,4CH
Int 21h
MAIN ENDP
;*********************************************************
PRINTMATR PROC ; процедура печати матрицы построчно
; в регистре ВР адрес начала матрицы, MST – количество столбцов
; матрицы, MSTR- количество строк.
рush AX
push BX
push CX
push DX
push SI
;Пусть i - DX, j - CX
Xor DX,DX
Prmatr1:
хor CX,CX
Prmatr2:
Mov AX,DX
push DX
MUL MST
Add AX,CX
SAL AX,1
Mov SI,AX
Mov AX,DS:[BP][SI]
LEA BX,Buffer
CALL CONVBA
LEA DX,Buffer
Mov AH,09h
Int 21h
LEA DX,Prob
Int 21h
POP DX
Inc CX
CMP CX,MST
JL Prmatr2
push DX
LEA DX,NL
Mov Ah,09h
Int 21h
POP DX
Inc DX
CMP DX,MSTR
JL Prmatr1
POP SI
POP DX
POP CX
POP BX
POP AX
RET
PRINTMATR ENDP
;*********************************************************
CONVBA PROC
…
CONVBA endp
;*********************************************************
PRT PROC ; процедура печати текста
…
PRT ENDP
;*********************************************************
PRN PROC ; процедура печати числа
…
PRN ENDP
;*****************************************************
CODES ENDS
END MAIN
Варианты заданий:
Задана матрица А(N,M) и число 0<J<M. Расположить строки матрицы А в порядке возрастания элементов J-ого столбца.
Задана матрица А(N,M) и массив В(N). Напечатать номера столбцов в матрице А, совпадающих с массивом В.
Задана матрица А(N,M) и массив В(M). Напечатать номера строк в матрице А, совпадающих с массивом В.
Задана матрица А(N,M) и число 0<J<M. Убрать из матрицы J-ый столбец. Напечатать новую матрицу А(N,M-1).
Задана матрица А(N,M) и число 0<I<N. Убрать из матрицы I-ую строку. Напечатать новую матрицу А(N-1,M).
Задана матрица А(N,M) и число 0<I<N. Расположить столбцы матрицы в порядке убывания элементов в I-о1 строке.
Задана матрица А(N,M) и массив В(К), в котором записаны номера строк матрицы А в любом порядке и массив С(К), в котором записаны номера столбцов из матрицы А в любом порядке. Найти сумму элементов матрицы А, стоящих на пересечении Вi –ой строки и Сi –ого столбца (i меняется от 0 до к-1).
Задана матрица А(N,M). Найти первый столбец, в котором содержатся одни нули, и убрать его из матрицы. Если такого столбца нет, то напечатать это.
Задана матрица А(N,M). Найти все столбцы, состоящие только из положительных чисел, и напечатать их номера. Если таких столбцов нет, то напечатать это.
Задана матрица А(N,M). Найти первую строку, состоящую только из отрицательных чисел, и убрать ее из матрицы. Если такой строки нет, то напечатать это.
Задана матрица А(N,M). Найти все строки, состоящие только из отрицательных чисел. Создать массив В из номеров этих строк.
Задана матрица А(N,M). Найти сумму чисел, расположенных выше главной диагонали.
Задана матрица А(N,M) и два числа I1 и I2. ( I1 <I2<M). Удалить из матрицы А строки, начиная с I1 и кончая I2 включительно.
Задана матрица А(N,M) и массив В(К), где 0<=Bi<=M. Просуммировать элементы в столбцах, номера которых заданы в массиве В. Если какой-то номер в массиве В встретился больше 1 раза, то учитывать этот номер только один раз.
Задана матрица А(N,M) и число D. Образовать массив В из номеров строк матрицы А, сумма элементов в которых <D.
Задана матрица А(N,M) и число D. Образовать массив В из номеров столбцов матрицы А, сумма элементов в которых <D.
Задана матрица А(N,M). Сделать эту матрицу квадратной, убрав из нее лишние столбцы или строки.
Задана квадратная матрица А(N,N). N – нечетное число. Двумя диагоналями матрица делится на четыре треугольника. Нумерация треугольников сверху по часовой стрелке. Найти сумму чисел в первом треугольнике. Элементы, входящие в диагонали, считать принадлежащими соответствующим треугольникам.
Задана квадратная матрица А(N,N). N – нечетное число. Двумя диагоналями матрица делится на четыре треугольника. Нумерация треугольников сверху по часовой стрелке. Найти сумму чисел во втором треугольнике. Элементы, входящие в диагонали, считать принадлежащими соответствующим треугольникам.
Задана квадратная матрица А(N,N). N – нечетное число. Двумя диагоналями матрица делится на четыре треугольника. Нумерация треугольников сверху по часовой стрелке. Найти сумму чисел в третьем треугольнике. Элементы, входящие в диагонали, считать принадлежащими соответствующим треугольникам.
Задана квадратная матрица А(N,N). N – нечетное число. Двумя диагоналями матрица делится на четыре треугольника. Нумерация треугольников сверху по часовой стрелке. Найти сумму чисел в четвертом треугольнике. Элементы, входящие в диагонали, считать принадлежащими соответствующим треугольникам.
Задана квадратная матрица А(N,N). N – нечетное число. Двумя диагоналями матрица делится на четыре треугольника. Нумерация треугольников сверху по часовой стрелке. Поменять местами элементы в 1-ом и 3-ем треугольниках. Элементы, находящиеся на диагоналях, считать принадлежащими соответствующим треугольникам.
Задана матрица А(N,M). Найти номер строки, в которой содержится максимальное число нулей. Если таких строк несколько, то напечатать номер только первой строки.
Задана матрица А(N,M). Найти номера столбцов, в которых содержится минимальное число отрицательных чисел.
Задана квадратная матрица А(N,N), состоящая из 0 и 1. Найти строки, в которых подряд встречается больше трех единиц, и напечатать номера этих строк. Если таких строк нет, то напечатать об этом.
Задана матрица А(N,M) и массив В(К) (К>=N), в котором в любом порядке записаны номера строк из матрицы А. Переписать в массив С строки матрицы А, номера которых заданы в массиве В. Размер матрицы С будет (K,M).
Задана матрица А(N,M) и массив В(N). Задано число J (J<М). Вставить в матрицу А массив В после J-ого столбца.
Задана матрица А(N,M) и массив В(M). Задано число I (I<N). Вставить массив В после I-ой строки.
Задана матрица А(N,M). Диагонали в ней проведены, начиная с верхнего левого угла (т.е. на диагонали 1 находится А(0,0), на диагонали 1 – А(0,1) и А(1,0) и т.д.). Найти сумму элементов, находящихся на К-ой диагонали.
Задана матрица А(N,M). Образовать массив В(N) из максимальных элементов в каждой строке.
