Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 48
1

Цикл: как работает цикл в цикле

19.09.2012, 21:37. Показов 5118. Ответов 6
Метки нет (Все метки)

Не могу понять как работает цикл в цикле
например:
Pascal
1
2
3
4
5
6
7
8
9
10
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 со всеми пустыми ячейками,вниз, до след заполненной. И то же самое проделать с следующей.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

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

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.09.2012, 21:37
Ответы с готовыми решениями:

Цикл в цикле
ДОбрый день, помогите решить задачу. Необходимо сравнить все значения из одной таблицы (датасет) со...

Цикл в цикле
Смотрите я отправил все листы на сервер, получил с них ID т.е. каждый лист имеет ID, ну грубо...

Цикл в цикле
Нужно проверить программку, вроде работает, но не высчитывает количество введенных чисел. Условие...

Цикл в цикле датасетов
Добрый день, не обновляется значение dataset.eof при переборе другого датасета. Покажу на примере ...

6
3941 / 1866 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
20.09.2012, 05:45 2
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
   NRow:= 8;
   NCol:= 1;
   repeat
       dir:= Excel.WorkBooks[1].WorkSheets[1].Cells[NRow+1,NCol];
       While (dir='') And (NRow<Excel.WorkBooks[1].WorkSheets[1].UsedRange.Rows.Count) Do
       //Будем выполнять объединение пока следующая строка пустая
       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;
         dir:= Excel.WorkBooks[1].WorkSheets[1].Cells[NRow+1,NCol]; //Для проверки следующей строки
      end;
      Inc(NRow);
   until NRow>Excel.WorkBooks[1].WorkSheets[1].UsedRange.Rows.Count-1;
Примерно так.
0
5451 / 2158 / 450
Регистрация: 20.11.2009
Сообщений: 7,209
Записей в блоге: 1
20.09.2012, 14:44 3
цикл в цикле

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

например
Delphi
1
2
3
4
5
6
7
for i := 1 to 10 do begin
  for j := 1 to 10 do begin
    WriteLn('Привет Мир')
  end;
  WriteLn;
end;
    ...
выполняется цикл с i, она равна сейчас 1, далее считаем цикл с j 10 раз подряд, выведет 10 раз подряд "Привет Мир", затем поставит переход на новую строку, сделает пробел, переход снова в цикл с i, она сейчас равна 2, далее цикл с j он выполнится, снова переход в i она уже будет 3.. и вот так далее

и вот получится выведется 10 раз по 10 "блоков", "Привет Мир"
0
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 48
21.09.2012, 20:06  [ТС] 4
Delphi
1
2
3
4
5
6
7
8
9
10
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?
0
3941 / 1866 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
21.09.2012, 20:23 5
Думаю так:
Delphi
1
2
3
4
5
6
  a_:=9;
  while a_ < Excel.WorkBooks[1].WorkSheets[1].UsedRange.Rows.Count-2 do
  If VarToStr(Excel.cells[a_,1]) = '' Then
  repeat
    Excel.Range[Excel.cells[a_-1,1],Excel.cells[a_,1]].merge;
  until VarToStr(Excel.cells[a_,1]) <> '' Else inc(a_);
Каждый раз нужно брать текущий размер таблицы - он же меняется при объединении строк. И при объединении, думаю, индекс не нужно наращивать. Если. например, первая и вторая строки объединились - то третья станет второй. Else - относится к If.
0
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 48
21.09.2012, 20:39  [ТС] 6
Project Project2.exe raised exception class EOleSysError
with message 'Ошибка'. Process stopped. Use Step or to continue.
((((
0
3941 / 1866 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
21.09.2012, 20:48 7
Если у тебя последняя обрабатываемая строка пустая - может из-за этого. Тогда нужно доделать:
Delphi
1
2
3
4
5
6
7
  a_:=9;
  while a_ < Excel.WorkBooks[1].WorkSheets[1].UsedRange.Rows.Count-2 do
  If VarToStr(Excel.cells[a_,1]) = '' Then
  repeat
    Excel.Range[Excel.cells[a_-1,1],Excel.cells[a_,1]].merge;
  until (a_ >= Excel.WorkBooks[1].WorkSheets[1].UsedRange.Rows.Count-2) Or (VarToStr(Excel.cells[a_,1]) <> '')
  Else inc(a_);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.09.2012, 20:48

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Создать цикл в цикле
Здравствуйте. пишу программу, столкнулась с такой проблемой: пытаюсь замострячить цикл в цикле. в...

Цикл в цикле, inc первого цикла не пашет?
Вобщем есть два цикла while и for, в цикле while inc почему-то не работает или работает не так как...

Странная ошибка, нельзя цикл в цикле?
sc_c:=500; while sc_c&gt;=500 do begin Edit58.text:=inttostr(random(600)); ...

Решил сделать игровой автомат сделал три лейбла и в них запихнул цикл из чисел. Как сделать что бы цикл остано
Решил сделать игровой автомат сделал три лейбла и в них запихнул цикл из чисел. Как сделать что бы...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.