반복문
동일한 코드를 연속적으로 반복하는 구문이다. 크게 for문과 while문이 있다.
반복문 - for
for문은 초기값, 조건, 증감 이라는 3가지 요소로 반복한다. 반복적인 데이터나 시퀀스를 다룰 때 많이 사용 한다.
for 임시상수 in 범위 {
실행구문
}
for i in 10...20{ //for 반복시킬상수 in 범위
print(i)
}
print("--------------------")
let r1 = 20...30 //범위를 상수에 담아서 사용할 수 있다.
for i in r1{
print(i)
}
범위연산자를 통해 for - in 문을 사용하면 증감은 +1로 지정된다.
증감과 범위를 따로 지정하고 싶다면 범위연산자 대신 stride()를 사용하면 된다.
for 임시상수 in stride(from:초기값, through(혹은 to): 조건, by:증감){
실행구문
}
through와 to의 차이점은 through는 조건값 포함, to는 조건값 미포함이다.
for i in stride(from: 50, to: 20, by: -3){ //50부터 20까지 3씩 감소 20미포함
print(i)
}
print("--------------------")
for i in stride(from: 50, through: 20, by: -3){ //50부터 20까지 3씩 감소 20포함
print(i) //i = 12 -> i는 내부 상수이다. 값 변경 불가. + 외부에서 호출 불가
}
for - in 문 이용하여 결과 구하기
중요한 점은 for문의 임시상수 i는 for문 밖에서 호출할 수 없다는 점이다. 따라서 for문에서 이루어지는 계산을 밖으로 가져오고 싶다면 for문 밖에서 선언된 변수를 사용하여 대입해야 한다는 점이다.
var tot = 0
for i in 1...100{
tot += i
print(i,":",tot)
}
print("1부터 100까지의 합계 : \(tot)")
//1부터 100까지 짝수들의 합 구하기
var sum = 0
for i in 1...100{
if i%2 == 0{
sum += i
}
}
print("1부터 100까지의 짝수 합계: \(sum)")
print("--------------------")
sum = 0
for i in stride(from: 0, through: 100, by: 2){ //0부터 100까지 2씩 증가. 100포함
sum += i
}
print("1부터 100까지의 짝수 합계: \(sum)")
이렇게 여러가지 방법으로 같은 결과를 출력할 수 있다.
중첩 for문 - 구구단
for문은 중첩해서 사용이 가능하다. 이렇게 중첩된 반복문의 대표적인 예시가 구구단이다.
print("구구단(1)---------------------------")
for i in 2...9{
print("\(i)단")
for k in 1...9{
print("\(i) * \(k) = \(i*k)")
}
print("\n")
}
임시상수 k가 있는 for문의 입장에서는 i가 외부에서 선언된 상수이다. 즉 k가 있는 for문에서는 임시상수 i를 호출할 수 있다는 얘기이다. 이 점을 이용하여 구구단을 작성할 수 있다.
print("구구단(2)---------------------------")
for i in 2...9{
print("\(i)단", terminator: "\t\t") //1단 2단 3단 ....
}
print()
for k in 1...9{
for i in 2...9{
print("\(i)*\(k)=\(i*k)", terminator: "\t") //2*1=2 3*1=3 4*1=4...
}
print()
}
구구단을 세로로 출력하는 코드이다. 간단하게 i와 k의 위치를 바꾸어 주면 출력이 가능하다. 콘솔은 좌에서 우로 출력한다는 점을 잘 생각하고 코드를 작성하자.
중첩 for문 - 별 그리기
for문의 다음으로 대표적인 예시가 별을 이용하여 도형그리기이다.
print("별그리기(1)---------------------------")
for line in 0...4{ //별을 몇줄을 그을지.
for star in 0...line{ //별을 몇개를 그릴지.
print("*",terminator:"")
}
print("")
}
line이 증가함에 따라 한줄에 *을 그리는 횟수가 증가하여 삼각형이 그려진다.
print("별그리기(2)---------------------------")
for line in 0...4 { //별을 몇줄을 그릴지
for star in line...4{ //별을 몇개를 그릴지
print("*",terminator:"")
}
print("")
}
for line in stride(from: 4, through: 0, by: -1){ //4부터 0까지 1씩 감소. 0포함
for star in stride(from: line, through: 0, by: -1){ //별을 몇개를 그릴지
print("*",terminator:"")
}
print("")
}
이번에는 하나는 범위연산자, 하나는 stride()를 이용하여 역삼각형을 그렸다.
두 코드 마찬가지로 line이 증가 혹은 감소 함에 따라 *을 그리는 횟수가 점점 감소하는 코드이다.
print("별그리기(3)---------------------------")
for line in 0...4 { //별을 몇줄을 그릴지
for star in line...4{ //별을 그리기 전에 공백을 몇개를 그릴지
print(" ",terminator:"")
}
for star in 0...line{ //별을 몇개를 그릴지
print("*",terminator:"")
}
print()
}
for line in 0...4{ //별을 몇줄을 그릴지
for star in stride(from: 4-line, through: 0, by: -1){
//별을 그리기 전에 공백을 몇개를 그릴지
print(" ",terminator: "")
}
for star in 0...line{ //별을 몇개를 그릴지
print("*",terminator:"")
}
print("")
}
앞에 나온 코드를 합치면서 *대신 공백을 출력하면 처음에 그린 삼각형의 반전된 모습을 그릴 수 있다.
'iOS > TJ' 카테고리의 다른 글
day07_array (0) | 2021.06.02 |
---|---|
day06_control flow_loop (0) | 2021.05.27 |
day04_control flow_conditional (0) | 2021.05.22 |
day03_operator, casting (0) | 2021.05.18 |
day02_var (0) | 2021.05.18 |