Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 2
Регистрация: 05.11.2015
Сообщений: 81
1

Выполнить циклический сдвиг массива на К чисел влево

24.06.2016, 21:32. Показов 2160. Ответов 5
Метки нет (Все метки)

Добрый день форумчане. Такое во дело, дали условие : выполнить циклический сдвиг массива на к чисел влево (к- задано). Думаю как что реализовать.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.06.2016, 21:32
Ответы с готовыми решениями:

Выполнить циклический сдвиг элементов массива влево и вправо
Дан массив размера N и число k (0 < k < 5, k < N). Осуществить циклический сдвиг элементов массива...

Выполнить циклический сдвиг массива влево без первого элемента
Пожалуйста, помогите решить вот эту задачу. Заполнить массив из 10 элементов случайными числами...

В заданном массиве двоичных чисел выполнить циклический сдвиг всех элементов влево на одну позицию
В заданном массиве двоичных чисел выполнить циклический сдвиг всех элементов влево на одну позицию....

В заданном массиве двоичных чисел выполнить циклический сдвиг всех элементов влево на одну позицию
В заданном массиве двоичных чисел выполнить циклический сдвиг всех элементов влево на одну позицию....

5
1629 / 796 / 240
Регистрация: 26.05.2012
Сообщений: 2,896
24.06.2016, 22:03 2
Цитата Сообщение от NYxekal Посмотреть сообщение
как что реализовать
1. запоминаем первое число массива
2. сдвигаем оставшиеся числа массива на одно число влево
3. сохраняем запомненное число в самый конец массива
4. повторяем действия 1-3 k-раз
0
1 / 1 / 2
Регистрация: 05.11.2015
Сообщений: 81
25.06.2016, 17:34  [ТС] 3
Осталось только реализовать
0
Эксперт Hardware
5178 / 1837 / 345
Регистрация: 29.07.2014
Сообщений: 2,787
Записей в блоге: 5
25.06.2016, 18:10 4
Цитата Сообщение от NYxekal Посмотреть сообщение
Думаю как что реализовать.
..и что там надумал, можно узнать?
0
Эксперт Hardware
5178 / 1837 / 345
Регистрация: 29.07.2014
Сообщений: 2,787
Записей в блоге: 5
26.06.2016, 19:05 5
Лучший ответ Сообщение было отмечено NYxekal как решение

Решение

Вот тебе набросок, который читает/сохраняет юзерскую строку. Дальше, задаёшь кол-во сдвигов(0..9) и получаешь на выходе изменённую строку. Чтоб сдвинуть строку не влево, а вправо, нужно переместить указатели в конец строки и взвести флаг направления(DF). Здесь - строка тупо сдвигается влево. proc3nt дал тебе алгоритм, вот его реализация:

Кликните здесь для просмотра всего текста

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
; Выполнить циклический сдвиг массива на k-чисел влево
;fasm code....
org  100h
jmp  start
 
mess0   db   13,10,' String: $'
mess1   db   13,10,'  Shift: $'
mess2   db   13,10,' Result: $'
buff    db   80 dup('$')     ; буфер для ввода
len dw   0           ; длина строки
 
start:  mov   dx,mess0       ;
    call  message        ;
    xor   cx,cx      ; обнуляем длину
    mov   di,buff        ; адрес приёмника
    mov   ah,1       ; ввод с эхом
input:  int   21h        ;
    cmp   al,13      ; Enter - закончить ввод
    je    begin      ;
    stosb            ; сохраняем символ в буфере
    inc   cx         ; считаем длину строки
    jmp   input      ;
 
begin:  mov   [len],cx       ; запомним её..
    mov   dx,mess1       ;
    call  message        ;
    mov   ah,1       ; вводим(k) - значение сдвига
    int   21h        ; (здесь можешь добавить фильтр чисел)
    and   ax,0fh         ;
    push  ax         ; запомним..
 
    mov   dx,mess2       ;
    call  message        ;
    pop   bx         ; ВХ = кол-во сдвигов (счётчик цикла)
worm:   mov   si,buff        ; источник,
    mov   di,si      ;    ..он-же приёмник
    lodsb            ; берём первый элемент
    push  ax         ; запоминаем его в стеке
    mov   cx,[len]       ; длина строки для MOVSB
    dec   cx         ;    ..без первого элемента
    rep   movsb      ; смещаем всю строку влево!
    pop   ax         ; снимаем первый элемент
    stosb            ; записываем его последним символом
    dec   bx         ; уменьшаем кол-во сдвигов
    jnz   worm       ; ВХ нуль? Нет - на повтор..
 
    mov   dx,buff        ; выводим сдвинутую строку на экран!
    call  message        ;
 
exit:   xor   ax,ax      ; ждём любую клавишу..
    int   16h        ;
    int   20h        ; выход!
;---------------------------------------------------------------------
message:             ; вывод строки средствами DOS
    mov   ah,9       ;
    int   21h        ;
    ret          ;
1
Миниатюры
Выполнить циклический сдвиг массива на К чисел влево  
1 / 1 / 2
Регистрация: 05.11.2015
Сообщений: 81
27.06.2016, 11:19  [ТС] 6
Цитата Сообщение от R71MT Посмотреть сообщение
Вот тебе набросок, который читает/сохраняет юзерскую строку. Дальше, задаёшь кол-во сдвигов(0..9) и получаешь на выходе изменённую строку. Чтоб сдвинуть строку не влево, а вправо, нужно переместить указатели в конец строки и взвести флаг направления(DF). Здесь - строка тупо сдвигается влево. proc3nt дал тебе алгоритм, вот его реализация:
Спасибо ты мне помог.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.06.2016, 11:19

Выполнить циклический сдвиг элементов массива влево так, чтобы минимальный элемент переместился на первое место
Дан массив целых чисел а1, ...., аn . Выполнить циклический сдвиг элементов массива влево так,...

Выполнить циклический сдвиг списка на N элементов вправо или влево
Помогите пожалуйста Организация:очередь Создать список из заданного количества элементов....

Выполнить циклический сдвиг матрицы влево и показать на экран полученный результат
Здравствуйте, помогите исправить алгоритм. Вот задача : Создайте двухмерный массив. Пользователь...

Выполнить циклический сдвиг двоичного числа влево на один разряд, используя Нормальные Алгоритмы Маркова
Условие задания (Помогите пожалуйста с защитой) Выполнить циклический сдвиг двоичного числа в лево...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.