Цикл В Цикле

Тема в разделе "Delphi - Система", создана пользователем 123456789igor, 19 сен 2012.

  1. 123456789igor

    123456789igor Active Member

    Регистрация:
    12 янв 2011
    Сообщения:
    29
    Симпатии:
    0
    Не могу понять как работает цикл в цикле
    на пример
    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 со всеми пустыми ячейками,вниз, до след заполненной. И то же самое проделать с следующей.
    Код (Text):
    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
     
  2. 123456789igor

    123456789igor Active Member

    Регистрация:
    12 янв 2011
    Сообщения:
    29
    Симпатии:
    0
    про цикл в цикле это я погорячится так как if не цикл, но все равно мне не понятно как бы выполнялось следующее:
    если в while вложен for как работать все будетработать? выполнит while затем все варианты for а потом вернется к while? что то я запутался
     
  3. Cambur

    Cambur Active Member

    Регистрация:
    20 июн 2010
    Сообщения:
    27
    Симпатии:
    0
    ну.. всё очень просто
    -
    -
    -
    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

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

    123456789igor Active Member

    Регистрация:
    12 янв 2011
    Сообщения:
    29
    Симпатии:
    0
    Код (Delphi):
    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?
     
Загрузка...

Поделиться этой страницей