23.06.2017, 13:21 [+3 UTC]
в нашей команде: 2 036 чел. | участники онлайн: 5 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: консультации

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.41 (25.02.2017)

Общие новости:
23.02.2017, 09:51

Форум:
20.06.2017, 09:08

Последний вопрос:
22.06.2017, 20:26

Последний ответ:
23.06.2017, 07:02

Последняя рассылка:
23.06.2017, 09:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
26.04.2011, 19:51 »
srphoenix
Очень подробное решение,спасибо. [вопрос № 182928, ответ № 266824]
07.12.2010, 16:33 »
Kozyr76
Отлично, хороший ответ [вопрос № 181122, ответ № 264546]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

Лучшие эксперты в этом разделе

Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 184
Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 180
Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 126

Перейти к консультации №:
 

Консультация онлайн # 190102
Раздел: • Assembler
Автор вопроса: dteplyakova80 (Посетитель)
Отправлена: 20.11.2016, 19:17
Поступило ответов: 1

Здравствуйте! У меня возникли сложности с таким вопросом: Помогите пожалуйста с решение данной задачи в среде CompModel Сортировка выбором по убыванию N = 18

Состояние: Консультация закрыта

Ответ # 274302 от Лысков Игорь Витальевич (Старший модератор)

Здравствуйте, dteplyakova80!
Где-то так smile
Вначале добавил кусок кода для формирования тестового массива.
При желании можно выкинуть.

Код (Assembler) :: выделить код
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 ;останов, массив отсортирован


Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 21.11.2016, 14:33

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 190102
dteplyakova80
Посетитель

ID: 400704

# 1

= общий = | 20.11.2016, 21:29 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

Попыталась найти максимальный элемент,чтобы далее от него отсортировать массив по по возрастанию,но что-то дальше не клеится((

Код (Assembler) :: выделить код
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

а так же зная основы С++ сделала исходный код на нём для большего понимая но не могу перевести его в 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;
            }
        }
    }
}

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 2

= общий = | 20.11.2016, 22:26 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
dteplyakova80:

Завтра нарисую smile

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 3

= общий = | 21.11.2016, 00:00 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Только вот, в Вашей программе реализован алгоритм пузырька, а не выбора. Посмотрите в
wikipedia, как должна работать сортировка выбором.

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

dteplyakova80
Посетитель

ID: 400704

# 4

= общий = | 21.11.2016, 07:46 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

ах точно ) выбор минимального числа и сравнение. Но если можете помогите пожалуйста с данным упражнением

• Отредактировал: dteplyakova80 (Посетитель)
• Дата редактирования: 21.11.2016, 07:46

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.14039 сек.

© 2001-2017, Портал RFPRO.RU, Россия
Авторское право: ООО "Мастер-Эксперт Про"
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.41 от 25.02.2017
Бесплатные консультации онлайн