for 루프는 정해진 특정 코드를 정해진 횟수만큼 반복하는데 사용한다.
for (초기화; 조건식; 증감연산)
{
코드블록
}
초기화는 한번 발생하고 조건식이 참이면 코드블록을 실행한다. 반복 횟수를 결정하는 것은 증감연산식인데
1. 초기화
2. 조건식 -> 코드블록 -> 증감연산
에서 2번이 반복된다.
int main()
{
cout << "Welcome!\n";
cout << "--------\n";
for (int i = 0; i < 10; i++)
{
cout << "loop i : " << i << endl;
}
return 0;
}
for문의 추가기능
인덱스를 두개 이상 사용할 수 있다.
int main()
{
cout << "Welcome!\n";
cout << "--------\n";
for (int i = 1, j = 7; i <= 7; i++, j--)
{
cout << "loop i : " << i << " j : " << j << endl;
}
return 0;
}
for문으로 구구단 같은 것을 출력해보는게 원리를 이해하는데 도움이 된다. 구구단을 출력하기 위해서는 중첩(nested) for 문을 사용해야 한다.
함수로 구현하면 아래와 같다.
2단에서 9단까지, 각 단은 1부터 9까지 값을 증가시킨다.
구구단을 출력한 것이지만 i와 y값만 보면 2차원 행렬이다. 중첩 for문은 배열로 2차원 행렬을 만들 때도 사용할 수 있다.
void guguDan() {
for (int i = 2; i < 10; i++)
{
for (int j = 1; j < 10; j++)
{
cout << i << "x" << j << "=" << std::setw(2) << i * j << " | ";
}
cout << endl;
}
}
텍스트 출력 좌표를 사용해서 도형을 그릴 수 있다. 사실 x 축과 y 축의 길이가 다르기 때문에 가로 세로비가 완전한 도형은 아니지만 도형그리기는 어느 교재에나 나오는 기초 알고리즘 공부라고 보면 된다.
필자도 오래전에 도형그리기를 처음 보고 아찔했던 기억이 난다. 아무리 쉬운 문제도 처음 보는 사람에겐 어려운 일일 수 있으니 자신감을 가지고 해보는 게 중요하다. 프로그래밍의 대부분의 문제가 그렇다. 막상 해보면 아무렇지 않은데 신종 용어를 너무 남발하기 때문에 이해하기 어려워지는 경향이 있다.
용어 자체에 설명이 담겨 있는 경우도 있다 (self-explanatory)
아래 이미지 처럼 그리는 몇가지 도형그리기 예제를 첨부한다.
#include <iostream>
#include <iomanip>
using namespace std;
#define Line cout << "------------------" << endl
void printSquare(int size);
void printTriangle1(int height);
void printTriangle2(int height);
void printTriangle3(int height);
void printTriangle4(int height);
void printTriangle5(int height);
void printRectangle(int height);
void guguDan();
int main()
{
cout << "Welcome!\n";
Line;
printSquare(5);
Line;
printTriangle1(7);
Line;
printTriangle2(7);
Line;
printTriangle3(7);
Line;
printTriangle4(7);
Line;
printRectangle(7);
Line;
guguDan();
return 0;
}
void printSquare(int size)
{
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
cout << "*";
}
cout << endl;
}
}
void printTriangle1(int height)
{
for (int i = 0; i < height; i++)
{
for (int j = height; j > i; j--)
{
cout << "*";
}
cout << endl;
}
}
void printTriangle2(int height)
{
for (int i = 0; i < height; i++)
{
for (int j = -1; j < i; j++)
{
cout << "*";
}
cout << endl;
}
}
void printTriangle3(int height)
{
for (int i = 0; i < height; i++)
{
for (int j = -1; j < i; j++)
{
cout << "*";
}
cout << " ";
for (int j = height; j > i; j--)
{
cout << "*";
}
cout << endl;
}
}
void printTriangle4(int height)
{
for (int i = 0; i < height; i++)
{
for (int j = height; j > i; j--)
{
cout << "*";
}
cout << " ";
for (int j = -1; j < i; j++)
{
cout << "*";
}
cout << endl;
}
}
void printRectangle(int height)
{
for (int i = 0; i < height; i++)
{
for (int j = height; j > i; j--)
{
cout << " ";
}
cout << " ";
for (int j = -1; j < i; j++)
{
cout << "*";
}
cout << "";
for (int j = height; j > i; j--)
{
cout << "*";
}
cout << " ";
for (int j = -1; j < i; j++)
{
cout << " ";
}
cout << endl;
}
}