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

Ввод элементов массива через пробел

19.05.2017, 14:18. Показов 1286. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите с вводом чисел в двумерный массив. Элементы надо вводить через пробел построчно.
Вот само задание. Найти минимальный и максимальный элементы двумерного двухбайтового массива и указать их местоположение.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2017, 14:18
Ответы с готовыми решениями:

Ввод нескольких чисел через пробел, некорректный вывод
первое число выводится корректно, а второе нет( .model small .stack 100h .data array dw ?, ?...

Ввод массива через пробел
Есть массив int С, и есть строка string S, у строки S есть длинна S.size(), следовательно кол-во...

Ввод массива через пробел в textBox
public partial class Form1 : Form { private List<int> array; public Form1()...

Ввод массива чисел через пробел и readln
Здрасте! Помогите с вопросом: Как в этом коде ввод массива ограничивать не цифрой а до нажатия...

2
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
19.05.2017, 15:44 2
ввод и вывод чисел в различных системах счисления
0
0 / 0 / 0
Регистрация: 11.05.2017
Сообщений: 13
20.05.2017, 08:26  [ТС] 3
Надо только переделать, чтобы массив можно было вводить, скажем, вот так:
1 -4 44
4 4 1
1 1 1
То есть, чтобы пробелы разделяли числа
Вот, что у меня получилось (в результате выходят нули)
Кликните здесь для просмотра всего текста
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
.model small
.stack 100h
.data
 
msg_p db "",10,13,'$'
Mas dw 3 dup (?)
    dw 3 dup (?) 
    dw 3 dup (?)
len db 9 ;кол-во элементов массива
min dw 1 dup (?)
max dw 1 dup (?)
minnum dw 1 dup (?)
maxnum dw 1 dup (?)
buff db 12,13 dup (?)
 
.code
jmp main
InInt proc
        push cx
        push dx
        push bx
        push si
        push di
 
; обрабатываем содержимое буфера
 
 nach:  cmp byte ptr [si],' '
        jz prop
        cmp byte ptr [si],"-" ; если первый символ минус
        jnz ii1
        mov di,1              ; устанавливаем флаг
        inc si                ; и пропускаем его
        jmp ii1
        prop: inc si
        jmp nach
ii1:
        xor ax,ax
        mov bx,10             ; основание системы счичления
ii2:
        mov cl,[si]           ; берем символ из буфера
        cmp byte ptr [si],' '
        jz prop3
                   ; это замыкающий 0?
        jmp ww
        prop3: dec si
        mov cl,[si]
        add si,2
        jmp tuda
        ww: cmp cl,0dh 
        jz ii3              ; завершаем разбор числа
        
; если это не замыкающий 0, то проверяем его на правильность
tuda: 
        cmp cl,'0'            ; символ < 0
        jl endin                  
        cmp cl,'9'            ; символ > 9
        ja endin              ; на этом разбор числа заканчивается
 
        sub cl,'0'            ; делаем из символа число 
        mul bx                ; умножаем на 10
        add ax,cx             ; прибавляем к остальным
        inc si                ; указатель на следующий символ
        jmp ii2               ; повторяем
 
; все символы из буфера обработаны число находится в ax
 
endin:
        cmp di,1              ; если установлен флаг, то
        jnz ii3
        neg ax                ; делаем число отрицательным
        pop bx
        mov mas[bx],ax
        add bx,2
        push bx
        jmp nach 
ii3:
        pop di
        pop si
        pop dx
        pop cx
pop bx
        ret
InInt endp
 
Show_AX proc
        mov     cx, 10          ; cx - основание системы счисления
        xor     di, di          ; di - кол. цифр в числе
 
        ; если число в ax отрицательное, то
        ;1) напечатать '-'
        ;2) сделать ax положительным
        or      ax, ax
        jns     @@Conv
        push    ax
        mov     dx, '-'
        mov     ah, 2           ; ah - функция вывода символа на экран
        int     21h
        pop     ax
 
        neg     ax
 
@@Conv:
        xor     dx, dx
        div     cx              ; dl = num mod 10
        add     dl, '0'         ; перевод в символьный формат
        inc     di
        push    dx              ; складываем в стэк
        or      ax, ax
        jnz     @@Conv
        ; выводим из стэка на экран
@@Show:
        pop     dx              ; dl = очередной символ
        mov     ah, 2           ; ah - функция вывода символа на экран
        int     21h
        dec     di              ; повторяем пока di<>0
        jnz     @@Show
        ret
Show_AX endp
 
main:
mov ax, @data ;ds = сегмент .data
mov ds, ax
xor ax,ax     ;ax=0
Xor bx,bx      ;инициализация индексного регистра
Mov cx, 3      ;инициализация счетчика цикла
cycl1:
push cx
mov ah,0ah
mov dx,offset buff   ; адрес буфера
int 21h              ; принимаем строку
mov si,offset buff+2 ; готовим параметр для процедуры интерпретации
mov bx,0 
call InInt           ; переводим введенную строку в число
mov ah,9 ;номер функции для вывода строки
mov dx,OFFSET msg_p
    int 21h
pop cx
loop cycl1
 
mov cx,9
xor si,si
mov ax,mas[si]
mov max,ax
cycl2:
push cx
mov ax,max
cmp ax,mas[si]
jl maxel
jmp prop1
maxel:
mov ax,mas[si]
mov max,ax
mov maxnum,si
prop1:
add si,2
pop cx
loop cycl2
 
mov ax, maxnum
mov bh,2
div bh
mov ah,0
call Show_AX
 
mov ah,9 ;номер функции для вывода строки
mov dx,OFFSET msg_p
    int 21h
mov ax, max
call Show_Ax
 
mov ah,9 ;номер функции для вывода строки
mov dx,OFFSET msg_p
    int 21h
 
mov cx,9
xor si,si
mov ax,mas[si]
mov min,ax
cycl3:
push cx
mov ax,min 
cmp ax,mas[si]
jg minel
jmp prop2
minel:
mov ax,mas[si]
mov min,ax
mov minnum,si
prop2:
add si,2
pop cx
loop cycl3
 
mov ax, minnum
mov bh,2
div bh
call Show_AX
 
mov ah,9 ;номер функции для вывода строки
mov dx,OFFSET msg_p
    int 21h
mov ax, min
call Show_AX
 
 
mov ah,4ch
    int 21h
 
end main


Добавлено через 8 часов 51 минуту
Помогите найти ошибку. Смотрел через turbo debugger, так вроде даже команда записи чисел в массив срабатывает, но в результате все равно выдаются нули
Кликните здесь для просмотра всего текста
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
.model small
.stack 100h
.data
 
msg_p db "",10,13,'$'
Mas dw 3 dup (?)
    dw 3 dup (?) 
    dw 3 dup (?)
len db 9 ;кол-во элементов массива
min dw 1 dup (?)
max dw 1 dup (?)
minnum dw 1 dup (?)
maxnum dw 1 dup (?)
buff db 12,13 dup (?)
 
.code
jmp main
InInt proc
        push cx
        push dx
        push bx
        push si
        push di
        
; обрабатываем содержимое буфера
 
 nach:  cmp byte ptr [si],' '
        jz prop
        cmp byte ptr [si],"-" ; если первый символ минус
        jnz ii1
        mov di,1              ; устанавливаем флаг
        inc si                ; и пропускаем его
        jmp ii1
        prop: inc si
        jmp nach
ii1:
        xor ax,ax
        mov bx,10             ; основание системы счичления
ii2:
        mov cl,[si]           ; берем символ из буфера
        cmp cl,' '
        jz endin
        ww: cmp cl,0dh 
        jz endin              ; завершаем разбор числа
        
; если это не замыкающий 0, то проверяем его на правильность
tuda: 
        cmp cl,'0'            ; символ < 0
        jl endin                  
        cmp cl,'9'            ; символ > 9
        ja endin              ; на этом разбор числа заканчивается
 
        sub cl,'0'            ; делаем из символа число 
        mul bx                ; умножаем на 10
        add ax,cx             ; прибавляем к остальным
        inc si                ; указатель на следующий символ
        jmp ii2               ; повторяем
 
; все символы из буфера обработаны число находится в ax
 
endin:
        cmp di,1              ; если установлен флаг, то
        jnz suda
        neg ax 
        suda:               ; делаем число отрицательным
        pop bx
        mov mas[bx],ax
        add bx,2
        push bx
        mov cl,[si]
        cmp cl,0dh 
        jz ii3
        jmp nach 
ii3:
        pop di
        pop si
        pop dx
        pop cx
pop bx
        ret
InInt endp
 
Show_AX proc
        mov     cx, 10          ; cx - основание системы счисления
        xor     di, di          ; di - кол. цифр в числе
 
        ; если число в ax отрицательное, то
        ;1) напечатать '-'
        ;2) сделать ax положительным
        or      ax, ax
        jns     @@Conv
        push    ax
        mov     dx, '-'
        mov     ah, 2           ; ah - функция вывода символа на экран
        int     21h
        pop     ax
 
        neg     ax
 
@@Conv:
        xor     dx, dx
        div     cx              ; dl = num mod 10
        add     dl, '0'         ; перевод в символьный формат
        inc     di
        push    dx              ; складываем в стэк
        or      ax, ax
        jnz     @@Conv
        ; выводим из стэка на экран
@@Show:
        pop     dx              ; dl = очередной символ
        mov     ah, 2           ; ah - функция вывода символа на экран
        int     21h
        dec     di              ; повторяем пока di<>0
        jnz     @@Show
        ret
Show_AX endp
 
main:
mov ax, @data ;ds = сегмент .data
mov ds, ax
xor ax,ax     ;ax=0
Xor bx,bx      ;инициализация индексного регистра
Mov cx, 3      ;инициализация счетчика цикла
cycl1:
push cx
mov ah,0ah
mov dx,offset buff   ; адрес буфера
int 21h              ; принимаем строку
mov si,offset buff+2 ; готовим параметр для процедуры интерпретации
mov bx,0 
call InInt           ; переводим введенную строку в число
mov ah,9 ;номер функции для вывода строки
mov dx,OFFSET msg_p
    int 21h
pop cx
loop cycl1
 
mov cx,9
xor si,si
mov ax,mas[si]
mov max,ax
cycl2:
push cx
mov ax,max
cmp ax,mas[si]
jl maxel
jmp prop1
maxel:
mov ax,mas[si]
mov max,ax
mov maxnum,si
prop1:
add si,2
pop cx
loop cycl2
 
mov ax, maxnum
mov bh,2
div bh
mov ah,0
call Show_AX
 
mov ah,9 ;номер функции для вывода строки
mov dx,OFFSET msg_p
    int 21h
mov ax, max
call Show_Ax
 
mov ah,9 ;номер функции для вывода строки
mov dx,OFFSET msg_p
    int 21h
 
mov cx,9
xor si,si
mov ax,mas[si]
mov min,ax
cycl3:
push cx
mov ax,min 
cmp ax,mas[si]
jg minel
jmp prop2
minel:
mov ax,mas[si]
mov min,ax
mov minnum,si
prop2:
add si,2
pop cx
loop cycl3
 
mov ax, minnum
mov bh,2
div bh
call Show_AX
 
mov ah,9 ;номер функции для вывода строки
mov dx,OFFSET msg_p
    int 21h
mov ax, min
call Show_AX
 
 
mov ah,4ch
    int 21h
 
end main
0
20.05.2017, 08:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2017, 08:26
Помогаю со студенческими работами здесь

Ввод массива в одну строку через пробел
Помогите реализовать ввод данных через массив ограниченного длинны. Например : 5 #ввели длину...

Ввод через пробел. Как остановить ввод. while(cin >> input)
Здравствуйте. Начну с условия задания. Ввести к-во элементов массива. Заполнить массив....

Считать строку из чисел, вывести на экран Все четные числа - элементы массива Входные данные вводятся через пробел, ввод
Считать строку из чисел, вывести на экран Все четные числа - элементы массива Входные данные...

Вывести на печать через пробел значение положительных четных элементов массива с четным индексом
Дан целочисленный линейный массив на N элементов. Вывести на печать через пробел значение...


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

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