U E D R , A S I H C RSS

Yggdrasil/가��씨플플/2장

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


~cpp 
std::string::size_type//unsigned형� 멤버변수로, 담� 수 있는 최대 문� 갯수를 저장한다. 글�수� 알맞는 type으로 알아서 정�하는 듯.
  • 루프ì—�서 1ì�´ 아닌 0부터 시작하는 ì�´ìœ 
    • 프로그래ë°�ì�„ 처ì�Œ 배울 때 "프로그래ë°�ì�„ 하려면 숫ìž�를 ì…€ 때 1부터가 아니ë�¼ 0부터 세ë�¼"는 ë§�ì�„ 들어왔ì�„ 때, 단지 컴퓨터ì�˜ 숫ìž� 체계가 그러니까 막연히 그렇게 하는 것ì�¸ 줄 알았다.
    • 비대칭ì � 범위(반개범위)를 사용하므로, [0,5)ì�´ë©´ 루프가 5번 ë�ˆë‹¤ëŠ” 것ì�„ 쉽게 알 수 있다. 1,5ë©´ 5번 ë�ˆë‹¤ëŠ” 것ì�„ 파악하기 힘들다.
    • 루프 불변ì‹�ì�„ ì�´í•´í•˜ê¸° 쉽다.

연습문제

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 ì„ ì–¸ì�„ 괄호 안ì—�서 해주었으니 ë°–ì—�ì„  단ì•형으로 쓸 수 없다.


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:28
Processing time 0.0052 sec