С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
шпрот
1

Обмен местами главной и побочной диагонали квадратной матрицы

09.01.2010, 15:20. Показов 2266. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите решить!
программа меняет местами главную и побочную диагональ квадратной матрицы М*М, М<=6. Матрица вводится с файла, указанного оператором, а результат выводится в новый файл.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2010, 15:20
Ответы с готовыми решениями:

Найти максимальные элементы на главной и побочной диагонали и поменять их местами
Дан массив элементов 4х5. Найти максимальные элементы на главной и побочной диагонали и поменять их...

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

Найти произведение суммы элементов главной и суммы элементов побочной диагонали матрицы
Помогите решить задачу, пожалуйста. Я в ассемблере вообще ничего не понимаю, в голову не лезет хоть...

Ввод матрицы и вывод ее побочной диагонали
Написать exe-программу, в которой нужно ввести двухмерный массив 4х4. И вывести с него побочную...

4
Прощай, Мир!
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
25.07.2014, 02:17 2
вот.. только есть нюансы. программа работает с беззнаковыми цифрами меньшими десяти (0-9). Работает только с квадратной матрицей 6 на 6. но маленько подумав можно оформить это ввиде процедуры. сделать на подобие этой еще процедуры для матриц 4*4, 2*2. в таком случае вызов будет зависеть от количества прочитанных элементов из файла.

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
.model small
.386
 
.data
        db  'Bebin Of Data$'
arr     db   4Ch dup(?)
file1   db   'D:\matrix.txt',0
file2   db   'D:\result.txt',0
mes1    db   'File Wasn''t Found!$'
mes2    db   'Information Wasn''t Read!$'
mes3    db   'File Wasn''t Closed!$'
mes4    db   'File Wasn''t Created!$'
diag1   db   06h dup(?)
diag2   db   06h dup(?)
M       db   06h
hnd     dw   ?
check   db   'Check Is OK!$'
        db  'End Of Data$'
 
.stack
    db  0FFh
 
.code
start:
    mov ax,@data
    mov ds,ax
    
    ;открываем файл, запоминаем дискриптор
    mov ah,3Dh
    mov al,00h
    lea dx,file1
    int 21h
    jc  fault1
    mov hnd,ax
    
    ;читаем файл
    mov bx,ax
    mov ah,3Fh
    lea dx,arr
    mov cx,4Ch
    int 21h
    jc  fault2
    
    ;в ax количество реально прочитанных байт
    ;этим мы делаем проверку на размерность матрицы
    ;(учитываются возврат коретки и перенос строки)
    ;cmp ax,4Ch
    ;jnz exit
    
    push ds
    pop es
    
    ;сохраняем главную диагональ матрицы 6*6 в diag1
    lea si,arr
    lea di,diag1
    mov cx,06h
    d1_save:
        lodsb
        stosb
        add si,0Eh
    loop d1_save
    
    ;сохраняем побочную диагональ матрицы 6*6 в diag2
    lea si,arr
    add si,0Ah
    lea di,diag2
    mov cx,06h
    d2_save:
        lodsb
        stosb
        add si,0Ah
    loop d2_save
 
    ;заполняем главную диагональ матрицы 6*6 побочной диагональю
    lea si,diag2
    lea di,arr
    mov cx,06h
    d1_fill:
        lodsb
        stosb
        add di,0Eh
    loop d1_fill
    
    mov ah,09h
    lea dx,check
    int 21h
    
    ;заполняем побочную диагональ матрицы 6*6 побочной диагональю
    lea si,diag1
    lea di,arr
    add di,0Ah
    mov cx,06h
    d2_fill:
        lodsb
        stosb
        add di,0Ah
    loop d2_fill
    
    ;закрываем файл из которого читали
    mov ah,3Eh
    mov bx,hnd
    int 21h
    jc  fault3
    
    ;создаем другой файл для записи
    mov ah,3Ch
    lea dx,file2
    mov cx,00h
    int 21h
    jc fault4
    mov hnd,ax
    
    ;пишем в этот файл
    mov bx,ax
    mov ah,40h
    lea dx,arr
    mov cx,4Ch
    int 21h
    
    ;закрываем наш второй файл
    mov ah,3Eh
    mov bx,hnd
    int 21h
    jc fault3
    
    
    jmp exit
    
    fault1:
    mov ah,09h
    lea dx,mes1
    int 21h
    
    jmp exit
    
    fault2:
    mov ah,09h
    lea dx,mes2
    int 21h
    
    jmp exit
    
    fault3:
    mov ah,09h
    lea dx,mes3
    int 21h
    
    jmp exit
    
    fault4:
    mov ah,09h
    lea dx,mes4
    int 21h
    
    exit:
    mov ah,4Ch
    int 21h
end start
добавляю еще исходный текстовый файл и результирующий файл..

matrix.txt
RESULT.TXT

в коде нужно убрать вывод сообщения check (строки 84-86) да и в сегменте данных переменную. они здесь не к чему. использовал только для тестирования.
0
Ушел с форума
Автор FAQ
16339 / 7658 / 1076
Регистрация: 11.11.2010
Сообщений: 13,704
26.07.2014, 14:40 3
proc3nt,
при размере матрицы NxN програма на псевдо-языке такая
Код
a[0..(N*N-1)]
i=0, j=N-1, k=N
label: a[i]<->a[j]
i:=i+(N+1)
j:=j+(N-1)
k:=k-1
if (k<>0) then goto label
exit: ...
0
murderer
27.07.2014, 08:26
  #4

Не по теме:

Windows при завершении приложения автоматически освобождает все занимаемые им (приложением) реурсы - хендлы, области памяти. DOS при вызове 4Ch освобождает ресурсы? То есть я имею в виду обязательно ли закрывать файлы, если ты корректно завершаешь приложение вызовом 4Ch?

0
Mikl___
27.07.2014, 08:36     Обмен местами главной и побочной диагонали квадратной матрицы
  #5

Не по теме:

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

0
27.07.2014, 08:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2014, 08:36
Помогаю со студенческими работами здесь

Найти произведение элементов квадратной матрицы, находящихся под ее главной диагональю.
1) Увеличить содержимое CX на 1, если значение AX равно 0. Увели-чить содержимое CX на 10, если...

Найти количество отрицательных нечетных элементов матрицы на побочной диагонали
Дана квадратная матрица А размерности nxn. Найти количество отрицательных нечетных элементов...

Обменять элементы главной и побочной диагоналей матрицы 16х16 бит
Решите пожалуйста задачу. Обменять элементы главной и побочной диагоналей матрицы 16х16 бит.

[tasm] Как сделать проход по всем элементам ниже побочной диагонали матрицы
Добрый день(вечер). Использую тасм. Возникла небольшая проблема при написании кода. В общем ломаю...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru