Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 0
Регистрация: 07.06.2015
Сообщений: 77
1

Найти максимальный элемент двумерного массива и перенести его в конец массива

17.12.2016, 18:15. Показов 2203. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Код ниже работает не совсем так, как ожидается от него в задании. Вводится вместо двумерного массива 6Х4 один одномерный длиной в 24. Как исправить? Спасибо.

P.S.
Еще неправильно определяется номер строки с максимальным элементом. Если у вас есть желание, можете помочь и из этим тоже. Спасибо.


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
.686; Директива определения типа микропроцессора 
.Model flat, stdcall; задачи линейной модели памяти 
; И соглашения ОС Windows 
option casemap: none; отличие малых и больших букв
 
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\fpu.inc
include \masm32\include\user32.inc
include \masm32\include\msvcrt.inc
 
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
includelib \masm32\lib\fpu.lib
 
.Data; директива определения данных 
_c dd 24 
sum dd 0 
max dd 0; запись в 32-разрядную ячейку памяти с именем op1 
temp dd 7 
frmt db "% d", 0 
buf db 50 dup (?) 
stdout DWORD ? 
stdin DWORD ? 
cRead dd ? 
mas1 dd 32 dup (0) 
nomer dd 0 
st1 db "Vvesty masiv:"
st2 db "Вывод результата перемещения", 0 
st3 db 10 dup (0) 
ifmt db "Максимальный элемент = %d. Строка %d перенена в конец массива", 0
 
.Code; директива начала кода 
_start: 
 
call    AllocConsole  
lea esi, mas1; загрузки адреса начала массива 
mov ecx, _c 
m1: 
mov ebx, ecx 
invoke GetStdHandle, STD_OUTPUT_HANDLE 
mov stdout, eax 
invoke GetStdHandle, STD_INPUT_HANDLE 
mov stdin, eax 
invoke WriteConsoleA, stdout, ADDR st1, 14, NULL, NULL; VIVOD ST1 
invoke ReadConsole, stdin, ADDR buf, 20, ADDR cRead, NULL; чтение числа как символ 
invoke crt_atoi, ADDR buf;превратить символ в число 
mov [esi], eax 
add esi, 4 
mov ecx, ebx 
loop m1 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
mov ecx, _c 
lea esi, mas1;загрузка адреса начала массива 
mov eax, [esi]; загрузки числа 
m3: 
.IF (eax > max); условие 
mov max, eax 
add esi, 4; расчет адреса нового числа 
mov eax, [esi] 
loop m3
 
.ELSE; иначе 
add esi, 4;расчет адреса нового числа 
mov eax,[esi] 
loop m3; перейти,если ecx и 0
 
.ENDIF; окончания директивы высокого уровня
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
mov ecx, _c 
lea esi, mas1; загрузки адреса начала массива 
mov eax, [esi]; загрузки числа 
m4:
 
.IF (eax == max); условие 
inc nomer; находим в каком месте находится максимальный элемент 
add esi, 4;расчет адреса нового числа 
mov eax, [esi] 
jmp m5 
loop m4
 
.ELSE; иначе 
inc nomer 
add esi, 4; расчет адреса нового числа 
mov eax, [esi] 
loop m4; перейти, если ecx и 0
 
.ENDIF; окончания директивы высокого уровня
 
m5: 
mov eax,nomer 
mov edx,0 
div temp; в регистре eax находится число строки - 1 
mov edx,0
 
.IF (eax == 0); условие 
mov ebx,24 
.ELSEIF (eax == 1); условие 
mov ebx,18 
.ELSEIF (eax == 2); условие 
mov ebx,12 
.ELSEIF (eax == 3); условие 
mov ebx,6 
.ENDIF 
mov ecx,6 
mov edx,eax 
shl edx,2 
add ebx,edx 
x1: lea esi,mas1; загрузки адреса начала массива 
mov edx,[Esi + eax * 4]; загрузки числа 
mov [esi + ebx],edx 
mov edx,0 
mov [esi],edx 
add esi,4 
loop x1 
jmp end_prog 
end_prog:
 
mov ebx,max 
inc eax
 
invoke wsprintf,
ADDR st3,
ADDR ifmt, 
ebx,ax 
invoke MessageBox, 
NULL,
addr st3, 
addr st2, 
MB_OK
invoke ExitProcess, 0 
ret 
end _start; окончания программы
Миниатюры
Найти максимальный элемент двумерного массива и перенести его в конец массива  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2016, 18:15
Ответы с готовыми решениями:

Ассемблерная вставка: все отрицательные элементы массива поделить на его максимальный элемент
али задание на ассемблер. найти максимум и все отрицательные числа поделить на максимум. Максимум...

Первый четный элемент одномерного массива переставить в конец массива
Вот к примеру задание: Первый четный элемент одномерного массива нужно переставить в конец массива....

Найти максимальный элемент массива
Найти максимальный элемент массива с помощью программы FASM(желательно детальнее).

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

3
1 / 1 / 0
Регистрация: 07.06.2015
Сообщений: 77
18.12.2016, 19:42  [ТС] 2
аааа, все, я понял. Я лох.
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
18.12.2016, 19:58 3
Нет, вы прекрасный человек - поделитесь знаниями!
0
1 / 1 / 0
Регистрация: 07.06.2015
Сообщений: 77
19.12.2016, 01:26  [ТС] 4
Это и есть двумерный массив и работает он правильно, просто запись его элементов идет каждый раз с новой строки, а как сущность, он есть двумерным массивом.
1
19.12.2016, 01:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2016, 01:26
Помогаю со студенческими работами здесь

Найти максимальный по модулю элемент двумерного массива, его индексы
Пусть А - двумерный массив целых чисел размерности N*N. Найти максимальный по модулю элемент...

Перенести в конец массива его первый элемент
Помогите пожалуйста :(решить задачу на Free Pascal вот условие! Составить программу занесения в...

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

Максимальный элемент двумерного массива и его положение
Всем доброго времени суток. Помогите, пожалуйста, с задачей... Инициализировать массив n x n. n...


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

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