Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787

Добавить (удалить) 1 элемент с конца массива

08.02.2015, 21:57. Показов 3353. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток!Мои знания VB6 практически нулевые,разбираюсь по самоучителю,консультироваться не с кем,надеюсь только на вашу помощь.Пытаюсь "изобретать велосипед" подобие функций push_back() и pop_dack() в с++.
Не могу врубиться почему не получаются пустые массивы.Вот мой код на форме одна кнопка

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Option Explicit
'функция добавления 1 элемента в конец массива
Function PushBack(Arr() As Double, x, b) As Double()
ReDim Preserve Arr(x) 'Выделим память
Arr(x) = b 'Добавил 1 элемент
x = x + 1 'Добавил память
PushBack = Arr
End Function
 
'функция удаления 1 элемента с конца массива
Function PopBack(Arr() As Double) As Double()
Dim x As Integer, i As Integer, Temp() As Double
x = UBound(Arr) 'измерил массив
If x >= 1 Then ReDim Temp(x - 1) _
Else: PopBack = Arr: Exit Function   'переопределил память если выходим за нижний предел
                                     'выходим из функции продолжать нет смысла
 
For i = 0 To UBound(Temp)
Temp(i) = Arr(i) 'копирую поэлементно во временный массив
Next
 
Erase Arr() 'удаляю массив
Arr = Temp  'копирую из временного массива
Erase Temp() 'удаляю временный массив
PopBack = Arr
End Function
 
'процедура печати массива
Sub PrintMas(Arr() As Double)
Dim j As Byte
For j = LBound(Arr) To UBound(Arr)
Print Arr(j);
Next
Print
End Sub
 
'Test
Private Sub Command1_Click()
 
Dim Test() As Double, Test1() As Double
Dim i As Integer, j As Integer, N As Integer
 
Print "Добавляю в цикле"
For i = -5 To 5
Test = PushBack(Test(), N, i) 'Добавляю в цикле
Next
PrintMas Test()
 
Print "Добавляю 1 элемент"
Test = PushBack(Test(), N, 100) 'Добавляю 1 элемент
PrintMas Test()
 
Print "удаляю 1 элемент"
Test = PopBack(Test()) 'удаляю 1 элемент
PrintMas Test()
 
Print "удаляю в цикле"
For i = 1 To 6
Test = PopBack(Test()) 'удаляю в цикле
Next
PrintMas Test()
 
Print "удаляю в цикле явно больше массива,0вой остался "
For i = 1 To 10
Test = PopBack(Test()) 'удаляю в цикле явно больше массива
Next
PrintMas Test() 'прокол, 0вой остался
End Sub
Код в общем работает,но пустого массива не могу видеть,кроме того в функции PopBack 0вой элемент не удаляется.
Пожалуйста подскажите в чем дело,что я не так делаю.
Если есть такие же стандартные пожалуйста подскажите.
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2015, 21:57
Ответы с готовыми решениями:

Удалить первый нулевой элемент массива и добавить после каждого чётного элемента особый элемент
Здравствуйте! Имеется такая задача: 1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел. 2) Распечатать...

Удалить элементы кратные 7. Добавить после каждого элемента массива элемент со значенем 0.
// Кузя 2.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <stdlib.h> #include...

Удалить К элементов из одномерного массива, начиная с заданного, добавить элемент с заданным ключом
Нужно Удалить К элементов из одномерного массива, начиная с заданного. Пытался сделать разными способами, не выходит. Кто подсказать как...

6
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
08.02.2015, 22:59
Цитата Сообщение от Genn55 Посмотреть сообщение
Не могу врубиться почему не получаются пустые массивы
Потому что 14 строка: если х=0, то массив не изменяется (остается 0-й элемент).
Вообще, логично было бы, чтобы функция РорВаск возвращала удаленный элемент, а то это не стек, а черная дыра
А массив будет параметром функции.
0
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
08.02.2015, 23:21  [ТС]
Цитата Сообщение от Казанский Посмотреть сообщение
Потому что 14 строка: если х=0, то массив не изменяется (остается 0-й элемент).
Это понятно.Ниже 0 опускаться не куда, уйду за нижнюю границу и код не скампеллируется.Но выходит Erase не полностью освобождает память?
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
08.02.2015, 23:48
Лучший ответ Сообщение было отмечено Genn55 как решение

Решение

Код скомпилируется, но надо написать обработчики ошибок при выполнении. Erase освобождает память, но он же не выполняется в указанном месте!
Попробуйте так:
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Option Explicit
 
'ПОДПРОГРАММА добавления 1 элемента в конец массива
Sub PushBack(Arr() As Double, b)
  On Error GoTo 1   'переход в случае ошибки
  ReDim Preserve Arr(UBound(Arr) + 1) 'Выделим память
  Arr(UBound(Arr)) = b 'Заполнил 1 элемент
  Exit Sub
 
