<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=AcceleratedC%2B%2B%2FChapter2</id>
	<title>AcceleratedC++/Chapter2 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=AcceleratedC%2B%2B%2FChapter2"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=AcceleratedC%2B%2B/Chapter2&amp;action=history"/>
	<updated>2026-05-14T12:36:48Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=AcceleratedC%2B%2B/Chapter2&amp;diff=27495&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:22, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=AcceleratedC%2B%2B/Chapter2&amp;diff=27495&amp;oldid=prev"/>
		<updated>2021-02-07T05:22:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[AcceleratedC++/Chapter1]]&lt;br /&gt;
| [[AcceleratedC++/Chapter3]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Chapter 2 ==&lt;br /&gt;
=== 중요 소스 ===&lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 // say what standard-library names we use&lt;br /&gt;
 using std::cin;&lt;br /&gt;
 using std::cout;&lt;br /&gt;
 using std::string;&lt;br /&gt;
 using std::endl;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
 	// ask for person&amp;#039;s name&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; &amp;quot;Please enter your first name: &amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 	// read the name&lt;br /&gt;
 	string name;&lt;br /&gt;
 	cin &amp;amp;gt;&amp;amp;gt; name;&lt;br /&gt;
 	&lt;br /&gt;
 	// build the message that we intend to write&lt;br /&gt;
 	const string greeting = &amp;quot;Hello, &amp;quot; + name + &amp;quot;!&amp;quot;;&lt;br /&gt;
 	&lt;br /&gt;
 	// the number of blacks surrounding the greeting&lt;br /&gt;
 	const int pad = 1;&lt;br /&gt;
 &lt;br /&gt;
 	// the number of rows and columns to write&lt;br /&gt;
 	const int rows = pad * 2 + 3;&lt;br /&gt;
 	const string::size_type cols = greeting.size() + pad * 2 + 2;&lt;br /&gt;
 &lt;br /&gt;
 	// write blank line to separate the output from the input&lt;br /&gt;
 	cout &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 &lt;br /&gt;
 	// write rows &lt;br /&gt;
 	// invariant: we have written r rows so far&lt;br /&gt;
 	for (int r = 0; r != rows ; ++r) {&lt;br /&gt;
 		string::size_type c = 0;&lt;br /&gt;
 &lt;br /&gt;
 		// invariant: we have written c&lt;br /&gt;
 		while (c != cols) {&lt;br /&gt;
 &lt;br /&gt;
 			// is it time to write the greeting?&lt;br /&gt;
 			if (r == pad + 1 &amp;amp;amp;&amp;amp;amp; c == pad + 1) {&lt;br /&gt;
 				cout &amp;amp;lt;&amp;amp;lt; greeting;&lt;br /&gt;
 				c += greeting.size();&lt;br /&gt;
 			} else {&lt;br /&gt;
 &lt;br /&gt;
 				// are we on the border?&lt;br /&gt;
 				if (r == 0 || r == rows - 1 ||&lt;br /&gt;
 					c == 0 || c == cols - 1)&lt;br /&gt;
 					cout &amp;amp;lt;&amp;amp;lt; &amp;quot;*&amp;quot;;&lt;br /&gt;
 				else&lt;br /&gt;
 					cout &amp;amp;lt;&amp;amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
 				++c;&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt; endl;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
----&lt;br /&gt;
=== 질문 ===&lt;br /&gt;
 책에 보면 (21페이지),&lt;br /&gt;
 // invariant : we have written r rows so far&lt;br /&gt;
 int r = 0;&lt;br /&gt;
 // setting r to 0 makes the invariant true&lt;br /&gt;
 while( r != rows )&lt;br /&gt;
 {&lt;br /&gt;
  // we can assume that the invariant is true here&lt;br /&gt;
  // writing a row of output makes the invariant false&lt;br /&gt;
  std::cout &amp;amp;lt;&amp;amp;lt; std::endl;&lt;br /&gt;
  // incrementing r makes the invariant true again&lt;br /&gt;
  ++r;&lt;br /&gt;
 }&lt;br /&gt;
 // we can conclude that the invariant is true here&lt;br /&gt;
  &lt;br /&gt;
 코드의 마지막 부분에서 invariant 가 다시 true 로 되는것일까요.? invariant 가 무엇인지 아직 개념이 잡히지 안아서. -_-a - 임인택&lt;br /&gt;
    저는 이제서야 AcceleratedC++을 보고 있는데요. loop invariant란 r번 수행했다라는 것을 말하지 않을까요?&lt;br /&gt;
    r이 처음에 0이니까 while에 진입하는 시점에는 cout을 0번 수행했을테고 따라서 r = 0, 수행횟수 = 0 따라서 불변식은 참&lt;br /&gt;
    r이 0이고 cout을 한번 수행하면 r = 0, 수행횟수 = 1 따라서 불변식 거짓&lt;br /&gt;
    while의 마지막 전에 r을 1 증가시키므로... r = 1, 수행횟수 = 1 따라서 불변식 참&lt;br /&gt;
    따라서 while의 조건식 비교에서도 r = 1, 수행횟수 =1 따라서 불변식 참...&lt;br /&gt;
    또 cout 을 수행하게 된다면 r = 1, 수행횟수 = 2니까 불변식 거짓...&lt;br /&gt;
    예전에 http://www.pragmaticprogrammer.com/ppllc/papers/1998_05.html 에서 invariants라는 말이 나왔었는데 같은 개념으로 생각하면 될려나 ㅡ,.ㅡ; --[[Benghun]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
어째서 C의 [[루프는0부터？]] 인지... 간단한 대답이 나와 있더군요. - [[톱아보다]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[AcceleratedC++]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>