• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Цикл В Цикле

  • Автор темы 123456789igor
  • Дата начала
1

123456789igor

Не могу понять как работает цикл в цикле
на пример
repeat
begin
lalalala
if что-то1<>100 then
begin
lalalala2
что-то1:=что-то1+1;
end
end
until что-то2<чего-то

Выполняется это так?
Заходим в цикл repeat делаем lalalala затем входим в условие if делаем lalalala2 затем будет выполняться if пока что-то1 не станет равным 100 и только потом перейдет на until так?

Вот наглядный пример с которым мучаюсь, у меня есть таблица в ней в ячейке(8,1) есть текст далее в каком-то, неизвестном, кол-ве ячеек вниз пусто и потом опять в одной ячейке что-то есть надо объединить ячейку 8,1 со всеми пустыми ячейками,вниз, до след заполненной. И то же самое проделать с следующей.
Код:
z:=Excel.WorkBooks[1].WorkSheets[1].UsedRange.Rows.Count-1;
a_:=8;
NRow:= a_;
NCol:= 1;
dir:= Excel.WorkBooks[1].WorkSheets[1].Cells[NRow,NCol];
repeat
begin
NCol:= 1;
If dir<>'' then
begin
Excel.WorkBooks[1].WorkSheets[1].Range[Excel.WorkBooks[1].WorkSheets[1].cells[NRow,NCol],Excel.WorkBooks[1].WorkSheets[1].cells[NRow+1,NCol]].merge;
//NRow:=NRow+1;
dir:= Excel.WorkBooks[1].WorkSheets[1].Cells[NRow+1,NCol];
end
//else
//NRow:=NRow+2;
end;
until NRow<z;

Объединяется только ячейка 8,1 и 9,1
 
1

123456789igor

про цикл в цикле это я погорячится так как if не цикл, но все равно мне не понятно как бы выполнялось следующее:
если в while вложен for как работать все будетработать? выполнит while затем все варианты for а потом вернется к while? что то я запутался
 
C

Cambur

ну.. всё очень просто
-
-
-
for i := 1 to 10 do begin
- тут i поциклится от 1 до 10 а j не определенно
-
for j := 1 to 10 do begin
- тут i определенно и не меняется, j проциклится от 1 до 10
-
end // всегда будет j
-
- тут j опять не определенно, хотя вполне можно ориентироваться на то что будет равно верхнему значению цикла
end // i

то бишь, внутри вложенного цикла забудь про существование внешнего
и переменную внешнего цикла считай за константу
 
1

123456789igor

Код:
a_:=9;
z:=Excel.WorkBooks[1].WorkSheets[1].UsedRange.Rows.Count-2;
while a_ < z do
begin
repeat
Excel.Range[Excel.cells[a_-1,1],Excel.cells[a_,1]].merge;
inc(a_);
until VarToStr(Excel.cells[a_,1]) <> '';
break;
end;
Сделал так, но объединяет только с 9 по 23 строку, 24 не пустая, а дальше опять идут пустые. Как изменить код, что бы объединяло дальше с 24?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!