С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/48: Рейтинг темы: голосов - 48, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 37
1

Как реализовать ввод размера массива и его элементов с клавиатуры?

22.01.2013, 15:11. Показов 8893. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как реализовать ввод размера массива и его элементов с клавиатуры?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.01.2013, 15:11
Ответы с готовыми решениями:

Ввод по строкам с клавиатуры двумерного массива и вычисление суммы его элементов по четным столбцам
Нужно написать программу, которая вводит по строкам с клавиатуры двумерный массив и вычисляет сумму...

Ввод размера массива с клавиатуры
Доброго времени суток! Возникли трудности с написанием программки ,а именно с определением размера...

Как сделать ввод элементов массива с клавиатуры?
Всем привет. Препод пристал что бы я сделал так что пользователь задавал значение элементов с...

Как реализовать ввод элементов массива на JS?
Например вводим элементы массива -это правильно а1а-первый элемент, п3о-второй и т.д Как мне...

13
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
22.01.2013, 15:30 2
---------------------------------------------
INT 21 - DOS - BUFFERED KEYBOARD INPUT
- ввод с клавиатуры с буферизацией -
AH = 0Ah
DS:DX -> буфер
Примечания: первый байт буфера должен при входе содержать максимальную длину
буфера.
На выходе второй байт содержит длину принятой строки, третий и
последующие байты содержат введённую строку.
---------------------------------------------
0
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 37
22.01.2013, 15:33  [ТС] 3
Да я не в этом плане
Я только нашел код с массивом размерность которого уже обьявлена как его переделать?
Assembler
1
2
3
4
5
6
7
8
9
data segment para public 'data'
 
    countItems  db ???            ;количество эл-в в массиве
    temp    dw  0               ;для сортировки сделал..и не использую
    array db ??? dup(?)           ;массив эл-в
    enter_mas   db  'vvedi massiv:',0dh,0ah,'$'
    output_mas  db  0dh,0ah,'massiv:',0dh,0ah,'$'
    
data ends
0
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
22.01.2013, 15:36 4
да никак не переделать, резервируешь тем или иным способом область памяти, которая физически представляет из себя двумерный массив, но может представлена и линейной адресацией, а в зависимости от введенным параметров представление преобразуешь в нуный массив. это высшая алгебра и вообще к програмированию не имеет отношение
0
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 37
22.01.2013, 15:36  [ТС] 5
Так стоп я запутался... Значит код для 2х мерного массива а мне надо одномерный так?
0
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
22.01.2013, 15:41 6
array db ??? dup(?)

это одномерный массив, ??? ячеек подряд заполненных нулями. и по другому память никак не выделить.

Добавлено через 2 минуты
Код
**************************************************
вот у тебя такой одномерный массив - память (на самом деле микросхема двумерный массив)
ты его можешь представить как

Код
***************
***************
Код
***************
***************
***************
двумерный.
и даже трехмерный, просто индексы надо самому высчитывать
0
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 37
22.01.2013, 17:07  [ТС] 7
Assembler
1
2
3
4
5
6
7
8
    mov    ah,    0Ah
    mov    dx,    offset buffer
    mov    di,    dx
    int    21h
 
    mov    ah,    2
    mov    dl,    0Ah
    int    21h
Добавлено через 19 секунд
Только я мало что здесь понял
0
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
22.01.2013, 17:11 8
http://www.codenet.ru/progr/dos/dos_0018.php

http://www.codenet.ru/progr/dos/
0
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 37
22.01.2013, 17:28  [ТС] 9
[QUOTE=drm;4038869]
Assembler
1
2
3
4
5
6
    mov    ah,    0Ah
    mov    dx,    offset buffer
    mov    di,    dx
    int    21h
 
mov al, len
значит di - массив? al - количество элементов?
0
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
22.01.2013, 17:32 10
я так понял что
* AH = 0aH
* DSX = адрес входного буфера (смотри ниже)
при входе буфер по адресу DSX должен быть оформлен так:

+---+---+---+---+---+---+- - -
¦max¦ ? ¦ ? ? ? ? ? MAX - максимально допустимая
+---+---+---+---+---+---+ - - длина ввода (от 1 до 254)
при выходе буфер заполнен данными следующим образом:
+---+---+---+---+---+---+- - -
¦max¦len¦ T E X T 0dH LEN - действительная длина данных
+---+---+---+---+---+---+ - - без завершающего CR (здесь - 04H).
0
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 37
22.01.2013, 17:37  [ТС] 11
Да читал я это - но все равно не понимаю
0
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
22.01.2013, 17:44 12
лучше один раз увидеть. пробовать надо
0
202 / 168 / 11
Регистрация: 30.05.2012
Сообщений: 703
22.01.2013, 18:06 13
Цитата Сообщение от drm Посмотреть сообщение
Как реализовать ввод размера массива и его элементов с клавиатуры?
Просто:
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
CODE segment
mov ah,9
mov dx,offset quer;
int 21h
    mov ah,0ah
    xor di,di
    mov dx,offset buff ; аддрес буфера
    int 21h ; принимаем строку
    mov dl,0ah
    mov ah,02
    int 21h ; выводим перевода строки
    
; обрабатываем содержимое буфера
    mov si,offset buff+2 ; берем аддрес начала строки
    cmp byte ptr [si],"-" ; если первый символ минус
    jnz ii1
    mov di,1  ; устанавливаем флаг
    inc si    ; и пропускаем его
ii1:
    xor ax,ax
    mov bx,10  ; основание сc
ii2:
    mov cl,[si] ; берем символ из буфера
    cmp cl,0dh  ; проверяем не последний ли он
    jz endin
    
; если символ не последний, то проверяем его на правильность
    cmp cl,'0'  ; если введен неверный символ <0
    jl er
    cmp cl,'9'  ; если введен неверный символ >9
    ja er
 
    sub cl,'0' ; делаем из символа число 
    mul bx     ; умножаем на 10
    add ax,cx  ; прибавляем к остальным
    inc si     ; указатель на следующий символ
    jmp ii2     ; повторяем
 
er:   ; если была ошибка, то выводим сообщение об этом и выходим
    mov dx, offset error
    mov ah,09
    int 21h
    int 20h
 
; все символы из буфера обработаны число находится в ax
endin:
    cmp di,1 ; если установлен флаг, то
    jnz ii3
    neg ax   ; делаем число отрицательным
ii3:
    ret
 
error db "incorrect number$"
buff    db 6,7 Dup(?)
mov buf,al
mov ah,9
mov dx,offset mess1
int 21h
mov ah,0ah
mov dx,offset buf;
int 21h
;все! начиная с buf+2 - введенный текст
int 20h
mess1 db 'Enter text:$';
quer db 'Enter lenght:$';
buff db 3,5 dup (0);
buf:
Все!
1
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 37
22.01.2013, 19:03  [ТС] 14
Спасибо! Я пока нашел вот такое:
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
        
data segment                                                      
message1 db "Введите размер массива: $"
message2 db "Введите элементы массива: $"
message3 db 13,10,"Ср.Арифметическое: $"  
 
n   db 0                           
mas db 400 dup(?)   ; массив               
i   db 0                           
flag db 0
first db 0 
second db 0     
data ends 
stk segment stack        
 db 256 dup(?)           
stk ends                 
assume cs:code, ds:data, ss:stk    
code segment                                
main:                              
    mov  ax,data     ; присваиваем ds адрес начала сегмента данных                                       
    mov  ds,ax                     
                                   
    mov   ah,9h       ; вывод приглашения к вводу
    lea   dx,message1                                 
    int   21h                      
                                   
 inputN:                                                    
    mov   ah,1                                 
    int   21h         ; ввод символа с клавиатуры
   AfterPressN:                     
    cmp   al,13       ; проверка на нажатие Enter
    je    endInputN   ; если нажат Enter конец ввода
    sub   al,30h                   
    mov   bl,al                    
    mov   bh,10                    
    mov   al,n                     
    xor   ah,ah                    
    mul   bh          ; умножаем уже введенное число на 10
    add   al,bl       ; суммируем с введенной цифрой
    mov   n,al                     
    jmp  inputN                    
 endInputN:                        
                                   
    ; перевод строки                                    
    mov  ah,2        ; заносим в ah номер функции       
    mov  dl,10       ; в dl - код перевода строки       
    int  21h         ; вывод символа                    
                            
    mov   ah,9h      ; вывод приглашения к вводу
    lea   dx,message2               
    int   21h                                                          
                      
         ; заполнение массива                           
    mov   si,0       ; адрес смещения относительно начала  
    mov   cl,n       ; счетчик цикла
create:               
    mov   flag,0                              
    xor   dl,dl       
    mov   ah,1        
    int   21h          
    cmp   al,'-'     ; проверяем на наличие минуса
    jne   AfterPressDl   
    mov   flag,1                                            
 inputDl:                                               
    mov   ah,1                                          
    int   21h         ; ввод символа с клавиатуры       
   AfterPressDl:                                        
    cmp   al,13       ; проверка на нажатие Enter       
    je    endInputDl  ; если нажат Enter конец ввода    
    sub   al,30h                                        
    mov   bl,al                                         
    mov   bh,10                                                        
    mov   al,dl                                         
    xor   ah,ah                                         
    mul   bh          ; умножаем уже введенное число на 10
    add   al,bl       ; суммируем с введенной цифрой    
    mov   dl,al                                         
    jmp  inputDl                                        
 endInputDl:          
    cmp   flag,1      ; если изначальное был введен минус
    jne   NotMinus          
    neg   dl          ; изменяем знак
  NotMinus:          
    mov   mas[si],dl  ; записываем в массив число
                                                            
    ; перевод строки                                    
    mov  ah,2       ; заносим в ah номер функции 
    mov  dl,10      ; в dl - код перевода строки
    int  21h        ; вывод символа
                                                        
  end_loop:         ; окончание цикла                   
    inc  si         ; увеличиваем смещение              
    loop create     ; цикл по счетчику cl               
                    
                                 
                     
    call Change      
                 
    mov al,first
    mov dl,second
    cwd
    div dl
    ;вывод на экран
    
       ; перевод строки                                    
    mov  ah,2        ; заносим в ah номер функции       
    mov  dl,10       ; в dl - код перевода строки       
    int  21h         ; вывод символа            
 aam 
    add ax,3030h 
    mov dl,ah 
    mov dh,al 
    mov ah,02 
    int 21h 
    mov dl,dh 
    int 21h
mov ah,0
int 16h
                                      
    mov  ah,10h      ; ожидание нажатия клавиши     
    int  16h                                        
exit:                                               
    mov  ax,4c00h    ; выход                          
    int  21h                                        
                                                    
Change proc                                         
    mov si,0                                        
    mov bl,mas[si]                                  
                                      
  prepare_for_change: ; подготовка к изменению массива
    mov  si,0         ; смещение обнуливается          
    mov  cl,n         ; счетчик цикла - число элементов в массиве
    xor  ch,ch       
                                    
changing:            
    mov  ax,si        ; переносим в ax номер элемента
    mov  dl,3         ; dl = 3 - заменяем каждый 3-й элемент
    div  dl           ; делим
    cmp  ah,0         ; сравниваем остаток от деления с 0
    jne  nextIterationChange ; если не равен 0, то номер не кратен 3, переходим на следующую итерацию
                        ; если равен 0, значит номер элемент кратен 3
    mov dl,first
    add dl,mas[si]
    mov first,dl
    mov dl,second
    add dl,1
    mov second,dl
                                                        
  nextIterationChange: ; подготовка к следующей итерации
    inc  si           ; увеличение счетчика                       
    loop changing     ; переход на следующую итерацию
                     
                                         
    ret              
Change endp          
                                            
                                    
code ends               
end main
Добавлено через 1 минуту
Только код не работает немного, и я не пойму где косяк
0
22.01.2013, 19:03
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.01.2013, 19:03
Помогаю со студенческими работами здесь

Ввод размера массива и создание его по нажатию кнопки
Добрый день. Столкнулся с такой проблемкой: на форме находятся TextBox и Button; в TextBox вводится...

Написать на VBA процедуру АКРОСТИХ, организующую ввод с клавиатуры 8 слов как элементов массива
Написать на VBA процедуру АКРОСТИХ, организующую ввод с клавиатуры 8 слов как элементов массива и...

Как грамотно реализовать многострочный ввод с клавиатуры
Как грамотно реализовать многострочный ввод с клавиатуры и затем подсчет, сколько раз встречается...

Как реализовать ввод с клавиатуры в динамическую память?
Я написал код программы, нахождение корней квадратного уравнения, где a, b, c находятся в...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru