Сколько раз в массиве повторяется максимальный элемент - Assembler
Формулировка задачи:
Здравствуйте, не могли бы помочь с программой, не идет и все..
Program abczdarova Uses crt; Const N=10 Var A:array[1..N] of integer; i:1..N; Begin Randomize; For i:1 to N do Begin A[i]:=random(10); Writeln(A[i]:4); Write('Massiv A:'); Write(A[i]); End; Asm LEA SI, A Mov AX, [SI] Mov DX, 1 Mov CX, N Mov BX, 0 @1: CMP AX, [SI+DX] JLE @2 Mov AX, [SI+DX] Mov BX, 0 Inc DX Loop @1 @2: inc DX Inc BX CMP AX, [SI+BX] JLE @2 Mov AX, [SI+DX] Mov BX, 0 JMP @1 End; For i:=1 to N do Writeln('макс элемент' AX 'встречается ' BX 'раз'); Readln; end.
а как исправить?
Решение задачи: «Сколько раз в массиве повторяется максимальный элемент»
textual
Листинг программы
program abczdarova; uses crt; const N = 10; var A: array[1..N] of integer; i: 1..N; Count, Max: integer; begin Randomize; for i := 1 to N do begin A[i] := random(10); Writeln(A[i]: 4); Write('Massiv A:'); Write(A[i]); end; writeln; asm LEA SI, A MOV AX, [SI] MOV DX, 1 MOV CX, N DEC CX ADD SI, 2 @1: CMP AX, [SI] JNE @2 INC DX JMP @3 @2: JG @3 MOV AX, [SI] MOV DX, 1 @3: ADD SI, 2 LOOP @1 MOV Count,DX MOV Max, AX end; Writeln('макс элемент ', Max, ' встречается ', Count, ' раз'); Readln; end.
Объяснение кода листинга программы
- Объявляется переменная
N
и инициализируется значением 10. - Объявляется массив
A
типа integer со значениями от 1 до N. - Объявляется переменная
i
типа 1..N для использования в цикле. - Объявляются переменные
Count
иMax
типа integer для хранения количества повторений максимального элемента и его значения. - Производится инициализация генератора случайных чисел.
- В цикле от 1 до N для каждого элемента массива:
- Генерируется случайное значение и помещается в массив A[i].
- Значение A[i] выводится на экран.
- Используется ассемблерный блок:
- При помощи инструкции LEA адрес массива A помещается в SI.
- AX инициализируется значением первого элемента массива.
- Устанавливается начальное значение счетчика повторений DX в 1.
- CX устанавливается в N, количество элементов массива.
- В цикле происходит сравнение текущего значения с максимальным элементом и увеличивается счетчик DX при равенстве.
- При нахождении большего элемента, AX инициализируется этим значением и счетчик DX устанавливается в 1.
- Происходит увеличение адреса массива SI и проверка на конец цикла.
- Данные из ассемблерного блока копируются в переменные Count и Max.
- Выводится на экран число
Max
(максимальный элемент массива) и количество его повторенийCount
. P.S. Код написан на Pascal с использованием вставок на ассемблере.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д