1 ReDim Arr(0)      'ошибка возникает, если массив не инициализирован.
  Arr(0) = b        'инициализируем и заполняем
End Sub
 
'функция удаления 1 элемента с конца массива
Function PopBack(Arr() As Double) ' As Double
Dim x As Long, i As Integer, Temp() As Double
On Error GoTo 1
x = UBound(Arr) 'измерил массив
PopBack = Arr(x)
If x > 0 Then
  ReDim Preserve Arr(x - 1)
Else
  Erase Arr
End If
Exit Function
 
1 PopBack = "нечего возвращать!"
End Function
 
'процедура печати массива
Sub PrintMas(Arr() As Double)
Dim j As Long
On Error GoTo 1
For j = LBound(Arr) To UBound(Arr)
Print Arr(j);
Next
Print
Exit Sub
 
1 Print "массив пуст!"
End Sub
 
'Test
Private Sub Command1_Click()
 
Dim Test() As Double, Test1
Dim i As Integer, j As Integer, N As Integer
 
Print "Добавляю в цикле"
For i = -5 To 5
PushBack Test(), i 'Добавляю в цикле
Next
PrintMas Test()
 
Print "Добавляю 1 элемент"
PushBack Test(), 100  'Добавляю 1 элемент
PrintMas Test()
 
Print "удаляю 1 элемент"
Test1 = PopBack(Test()) 'удаляю 1 элемент
Print Test1
PrintMas Test()
 
Print "удаляю в цикле"
For i = 1 To 15
Print PopBack(Test())  'удаляю в цикле
PrintMas Test()
Next
End Sub
1
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
09.02.2015, 00:20  [ТС]
Вроде заработал.Спасибо огромное!!Проигнорировал GoTo,а зря.Буду восполнять.А пишут,что использовать GoTo плохой стиль.

Добавлено через 9 минут
Мне нужно 2 незавсимые функции PushBack и PopBack.Мысль понял,разберусь
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
09.02.2015, 00:21
Лучший ответ Сообщение было отмечено Genn55 как решение

Решение

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
Option Explicit
 
Private Sub Push(Arr() As Double, ByVal v As Double)
    On Error Resume Next
    If (Not Arr) = -1 Then ReDim Arr(0) Else ReDim Preserve Arr(UBound(Arr) + 1)
    Arr(UBound(Arr)) = v
End Sub
 
Private Function Pop(Arr() As Double) As Double
    On Error Resume Next
    If (Not Arr) = -1 Then Exit Function
    Pop = Arr(UBound(Arr))
    If UBound(Arr) = 0 Then Erase Arr Else ReDim Preserve Arr(UBound(Arr) - 1)
End Function
 
Private Sub Form_Load()
    Dim ar() As Double
    
    Push ar(), 10
    Push ar(), 9
    Push ar(), 8
    Push ar(), 7
    
    Debug.Print Pop(ar)
    
    Push ar(), 21
    Push ar(), 22
    
    Debug.Print Pop(ar)
    Debug.Print Pop(ar)
    Debug.Print Pop(ar)
    Debug.Print Pop(ar)
    Debug.Print Pop(ar)
    
    Debug.Print Pop(ar)
    
End Sub
1
413 / 250 / 118
Регистрация: 26.12.2012
Сообщений: 787
10.02.2015, 00:00  [ТС]
Всем большое спасибо!Почитал,поэкспериментировал -разобрался.Все работает как мне нужно.Надеюсь на вашу дальнейшую помощью В VB6 это мои первые шаги.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.02.2015, 00:00
Помогаю со студенческими работами здесь

Удалить все нечетные элементы массива. Добавить элемент с номером К. Сдвинуть циклически на M элементов вправо
Ребят, помогите срочно пожалуйста. Нужно: 1)Удалить все нечетные элементы массива. 2) Добавить элемент с номером К. 3) Сдвинуть...

Указатели . Удалить из одномерного массива элемент с заданным номером, добавить К элементов, начиная с заданного номера
Сформировать одномерный массив. Удалить из него элемент с заданным номером, добавить К элементов, начиная с заданного номера

В массив добавить элемент, расположив его перед третьим с конца элементом.
В массив A, состоящий из n вещественных элементов, добавить элемент х, расположив его перед третьим с конца элементом. Числа х, n и...

Двусвязный список - Добавить элемент после заданного, удалить заданный элемент
Реализуйте списочную структуру в виде класса. работа состоит из двух частей: из класса (структуры, алгоритма) и из тестирующего кода. ...

Удалить элемент с указанной фамилией, добавить элемент после элемента с указанным номером
Имеется код к задаче: Сформировать двоичный файл из элементов, заданной в варианте структуры, распечатать его содержимое, выполнить...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru