Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 20

Нужно сжать массив, удалив отрицательные элементы

22.09.2012, 20:22. Показов 1392. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно сжать массив, удалив отрицательные элементы, в условие A(i) = " " выходит ошибка. Помогите составить правильное условие
Visual Basic
1
2
3
4
For i = 1 To n
If A(i) < 0 Then A(i) = " "
Text5.Text = Text5.Text + "  " + Str(A(i))
Next i
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2012, 20:22
Ответы с готовыми решениями:

Вычислить произведение элементов до максимального, сжать массив, удалив отрицательные элементы
Ребят помогите составить программу, первое задание я сделал осталось 2 и 3. Буду очень признателен Задан одномерный массив из n...

Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a, b]
Одномерный массив, состоящий из n вещественных элементов, сжать, удалив из него все элементы, модуль которых находится в интервале ....

Сжать массив, удалив из него все элементы, модуль которых находится в заданном интервале
Ссылка удалена Неужели так трудно приложить имеющийся под рукой код в нормальном виде? вот готовый код осталось последнее задание...

11
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
23.09.2012, 00:31
Проще использовать вспомогательный массив, куда складывать неотрицательные элементы:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub ShrinkNegative()
Dim A(), x, y, A1()
A = Array(Rnd - 0.5, Rnd - 0.5, Rnd - 0.5, Rnd - 0.5, Rnd - 0.5, Rnd - 0.5)
Debug.Print "Массив до"
For Each x In A: Debug.Print x: Next
A1 = A
y = LBound(A)
For Each x In A
    If x >= 0 Then A1(y) = x: y = y + 1
Next
If y > LBound(A) Then
    ReDim Preserve A1(LBound(A1) To y - 1)
    A = A1
    Debug.Print "Массив после"
    For Each x In A: Debug.Print x: Next
Else
    Debug.Print "Все элементы отрицательные!"
End If
Erase A1
End Sub
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
23.09.2012, 00:48
Цитата Сообщение от megaban Посмотреть сообщение
сжать массив
скорей всего исключает использование доп.массива
пример (не совсем экономичен)
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
Private Sub Command1_Click()
n = 10
ReDim a(n)
Cls
k = 0
For i = 1 To n
  a(i) = Int(Rnd * 11) - 5
    Print a(i); vbTab;
      If a(i) >= 0 Then k = k + 1
Next i
Print
 If k = 0 Then
 Print "{0}"
 Else
 For i = 1 To k
   Do While a(i) < 0
   t = a(i)
     For j = i + 1 To n
          a(j - 1) = a(j)
     Next j
   a(n) = t
   Loop
  'Print a(i); vbTab;
 Next i
 
 ReDim Preserve a(k)
For i = 1 To UBound(a)
  Print a(i); vbTab;
Next i
End If
End Sub
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,738
Записей в блоге: 14
23.09.2012, 10:52
Уважаемый Gaw! Ваш код требует знания к-ва ненулевых элементов... Вот менее притязательный код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub PressArr(A() As Integer, n As Integer)
      m% = UBound(A, 1)
      p% = LBound(A, 1)
      i_From% = p%
      i_To% = p%
      Do
           If i_From% > m% Then Exit Do
           If (A(i_From%) <> 0) And (i_From% <> i_To%) Then
              A(i_To%) = A(i_From%)
              i_To% = i_To% + 1
              i_From% = i_From% + 1
           ElseIf (A(i_From%) = 0) Then
              i_From% = i_From% + 1
           End If
       Loop
       n = i_To% - 1
End Sub
На выходе - массив "сжат", а в n - число ненулевых эл-тов. Ресайзируйте на здоровье!
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
23.09.2012, 11:03
немного не то
Цитата Сообщение от Catstail Посмотреть сообщение
а в n - число ненулевых эл-тов
Цитата Сообщение от megaban Посмотреть сообщение
удалив отрицательные элементы
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,738
Записей в блоге: 14
23.09.2012, 11:06
увы... Но дело поправимо:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub PressArr(A() As Integer, n As Integer)
      m% = UBound(A, 1)
      p% = LBound(A, 1)
      i_From% = p%
      i_To% = p%
      Do
           If i_From% > m% Then Exit Do
           If (A(i_From%) > 0) And (i_From% <> i_To%) Then  '::: поправим !!!
              A(i_To%) = A(i_From%)
              i_To% = i_To% + 1
              i_From% = i_From% + 1
           ElseIf (A(i_From%) < 0) Then  '::: поправим !!!
              i_From% = i_From% + 1
           End If
       Loop
       n = i_To% - 1
End Sub
теперь в n - количество неотрицательных элементов.
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
23.09.2012, 11:29
кажется, еще надо править
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,738
Записей в блоге: 14
23.09.2012, 13:59
Вот:

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
Sub PressArr(A() As Integer, n As Integer)
      m% = UBound(A, 1)
      p% = LBound(A, 1)
      i_From% = p%
      i_To% = p%
      Do
           If i_From% > m% Then Exit Do
           If (A(i_From%) >= 0) Then  
              If i_From% <> i_To% Then A(i_To%) = A(i_From%)
              i_To% = i_To% + 1
              i_From% = i_From% + 1
           ElseIf (A(i_From%) < 0) Then
              i_From% = i_From% + 1
           End If
       Loop
       n = i_To% - 1
End Sub
 
Sub Test()
Dim Z(-1 To 6) As Integer
 
    Z(-1) = 0
    Z(0) = 0
    Z(1) = -1
    Z(2) = 9
    Z(3) = -9
    Z(4) = 7
    Z(5) = -6
    Z(6) = 19
 
    PressArr Z(), k%
   
    For i% = -1 To k%
        Debug.Print i%; " "; Z(i%)
    Next i%
End Sub
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
23.09.2012, 16:53
Так красивее:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub PressArr(A() As Integer, n As Integer)
      m% = UBound(A, 1)
      p% = LBound(A, 1)
      i_From% = p%
      i_To% = p%
      Do Until i_From% > m% 'Так красивее
           If A(i_From%) >= 0 Then  
              If i_From% <> i_To% Then A(i_To%) = A(i_From%)
              i_To% = i_To% + 1
              i_From% = i_From% + 1
           ElseIf A(i_From%) < 0 Then
              i_From% = i_From% + 1
           End If
       Loop
       n = i_To% - 1
End Sub
С уважением, С++ падаван
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
23.09.2012, 23:46
и еще вариант
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
Private Sub Command1_Click()
Cls
n = 10
ReDim A(1 To n)
For i = 1 To n
A(i) = Int(Rnd * 11) - 5
Next i
 
pr A()
 
sm A(), 1, k
 
If k = 0 Then
 Print "{0}"
Else
 ReDim Preserve A(1 To k)
 pr A()
End If
 
End Sub
Sub pr(A())
For i = LBound(A) To UBound(A)
    Print A(i); " ";
Next i
Print
End Sub
 
Sub sm(A(), m, k)
If m > UBound(A) Then Exit Sub
If A(m) >= 0 Then
    k = k + 1: A(k) = A(m)
End If
sm A(), m + 1, k
End Sub
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,738
Записей в блоге: 14
24.09.2012, 15:20
Цитата Сообщение от Dragokas Посмотреть сообщение
Так красивее:
- согласен.

Добавлено через 1 минуту
Цитата Сообщение от Dragokas Посмотреть сообщение
С++ падаван
- что означает это слово?
0
24.09.2012, 22:03

Не по теме:

Это из фильма "Звездные войны", орден Джедаев и все такое...
Переводится как "ученик".

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.09.2012, 22:03
Помогаю со студенческими работами здесь

Сжать массив, удалив из него элементы
Доброго времени суток! Дан целочисленный одномерный массив из n элементов (1&lt;=n&lt;=1000) Сжать массив, удалив из него...

Сжать(сдвинуть элементы) массив, удалив из него все 0, и заполнить освободившиеся справа элементы значениями -1;
8. ***Сжать(сдвинуть элементы) массив, удалив из него все 0, и заполнить освободившиеся справа элементы значениями -1;

Массивы. Сжать массив, удалив нулевые элементы
Задан массив, содержащий несколько нулевых элементов. Сжать его, выбросив эти элементы.

Сжать массив, удалив из него все элементы
нужно сжать массив удалив из него все элементы модуль которых находится в интервале .освободившиеся в конце массива элементы заполнить...

Сжать массив, удалив из него все элементы
Сжать массив, удалив из него все элементы, модуль которых находится в интервале . Освободившиеся в конце массива элементы заполнить нулями.


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru