Сколько раз в массиве повторяется максимальный элемент - 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 с использованием вставок на ассемблере.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д