powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / цикл. бесконечнось не предел(с)
37 сообщений из 37, показаны все 2 страниц
цикл. бесконечнось не предел(с)
    #37489180
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кусок из цикла:
Код: plaintext
1.
2.
3.
For z =  1  To mass.Count
'бла бла бла
Call mass.Remove(z)
next z
к примеру, mass.Count было равно 7, потом в цикле 1 переменная удалилась из цикла. нужно искать уже от 1 до 6, но цикл продолжает искать от 1 до 7 и выдаёт ошибку
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37489188
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
do
loop
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37489206
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

выполнять цикл пока не поменяется значение цикла? а потом?
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37489280
andandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroKonst_One,

выполнять цикл пока не поменяется значение цикла? а потом?

Посмотри наверное на это:
Код: plaintext
1.
2.
3.
4.
   Do While myNum >  10 
      myNum = myNum -  1 
      counter = counter +  1 
   Loop
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37489324
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero,

For z = 1 To mass.Count
'бла бла бла
Call mass.Remove(1)
next z
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37489515
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For z = mass.Count to 1 Step -1
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37489590
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
либо это не то, либо я не так объяснил задачу... вот более развёрнутая часть кода:
For z = 1 To mass.Count
For x = 0 To 6
If mass(z) = MSFlexGrid1.TextMatrix(x, 1) Then 'ошибка 5 инвалид процедуре кол о аргумент
If MSFlexGrid1.TextMatrix(x, 2) = "" Or MSFlexGrid1.TextMatrix(x, 2) = "?" Then
Call mass.Remove(z)
ooo = MSFlexGrid1.TextMatrix(x, 1)
Analiz
If popka = 0 Then
'баблабла код на пол страницы
end if
end if
end if
next x
next z
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37489592
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сори забыл оформить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
For z =  1  To mass.Count
    For x =  0  To  6 
       If mass(z) = MSFlexGrid1.TextMatrix(x,  1 ) Then 'ошибка 5 инвалид процедуре кол о аргумент
          If MSFlexGrid1.TextMatrix(x,  2 ) = "" Or MSFlexGrid1.TextMatrix(x,  2 ) = "?" Then
          Call mass.Remove(z)
          'блаблаблаблабла
             If popka =  0  Then
             'баблабла код на пол страницы
             end if
          end if
       end if
    next x
next z
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37489701
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для итерации по коллекции следует использовать ForEach.
Особенно (!!!) при удалении из неё. Потому как даже удаление "от хвоста" (for i = col.count-1 to 0 step -1) не гарантирует от проблем (связанных. впрочем, не с not found).
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37489780
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

спасяб, и правда, первые наброски кода работали именно при использовании фоич.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
For Each chlen In mass
    For x =  0  To  6 
        If chlen = MSFlexGrid1.TextMatrix(x,  1 ) Then
            If MSFlexGrid1.TextMatrix(x,  2 ) = "" Or MSFlexGrid1.TextMatrix(x,  2 ) = "?" Then
            Call mass.Remove(chlen.index) ' не помню, как правильно записать эту строчку, подскажите плз
          'блаблаблаблабла
             If popka =  0  Then
             'баблабла код на пол страницы
             end if
          end if
       end if
    next x
next chlen
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37489792
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaДля итерации по коллекции следует использовать ForEach.
Особенно (!!!) при удалении из неё. Потому как даже удаление "от хвоста" (for i = col.count-1 to 0 step -1) не гарантирует от проблем (связанных. впрочем, не с not found).
На, побалуйся. Потом придешь и объяснишь увиденное.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub a()
    Dim r As Range
    Debug.Print ActiveSheet.UsedRange.Rows.Count
    For Each r In ActiveSheet.UsedRange.Rows
        Debug.Print r.Address
        r.Delete
    Next
    Debug.Print ActiveSheet.UsedRange.Rows.Count
End Sub
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37489820
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как правильно записать это строчку? 11469660
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37489853
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНа, побалуйся. Потом придешь и объяснишь увиденное.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub a()
    Dim r As Range
    Debug.Print ActiveSheet.UsedRange.Rows.Count
    For Each r In ActiveSheet.UsedRange.Rows
        Debug.Print r.Address
        r.Delete
    Next
 ' Отут явный баг, т.к пропущена строка сохранения файла, а без этого используемый диапазон остаётся без изменений. Не смотря на количество удалений. :-Q
' Ещё может понадобится переоткрытие файла. Только это особенности реализации от микрософта.
' Если ты о совпадающем числе строк.(макрос не запускал, винда далеко, утром попробую)
    Debug.Print ActiveSheet.UsedRange.Rows.Count
End Sub
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37489856
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroкак правильно записать это строчку? 11469660
да как?
Сори , забыл оформить.( и тут смайлик бъющийся об стену )


какую строку?
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37490005
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl , кроме того, посмотрите повнимательнее на название раздела.
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37490237
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaДля итерации по коллекции следует использовать ForEach.
Особенно (!!!) при удалении из неё. Потому как даже удаление "от хвоста" (for i = col.count-1 to 0 step -1) не гарантирует от проблем (связанных. впрочем, не с not found).Это на каком таком уникальном опыте выведено столь бредовое утверждение?
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37490792
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин хватит пипками мериться. Идеальный вариант с использованием for each, т.к. первые наброски моего кода работали при их использовании. не помню, как я удалял из коллекции нужный элемент.
Код: plaintext
1.
2.
For Each chlen In mass
[color=red]Call chlen.Remove[/color]
next chlen
подскажите
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37491342
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе уже подсказали.
For Each при удалении использовать нельзя.
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37491364
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

эм... почему эт? никак нельзя удалить член коллекции зная его?... а как тада можно? про дулоп не очень догнал.
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37491375
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что For Each может работать только с коллекцией неизменной во время перебора.
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37491417
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

как тогда?
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37491419
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37492543
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да,
Код: plaintext
For z = mass.Count To  1  Step - 1 
работает, но некорректно. т.е. с каждым шагом он ищет в коллекции из n-1 элементов, но в ходе цикла могут быть удалены и 2, и 5, и 10 элементов, а могут быть вообще не удалены...
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37492617
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
удалось решить за счёт
Код: plaintext
For z = mass.Count To  1  Step y
где я сам присваиваю значение
Код: plaintext
y
во время цикла. пока что воюю с остальными сложностями циклов...
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37492703
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: BelowZero
> For z = mass.Count To 1 Step yгде я сам присваиваю значение


Пипец! (с)
Там обрыв! Туда нельзя! Но Вам можно. (с)
Чак Норис досчитал до бесконечности. Дважды.

Зачем тебе изменять значение шага цикла? Ты идеш в цикле с конца коллекции и за раз удаляешь ОДИН елемент, при следующей
итерации индекс будет меньше на один и в коллекции БУДЕТ елемент по этому индексу. Что не так? Показывай полный код, и
расказывай что нужно делать

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37492800
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroда,
Код: plaintext
For z = mass.Count To  1  Step - 1 
работает, но некорректно. т.е. с каждым шагом он ищет в коллекции из n-1 элементов, но в ходе цикла могут быть удалены и 2, и 5, и 10 элементов, а могут быть вообще не удалены...Он ничего не ищет, он совершает mass.Count итераций с обратным отсчетом. Перемення z инициализируется в начале цикла и потом ей наплевать, что там происходит с коллекцией. Цикл гарантированно пройдет до конца без ошибки, если не будешь удалять более одного элемента за итерацию.
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37493186
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,

сорь уходил на секцию, тока что освободился. вы правы, при запуске теперь vb... как бы правильнее выразиться... впадает в такой офиг, что отминить запуск можно только через ктрл+паузбрик. правда, возможно, не из-за этого... вот почти полный код
Код: plaintext
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.
For z = mass.Count To  1  Step m
m =  0 
    For x =  0  To  10 
        If MSFlexGrid1.TextMatrix(x,  1 ) = "" Then
        GoTo bl9tb
        End If
        If mass.Count =  0  Then
        GoTo bl9tb
        End If
        If mass(z) = MSFlexGrid1.TextMatrix(x,  1 ) Then
            If MSFlexGrid1.TextMatrix(x,  2 ) = "" Or MSFlexGrid1.TextMatrix(x,  2 ) = "?" Then
            Call mass.Remove(z)
            m = m -  1 
                If popka =  0  Then
                Text3.Text = Text3.Text & MSFlexGrid1.TextMatrix(x,  3 ) & vbCrLf
                For n =  3  To Len(MSFlexGrid1.TextMatrix(x,  3 ))
                sChar = Mid(MSFlexGrid1.TextMatrix(x,  3 ), n,  1 )
                Select Case Asc(sChar)
                Case  65  To  90 ,  97  To  122 ,  192  To  255 
                mass.Add sChar
                End Select
                Next n
                End If
                If popka =  1  Then
                Text3.Text = Text3.Text & MSFlexGrid1.TextMatrix(x,  4 ) & vbCrLf
                For n =  3  To Len(MSFlexGrid1.TextMatrix(x,  4 ))
                sChar = Mid(MSFlexGrid1.TextMatrix(x,  4 ), n,  1 )
                Select Case Asc(sChar)
                Case  65  To  90 ,  97  To  122 ,  192  To  255 
                mass.Add sChar
                End Select
                Next n
                End If
                If popka =  2  Then
                GoTo Perelet
                End If
            Else
            Call mass.Remove(z)
            m = m -  1 
            Text2.Text = Text2.Text & MSFlexGrid1.TextMatrix(x,  2 ) & vbCrLf
            End If
        End If
bl9tb:
    Next x
Next z
тут цикл в цикле, поэтому за один цикл может удалиться любое количество членов коллекции
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37493201
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

хм..значит, это тоже не подходит? печалька
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37493394
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero,

Я просил кроме кода, ещё и словами написать, что нужно сделать.

А по коду - Афигеть! Дайте две!
У тебя там и добавление, неоднократное! и удаление! И ты хочешь цикл для заранее определенного количества итераций! Вообщем расписывай словами что нужно сделать.
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37493544
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,

словами: есть две группы(коллекция и столбик таблицы). нужно их сравнить. если елементы в этих группах совпадут, то нужно выполнить определённые действия в зависимости от того, в какой строчке таблицы находится совпавший элемент. после этого удалить совпавший элемент из коллекции, добавить в него ещё несколько элементов(0-5) в зависимости от того, в какой строчке таблицы находится совпавший элемент. т.е. сравнить все элементы коллекции со всеми элементами таблицы. p/s если я правильно помню, раньше я использовал фоич, а вместо удаления юзал замену элемента колеекции на пустую строку. работало отлично, но прога совершала несколько лишних сравнений пустых элементов. учитывая масштаб работы, это несколько сотен тысяч лишних действий. буду благодарен за помощь
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37493646
Фотография Василий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero, вообще-то из коллекции не принято удалять элементы проходя по текущей коллекции. подход тут немного другой формируется коллекция элементов на удаление а уже потом проходя по коллекции элементов на удаление удаляют элементы из первоначальной коллекции. код на C#

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> collectionElements = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
            List<int> removeElements = new List<int>();
            foreach (int item in collectionElements)
                if ((item % 2) == 0) removeElements.Add(item);
            foreach (int item in removeElements)
                collectionElements.Remove(item);
        }
    }
}
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37493981
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий Викторович,

принцип понятен, но как решить поставленную задачу?) 11483002
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37494445
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получилось! работоспособный код написал за неделю, а улучшаю и доробатываю его уже пол года... чтобы удалять и добавлять элементы коллекции в этой коллекции, я использовал goto + end sub (мб end sub и не надо). т.е. удалял\добавлял элементы, выходил через goto в начало, ещё до цикла. таким образом обновлялось значение количества элементов. мб кому-нить пригодится
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37494452
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero, ну выложите проект, прикоснусь к прекрасному
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37494463
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

эм... т.е. проект? весь проект засекречен, говорю же, пол года пытаюсь сделать величайший искусственный разум... а насчёт темы:
Код: plaintext
:na4alo 
перед циклом,
Код: plaintext
goto na4alo 
в середине цикла после измывательством над элементами этого цикла
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37494468
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZero, вау величайший искусственный разум
Может не так
:na4alo
а наоборот
na4alo:
????
Сколько хоть стоить будет сие "величайший искусственный разум" ????
...
Рейтинг: 0 / 0
цикл. бесконечнось не предел(с)
    #37494475
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрю,

если я не свихнусь, пока буду исправлять многочисленные ошибки(лучше бы оставил так как есть. несколько тысяч строк, но зато работало, а теперь только тысяча, и ошибки в каждой строке) то планирую поступить по этой работе в институт. прога может сама думать. т.е. аналитически выбирать и комбинировать правильные пути решения исходя из данных. воть... другими слова - не просто сопоставлять данные, а логически сопоставлять данные) повторбсь, если до этого не свихнусь
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / цикл. бесконечнось не предел(с)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]