Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 0
Регистрация: 24.09.2012
Сообщений: 43
1

Включить второй массив в первый между K-м и (k+1)-м элементами первого

24.09.2012, 16:37. Показов 2155. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Заданы два одномерных массива различных размеров M и N и число k(k<m). Не создавая дополнительный массив, включить второй массив в первый между K-м и (k+1)-м элементами.

Решите пожалуйста, а то я в массивах плохо разбираюсь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2012, 16:37
Ответы с готовыми решениями:

Вставить второй массив между k-ым и (k+1)-ым элементами первого массива
3) даны два массива различной длины. Вставить второй массив между к-тым и (к+1)-ым элементами ...

Заданы два одномерных массива.Объединить их в один массив, включив второй массив между K и (K+1) элементами первого
Последняя на сегодня... Заданы два одномерных массива: массив А размера M и массив В размера N....

Объединить два массива в один, включив второй массив между k-м и (k+1)-м элементами первого
Заданы два одномерных массива действительных чисел различных размеров. Объединить их в один массив,...

Объединить два массива в один, включив второй массив между k-м и (k+1)-м элементами первого
Даны два одномерных массива с различным количеством элементов и натуральное число k. Объединить их...

27
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
24.09.2012, 17:40 2
Элементы первого массива, начиная с k+1-придется сдвигать вправо на N позиций. Куда девать элементы 1-го массива, выходящие за его пределы? Просто удалять?
0
2 / 2 / 0
Регистрация: 24.09.2012
Сообщений: 43
24.09.2012, 19:59  [ТС] 3
Нужно сделать так, чтобы первый массив был нетронут, а второй массив был как бы в центре первого. Как то так
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
24.09.2012, 20:22 4
Цитата Сообщение от Vladi 1994 Посмотреть сообщение
Как то так
- посмотри на картинку и ответь на вопрос:
Миниатюры
Включить второй массив в первый между K-м и (k+1)-м элементами первого  
0
2 / 2 / 0
Регистрация: 24.09.2012
Сообщений: 43
24.09.2012, 20:34  [ТС] 5
Ну, нужно, чтобы они просто переместились на позицию либо вверх, либо вниз, но удалять их точно нельзя
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
24.09.2012, 20:38 6
M[1,k] + N[] +M[k+1,m] так?
0
2 / 2 / 0
Регистрация: 24.09.2012
Сообщений: 43
24.09.2012, 20:42  [ТС] 7
Вроде так, ну если что, я там потом сам разберусь, переправлю
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
24.09.2012, 21:03 8
Короче, так:
1) Есть массив A (m), и в нем занято l элементов
2) Есть еще один массив B(n).

Нужно сдвинуть элементы массива с (k+1)-го и вставить в A элементы B.

Тогда так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub InsArr(A() As Integer, B() As Integer, l As Integer, k As Integer)
      n% = UBound(B, 1)
      m% = UBound(A, 1)
      If (m% - l%) < n% Then
        MsgBox "Âñòàâêà íåâîçìîæíà!"
      Else
        i_from% = l%
        i_to% = l% + n%
        For j% = 1 To l% - k%
             A(i_to%) = A(i_from%)
             i_to% = i_to% - 1
             i_from% = i_from% - 1
        Next j%
        For i% = 1 To n
             A(k% + i%) = B(i%)
        Next i%
      End If
End Sub
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
24.09.2012, 21:29 9
Лучший ответ Сообщение было отмечено как решение

Решение

Я так думаю, что это задание на Redim Preserve
Вот способ быстрый и без циклов (но преподам показывать не рекомендуется ).
Массивы можно объявить любого числового типа или Variant, но они должны быть одинакового типа.
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
Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Dst As Any, Src As Any, ByVal Length&)
 
Sub bb()
Dim M&, N&, k&, i&
'задание параметров
M = 15
N = 12
k = 8
'заполнение массивов
ReDim A%(1 To M), B%(1 To N)
For i = 1 To M
    A(i) = i
Next
For i = 1 To N
    B(i) = -i * 10
Next
    'размер элемента массива в байтах
i = VarPtr(A(2)) - VarPtr(A(1))
    'расширение массива А, чтобы он мог вместить массив В
ReDim Preserve A(1 To UBound(A) + UBound(B))
    'переписывание элементов массива А начиная с k+1 в конец
CopyMem A(k + UBound(B) + 1), A(k + 1), UBound(B) * i
    'переписывание массива В в А на место k+1
CopyMem A(k + 1), B(1), UBound(B) * i
    'распечатка массива А
For i = 1 To UBound(A)
    Debug.Print i, A(i)
Next
End Sub
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
24.09.2012, 21:51 10
Цитата Сообщение от Казанский Посмотреть сообщение
Я так думаю, что это задание на Redim Preserve
- тоже возможно. Но суть - в сдвиге.
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
24.09.2012, 22:04 11
может так:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Option Explicit
 
Private Sub Command1_Click()
    Dim Arr1() As Double, Arr2() As Double
    Dim m As Integer, n As Integer, k As Integer, i As Integer, j As Integer
    Me.Cls
    Randomize
m:  m = InputBox("M = ", , Int(Rnd * 20 + 1))
    n = InputBox("N = ", , Int(Rnd * 20 + 1))
    k = InputBox("K = ", , Int(Rnd * 5 + 1))
    If k >= m Then MsgBox " Ошибка!   K >= M ": GoTo m
    ReDim Arr1(1 To m), Arr2(1 To n)
    
    Print "   Первый массив"
    For i = 1 To m
        Arr1(i) = InputBox("Первый массив. Введите элемент №  " & i, , Int(Rnd * 10))
        Print Arr1(i);
    Next i
    Print
    
    Print
    Print "   Второй массив"
    For i = 1 To n
        Arr2(i) = InputBox("Второй массив. Введите элемент №  " & i, , Int(Rnd * 10))
        Print Arr2(i);
    Next i
    Print
    
    Print
    Print "K =" & k
    Print
    
    ReDim Preserve Arr1(1 To m + n)
    
    For i = m To k Step -1
         Arr1(i + n) = Arr1(i)
    Next i
    
    For i = k To k + n - 1
         Arr1(i) = Arr2((i - k) + 1)
    Next i
    
    Print "Результат "
    For i = 1 To m + n
       Print Arr1(i);
    Next i
    
 
End Sub
2
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
24.09.2012, 22:54 12
или
Visual Basic
1
2
3
4
For i = 1 To m
arr1(i + n) = arr1(i + k)
arr1(i + k) = arr2(i)
Next i
0
Эксперт Hardware
3199 / 1910 / 323
Регистрация: 25.10.2011
Сообщений: 5,557
25.09.2012, 11:03 13
Цитата Сообщение от gaw Посмотреть сообщение
или
Visual Basic
1
2
3
4
For i = 1 To m
arr1(i + n) = arr1(i + k)
arr1(i + k) = arr2(i)
Next i
Прокатит только если m = n
0
2 / 2 / 0
Регистрация: 24.09.2012
Сообщений: 43
26.09.2012, 15:17  [ТС] 14
Ну мне вообще самым простым способом нужно. Ничего крутого не надо. У меня еще база знаний не та. Я ведь только учусь
0
2 / 2 / 0
Регистрация: 24.09.2012
Сообщений: 43
03.10.2012, 16:43  [ТС] 15
А скажите, можно как нибудь сделать так, чтобы ввод и результат отображались в элементах типа TextBox. А то на самой форме не очень как то.
Если можно, подскажите как пожалуйста
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
03.10.2012, 17:19 16
Цитата Сообщение от SoftIce Посмотреть сообщение
Visual Basic
1
2
3
For i = 1 To m + n
 Print Arr1(i);
 Next i
Visual Basic
1
2
3
4
Text1.Text=""
For i = 1 To m + n
 Text1.Text=Text1.Text & Arr1(i) & vbNewLine
 Next i
1
Заблокирован
04.10.2012, 10:20 17
Цитата Сообщение от gaw Посмотреть сообщение
Visual Basic
1
2
3
4
Text1.Text=""
For i = 1 To m + n
 Text1.Text=Text1.Text & Arr1(i) & vbNewLine
 Next i
идентично
Visual Basic
1
Text1.Text=join(Arr1,vbNewLine)
2
2 / 2 / 0
Регистрация: 24.09.2012
Сообщений: 43
05.10.2012, 17:25  [ТС] 18
И последний вопросик. Я не могу понять, для чего существует "K" и как она влияет на программу. Объясните пожалуйста
1
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
05.10.2012, 17:47 19
Да никак, в сущности Особенно если условие задачи вспомнить:
Цитата Сообщение от Vladi 1994 Посмотреть сообщение
Включить второй массив в первый между K-м и (k+1)-м элементами первого
2
2 / 2 / 0
Регистрация: 24.09.2012
Сообщений: 43
05.10.2012, 17:56  [ТС] 20
Ну да, тупанул что-то
0
05.10.2012, 17:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2012, 17:56
Помогаю со студенческими работами здесь

Объединить два одномерных массива в один, включив второй массив между k-м и (k+1)-м элементами первого
Помогите составить программу. Заданы два одномерных массива с различным количеством элементов и...

Объединить два массива в один, включив второй массив между 4 и 5 элементами первого массива
Заданы два одномерных массива с числом элементов 6 и 7. Объединить их в один массив,включив второй...

Объединить два массива в один, включив второй массив между k-ым и (k+1)-ым элементами первого массива
Может кто решить ? вовсе не могу понять ... Дано два одномерных масива различной размерности....

Включить второй массив в первый
Заданы два одномерных массива различных размеров M и K и число К (К&lt;М). Не создавая...


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

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