Все отрицательные элементы массива А необходимо поставить в начало массива, а положительные в конец - Assembler
Формулировка задачи:
Здравствуйте! Нужна небольшая помощь с массивами в Assembler. Задача в следующем: Все отрицательные элементы массива А необходимо поставить в начало массива, а положительные в конец.
Я написал следующее, но она работает не совсем так, как нужно.
Программа работает, но выводит те же самые элементы, помогите разобраться.
program Buten; uses crt; const N=5; var A:array[1..N] of shortint; i,x: integer; begin Randomize; for i:=1 to N do A[i]:=-100+Random(200); writeln('Massiv A:'); writeln; read; asm LEA SI,A mov CX,N mov BX,4 mov x,0 @1: CMP x,BX JGE @2 xor AX,AX mov AX,[SI+x] CMP AX,0 JGE @3 JMP @4 @3: mov DX,[SI+BX] mov [SI+x],DX mov [SI+BX],AX dec BX JMP @1 @4: inc x loop @1 @2: NOP end; writeln('Massiv A IZM:'); for i:=1 to N do write(A[i],' '); writeln; readln; end.
Решение задачи: «Все отрицательные элементы массива А необходимо поставить в начало массива, а положительные в конец»
textual
Листинг программы
program test; const N = 5; type TArray = array[1..N] of integer; procedure BubbleSort(var A: TArray; N: integer); var i, j: integer; x: integer; R: integer; begin for i := 1 to N - 1 do begin j := N; while (j > i) do begin R := ((not (A[j - 1])) and (A[j])); if {(A[j - 1] > A[j])}R < 0 then begin x := A[j]; A[j] := A[j - 1]; A[j - 1] := x; end; Dec(j); end; end; end; var i: integer; A: TArray; begin randomize; writeln('Massiv A:'); for i := 1 to N do begin A[i] := -100 + Random(200); Write(A[i]: 4); end; writeln; asm LEA BX,A MOV CX,N DEC CX MOV SI,0 {for i:=1 to N-1 do} @@ForI: MOV DI,N { j:=N} DEC DI SHL DI,1 @@ForJ: { repeat} MOV AX,[BX+DI-2] { R := ((not (A[j - 1])) and (A[j]));} NOT AX AND AX,[BX+DI] JNS @@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 end; writeln('Massiv A IZM:'); for i := 1 to N do Write(A[i]: 4); writeln; end.
Объяснение кода листинга программы
- Создание константы N со значением 5 и типа массива TArray из 5 целочисленных элементов.
- Создание процедуры BubbleSort для сортировки массива, принимающей ссылку на массив A и размерность массива N.
- В процедуре BubbleSort инициализация переменных i, j, x, R типа integer для использования в цикле.
- Цикл сортировки массива, где происходит сравнение и перестановка отрицательных элементов массива A в начало и положительных в конец массива.
- Инициализация переменной i типа integer.
- Создание массива A, заполненного случайными числами от -100 до 100.
- Встроенный ассемблерный код для реализации алгоритма сортировки непосредственно в процедуре на языке Assembler.
- Вывод массива A до и после сортировки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д