Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 71
1

Массив: Осуществить сдвиг элементов массива вправо на K позиций

24.11.2015, 18:05. Показов 4253. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дан массив размера N и целое число K (1≤K<N). Осуществить сдвиг элементов массива вправо на K позиций (при этом A1 перейдет в AK+1, A2 — в AK+2, ..., AN−K — в AN, а исходное значение K последних элементов будет потеряно). Первые K элементов полученного массива положить равными 0

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub zadacha()
Dim a(1 To 10) As Integer
Dim N, i, k As Integer
 
N = InputBox("Введите размер массива")
k = InputBox("Введите число")
For i = 1 To N
a(i) = InputBox(i, "число")
Next i
 
For i = N To 1 Step -1
a(i) = a(i - k)
Next i
 
For i = 1 To k
a(i) = 0
Next i
For i = 1 To N
MsgBox a(i)
Next
End Sub
Написал программу, выдает ошибку Run-time error'9' subscript out of range. Подскажите как исправить
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2015, 18:05
Ответы с готовыми решениями:

Сдвиг элементов массива вправо на 10 позиций
Написать процедуру, в которой для заданного массива В, состоящего из 10 элементов, его элементы...

Осуществить циклический сдвиг элементов массива на m позиций влево
я в этом деле новичок вот повис на вроде и несложном(( рассчитываю на вас 1) Осуществить...

Осуществить циклический сдвиг элементов каждой строки матрицы на K элементов вправо
Дана целочисленная квадратная матрица. Осуществить циклический сдвиг элементов каждой строки на K...

Осуществить циклический сдвиг элементов квадратной матрицы размером М×N вправо на k элементов
Осуществить циклический сдвиг элементов квадратной матрицы размером М×N вправо на k элементов...

3
6081 / 1325 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
24.11.2015, 20:05 2
Лучший ответ Сообщение было отмечено vlaste как решение

Решение

Здравствуйте, vlaste,
Давайте посмотрим, что вы делаете во втором цикле. Вы выполняете ряд присваиваний:

An=An-k
An-1=An-k-1
An-2=An-k-2
...
A3 = A3-k
A2 = A2-k
A1 = A1-k

Представим, что n = 7, k = 2. Тогда эти присваивания будут выглядеть так:

A7=A5
A6=A4
A5=A3
...
A3 = A1
A2 = A0
A1 = A-1

Чувствуете, в чем ошибка? Вы пытаетесь присвоить элементу массива A2 значение несуществующего элемента массива A0, индекс которого выходит за заданные вами пределы (от 1 до 10). О чем компьютер вам и сообщает (а вы ему почему-то не верите).

Последним корректным присваиванием является присваивание A3 = A1. Но 3 = k + 1. Следовательно, необходимо остановиться на присвоении значения элементу массива с индексом k + 1. Т. е. строчку...

Visual Basic
1
For i = N To 1 Step -1
..заменяем на...

Visual Basic
1
For i = N To k + 1 Step -1
...и будет вам счастье!

С уважением,
Аксима
1
15146 / 6419 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
25.11.2015, 01:14 3
vlaste, с использованием WinAPI. Вывод в окно Immediate.
Visual Basic
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
Option Explicit
 
Declare Sub RtlMoveMemory Lib "Kernel32" (dst As Any, src As Any, ByVal size As Long)
Declare Sub RtlZeroMemory Lib "Kernel32" (dst As Any, ByVal size As Long)
 
Sub zadacha()
Dim N As Integer, i As Integer, k As Integer
Randomize
N = InputBox("Введите размер массива", , 10 + Int(Rnd * 10))
k = InputBox("Введите число", , 1 + Int(Rnd * N))
If k < 1 Or k >= N Then
  MsgBox "Неверный ввод", vbExclamation
  Exit Sub
End If
ReDim a(1 To N) As Integer
For i = 1 To N
  a(i) = InputBox(i, "число", Int(Rnd * 100))
  Debug.Print Tab(i * 4 - 3); a(i);
Next i
Debug.Print
  'перемещение
RtlMoveMemory a(k + 1), a(1), 2 * (N - k)
  'обнуление
RtlZeroMemory a(1), 2 * k
 
For i = 1 To N
  Debug.Print Tab(i * 4 - 3); a(i);
Next i
Debug.Print
End Sub
0
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 71
25.11.2015, 16:04  [ТС] 4
Когда поменял,как сказали, выдает в ответе одни 0
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub zadacha()
Dim a(1 To 10) As Integer
Dim N, i, k As Integer
 
N = InputBox("Введите размер массива")
k = InputBox("Введите число")
For i = 1 To N
a(i) = InputBox(i, "число")
Next i
 
For i = N To k + 1 Step -1
a(i) = a(i - k)
Next i
 
For i = 1 To k
a(i) = 0
Next i
For i = 1 To N
MsgBox a(i)
Next
End Sub
Добавлено через 11 минут
А все понял, у меня и так должны 0 вывести, спасибо Аксима
0
25.11.2015, 16:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2015, 16:04
Помогаю со студенческими работами здесь

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k – индекс максимального элемента
Помогите пожалуйста решить эту задачу, Дан массив размера N. Осуществить циклический сдвиг...

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k- индекс максимального элемента.
Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k-...

Осуществить сдвиг элементов массива вправо на K позиций
Всем привет! Прошу помощи в решении задачки на Borland C++ Builder с очень похожим примером: ...

Осуществить сдвиг элементов массива вправо на k позиций
Всем привет , помогите пожалуйста решить эту задачу на языке Си 9. Дан целочисленный массив...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru