Eltávolítása több sort a táblázatban része, akkor a potenciális vevők

Első pillantásra, a feladat meglehetősen triviális - tudomásul ütemű végigjárjuk az összes sort, és törölni a felesleges:

I = 0 A TabChast.Kolichestvo () - 1 Ciklus
Ha TabChast [i] Ezután .Pometka
TabChast.Udalit (i);
ENDIF;
KonetsTsikla;

Valójában azonban van egy egész két probléma:

1) eltávolítása után a maradékot sorban minden sorban indexet eggyel eltolódnak visszafelé.

Eltávolítása után az i-edik sor i + első elveszi az i, és a ciklus folytatódik, és a következő iteráció fogjuk folyamat i + 1 sort (ex i + 2.).
Így egyrészt a ciklusváltozó már nem felel meg a sor számát, másrészt nem feldolgozott sort, kövesse a törölt!
A megoldás - megsértve az ajánlásokat a klasszikus programozási, hogy módosítsa a ciklusváltozó a hurok szerv:

I = 0 A TabChast.Kolichestvo () - 1 Ciklus
Ha TabChast [i] Ezután .Pometka
TabChast.Udalit (i);
i = i-1;
ENDIF;
KonetsTsikla;

2) eltávolítása után a maradékot vonalak sorok teljes száma csökken 1.

Úgy tűnik, hogy az így is kell lennie, mi a probléma? A probléma az, hogy az elején a ciklus 1C egyszer és tárolja az értéket az iteráció limit változó (TabChast.Kolichestvo () - 1), és átalakítja, hogy minden alkalommal, amikor visszatér a ciklus kezdetén. Amikor eltávolítja az összes szükséges vonalat, és eléri a táblázat vége, ciklus ismétléseket folytatódni fog, és repül meghaladó hibát index.
A megoldás - további vizsgálatok:

I = 0 A TabChast.Kolichestvo () - 1 Ciklus
Ha TabChast [i] Ezután .Pometka
TabChast.Udalit (i);
i = i-1;
ENDIF;
Ha i = TabChast.Kolichestvo () - 1 Akkor
megszakítani;
ENDIF;
KonetsTsikla;

Nos, ha még mindig zavar, hogy visszatérjen 1 a számláló a hurok változó, van egy lehetőség a ciklus „hosszú”:

i = 0;
Míg i<=ТабЧасть.Количество()-1 Цикл
Ha TabChast [i] Ezután .Pometka
TabChast.Udalit (i);
egyébként
i = i + 1;
ENDIF;
KonetsTsikla;