1 / 1 / 0
Регистрация: 15.05.2018
Сообщений: 6
1

Изменить последовательность столбцов матрицы так, чтобы элементы их первой строки были отсортированы по возрастанию

15.05.2018, 22:37. Показов 1446. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Срочно понадобилась помощь! Дано такое условие:

Исходные данные: Изменить последовательность столбцов матрицы так, чтобы элементы их первой строки были отсортированы по возрастанию.

Входные значения элементы матрицы 5х7 – числа со знаком размером в байт – должны вводиться с клавиатуры. Результат работы – модифицированную матрицу - необходимо вывести на экран. Обмен информацией с пользователем организовать в виде специальных сообщений, каждое из которых следует размещать в отдельной строке экрана.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2018, 22:37
Ответы с готовыми решениями:

Переставить строки матрицы так, чтобы элементы последнего столбца были отсортированы по возрастанию
Срочно понадобилась помощь! Дано такое условие: Переставить строки матрицы так, чтобы элементы...

Преобразовать строку так, чтобы все буквы в ней были отсортированы по возрастанию
Задана строка, состоящая из символов. Символы объединяются в слова. Слова друг от друга отделяются ...

Преобразовать строку так, чтобы все буквы в ней были отсортированы по возрастанию (работайте с английским алфавитом).
Преобразовать строку так, чтобы все буквы в ней были отсортированы по возрастанию (работайте с...

TabControl - сделать так, чтобы на первой странице были одни элементы, а на другой были другие элементы
Есть tabControl. Хочу сделать так, чтобы на первой странице были одни элементы, а на другой были...

2
1 / 1 / 0
Регистрация: 15.05.2018
Сообщений: 6
20.05.2018, 16:36  [ТС] 2
Изменить последовательность столбцов матрицы так, чтобы элементы их первой строки были отсортированы по возрастанию.
Заполнение матрицы -ввод с клавиатуры
0
1 / 1 / 0
Регистрация: 15.05.2018
Сообщений: 6
28.03.2019, 20:47  [ТС] 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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
.model small
.data
N   = 5 ;строк
M   = 7 ;столбцов
inpm    db 13,10,'Input matrix:$'
msg1    db 13,10,'Matrix:',13,10,'$'
msg2    db 13,10,'New matrix:',13,10,'$' 
msg3    db 13,10,'Enter number!$'
str0    db 0dh,0ah,'A($'    ;формируемая для вывода строка
str1    db ')= $'
buf db 5,6 dup(0)   ;принимает строку, введенную с клавиатуры
A   db N*M dup (?)
.stack 256
.code
start:
    mov ax,@data    ;Настраиваем сегментные регистры
    mov ds,ax
    mov ah,9        ;функция вывода сообщения на экран
    lea dx,inpm     ;выводимое сообщение
    int 21h         ;выводим на экран
;Ввод матрицы
    lea bx,A        ;начало матрицы
    mov cx,1        ;строка
    mov di,1        ;столбец
inpmas: mov ah,9        ;функция вывода сообщения на экран
    lea dx,str0     
    int 21h         ;выводим на экран
        mov ax,cx       ;строка
    call printdec       ;преобразуем номер строки в текст и выводим на экран
    mov ah,2            ;ф-я вывода символа
    mov dl,','      ;запятая
    int 21h         ;вывести на экран
    mov ax,di       ;столбец
    call printdec       ;выводим на экран
 
    mov ah,9        ;функция вывода сообщения на экран
    lea dx,str1     
    int 21h         ;выводим на экран
    mov ah,0ah      ;функция ввода строки с клавиатуры
    mov dx,offset buf   ;буфер куда вводить
    int 21h         ;пользователь вводит в текстовом виде в buf значение элемента массива
    lea si,buf[2]       ;начало введенного текста
    call str2dw     ;преобразовываем строку в значение
    jnc correct
    mov ah,9        ;функция вывода сообщения на экран
    lea dx,msg3     ;выводимое сообщение
    int 21h         ;выводим на экран
    jmp inpmas 
correct:
    mov [bx],al     ;заносим значение в массив
    inc bx          ;следующий элемент
    inc di          ;номер следующего столбца
    cmp di,M        ;сравниваем с шириной матрицы
    jbe inpmas      ;если меньше или рано, продолжить
    mov di,1        ;первый столбец
    inc cx          ;следующая строка
    cmp cx,N        ;сравниваем с высотой матрицы
    jbe inpmas      ;если меньше или рано, продолжить
    mov ah,9        ;функция вывода сообщения на экран
    lea dx,msg1     ;выводимое сообщение
    int 21h         ;выводим на экран
    call outmatr        ;вывод матрицы
    lea si,A
    mov bx,M
;пузырьковая сортировка массива
;si указывает на массив, который нужно отсортировать
;bx - количество элементов массива
sort:   xor dx, dx      ;flag=0
    mov di, si      ;начало массива
    lea cx, [bx-1]      ;сх=bx-1(будем проводить n-1 сравниваний)
s1: mov al, [di]        ;mas[n]
    cmp al, [di+1]      ;mas[n] не больше mas[n+1]
    jng s2          ;то пропустить
    push cx         ;сохранить регистры 
    push di
    mov cx,N        ;кол-во элементов  в столбце
s3: mov al,[di]     ;меняем
    xchg al, [di+1]     ;местами
    mov [di],al     ;два
    add di,M        ;соседних
    loop s3         ;столбца
    pop di          ;восстанивить регистры
    pop cx
    mov dx, 1       ;flag=1
s2: inc di          ;переходим к следующему элементу массива
    loop s1         ;сравниваем все элементы в данном проходе
    test dx, dx     ;flag=0?
    jnz sort        ;если нет, то продолжаем сортировку
 
    mov ah,9        ;функция вывода сообщения на экран
    lea dx,msg2     ;выводимое сообщение
    int 21h         ;выводим на экран
    call outmatr        ;вывод матрицы
    mov ax,4c00h    ;закончить программу
    int 21h
;преобразование числа из аl в десятичную строку и вывод на экран
;al - число
printdec proc
    push cx     ;сохраняем регистры
    push dx
    push bx
    push si
    cbw     ;расширить до слова
    mov si,ax   ;запоминаем число
    mov bx,10   ;основание системы
    xor cx,cx   ;в сх будет количество цифр в десятичном числе
    test ax,ax  ;если число положительное
    jns @@m1a   ;то пропускаем
    neg ax      ;если отрицательное, то меняем знак
@@m1a:  xor dx,dx   ;очистить старшую часть делимого
    div bx      ;делим число на степени 10
    push dx     ;и сохраняем остаток от деления(коэффициенты при степенях) в стек
    inc cx      ;увеличиваем количество десятичных цифр числа
    test ax,ax  ;после деления остался 0?
    jnz @@m1a   ;если нет, продолжаем
    test si,si  ;число отрицательное?
    jns @@m3a   ;если нет, пропустить
    push -3     ;иначе дописать перех числом минус
    inc cx      ;увеличить количество цифр числа
@@m3a:  mov ah,2        ;ф-я вывода символа
@@m2a:  pop dx      ;взять из стека цифру цисла
    add dl,'0'  ;преобразовываем цифру в ASCII символ
    int 21h     ;вывести на экран
    loop @@m2a  ;все цифры
    pop si      ;восстанавливаем регистры
    pop bx
    pop dx
    pop cx
    ret     ;выход из подпрограммы
printdec endp
str2dw:
;Преобразование строки в число
;на входе ds:si ссылается на ASCII строку, которую нужно преобразовать
;на выходе в ax - число.
;признак cf=1 в случае некорректной строки
    push dx     ;сохраняем регистры
    push si
    push di
    push bx
    mov bx,10
    xor dx,dx   ;сумма
    xor di,di   ;знак
@lp1:   xor ax,ax
    lodsb       ;берем символ
    cmp al,13   ;если это конец строки,
    jz @ex      ;то заканчиваем
    cmp al,'-'  ;если минус,
    jnz @m1
    mov di,1    ;то устанавливаем признак минуса
    jmp @lp1    ;продолжаем обработку
@m1:    cmp al,'9'  ;если это не цифра,
    ja @errex1  ;то ошибка
    cmp al,'0'      ;если это не цифра,
    jb @errex1      ;то ошибка
    sub ax,'0'  ;получаем цифровое значение
    push ax     ;сохраняем ax
    mov ax,dx   ;Dx
    imul bx     ;dx*основание системы
    mov dx,ax   ;dx=dx*основание системы
    pop ax      ;восстанавливаем ax
    add dx, ax  ;прибавляем текущее значение
    jmp @lp1    ;продолжаем обработку
@ex:    test di,di  ;если установлен признак отрицательного числа
    jz @ex1
    neg dx      ;то меняем знак
@ex1:   mov ax,dx   ;помещаем результат в ах
    pop bx
        pop di
    pop si      ;восстанавливаем регистры
    pop dx
    clc     ;нормальное завершение
    ret     ;выход их подпрограммы
@errex1:
    pop bx
        pop di
    pop si      ;восстанавливаем регистры
    pop dx
    xor ax,ax
    stc     ;ошибка
    ret     ;выход их подпрограммы
 
outmatr proc
    mov ax,N        ;размер матрицы
    mov cx,M
    mul cx          ;количество элементов в матрице
    mov cx,ax       ;количество элементов в матрице
    lea bx,A        ;начало матрицы
mo6:    mov al,[bx]     ;берем элемент матрицы
    call printdec       ;выводим
    mov ah,2        ;функция вывода символа на экран
    mov dl,9        ;символ табуляции
    int 21h         ;выводим пробел
    inc bx          ;переходим к следующему элементу матрицы
    dec cx          ;уменьшаем количество оставшихся элементов
    jz ex1                  ;если 0 - закончить
    mov ax,cx       ;количество оставшихся элементов
    mov dx,M        ;длина строки матрицы
    div dl                  ;делим текущий элемент на длину строки матрицы
    test ah,ah              ;если не 0
    jnz mo6         ;то продолжить
    mov ah,2        ;функция вывода символа на экран
    mov dl,13       ;возврат каретки
    int 21h                 ;выводим возврат каретки
    mov dl,10       ;перевод строки
    int 21h         ;выводим перевод строки
    jmp mo6         ;продолжаем вывод
ex1:    ret
outmatr endp
 
end start
Добавлено через 1 час 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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
.model small
.data
N   = 5 ;строк
M   = 7 ;столбцов
inpm    db 13,10,'Input matrix:$'
msg1    db 13,10,'Matrix:',13,10,'$'
msg2    db 13,10,'New matrix:',13,10,'$' 
msg3    db 13,10,'Enter number!$'
str0    db 0dh,0ah,'A($'    ;формируемая для вывода строка
str1    db ')= $'
buf db 5,6 dup(0)   ;принимает строку, введенную с клавиатуры
A   db N*M dup (?)
.stack 256
.code
start:
    mov ax,@data    ;Настраиваем сегментные регистры
    mov ds,ax
    mov ah,9        ;функция вывода сообщения на экран
    lea dx,inpm     ;выводимое сообщение
    int 21h         ;выводим на экран
;Ввод матрицы
    lea bx,A        ;начало матрицы
    mov cx,1        ;строка
    mov di,1        ;столбец
inpmas: mov ah,9        ;функция вывода сообщения на экран
    lea dx,str0     ;(
    int 21h         ;выводим на экран
        mov ax,cx       ;строка
    call printdec       ;преобразуем номер строки в текст и выводим на экран
    mov ah,2            ;ф-я вывода символа
    mov dl,','      ;запятая
    int 21h         ;вывести на экран
    mov ax,di       ;столбец
    call printdec       ;выводим на экран
 
    mov ah,9        ;функция вывода сообщения на экран
    lea dx,str1     ;)=
    int 21h         ;выводим на экран
    mov ah,0ah      ;функция ввода строки с клавиатуры
    mov dx,offset buf   ;буфер куда вводить
    int 21h         ;пользователь вводит в текстовом виде в buf значение элемента массива
    lea si,buf[2]       ;начало введенного текста
    call str2dw     ;преобразовываем строку в значение
    jnc correct
    mov ah,9        ;функция вывода сообщения на экран
    lea dx,msg3     ;выводимое сообщение
    int 21h         ;выводим на экран
    jmp inpmas 
correct:
    mov [bx],al     ;заносим значение в массив
    inc bx          ;следующий элемент
    inc di          ;номер следующего столбца
    cmp di,M        ;сравниваем с шириной матрицы
    jbe inpmas      ;если меньше или рано, продолжить
    mov di,1        ;первый столбец
    inc cx          ;следующая строка
    cmp cx,N        ;сравниваем с высотой матрицы
    jbe inpmas      ;если меньше или рано, продолжить
    mov ah,9        ;функция вывода сообщения на экран
    lea dx,msg1     ;выводимое сообщение
    int 21h         ;выводим на экран
    call outmatr        ;вывод матрицы
    lea si,A
    mov bx,M
;пузырьковая сортировка массива
;si указывает на массив, который нужно отсортировать
;bx - количество элементов массива
sort:   xor dx, dx      ;flag=0
    mov di, si      ;начало массива
    lea cx, [bx-1]      ;сх=bx-1(будем проводить n-1 сравниваний)
s1: mov al, [di]        ;mas[n]
    cmp al, [di+1]      ;mas[n] не больше mas[n+1]
    jng s2          ;то пропустить
    push cx         ;сохранить регистры 
    push di
    mov cx,N        ;кол-во элементов  в столбце
s3: mov al,[di]     ;меняем
    xchg al, [di+1]     ;местами
    mov [di],al     ;два
    add di,M        ;соседних
    loop s3         ;столбца
    pop di          ;восстанивить регистры
    pop cx
    mov dx, 1       ;flag=1
s2: inc di          ;переходим к следующему элементу массива
    loop s1         ;сравниваем все элементы в данном проходе
    test dx, dx     ;flag=0?
    jnz sort        ;если нет, то продолжаем сортировку
 
    mov ah,9        ;функция вывода сообщения на экран
    lea dx,msg2     ;выводимое сообщение
    int 21h         ;выводим на экран
    call outmatr        ;вывод матрицы
    mov ax,4c00h    ;закончить программу
    int 21h
;преобразование числа из аl в десятичную строку и вывод на экран
;al - число
printdec proc
    push cx     ;сохраняем регистры
    push dx
    push bx
    push si
    cbw     ;расширить до слова
    mov si,ax   ;запоминаем число
    mov bx,10   ;основание системы
    xor cx,cx   ;в сх будет количество цифр в десятичном числе
    test ax,ax  ;если число положительное
    jns @@m1a   ;то пропускаем
    neg ax      ;если отрицательное, то меняем знак
@@m1a:  xor dx,dx   ;очистить старшую часть делимого
    div bx      ;делим число на степени 10
    push dx     ;и сохраняем остаток от деления(коэффициенты при степенях) в стек
    inc cx      ;увеличиваем количество десятичных цифр числа
    test ax,ax  ;после деления остался 0?
    jnz @@m1a   ;если нет, продолжаем
    test si,si  ;число отрицательное?
    jns @@m3a   ;если нет, пропустить
    push -3     ;иначе дописать перех числом минус
    inc cx      ;увеличить количество цифр числа
@@m3a:  mov ah,2        ;ф-я вывода символа
@@m2a:  pop dx      ;взять из стека цифру цисла
    add dl,'0'  ;преобразовываем цифру в ASCII символ
    int 21h     ;вывести на экран
    loop @@m2a  ;все цифры
    pop si      ;восстанавливаем регистры
    pop bx
    pop dx
    pop cx
    ret     ;выход из подпрограммы
printdec endp
str2dw:
;Преобразование строки в число
;на входе ds:si ссылается на ASCII строку, которую нужно преобразовать
;на выходе в ax - число.
;признак cf=1 в случае некорректной строки
    push dx     ;сохраняем регистры
    push si
    push di
    push bx
    mov bx,10
    xor dx,dx   ;сумма
    xor di,di   ;знак
@lp1:   xor ax,ax
    lodsb       ;берем символ
    cmp al,13   ;если это конец строки,
    jz @ex      ;то заканчиваем
    cmp al,'-'  ;если минус,
    jnz @m1
    mov di,1    ;то устанавливаем признак минуса
    jmp @lp1    ;продолжаем обработку
@m1:    cmp al,'9'  ;если это не цифра,
    ja @errex1  ;то ошибка
    cmp al,'0'      ;если это не цифра,
    jb @errex1      ;то ошибка
    sub ax,'0'  ;получаем цифровое значение
    push ax     ;сохраняем ax
    mov ax,dx   ;Dx
    imul bx     ;dx*основание системы
    mov dx,ax   ;dx=dx*основание системы
    pop ax      ;восстанавливаем ax
    add dx, ax  ;прибавляем текущее значение
    jmp @lp1    ;продолжаем обработку
@ex:    test di,di  ;если установлен признак отрицательного числа
    jz @ex1
    neg dx      ;то меняем знак
@ex1:   mov ax,dx   ;помещаем результат в ах
    pop bx
        pop di
    pop si      ;восстанавливаем регистры
    pop dx
    clc     ;нормальное завершение
    ret     ;выход их подпрограммы
@errex1:
    pop bx
        pop di
    pop si      ;восстанавливаем регистры
    pop dx
    xor ax,ax
    stc     ;ошибка
    ret     ;выход их подпрограммы
 
outmatr proc
    mov ax,N        ;размер матрицы
    mov cx,M
    mul cx          ;количество элементов в матрице
    mov cx,ax       ;количество элементов в матрице
    lea bx,A        ;начало матрицы
mo6:    mov al,[bx]     ;берем элемент матрицы
    call printdec       ;выводим
    mov ah,2        ;функция вывода символа на экран
    mov dl,9        ;символ табуляции
    int 21h         ;выводим пробел
    inc bx          ;переходим к следующему элементу матрицы
    dec cx          ;уменьшаем количество оставшихся элементов
    jz ex1                  ;если 0 - закончить
    mov ax,cx       ;количество оставшихся элементов
    mov dx,M        ;длина строки матрицы
    div dl                  ;делим текущий элемент на длину строки матрицы
    test ah,ah              ;если не 0
    jnz mo6         ;то продолжить
    mov ah,2        ;функция вывода символа на экран
    mov dl,13       ;возврат каретки
    int 21h                 ;выводим возврат каретки
    mov dl,10       ;перевод строки
    int 21h         ;выводим перевод строки
    jmp mo6         ;продолжаем вывод
ex1:    ret
outmatr endp
 
end start
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2019, 20:47
Помогаю со студенческими работами здесь

Упорядочить столбцы массива так, чтобы элементы первой строки были расположены по убыванию
сформировать при поморщи генератора случайных чисел двумерный массив размеренностью M на N....

Переставить элементы в строках матрицы так, чтобы по диагонали они были упорядочены по возрастанию
В данной задаче матрица – двумерный динамический массив, который считывается из некоторого...

Перестроить строки матрицы так, чтобы они были расположены по возрастанию в лексикографическом порядке
Дана матрица А из целых чисел размером MxN. Перестроить строки матрицы так, чтобы они были...

Преобразовать матрицу так, чтобы элементы первой строки стали упорядочены по возрастанию
Доброго времени суток, хотел бы попросить у Вас помощи в решение задач в turbo pascal: Задана...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru