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

Определить сумму 5 наименьших значений элементов массива целых чисел А[35]

28.06.2018, 02:40. Показов 2212. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Определить сумму 5 наименьших значений элементов массива целых чисел А[35].
Помогите, если не затруднит
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2018, 02:40
Ответы с готовыми решениями:

Дан двумерный массив целых чисел. Определить сумму элементов массива, больших 30
Дан двумерный массив целых чисел. Определить сумму элементов массива больших 30.

Дан двумерный массив целых чисел. Определить сумму элементов массива, больших 30
Дан двумерный массив целых чисел. Определить сумму элементов массива, больших 30.

Дан двухмерный массив целых чисел. Определить сумму четных элементов массива
Дан двухмерный массив целых чисел. Опеределить сумму четных элементов массива.

Найти сумму наименьших значений элементов столбцов двумерного массива A(n,m)
Дан двумерный числовой массив A(n,m).Найти сумму наименьших значений элементов его столбцов.

3
Модератор
Эксперт по электронике
8477 / 4335 / 1643
Регистрация: 01.02.2015
Сообщений: 13,462
Записей в блоге: 8
28.06.2018, 06:44 2
Сортировка и суммирование первых 5 элементов.
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
.model tiny
 
.code
 
        org     100h
main    proc
 
        jmp     start
 
        ;Данные
        CrLf            db      0Dh, 0Ah, '$'
        msgSourceArray  db      'Source array: ', '$'
        msgResult       db      0Dh, 0Ah, 'Result: ', '$'
        msgPressAnyKey  db      0Dh, 0Ah, 'Press any key to exit...', '$'
        SizeElement     equ     2
        A               dw      17, -5, 3, -12, 24, 78, 61, 73, -9, 13
        N               dw      ($-A)/SizeElement
        Sum             dw      ?
start:
        ;программа
 
        ;исходный массив
        mov     ah,     09h
        lea     dx,     [msgSourceArray]
        int     21h
        mov     cx,     [N]
        lea     dx,     [A]
        call    ShowArray
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
        ;обработка массива
        ; - сортировка
        mov     cx,     [N]
        lea     si,     [A]
        call    BubbleSort
        ; - сумма 5 наименьших значений элементов массива
        mov     cx,     5
        lea     si,     [A]
        cld
        xor     bx,     bx
        @@ForSum:                               ;for (i=1; i<n; i++)
                lodsw
                add     bx,     ax              ;  Sum += A[i]
                call    ShowInt16
                mov     ah,     02h
                mov     dl,     ' '
                int     21h
        loop    @@ForSum
        mov     [Sum],  bx
        ;вывод результата
        mov     ah,     09h
        lea     dx,     [msgResult]
        int     21h
        mov     ax,     [Sum]
        call    ShowInt16
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
        ;ожидание нажатия любой клавиши
        mov     ah,     09h
        lea     dx,     [msgPressAnyKey]
        int     21h
 
        mov     ah,     00h
        int     16h
        ;завершение программы
        int     20h
 
main    endp
 
;Сортировка "пузырьком" массива слов
;на входе
;  ds:si - адрес массива слов
;  cx    - длина массива
BubbleSort      proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
 
        mov     bx,     si
        mov     dx,     cx
        dec     dx
        shl     dx,     1               ;приведение dx=N к размерности элементов
        dec     cx                      ;for i:=1 to N-1 do
        mov     si,     0
@@ForI:
        mov     di,     dx              ;  j:=N
@@ForJ:                                 ;  repeat
        mov     ax,     [bx+di-2]       ;    (a[j] < and a[j - 1])
        cmp     ax,     [bx+di]
        jle     @@NextJ                 ;    if r<0 then
        xchg    ax,     [bx+di]         ;      temp:=a[j]
        xchg    ax,     [bx+di-2]       ;      a[j]:=a[j-1]
        xchg    ax,     [bx+di]         ;      a[j-1]:=a[j]
@@NextJ:
        sub     di,     2               ;    dec(j)
        cmp     di,     si              ;  until j<=i;
        ja      @@ForJ
        add     si,     2               ;  end; for i равноценно inc(i)
        loop    @@ForI
 
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
BubbleSort      endp
 
;Вывод массива слов (word)
;cx - количество выводимых элементов
;ds:dx - адрес массива слов
ShowArray       proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
 
        jcxz    @@saExit        ;если массив пустой - завершить
 
        mov     si,     1       ;индекс элемента массива
        mov     di,     dx      ;адрес текущего элемента массива
        @@saForI:
                mov     ax,     [di]
                call    ShowInt16
                mov     ah,     02h
                mov     dl,     ' '
                int     21h
                ;переход к следующему элементу
                inc     si
                add     di,     SizeElement
        loop    @@saForI
@@saExit:
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
ShowArray       endp
 
ShowInt16       proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
        mov     bx,     10
        xor     cx,     cx      ;символов в модуле числа
        or      ax,     ax
        jns     @@div
                neg     ax
                push    ax
                mov     ah,     02h
                mov     dl,     '-'
                int     21h
                pop     ax
        @@div:
                xor     dx,     dx
                div     bx
                push    dx
                inc     cx      ;количество цифр в числе
                or      ax,     ax
        jnz     @@div
        mov     ah,     02h
        @@store:
                pop     dx
                add     dl,     '0'
                int     21h
        loop    @@store
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
ShowInt16       endp
 
end     main
0
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
29.06.2018, 06:53 3
Лучший ответ Сообщение было отмечено System_Bot как решение

Решение

Какой-то у тя код выходит, громоздкий, как камод. Воздушнее, надо, воздушнее. Это-же ассемблер, а не ЯВУ какой-то, прости господи.
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
        N equ 35 ;число элементов в массиве
 
        mov     ax, 32767 ;наибольшее возможное целое
        mov     dx, ax
        mov     si, ax
        mov     di, ax
        mov     bx, offset array
        mov     bp, [bx]
        mov     cx, N-1
cycl:   add     bx, 2
        cmp     [bx], ax
        jge     @@1
        mov     ax, [bx]
        cmp     ax, dx
        jge     @@1
        xchg    ax, dx
        cmp     dx, si
        jge     @@1
        xchg    dx, si
        cmp     si, di
        jge     @@1
        xchg    si, di
        cmp     di, bp
        jge     @@1
        xchg    di, bp
@@1:    loop    cycl
;итого ax dx si di bp - 5 наименьших элементов массива
; , среди которых ax - наибольший, а bp - наименьший
        add     ax, dx
        add     ax, si
        add     ax, di
        add     ax, bp
2
Модератор
Эксперт по электронике
8477 / 4335 / 1643
Регистрация: 01.02.2015
Сообщений: 13,462
Записей в блоге: 8
29.06.2018, 09:13 4
Можно и таким "шлангом с фильтром" за 1 проход. Думаю, по скорости даже быстрее ( O(n) против O(n2) )

Но само решение и у меня немного места занимает, основная часть - вывод на экран.
0
29.06.2018, 09:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2018, 09:13
Помогаю со студенческими работами здесь

Определить в последовательности целых чисел сумму двух наибольших и сумму двух наименьших
Напишите программу, которая в последовательности целых чисел определяет сумму двух наи- больших и...

Определить произведение абсолютных значений элементов массива с чётными номерами и сумму значений элементов с нечётными
Дан массив c0, c1, c2,…, cn-1. Определить произведение абсолютных значений элементов массива с...

Найти сумму всех элементов массива целых чисел, которые меньше среднего арифметического элементов массива.
Найти сумму всех элементов массива целых чисел, которые меньше среднего арифметического элементов...

Найти сумму всех элементов массива целых чисел, которые меньше среднего арифметического элементов массива
Помогите пожалуйста найти в чем ошибка? Пишет что арифметическое переполнение! Задание: Найти сумму...


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

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