델파이 기초 다지기

반복문

문장을 반복해서 실행하는 반복문을 학습합니다. for, while, repeat 문과 Break, Continue 명령어를 익힐 수 있습니다.

반복문

일련의 문장을 반복적으로 실행하는 문법. 조건 또는 변수의 상태로 반복을 결정.

for 문

지정된 범위에서 명령을 반복한다.

for 반복변수 := 시작값 to 마지막값 do
begin
  명령문1;
  명령문2;
end;

for 반복변수 := 시작값 downto 마지막값 do
begin
  명령문1;
  명령문2;
end;

for I := 1 to 9 do
  Memo1.Lines.Add(IntToStr(I * 3)); // 3, 6, 9, ..., 27
  
for I := 9 downto 1 do
  Memo1.Lines.Add(IntToStr(I * 3)); // 27, 24, 21, ..., 3

for 문은 시작값 부터 마지막값까지 반복하며 명령문을 실행한다.
반복변수에는 시작값 부터 마지막값까지 반복하며 담기며, to 인경우 1씩 증가, downto인 경우 1씩 감소한다.
반복변수는 명령문에서 참조할 수 있다

for-in 문

데이터 컨테이너에 담긴 데이터 만큼 명령을 반복한다.

for 데이터변수 in 컨테이너 do
begin
  명령문1;
  명령문2;
end;

const
  IntArray: array[0..4] of Integer = (1, 2, 3, 4, 5);
var
  I, Val: Integer;
begin
  for I := 0 to Length(IntArray) - 1 do
  begin
    Val := IntArray[I];
    // Val에 대한 작업
  end;
  
  for Val in IntArray do
  begin
    // Val에 대한 작업
  end;
end;

데이터변수의 자료형은 컨테이너에 담긴 데이터의 자료형과 일치해야 한다.

컨테이너는 배열, 문자열, 집합, 컬렉션, 구조체 등을 사용할 수 있다.

while 문

조건을 만족하는 동안 명령을 반복한다.

while 조건식 do 
begin
  명령문1;
  명령문2;
  명령문3;
end;

Sum := 0;
I := 1;
while Sum < 100 do
begin
  Sum := Sum + I;
  Inc(I);
end;

 반복(Loop)이 시작되는 시점에 반복횟수를 알지 못하는 경우 사용.

조건식의 결과 값은 불린 자료형(True 또는 False)이어야 한다.
조건식의 결과 값이 True인 동안 명령문을 반복한다.

조건식과 명령문에서 사용하는 변수는 while문 전에 초기화해야 한다.
조건식을 변경하는 코드가 명령문에 없거나, 잘못 구현되었다면 명령문을 무한반복(무한루프)할 수 있으니 주의해야 한다.
위의 예제에서 I를 증가하는 코드(Inc(I);)가 없다면 I는 계속 1인 상태로 무한반복되고 프로그램이 동작하지 않게 된다.

repeat 문

명령을 실행하고, 조건을 만족하는 경우 반복을 종료한다.

repeat
  명령문1;
  명령문2;
  명령문3;
until 조건식;

명령문을 실행하고 조건식에서 반복을 종료할지 판단. 조건식의 결과 값이 True인 경우 repeat문 종료.
명령문이 최소한 1번은 실행된다는 것이 특징.

repeat...until 사이에 명령문 작성. begin..end 없이 사용해야 함을 주의할 것
일반적으로 명령문의 내용에 의해 조건식이 결정되는 경우 사용

Break;, Continue;

반복문을 중단(Break)하거나, 다음 반복으로 넘어간다.(Continue)

모든 반복문(for, while, repeat)에 적용된다.

Break;

// 예제 1
for I := 1 to 5 do
begin
  if I = 3 then
    Break;
  Memo1.Lines.Add(IntToStr(I));
end;
Memo1.Lines.Add('끝');

// 예제 2
for I := 0 to Memo1.Lines.Count - 1 do
begin
  if Memo1.Lines[I] = '' then
    Break;
  Memo2.Lines.Add(Memo1.Lines[I]);
end;

반복문에서 Break; 명령어를 만나면, 반복을 중단한다.

예제1에서 for 문은 1 부터 5까지 반복하며 Memo1에 한줄씩 숫자를 기록한다.
하지만, I = 3인 if 문에서 Break를 만나 for 문의 반복(begin..end)을 중단하고 for문 다음 코드를 실행한다.
결과적으로 메모에는 '1, 2, 끝'만 기록된다.

예제2에서 Memo1의 LInes에서 공백인 줄을 만나면 반복문을 중단한다.
즉, Memo1의 내용을 Memo2에 공백 전까지만 복사하는 내용이다.
(한줄씩 복사하다 공백을 만나면 중단한다.)

Continue;

// 예제 1
for I := 1 to 5 do
begin
  if I = 3 then
    Continue;
  Memo1.Lines.Add(IntToStr(I));
end;
Memo1.Lines.Add('끝');

// 예제 2
for I := 0 to Memo1.Lines.Count - 1 do
begin
  if Memo1.Lines[I] = '' then
    Continue;
  Memo2.Lines.Add(Memo1.Lines[I]);
end;

반복문에서 Continue; 명령어를 만나면, 다음 반복을 진행한다.

예제1에서 I=3인 if 문을 만나면 다음 반복을 진행한다.
즉, I=3인 경우 Continue 다음의 코드(3 출력)를 모두 무시하고 I=4인 반복을 진행한다.
결과적으로 메모에는 '1, 2, 4, 5, 끝'이 출력된다.

예제2에서 Memo1의 Lines에서 공백인 줄을 만나면 다음 반복을 진행한다.
즉, Memo1의 내용 중 공백인 줄을 제외하고 Memo2에 복사하는 내용이다.

댓글

댓글 본문