Консультация № 190102
20.11.2016, 19:17
0.00 руб.
0 6 1
Здравствуйте! У меня возникли сложности с таким вопросом: Помогите пожалуйста с решение данной задачи в среде CompModel Сортировка выбором по убыванию N = 18

Обсуждение

давно
Посетитель
400704
4
20.11.2016, 21:29
общий
Адресаты:
Попыталась найти максимальный элемент,чтобы далее от него отсортировать массив по по возрастанию,но что-то дальше не клеится(([code lang=asm]rd #50
wr r1
rd #18
wr r2
rd #0
rd @r1
wr r3
l2: rd @r1+
wr r4
sub r3
js l1
mov r3,r4
l1: jrnz r2,l2
rd r3
ret[/code]
а так же зная основы С++ сделала исходный код на нём для большего понимая но не могу перевести его в Compmodel помогите пожалуйста очень надо ((
Код:
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;

void choicesSort(int*, int); // прототип функции сортировки выбором

int main(int argc, char* argv[])
{
srand(time(NULL));
setlocale(LC_ALL, "rus");
cout << "Введите размер массива: ";
int size_array; // длинна массива
cin >> size_array;

int *sorted_array = new int [size_array]; // одномерный динамический массив
for (int counter = 0; counter < size_array; counter++)
{
sorted_array[counter] = rand() % 100; // заполняем массив случайными числами
cout << setw(2) << sorted_array[counter] << " "; // вывод массива на экран
}
cout << "\n\n";

choicesSort(sorted_array, size_array); // вызов функции сортировки выбором

for (int counter = 0; counter < size_array; counter++)
{
cout << setw(2) << sorted_array[counter] << " "; // печать отсортированного массива
}
cout << "\n";
delete [] sorted_array; // высвобождаем память
system("pause");
return 0;
}

void choicesSort(int* arrayPtr, int length_array) // сортировка выбором
{
for (int repeat_counter = 0; repeat_counter < length_array; repeat_counter++)
{
int temp = arrayPtr[0]; // временная переменная для хранения значения перестановки
for (int element_counter = repeat_counter + 1; element_counter < length_array; element_counter++)
{
if (arrayPtr[repeat_counter] > arrayPtr[element_counter])
{
temp = arrayPtr[repeat_counter];
arrayPtr[repeat_counter] = arrayPtr[element_counter];
arrayPtr[element_counter] = temp;
}
}
}
}

давно
Посетитель
7438
7205
20.11.2016, 22:26
общий
Адресаты:
Завтра нарисую
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
21.11.2016, 00:00
общий
Только вот, в Вашей программе реализован алгоритм пузырька, а не выбора. Посмотрите в
wikipedia, как должна работать сортировка выбором.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
400704
4
21.11.2016, 07:46
общий
21.11.2016, 07:46
Адресаты:
ах точно ) выбор минимального числа и сравнение. Но если можете помогите пожалуйста с данным упражнением
давно
Посетитель
7438
7205
21.11.2016, 14:33
общий
это ответ
Здравствуйте, dteplyakova80!
Где-то так
Вначале добавил кусок кода для формирования тестового массива.
При желании можно выкинуть.
[code lang=asm h=200]
rd #80 ;сформируем тестовый массив по адресу 80
wr r1
rd #1
wr @r1+
rdi 100001
wr @r1+
rd #2
wr @r1+
rd #9
wr @r1+
rd #3
wr @r1+
rd #6
wr @r1+
rdi 100005
wr @r1+
rd #10
wr @r1+
rd #100
wr @r1+
rd #5
wr @r1+
rd #4
wr @r1+
rd #3
wr @r1+
rd #2
wr @r1+
rd #1
wr @r1+
rd #0
wr @r1+
rd #8
wr @r1+
rd #7
wr @r1+
rd #6
wr @r1

rd #80 ;адрес массива
wr r1 ;в r1
rd #17 ;количество на 1 меньше, т.к. последний будет на своем месте автоматически
wr r2 ;в r2
;основной цикл
loop1: rd r2 ;счетчик внешнего цикла
wr r3 ;счетчик внутреннего цикла, от следующего до конца, без первого (!)
;поэтому равен счетчику внешнего цикла
mov r8,r1 ;сохраним адрес, куда писать очередного максимального
mov r5,r1 ;сохраним адрес текущего элемента внешнего цикла, как адрес максимального
rd @r1+ ;текущий элемент внешнего цикла
wr r4 ;сохраним его, как максимальный
mov r0,r1 ;начальный адрес элемента внутреннего цикла (на 1 больше)
;внутренний цикл поиска максимального элемента
loop2: mov r6,r0 ;сохраним адрес текущего элемента
rd @r0+ ;читаем очередной элемент
wr r7 ;сохраним его
sub r4 ;сравним с максимальным
jz next ;меньше или равно
js next ;на следующий элемент
mov r4,r7 ;новое максимальное значение
mov r5,r6 ;новый адрес максимального значения
next: ;на следующий элемент внутреннего цикла
jrnz r3,loop2 ;циклим по их количеству
;максимальный элемент в r4, его адрес в r5
;поменяем местами с элементом по адресу r8
mov r0,r8 ;адрес, куда запишем найденный максимальный элемент
rd @r0 ;читаем старое значение по этому адресу
mov r0,r5 ;адрес нового максимального
wr @r0 ;запишем элемент с адреса @r8 по адресу @r5
rd r4 ;новый максимальный элемент
mov r1,r8 ;адрес, куда запишем новый максимальный
wr @r1+ ;одновременно зададим адрес на следующий элемент
jrnz r2,loop1 ;циклим по всем элементам
hlt ;останов, массив отсортирован
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
405451
2
26.10.2021, 19:54
общий
Здравствуйте как находить количество чисел, меньших ;n=8
Форма ответа