2장 ¶
잘 모르ë�˜ 용어, ê°œë…�ì •ë¦¬ ¶
- 블ë¡�: 중괄호로 ê°�싸ì�¸ ì—°ì†�ì �ì�¸ 구문들
- 루프불변ì‹�(loop invariant): while문ì�´ ê·¸ ì¡°ê±´ì‹�ì�„ 검사하는 매 경우ì—� 대하여 ì°¸ì�¼ 것ì�´ë�¼ê³ ê°€ì •í•˜ëŠ” ì†�성. 처ì�Œì—� ì�´ê±¸ ë³´ê³ , ì�´ëŸ° ê°œë…�ë�„ 있었ëƒ�ê³ ìƒ�ê°�í–ˆì�Œ. 루프불변ì‹�ì�€ 코드는 ì•„ë‹ˆê³ ì£¼ì„�ì—� 해당하며, while문ì�´ ì§„í–‰ë�˜ë©´ì„œ while문ì�˜ ì œì�¼ 처ì�Œê³¼ ë��ì—�서 루프ì�˜ ë‚´ìš©ì�´ ì�˜ë�„한 대로 ë�Œì•„ê°„ 건지를 ì •ì�˜í•œ 문장ì�´ë‹¤.(ë§�로 설명하기 ì• ë§¤í•œ 듯...) 하여튼 ì�´ê²ƒì�„ 쓰는 ì�´ìœ 는 루프문ì�„ ì œëŒ€ë¡œ 설계하기 위해서. 아래ì�˜ 코드는, ì±…ì—� 있는 코드로, 불변ì‹�ì�˜ 예ì�´ë‹¤.
~cpp
//불변ì‹�: 지금까지 rê°œì�˜ í–‰ì�„ ì¶œë ¥í•¨
int r=0;
//rì�„ 0으로 세팅하면 불변ì‹�ì�„ 참으로 ë§Œë“ ë‹¤
while(r!=rows)
{
//여기ì—�서 불변ì‹�ì�´ ì°¸ì�´ë�¼ê³ ê°€ì •í• ìˆ˜ 있다
//한행ì�„ ì¶œë ¥í•˜ë©´ 불변ì‹�ì�´ ê±°ì§“ì�´ ë�œë‹¤(바로 아랫줄)
std::cout<<std::endl;
//rì�„ ì¦�가시키면 불변ì‹�ì�„ 다시 참으로 ë§Œë“ ë‹¤
++r;
}
//여기서 불변ì‹�ì�´ ì°¸ì�´ë�¼ê³ í™•ì‹ í• ìˆ˜ 있다
- 단ë�½í�‰ê°€(short-circuit): 그러니까 if(a==0||b==0){...}ì—�서 왼쪽ì�˜ a==0ì�´ë©´ b==0ì�¸ì§€ëŠ” ë³´ì§€ë�„ ì•Šê³ ê´„í˜¸ 안ì�„ 실행한다는 뜻. ìž�ë°”ì—�ì„ ||기호와 |기호를 구분하ë�˜ 것 같았다. 아마 ì „ìž�는 ì „ë¶€ í�‰ê°€, 후ìž�는 단ë�½í�‰ê°€ì˜€ë�˜ 것 같다.
- 복합대입연산�: �름� 복잡해서 무슨 ��가 했는�, a+=b처럼, a=a+b를 요약해서 쓰는 형태.
- 반개범위: 루프ì�˜ 범위를 ì„¤ì •í• ë•Œ, for(i=0;i<3;i++)처럼, 시작ì�¸ 0ì�€ í�¬í•¨í•˜ë‚˜ 3ì�€ í�¬í•¨í•˜ì§€ ì•Šê³ 2ì—�서 ë��난다. ì�´ê²ƒì�„ [0,3)으로 표현하는ë�°, 3ì�€ 루프 범위ì—� 표현ë�˜ì§€ 않는 "ë��ì�„ 벗어난 ê°’"ì�´ë‹¤.
í�´ëž˜ìФ string ¶
- 1장ì—�서 ë°°ìš´ string í�´ëž˜ìФì—� ì¶”ê°€í• ë‚´ìš©. SeeAlso Yggdrasil/ê°€ì†�ë�œì”¨í”Œí”Œ/1장
~cpp std::string::size_type//unsigned형ì�˜ 멤버변수로, ë‹´ì�„ 수 있는 최대 문ìž� 갯수를 ì €ìž¥í•œë‹¤. 글ìž�수ì—� 알맞는 type으로 알아서 ì •ì�˜í•˜ëŠ” 듯.
- 루프ì—�서 1ì�´ 아닌 0부터 시작하는 ì�´ìœ
- 프로그래ë°�ì�„ 처ì�Œ 배울 때 "프로그래ë°�ì�„ í•˜ë ¤ë©´ 숫ìž�를 ì…€ 때 1부터가 아니ë�¼ 0부터 세ë�¼"는 ë§�ì�„ 들어왔ì�„ 때, 단지 컴퓨터ì�˜ 숫ìž� 체계가 그러니까 막연히 ê·¸ë ‡ê²Œ 하는 것ì�¸ 줄 알았다.
- 비대ì¹ì � 범위(반개범위)를 사용하므로, [0,5)ì�´ë©´ 루프가 5번 ë�ˆë‹¤ëŠ” 것ì�„ 쉽게 알 수 있다. 1,5ë©´ 5번 ë�ˆë‹¤ëŠ” 것ì�„ 파악하기 힘들다.
- 루프 불변�� �해하기 쉽다.
- 프로그래ë°�ì�„ 처ì�Œ 배울 때 "프로그래ë°�ì�„ í•˜ë ¤ë©´ 숫ìž�를 ì…€ 때 1부터가 아니ë�¼ 0부터 세ë�¼"는 ë§�ì�„ 들어왔ì�„ 때, 단지 컴퓨터ì�˜ 숫ìž� 체계가 그러니까 막연히 ê·¸ë ‡ê²Œ 하는 것ì�¸ 줄 알았다.
ì—°ìŠµë¬¸ì œ ¶
2-1 ¶
- pad를 0으로 초기화하면 �다.
2-2 ¶
- pad를 가로, 세로� �� 다른 변수로 분리시킨다. 혹�, rows, cols 초기화�� 변화시킨다.
2-3 ¶
~cpp
#include<iostream>
#include<string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
int pad_rows, pad_cols;
cout<<"Please input blank of rows and cols:";
cin>>pad_rows;
cin>>pad_cols;
cout<<"Please enter your first name: ";
string name;
cin>>name;
const string greeting="Hello, "+name+"!";
const int rows=pad_rows*2+3;
const string::size_type cols=greeting.size()+pad_cols*2+2;
cout<<endl;
for(int r=0;r!=rows;++r)
{
string::size_type c=0;
while(c!=cols)
{
if(r==pad_rows+1&&c==pad_cols+1)
{
cout<<greeting;
c+=greeting.size();
}
else
{
if(r==0||r==rows-1||c==0||c==cols-1)
cout<<"*";
else
cout<<" ";
++c;
}
}
cout<<endl;
}
return 0;
}
2-6 ¶
- 1부터 10ì�„ ê°� 줄ì—� ì¶œë ¥í•œë‹¤.
2-7 ¶
- for(int i=10;i>-6;i--) std::cout<
2-8 ¶
~cpp
#include<iostream>
#include<string>
int main()
{
int sum=1;
for(int i=1;i<10;i++)
sum*=i;
std::cout<<sum;
return 0;
}
2-10 ¶
- using std::cout ì„ ì–¸ì�„ 괄호 안ì—�서 해주었으니 ë°–ì—�ì„ ë‹¨ì¶•í˜•ìœ¼ë¡œ 쓸 수 없다.










