Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
1

Вывод на экран только первых двух столбцов матрицы

15.01.2016, 22:02. Просмотров 378. Ответов 2
Метки нет (Все метки)

Двумерный массив n*n вводится с клавиатуры, а потом выводится на экран. Как сделать чтобы вывело только 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
159
160
161
162
163
164
.model tiny
 .code
ORG 100h
 
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:
 
    write msgRows
    indigit
    mov rows,ax
    write crlf  ;принудительно переводим курсор на след. строку
 
    write msgCols
    indigit
    mov cols,ax
    write crlf
 
    write msgEl
    
;ввод массива
    lea     bx,array
    mov     cx,rows
    
 
    
in1:    ;цикл по строкам
    push    cx
    mov     cx,cols
    mov     si,0
in2:    ;цикл по колонкам
    indigit ;макрос ввода числа
    mov     [bx][si],al
    inc     si
 
    write crlf  
    loop    in2
 
    add     bx,cols
    pop     cx
    loop    in1
 
write msgPrep   
    
;вывод массива на экран
    lea     bx,array
    mov     cx,rows
 
    
out1:   ;цикл по строкам
    push    cx
    mov     cx,cols
    mov     si,0
    write crlf  
out2:   ;цикл по колонкам
    xor     ax,ax
    mov al,[bx][si] ;Выводимое число в регисте AL
    putdigit    ;макрос вывода
    inc     si
    loop    out2
 
    add     bx,cols
    pop     cx
    loop    out1
 
 
 
;press any key
    write msgPress
    mov     ah,0
        int     16h
        
;exit
    mov     ax,4c00h
    int     21h
ret
rows        dw ?
cols        dw ?
array       db 10*10 dup (?)    ;массив
vector      db 10 dup (?) ; вектор для результата
 
crlf        db 13,10,'$'
buf     db 3,0,3 dup ('$'),'$'
 
msgPress    db 13,10,'press any key...$'
msgRows     db 'rows (mai mic ca 10): $'
msgCols     db 'columns (mai mic ca 10): $'
msgEl       db 13,10,'elements : ',13,10,'$'
msgPrep db 13,10, 'array: ',13,10,'$'
msgRes  db 13,10, 'result: ',10,13, '$'
end start
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2016, 22:02
Ответы с готовыми решениями:

Вывести на экран только те, у которых сумма первых двух цифер равна сумме двух последних.
Дан массив из n четырёхзначных натуральных чисел. Вывести на экран только те, у которых сумма...

Вывести на экран только те числа, у которых сумма первых двух цифр равна сумме двух последних
Дан массив из n четырехзначных натуральных чисел. Вывести на экран только те, у которых сумма...

Вывести на экран только те числа, у которых сумма первых двух цифр равна сумме двух последних
Дан массив из n натуральных четырехзначных чисел. Вывести на экран только те, у которых сумма...

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

Вывести на экран номера тех столбцов матрицы, в которых хранятся только малые латинские буквы
Здравствуйте, решал задачку: Дан двумерный массив N*M, заполненный символами. Вывести на экран...

2
R71MT
5345 / 1502 / 317
Регистрация: 29.07.2014
Сообщений: 2,528
Записей в блоге: 5
16.01.2016, 09:46 2
Вот тебе направление..
Вначале, идёт запрос на ввод размера массива (кол-во строк/столбцов).
А дальше, просто забивай массив числами и он сам будет выстраиваться в нужном порядке, и по окончании - выведет тебе результ на экран:

Пример окна:
Код
 ENTER ARRAY N*N: 6
 CREATE ARRAY...

 01 02 03 04 05 06
 07 08 09 10 11 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
 ==========================
 NEW ARRAY:

 01 02
 07 08
 14 15
 20 21
 26 27
 32 33
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
ORG 100h
JMP start
 
mess0  DB  13,10,'ENTER ARRAY N*N: $'
mess1  DB  13,10,'CREATE ARRAY...',13,10,10,'$'
mess2  DB  13,10,'=========================='
       DB  13,10,'NEW ARRAY:',13,10,10,'$'
crlf   DB  13,10,'$'
buff   DB  256 DUP(0)
arrN   DW  0
 
start:
   MOV   AH,9            ;
   MOV   DX,mess0        ;
   INT   21h             ;
   MOV   AH,1            ; вводим кол-во строк/столбцов массива
   INT   21h             ;
   AND   AX,0Fh          ;
   MOV   [arrN],AX       ; запоминаем их как цифру
   MOV   AH,9            ;
   MOV   DX,mess1        ;
   INT   21h             ;
 
   MOV   DI,buff         ; приёмник для STOSB
   MOV   BX,[arrN]       ; макс.кол-во столбцов
   MOV   DX,[arrN]       ;    ..и строк
create:                  ;
   MOV   CX,2            ; числа будут двух/значные
@1:                      ;
   MOV   AH,1            ; заполняем массив
   INT   21h             ;
   STOSB                 ; с сохранением его в DI
   LOOP  @1              ;
   MOV   AL,' '          ; после каждого числа, вставляем пробел
   INT   29h             ;
   STOSB                 ;
   DEC   BX              ;
   OR    BX,BX           ; одна строка заполнилась?
   JNE   create          ; нет - продолжаем заполнять
   MOV   BX,[arrN]       ; да - восстановим счётчик колонок
   PUSH  DX
   MOV   DX,crlf         ;
   MOV   AH,9            ;
   INT   21h             ; перевод строки
   POP   DX
   DEC   DX              ;
   OR    DX,DX           ; последняя строка?
   JNE   create          ;
 
   MOV   AH,9            ;
   MOV   DX,mess2        ;
   INT   21h             ;
 
   MOV   SI,buff         ; настраиваем SI для LODSB
   MOV   BX,[arrN]       ; кол-во строк
newArray:                ;
   MOV   DX,[arrN]       ;
   IMUL  DX,3            ; смещение от начала массива, для сл.пары цифр
   MOV   CX,6            ; сколько символов выводить
@2:                      ;
   LODSB                 ;
   INT   29h             ;
   LOOP  @2              ; выводим на экран 2 столбца
   ADD   SI,DX           ; смещаемся на сл.строку
   SUB   SI,6            ; переходим на начало этой строки
   MOV   DX,crlf         ;
   MOV   AH,9            ;
   INT   21h             ; перевод строки
   DEC   BX              ;
   OR    BX,BX           ; все строки вывели?
   JNZ   newArray        ;
 
exit:
   XOR   AX,AX           ; выход!
   INT   16h
   INT   20h
1
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
16.01.2016, 12:44  [ТС] 3
R71MT, всё разобрался, спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2016, 12:44

Вывести на экран элементы массива, сумма первых двух цифр равна сумме двух последних
//Массив из n четырехзначных натуральных чисел. //Вывести па экран только те, у которых сумма...

Вывести на экран те числа, у которых сумма первых двух цифр равна сумме двух последних
39. Дан массив из n четырехзначных натуральных чисел. Вывести на экран только те, у которых сумма...

Вывести на экран те элементы массива, у которых сумма первых двух цифр равна сумме двух последних
Помогите решить Дан массив из n четырехзначных натуральных чисел. Вывести на экран только те, у...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru