100% found this document useful (2 votes)
145 views

An Introduction to Programming through C++ Abhiram G. Ranade all chapter instant download

Abhiram

Uploaded by

seviersjonni
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
145 views

An Introduction to Programming through C++ Abhiram G. Ranade all chapter instant download

Abhiram

Uploaded by

seviersjonni
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 51

Download the Full Version of ebook for Fast Typing at ebookmass.

com

An Introduction to Programming through C++ Abhiram


G. Ranade

https://ebookmass.com/product/an-introduction-to-
programming-through-c-abhiram-g-ranade/

OR CLICK BUTTON

DOWNLOAD NOW

Download More ebook Instantly Today - Get Yours Now at ebookmass.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

An Introduction to Parallel Programming 2. Edition Pacheco

https://ebookmass.com/product/an-introduction-to-parallel-
programming-2-edition-pacheco/

ebookmass.com

Introduction to Java Through Game Development: Learn Java


Programming Skills by Working with Video Games 1st Edition
Victor G. Brusca
https://ebookmass.com/product/introduction-to-java-through-game-
development-learn-java-programming-skills-by-working-with-video-
games-1st-edition-victor-g-brusca/
ebookmass.com

An Introduction to Parallel Programming. Second Edition


Peter S. Pacheco

https://ebookmass.com/product/an-introduction-to-parallel-programming-
second-edition-peter-s-pacheco/

ebookmass.com

Gateways to Democracy: An Introduction to American


Government John G. Geer

https://ebookmass.com/product/gateways-to-democracy-an-introduction-
to-american-government-john-g-geer/

ebookmass.com
Modern C++ for Absolute Beginners: A Friendly Introduction
to the C++ Programming Language and C++11 to C++23
Standards, 2nd Edition Slobodan Dmitrovi■
https://ebookmass.com/product/modern-c-for-absolute-beginners-a-
friendly-introduction-to-the-c-programming-language-
and-c11-to-c23-standards-2nd-edition-slobodan-dmitrovic/
ebookmass.com

Modern C for Absolute Beginners: A Friendly Introduction


to the C Programming Language 2nd Edition Slobodan
Dmitrovi■
https://ebookmass.com/product/modern-c-for-absolute-beginners-a-
friendly-introduction-to-the-c-programming-language-2nd-edition-
slobodan-dmitrovic/
ebookmass.com

C Programming Language: C PROGRAMMING LANG _p2 2nd


Edition, (Ebook PDF)

https://ebookmass.com/product/c-programming-language-c-programming-
lang-_p2-2nd-edition-ebook-pdf/

ebookmass.com

Introduction to Java Programming, Comprehensive Version Y.


Daniel Liang

https://ebookmass.com/product/introduction-to-java-programming-
comprehensive-version-y-daniel-liang/

ebookmass.com

Through the Lens of Anthropology: An Introduction to Human


Evolution and Culture 1st Edition, (Ebook PDF)

https://ebookmass.com/product/through-the-lens-of-anthropology-an-
introduction-to-human-evolution-and-culture-1st-edition-ebook-pdf/

ebookmass.com
An Introdu tion to Programming through C++
Abhiram Ranade

Do not distribute

Abhiram Ranade, 2013


Contents

Prefa e 14
0.1 Graphi s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
0.2 First day/ rst month blues . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
0.3 Obje t oriented programming . . . . . . . . . . . . . . . . . . . . . . . . . . 17
0.4 Fitting the book into a urri ulum . . . . . . . . . . . . . . . . . . . . . . . 17
1 Introdu tion 18
1.1 A simple program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.1.1 Exe uting the program . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.2 Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.2.1 Exe ution order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.3 Repeating a blo k of ommands . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3.1 Drawing any regular polygon . . . . . . . . . . . . . . . . . . . . . . 22
1.3.2 Repeat within a repeat . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.4 Some useful turtle ommands . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.5 Numeri al fun tions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.6 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.7 Computation without graphi s . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.8 Con luding Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.8.1 Graphi s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.8.2 A note regarding the exer ises . . . . . . . . . . . . . . . . . . . . . . 29
1.9 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2 A bird's eye view 31
2.1 Problem solving using omputers . . . . . . . . . . . . . . . . . . . . . . . . 31
2.1.1 Algorithms and programs . . . . . . . . . . . . . . . . . . . . . . . . 33
2.2 Basi prin iples of digital ir uits . . . . . . . . . . . . . . . . . . . . . . . . 34
2.3 Number representation formats . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.3.1 Unsigned integer representation . . . . . . . . . . . . . . . . . . . . . 35
2.3.2 Signed integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.3.3 Floating point representations . . . . . . . . . . . . . . . . . . . . . . 36
2.4 Organization of a omputer . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.5 Main memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.5.1 Addresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.5.2 Ports and operations . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

1
Abhiram Ranade, 2013. Do not distribute 2
2.6 The arithmeti unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.7 Input-Output Devi es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.7.1 Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.7.2 Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.7.3 Disks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.7.4 Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.8 The Control Unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.8.1 Control Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.9 High level programming languages . . . . . . . . . . . . . . . . . . . . . . . . 44
2.10 Con luding Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.11 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3 Numbers 46
3.1 Variables and data types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.1.1 Identi ers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.1.2 Literals and variable initialization . . . . . . . . . . . . . . . . . . . . 49
3.1.3 The onst keyword . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.1.4 Reading data into a variable . . . . . . . . . . . . . . . . . . . . . . . 51
3.1.5 Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.1.6 Exa t representational parameters . . . . . . . . . . . . . . . . . . . . 52
3.2 Arithmeti and assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.2.1 Integer division and the modulo operator % . . . . . . . . . . . . . . . 54
3.2.2 Subtleties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.2.3 Over ow and arithmeti errors . . . . . . . . . . . . . . . . . . . . . . 56
3.2.4 In nity and not a number . . . . . . . . . . . . . . . . . . . . . . . . 57
3.2.5 Expli it type onversion . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.2.6 Assignment expression . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.3 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.4 Assignment with repeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.4.1 Programming Idioms . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.4.2 Combining sequen e generation and a umulation . . . . . . . . . . . 62
3.5 Some operators inspired by the idioms . . . . . . . . . . . . . . . . . . . . . 62
3.5.1 In rement and de rement operators . . . . . . . . . . . . . . . . . . . 63
3.5.2 Compound assignment operators . . . . . . . . . . . . . . . . . . . . 63
3.6 Blo ks and variable de nitions . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.6.1 Blo k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.6.2 General prin iple 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.6.3 General prin iple 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.7 Con luding remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.8 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4 A program design example 71
4.1 Spe i ation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.1.1 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.2 Program design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Abhiram Ranade, 2013. Do not distribute 3
4.2.1 Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.2.2 Corre tness Proof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.2.3 Invariants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.3 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.4 Comments in the ode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.5 Con luding remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.5.1 A note on programming exer ises . . . . . . . . . . . . . . . . . . . . 78
4.6 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5 Simple pp graphi s 80
5.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.1.1 y axis goes downward! . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.2 Multiple Turtles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.3 Other shapes besides turtles . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.3.1 Cir les . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.3.2 Re tangles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.3.3 Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.3.4 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.4 Commands allowed on shapes . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.4.1 Rotation in radians . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.4.2 Tra king a shape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.4.3 Imprinting on the anvas . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.4.4 Resetting a shape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.5 Cli king on the anvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.6 Proje tile Motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
5.7 Best t straight line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.8 Con luding Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.9 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6 Conditional Exe ution 91
6.1 The If statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.2 Blo ks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.3 Other forms of the if statement . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.4 A di erent turtle ontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.4.1 \Buttons" on the anvas . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.5 The swit h statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
6.6 Conditional Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.7 Logi al Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.7.1 Reasoning about logi al data . . . . . . . . . . . . . . . . . . . . . . 103
6.7.2 Determining whether a number is prime . . . . . . . . . . . . . . . . 104
6.8 Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
6.9 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Abhiram Ranade, 2013. Do not distribute 4
7 Loops 110
7.1 The while statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
7.1.1 Counting the number of digits . . . . . . . . . . . . . . . . . . . . . . 112
7.1.2 Mark averaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
7.2 The break statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7.3 The ontinue statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
7.4 The do while statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
7.5 The for statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
7.5.1 Variables de ned in initialization . . . . . . . . . . . . . . . . . . 120
7.5.2 Break and ontinue . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
7.5.3 Style issue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
7.5.4 Determining if a number is prime . . . . . . . . . . . . . . . . . . . . 121
7.6 Un ommon ways of using for . . . . . . . . . . . . . . . . . . . . . . . . . . 121
7.6.1 Comma separated assignments . . . . . . . . . . . . . . . . . . . . . . 122
7.6.2 Input in initialization and update . . . . . . . . . . . . . . . . . 122
7.7 The Greatest Common Divisor . . . . . . . . . . . . . . . . . . . . . . . . . . 123
7.8 Corre tness of looping programs . . . . . . . . . . . . . . . . . . . . . . . . . 124
7.8.1 Loop Invariant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
7.8.2 Potential . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
7.8.3 Corre tness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
7.8.4 Additional observations regarding the GCD program . . . . . . . . . 126
7.8.5 Corre tness of other programs . . . . . . . . . . . . . . . . . . . . . . 126
7.9 Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
8 Computing ommon mathemati al fun tions 129
8.1 Taylor series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
8.1.1 Sine of an angle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
8.1.2 Natural log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
8.1.3 Some general remarks . . . . . . . . . . . . . . . . . . . . . . . . . . 132
8.2 Numeri al integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
8.3 Bise tion method for nding roots . . . . . . . . . . . . . . . . . . . . . . . . 134
8.4 Newton Raphson Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
8.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
8.5.1 Mathemati al ideas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
8.5.2 Programming ideas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
9 Fun tions 142
9.1 De ning a fun tion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
9.1.1 Exe ution: all by value . . . . . . . . . . . . . . . . . . . . . . . . . 144
9.1.2 Names of parameters and lo al variables . . . . . . . . . . . . . . . . 145
9.2 Nested fun tion alls: LCM . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
9.3 The ontra t view of fun tion exe ution . . . . . . . . . . . . . . . . . . . . . 147
9.3.1 Fun tion spe i ation . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
9.4 Fun tions that do not return values . . . . . . . . . . . . . . . . . . . . . . . 148
9.5 A text drawing program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Abhiram Ranade, 2013. Do not distribute 5
9.6 Some diÆ ulties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
9.7 Call by referen e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
9.7.1 Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
9.7.2 Referen e variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
9.8 Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
9.8.1 \Address of" operator & . . . . . . . . . . . . . . . . . . . . . . . . . 155
9.8.2 Pointer variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
9.8.3 Dereferen ing operator * . . . . . . . . . . . . . . . . . . . . . . . . . 156
9.8.4 Use in fun tions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
9.8.5 Referen e vs. Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . 158
9.9 Returning referen es and pointers . . . . . . . . . . . . . . . . . . . . . . . . 159
9.10 Default values of parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
9.11 Fun tion overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
9.12 Fun tion templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
10 Re ursive Fun tions 164
10.1 Eu lid's algorithm for GCD . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
10.1.1 Exe ution of re ursive g d . . . . . . . . . . . . . . . . . . . . . . . . 166
10.1.2 Interpretation of re ursive programs . . . . . . . . . . . . . . . . . . . 167
10.1.3 Corre tness of re ursive programs . . . . . . . . . . . . . . . . . . . . 167
10.2 Re ursive pi tures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
10.2.1 Trees without using a turtle . . . . . . . . . . . . . . . . . . . . . . . 171
10.2.2 Hilbert spa e lling urve . . . . . . . . . . . . . . . . . . . . . . . . 172
10.3 Virahanka numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
10.3.1 Using a loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
10.3.2 Histori al Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
10.4 The game of Nim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
10.4.1 Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
10.5 Con luding remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
11 Program organization and fun tions 185
11.1 The main program is a fun tion! . . . . . . . . . . . . . . . . . . . . . . . . . 186
11.2 Organizing fun tions into les . . . . . . . . . . . . . . . . . . . . . . . . . . 186
11.2.1 Fun tion De laration or Prototype . . . . . . . . . . . . . . . . . . . 186
11.2.2 Splitting a program into multiple les . . . . . . . . . . . . . . . . . . 187
11.2.3 Separate ompilation and obje t modules . . . . . . . . . . . . . . . . 187
11.2.4 Header les . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
11.2.5 Header guards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
11.2.6 Pa kaging software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
11.2.7 Forward de laration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
11.2.8 Fun tion templates and header les . . . . . . . . . . . . . . . . . . . 191
11.3 Namespa es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
11.3.1 De nition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
11.3.2 The using de laration and dire tive . . . . . . . . . . . . . . . . . . . 193
11.3.3 The global namespa e . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Abhiram Ranade, 2013. Do not distribute 6
11.3.4 Unnamed namespa es . . . . . . . . . . . . . . . . . . . . . . . . . . 194
11.3.5 Namespa es and header les . . . . . . . . . . . . . . . . . . . . . . . 194
11.4 Global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
11.5 Two important namespa es . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
11.6 C++ without simple pp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
11.7 Fun tion Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
11.7.1 Some simpli ations . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
11.8 Con luding remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
11.8.1 Fun tion size and readability . . . . . . . . . . . . . . . . . . . . . . . 200
11.9 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
12 Pra ti e of programming: some tips and tools 202
12.1 Clarity of spe i ation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
12.2 Input-output examples and testing . . . . . . . . . . . . . . . . . . . . . . . 204
12.3 Input/output redire tion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
12.4 Algorithm design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
12.4.1 Mentally exe ute the program . . . . . . . . . . . . . . . . . . . . . . 208
12.4.2 Test ases for ode overage . . . . . . . . . . . . . . . . . . . . . . . 208
12.5 Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
12.5.1 Disabling assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
12.6 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
12.6.1 Debuggers and IDEs . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
12.6.2 End of le and data input errors . . . . . . . . . . . . . . . . . . . . . 211
12.6.3 Aside: Input-Output expressions . . . . . . . . . . . . . . . . . . . . 211
12.7 Random numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
12.7.1 The randuv fun tion in simple pp . . . . . . . . . . . . . . . . . . . 213
12.8 Con luding remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
12.9 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
13 Arrays 215
13.1 Array: Colle tion of variables . . . . . . . . . . . . . . . . . . . . . . . . . . 215
13.1.1 Array element operations . . . . . . . . . . . . . . . . . . . . . . . . . 216
13.1.2 A eptable range for the index . . . . . . . . . . . . . . . . . . . . . . 217
13.1.3 Initializing arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
13.2 Examples of use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
13.2.1 Notation for subarrays . . . . . . . . . . . . . . . . . . . . . . . . . . 218
13.2.2 A marks display program . . . . . . . . . . . . . . . . . . . . . . . . . 218
13.2.3 Who got the highest? . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
13.2.4 General roll numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
13.2.5 Histogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
13.2.6 A taxi dispat h program . . . . . . . . . . . . . . . . . . . . . . . . . 223
13.2.7 A geometri problem . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
13.3 The inside story . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
13.3.1 Out of range array indi es . . . . . . . . . . . . . . . . . . . . . . . . 228
13.3.2 The array name by itself . . . . . . . . . . . . . . . . . . . . . . . . . 228
Abhiram Ranade, 2013. Do not distribute 7
13.3.3 [℄ as an operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
13.4 Fun tion Calls involving arrays . . . . . . . . . . . . . . . . . . . . . . . . . 231
13.4.1 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
13.4.2 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
13.5 Sele tion sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
13.5.1 Estimate of time taken . . . . . . . . . . . . . . . . . . . . . . . . . . 234
13.6 Representing Polynomials . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
13.7 Array Length and onst values . . . . . . . . . . . . . . . . . . . . . . . . . 236
13.7.1 Why onst de larations? . . . . . . . . . . . . . . . . . . . . . . . . . 237
13.7.2 What we use in this book . . . . . . . . . . . . . . . . . . . . . . . . 238
13.8 Con luding remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
13.9 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
14 More on arrays 243
14.1 Chara ter strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
14.1.1 Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
14.1.2 Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
14.1.3 Chara ter array pro essing . . . . . . . . . . . . . . . . . . . . . . . . 246
14.1.4 Address arithmeti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
14.2 Two dimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
14.2.1 Linear simultaneous equations . . . . . . . . . . . . . . . . . . . . . . 250
14.2.2 Two dimensional har arrays . . . . . . . . . . . . . . . . . . . . . . 251
14.2.3 Passing 2 dimensional arrays to fun tions . . . . . . . . . . . . . . . . 252
14.2.4 Drawing polygons in simple pp . . . . . . . . . . . . . . . . . . . . . 253
14.3 Arrays of Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
14.3.1 Command line arguments to main . . . . . . . . . . . . . . . . . . . . 254
14.4 Binary sear h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
14.4.1 Estimate of time taken . . . . . . . . . . . . . . . . . . . . . . . . . . 257
14.5 Merge sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
14.5.1 A merging algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
14.5.2 Mergesort algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
14.6 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
15 Stru tures 264
15.1 Basi s of stru tures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
15.1.1 Visibility of stru ture types and stru ture variables . . . . . . . . . . 267
15.1.2 Arrays of stru tures . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
15.1.3 Pointers to Stru tures and -> . . . . . . . . . . . . . . . . . . . . . . 268
15.1.4 Pointers as stru ture members . . . . . . . . . . . . . . . . . . . . . . 268
15.1.5 Linked stru tures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
15.2 Stru tures and fun tions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
15.2.1 onst referen e parameters . . . . . . . . . . . . . . . . . . . . . . . 271
15.2.2 Passing pointers to stru tures . . . . . . . . . . . . . . . . . . . . . . 271
15.3 Representing ve tors from physi s . . . . . . . . . . . . . . . . . . . . . . . . 271
15.4 Taxi dispat h revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Abhiram Ranade, 2013. Do not distribute 8
15.5 Member Fun tions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
15.5.1 Referen e parameters and onst . . . . . . . . . . . . . . . . . . . . . 277
15.6 Mis ellaneous features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
15.6.1 Stati data members . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
15.6.2 Stati member fun tions . . . . . . . . . . . . . . . . . . . . . . . . . 278
15.6.3 The this pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
15.6.4 Default values to parameters . . . . . . . . . . . . . . . . . . . . . . . 279
15.7 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
16 Classes: stru tures with a personality 281
16.1 Constru tors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
16.1.1 Calling the onstru tor expli itly . . . . . . . . . . . . . . . . . . . . 284
16.1.2 Default values to parameters . . . . . . . . . . . . . . . . . . . . . . . 284
16.1.3 \Default" Constru tor . . . . . . . . . . . . . . . . . . . . . . . . . . 285
16.1.4 Constru tors of nested stru tures . . . . . . . . . . . . . . . . . . . . 285
16.1.5 Initialization lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
16.1.6 Constant members . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
16.2 The opy onstru tor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
16.3 Destru tors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
16.4 Overloading operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
16.5 Another overloading me hanism . . . . . . . . . . . . . . . . . . . . . . . . . 290
16.6 Overloading assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
16.7 A ess Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
16.7.1 A essor and mutator fun tions . . . . . . . . . . . . . . . . . . . . . 292
16.7.2 Prohibiting ertain operations . . . . . . . . . . . . . . . . . . . . . . 293
16.7.3 Friends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
16.8 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
16.9 Header and implementation les . . . . . . . . . . . . . . . . . . . . . . . . . 294
16.9.1 Separate ompilation . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
16.9.2 Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
16.10Template lasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
16.11Some lasses you have already used, almost . . . . . . . . . . . . . . . . . . . 297
16.11.1Graphi s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
16.11.2Standard input and output . . . . . . . . . . . . . . . . . . . . . . . . 298
16.11.3File I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
16.12Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
16.13Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
17 A proje t: osmologi al simulation 301
17.1 Mathemati s of Cosmologi al simulation . . . . . . . . . . . . . . . . . . . . 301
17.2 Overview of the program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
17.2.1 Main Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
17.3 The lass Star . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
17.4 Compiling and exe ution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
17.5 Con luding Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Abhiram Ranade, 2013. Do not distribute 9
17.6 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
18 Graphi s Events 311
18.1 Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
18.1.1 Event obje ts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
18.1.2 Waiting for events . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
18.2 Che king for events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
18.2.1 Mouse button press events . . . . . . . . . . . . . . . . . . . . . . . . 312
18.2.2 Mouse drag events . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
18.2.3 Key press events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
18.3 A drawing program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
18.4 A rudimentary Snake game . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
18.4.1 Spe i ation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
18.4.2 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
18.4.3 User intera tion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
18.5 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
19 Representing variable length entities 317
19.1 The Heap Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
19.1.1 A detailed example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
19.1.2 Lifetime and a essibility . . . . . . . . . . . . . . . . . . . . . . . . . 320
19.2 Representing text: a preliminary implementation . . . . . . . . . . . . . . . 320
19.2.1 The basi storage ideas . . . . . . . . . . . . . . . . . . . . . . . . . . 321
19.2.2 Constru tor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
19.2.3 The print member fun tion . . . . . . . . . . . . . . . . . . . . . . . 322
19.2.4 Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
19.2.5 De ning operator + . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
19.3 Advan ed topi s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
19.3.1 Destru tors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
19.3.2 Copy onstru tor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
19.3.3 The [℄ operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
19.3.4 An improved assignment operator . . . . . . . . . . . . . . . . . . . . 326
19.3.5 Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
19.4 Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
19.4.1 Class invariants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
19.5 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
20 The standard library 332
20.1 The string lass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
20.1.1 Passing strings to fun tions . . . . . . . . . . . . . . . . . . . . . . . 334
20.1.2 A detailed example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
20.2 The template lass ve tor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
20.2.1 Inserting and deleting elements . . . . . . . . . . . . . . . . . . . . . 335
20.2.2 Index bounds he king . . . . . . . . . . . . . . . . . . . . . . . . . . 335
20.2.3 Fun tions on ve tors . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
20.2.4 Ve tors of user de ned data types . . . . . . . . . . . . . . . . . . . . 336
Abhiram Ranade, 2013. Do not distribute 10
20.2.5 Multidimensional ve tors . . . . . . . . . . . . . . . . . . . . . . . . . 336
20.2.6 A matrix lass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
20.3 Sorting a ve tor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
20.4 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
20.4.1 Marks display variation 1 . . . . . . . . . . . . . . . . . . . . . . . . 339
20.4.2 Marks display variation 2 . . . . . . . . . . . . . . . . . . . . . . . . 339
20.4.3 Marks display variation 3 . . . . . . . . . . . . . . . . . . . . . . . . 340
20.5 The map template lass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
20.5.1 Marks display variation 4 . . . . . . . . . . . . . . . . . . . . . . . . 343
20.5.2 Time to a ess a map . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
20.6 Containers and Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
20.6.1 Finding and deleting map elements . . . . . . . . . . . . . . . . . . . 347
20.6.2 Inserting and deleting ve tor elements . . . . . . . . . . . . . . . . . 348
20.7 Other ontainers in the standard library . . . . . . . . . . . . . . . . . . . . 348
20.8 The typedef statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
20.8.1 More general form . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
20.9 Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
20.10Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
21 Representing networks of entities 353
21.1 Graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
21.1.1 Adja en y lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
21.1.2 Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
21.1.3 Array indi es rather than pointers . . . . . . . . . . . . . . . . . . . . 355
21.1.4 Edges represented expli itly . . . . . . . . . . . . . . . . . . . . . . . 356
21.2 Adja en y matrix representation . . . . . . . . . . . . . . . . . . . . . . . . . 356
21.3 Sur ng on the internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
21.4 Cir uits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
21.5 Edge list representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
21.6 Auxiliary data stru tures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
21.7 Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
21.8 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
22 Stru tural re ursion 364
22.1 Layout of mathemati al formulae . . . . . . . . . . . . . . . . . . . . . . . . 365
22.1.1 Input format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
22.1.2 Layout \by hand" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
22.1.3 Representing mathemati al formulae . . . . . . . . . . . . . . . . . . 368
22.1.4 Reading in a formula . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
22.1.5 Drawing the formula: overview . . . . . . . . . . . . . . . . . . . . . 371
22.1.6 The omplete main program . . . . . . . . . . . . . . . . . . . . . . . 375
22.1.7 Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
22.2 Maintaining an ordered set . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
22.2.1 A sear h tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
22.2.2 The general idea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Abhiram Ranade, 2013. Do not distribute 11
22.2.3 The implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
22.2.4 A note about organizing the program . . . . . . . . . . . . . . . . . . 380
22.2.5 On the eÆ ien y of sear h trees . . . . . . . . . . . . . . . . . . . . . 380
22.2.6 Balan ing the sear h tree . . . . . . . . . . . . . . . . . . . . . . . . . 382
22.2.7 Sear h trees and maps . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
22.3 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
23 Inheritan e 386
23.1 Turtles with an odometer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
23.1.1 Implementation using Composition . . . . . . . . . . . . . . . . . . . 387
23.1.2 Implementation using Inheritan e . . . . . . . . . . . . . . . . . . . . 388
23.2 General prin iples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
23.2.1 A ess rules and prote ted members . . . . . . . . . . . . . . . . . . 390
23.2.2 Constru tors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
23.2.3 Destru tors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
23.2.4 Basi operations on sub lass obje ts . . . . . . . . . . . . . . . . . . 393
23.2.5 The type of a sub lass obje t . . . . . . . . . . . . . . . . . . . . . . 393
23.2.6 Assignments mixing super lass and sub lass obje ts . . . . . . . . . . 393
23.3 Polymorphism and virtual fun tions . . . . . . . . . . . . . . . . . . . . . . . 395
23.3.1 Virtual Destru tor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
23.4 Program to print past tense . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
23.5 Abstra t Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
23.6 Multiple inheritan e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
23.6.1 Diamond Inheritan e . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
23.7 Types of inheritan e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
23.8 Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
23.9 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
24 Inheritan e based design 405
24.1 Formula drawing revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
24.1.1 Basi design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
24.1.2 Comparison of the two approa hes . . . . . . . . . . . . . . . . . . . 409
24.1.3 Adding exponential expressions . . . . . . . . . . . . . . . . . . . . . 410
24.2 The simple pp graphi s system . . . . . . . . . . . . . . . . . . . . . . . . . 411
24.3 Composite graphi s obje ts . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
24.3.1 Ownership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
24.3.2 The Composite lass onstru tor . . . . . . . . . . . . . . . . . . . . 415
24.3.3 A Car lass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
24.3.4 Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
24.3.5 Main program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
25 Dis rete event simulation 419
25.1 Dis rete event simulation overview . . . . . . . . . . . . . . . . . . . . . . . 420
25.1.1 Dis rete time systems . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
25.1.2 Evolution of a dis rete time system . . . . . . . . . . . . . . . . . . . 421
25.1.3 Implementing a dis rete time system . . . . . . . . . . . . . . . . . . 422
Abhiram Ranade, 2013. Do not distribute 12
25.1.4 Simple examples of use . . . . . . . . . . . . . . . . . . . . . . . . . . 423
25.2 The restaurant simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
25.3 Resour es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
25.3.1 A Resour e lass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
25.3.2 Simple example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
25.3.3 The o ee shop simulation . . . . . . . . . . . . . . . . . . . . . . . . 429
25.4 Single sour e shortest path . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
25.4.1 Dijkstra's algorithm as a simulation . . . . . . . . . . . . . . . . . . . 433
25.5 Con luding Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
26 Simulation of an airport 438
26.0.1 Chapter outline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
26.1 The simulation model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
26.1.1 Overall fun tioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
26.1.2 Safe operation and half-runway-ex lusion . . . . . . . . . . . . . . . . 440
26.1.3 S heduling strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
26.1.4 Gate allo ation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
26.1.5 Simulator input and output . . . . . . . . . . . . . . . . . . . . . . . 441
26.2 Implementation overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
26.2.1 Safe operation and half-runway-ex lusion . . . . . . . . . . . . . . . . 442
26.2.2 Gate representation and allo ation . . . . . . . . . . . . . . . . . . . 442
26.3 Main program and data stru ture . . . . . . . . . . . . . . . . . . . . . . . . 443
26.4 The taxiway lass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
26.5 The ATC lass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
26.6 The plane lass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
26.7 Deadlo ks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
26.8 Con luding remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
27 Non-linear simultaneous equations 454
27.1 Newton-Raphson method in many dimensions . . . . . . . . . . . . . . . . . 454
27.1.1 The general ase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
27.1.2 Termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
27.1.3 Initial guess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
27.2 How a ne kla e reposes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
27.2.1 Formulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
27.2.2 Initial guess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
27.2.3 Experien e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
27.3 Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
27.4 Exer ises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
A Installing Simple pp 460
B Managing Heap Memory 461
B.1 Referen e Counting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
B.2 The template lass shared ptr . . . . . . . . . . . . . . . . . . . . . . . . . 463
B.2.1 Syntheti example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
Abhiram Ranade, 2013. Do not distribute 13
B.2.2 General strategy . . . . . . .... . . . . . . . . . . . . . . . . . . . 465
B.2.3 Shared pointer in derivative nding . . . . . . . . . . . . . . . . . . . 465
B.2.4 Weak pointers . . . . . . . . .... . . . . . . . . . . . . . . . . . . . 468
B.2.5 Solution idea . . . . . . . . .... . . . . . . . . . . . . . . . . . . . 468
B.3 Con luding remarks . . . . . . . . . .... . . . . . . . . . . . . . . . . . . . 469
C Libraries 470
C.0.1 Linking built-in fun tions . . . . . . . . . . . . . . . . . . . . . . . . 470
D Reserved words in C++ 472
E Operators and operator overloading 473
E.1 Bitwise Logi al operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
E.1.1 Or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
E.1.2 And . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
E.1.3 Ex lusive or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
E.1.4 Complement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
E.1.5 Left shift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
E.1.6 Right shift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
E.2 Comma operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
E.3 Operator overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
F The stringstream lass 477
G The C++ Prepro essor 479
H Lambda expressions 480
H.1 General form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
H.1.1 The type of a lambda expression . . . . . . . . . . . . . . . . . . . . 481
H.1.2 Variable apture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
H.1.3 Dangling referen es . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
H.1.4 Capturing this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
Prefa e

This book presents an introdu tion to programming using the language C++. No prior
knowledge of programming is expe ted, however the book is oriented towards a reader who
has nished about 12 years of s hooling, preferably in the S ien e stream.
The book presents a fairly omprehensive introdu tion to the C++ language, in luding
some ex iting additions to it in the latest standard. However, the goal of the book is to
tea h programming, whi h is di erent from merely learning the di erent statements in any
programming language. Programming, like any skill, must be integrated with the other
knowledge and skills that the learner has. Also, programming is a liberating skill whi h an
hange your world view. Programming enables you to experiment/play with the math or
physi s that you have learned. You have been told that planets must move around the sun;
but if you know programming you an write a program to he k if this laim might be true.
In general, programming should en ourage you to make a model of the world around you
and experiment with it on a omputer. Obviously, this requires a ertain experien e and
knowledge about the world. It is our thesis that 12 years of s hooling in the S ien e stream
an indeed provide su h knowledge. In any ase, the book has been written not only to tea h
programming to our target readership, but also to hallenge and provoke them to using it in
ex iting ways.
This book does not emphasize any spe i programming methodology. Instead, we have
tried to present ideas in order of intelle tual simpli ity as well as simpli ity of programming
syntax. The general presentation style is: \Here is a problem whi h we would like to solve
but we annot using the programming primitives we have learned so far; so let us learn this
new primitive". Obje t oriented programming is learly important, but an attempt is made
to let it evolve as a programming need. We dis uss this more in Se tion 0.3.
This book is expe ted to be used along with a pa kage, simple pp, developed for use
in the book. Appendix A ontains instru tions for installing simple pp and the s ript that
an be used to ompile user programs that use simple pp. This pa kage ontains (a) a set
of graphi s lasses whi h an be used to draw and manipulate simple geometri shapes on
the s reen, and (b) some prepro essor ma ros whi h help in smoothing out the introdu tion
of C++ in the initial period. We feel that the use of simple pp an onsiderably help in
learning C++. This is dis ussed in greater detail below.
We on lude this prefa e by suggesting how this book an be tted into a urri ulum.

0.1 Graphi s
I hear and I forget. I see and I remember. I do and I understand.

14
Discovering Diverse Content Through
Random Scribd Documents
IV
COPENHAGUE. — ASPECT GÉNÉRAL DE LA
VILLE. — LES PALAIS.

Tandis que la voiture roule vers l’hôtel, je jette sur la ville le


premier coup d’œil du touriste curieux. Les rues sont larges,
entretenues avec soin, bordées de beaux trottoirs de granit, mais
pavées de petits cailloux pointus qui doivent être fort désagréables à
la plante des pieds ; les maisons bien bâties, hautes et généralement
neuves. Chacune d’elles a un sous-sol, comme à Amsterdam et à
Hambourg, où s’installent les petits commerçants, les épiciers, les
fruitiers, les restaurants et les cafés, et dont les fenêtres, protégées
par des barreaux de fer, s’élèvent à peine au-dessus du sol. Le
commerce de luxe, les boutiques de premier ordre, — librairies,
marchands d’estampes et d’objets d’art, magasins de nouveautés,
etc. — occupent les rez-de-chaussée, auxquels on monte par
quelques marches, et dont la porte s’ouvre invariablement dans
l’allée. L’amour des gens du Nord pour la clôture et pour le chez soi
se retrouve jusque dans cette disposition particulière, qui supprime
aux magasins l’entrée banale et béante par où ils semblent, chez
nous, la continuation de la voie publique et qui en fait, pour ainsi
dire, autant d’appartements particuliers. Mais on conçoit également,
par là même, ce qu’elle enlève au coup d’œil d’animation, de variété
et d’imprévu.
A part ces quelques points, à part aussi les noms des rues et les
inscriptions des enseignes, il est difficile de saisir, dans cette
première promenade à travers la ville, la moindre trace de couleur
locale. On se croirait presque dans une grande préfecture française,
ou dans le vieux faubourg Saint-Denis. N’était la tranquillité de leur
allure, je prendrais tous ces passants en paletots pour des Parisiens.
Avec leurs chapeaux de paille bruns et ronds, retenus sous le cou
par de larges brides qui cachent les oreilles et une partie des joues,
leur costume décent et modeste, d’un goût parfait, mais sans aucun
éclat, les femmes rappellent ces excellentes ménagères de province
qui ont horreur des couleurs voyantes et des modes tapageuses.
Tout sent ici, dès l’abord, je ne sais quelle saine odeur de dignité et
de simplicité. On y respire l’atmosphère salubre et calmante de la vie
de famille, des habitudes patriarcales, d’une aisance honorable et
digne, conquise par le travail.
J’aperçois çà et là quelques canaux. Nous traversons
successivement le Gammel Torv, que décore une honnête fontaine
qui ne fera jamais parler d’elle, l’Amager Torv, l’Ostergade [6] , la rue
à la mode de Copenhague, une sorte de boulevard hanté par les
élégants et bordé de luxueuses boutiques ; le Kongens Nytorv, ou la
place Neuve-Royale, au centre de laquelle s’élève, dans un maigre
square, une déplorable statue équestre, en plomb, de Christian V
terrassant la Suède, ce qui est une des plus jolies fictions inventées
par le zèle des faiseurs de statues [7] ; puis nous entrons dans
Bredgade (la rue large), pour aller descendre à l’Hôtel Phœnix.
[6] Torv, place ; gade, rue, ou stræde, qui s’applique
plus particulièrement aux rues étroites, aux ruelles, mais
sans que cette règle ait rien d’absolu.
[7] Suivant d’autres, la figure qui se tord sous les
pieds du cheval représente le monstre de l’Envie.

L’hôtel Phœnix est tapissé du haut en bas, jusque dans les


couloirs et les escaliers, de tableaux qui font généralement plus
d’honneur à l’amour du propriétaire pour la peinture qu’à son goût
artistique. On y trouve toutes les traditions des caravansérails les
plus civilisés. Les garçons portent l’habit noir et la cravate blanche ;
ils parlent français, comme le portier et comme le maître de
l’établissement. Je me suis souvent étonné, dans le cours de mes
voyages, de la prodigieuse variété de connaissances nécessaires à
l’homme qui aspire à l’honneur de garder la porte d’un hôtel de
premier ordre. A Madrid, à Cologne, à Hambourg, à la Haye, à Aix-
les-Bains, à Genève, à Bade, à Stockholm, à Dresde, à Vienne,
comme à Copenhague, j’ai rencontré dans la loge du concierge des
linguistes émérites, capables de soutenir la conversation dans tous
les idiomes de l’Europe, et à qui il n’a manqué peut-être, comme au
Z. Marcas de Balzac, que d’avoir le moyen de s’acheter une paire de
bottes, ou une paire de gants, pour devenir professeurs de philologie
et correspondants de l’Académie des inscriptions et belles-lettres. A
moins toutefois que ce ne soit, de la part de ces hommes pratiques,
pure affaire de choix et de vocation. Mais la plupart d’entre eux
pourraient dire à leurs maîtres, avec une variante au mot célèbre de
Figaro : « Aux connaissances qu’on exige dans un concierge, Votre
Excellence sait-elle beaucoup de propriétaires qui fussent dignes
d’être portiers ? »
Après un excellent déjeuner, composé par l’artiste de l’hôtel
d’après les sains principes de la cuisine française, nous remontons
en voiture, et nous partons en reconnaissance. Mais auparavant je
me suis fait expliquer la ville, et j’ai relevé sur un plan tous les points
de repère de cette excursion.
Kjobenhavn, que nous appelons Copenhague [8] , est une ville
d’environ 175,000 habitants, bâtie sur deux îles, que sépare un étroit
bras de mer. La partie de la capitale qui s’élève sur l’île
microscopique d’Amack, porte le nom particulier de Christianhavn.
[8] En empruntant cette traduction aux Anglais,
comme celle de Sjœland en Seeland. Le j se prononce i.

La position de Copenhague est presque, au septentrion de


l’Europe, ce que celle de Constantinople est au midi. Bâtie à portée
de la mer du Nord et, pour ainsi dire, au confluent de tous ces
détroits qui sont comme les avenues de la Baltique, Copenhague est
la capitale naturelle du monde scandinave, qu’elle relie au reste de
l’Europe.
Ce ne fut longtemps qu’un humble village de pêcheurs, et elle ne
devint pas avant le quinzième siècle la résidence de la royauté. Cette
date expliquerait déjà la physionomie généralement moderne de ses
rues et de ses monuments ; mais voici qui l’explique mieux encore.
En 1728, un incendie effroyable dévora plus de seize cents maisons.
Un nouvel incendie en 1795, et le bombardement des Anglais en
1807, achevèrent à peu près la destruction de la vieille ville. Les
maisons de bois furent rebâties en pierre, les rues élargies et
régularisées : Copenhague y gagna cette apparence correcte et
presque rectiligne qui plaît tant aux préfets, aux rédacteurs de
Guides et aux Anglais en voyage. Restée stationnaire pendant
longtemps, — par une apparente bizarrerie, qui s’explique pourtant
sans trop de peine, elle s’est accrue après les désastres des
dernières guerres. Les émigrés du Slesvig, en se repliant sur
Copenhague pour fuir la domination prussienne, ont largement
contribué à ce résultat. Aujourd’hui elle déborde de ses anciennes
barrières, et prolonge en tous sens les ramifications de ses
faubourgs.
Bredgade, où je suis logé, partant de la Grande place, qui est un
point central, pour traverser toute la partie du nord de la ville dans
la direction du port, est ce qu’on appelle en style municipal une des
grandes artères de Copenhague. En la suivant jusqu’au bout, on
arrive à la citadelle et aux promenades des remparts, d’où l’on
domine le Sund. Le coup d’œil qui tout à coup s’ouvre là sous vos
pieds est de ceux qu’il ne faut pas essayer de décrire. Quelques
vaisseaux à voile vont et viennent lentement, déployant entre le bleu
du ciel et le bleu de la mer leur aile blanche, gonflée par le vent. Au
loin, sur des bancs de sable exhaussés en îles, s’élèvent en pleine
mer des forts détachés, qui semblent sortir directement du sein des
flots pour défendre l’entrée du port. C’est là qu’arrivent presque
toutes les marchandises d’importation pour le Danemark.
A cinquante pas de l’hôtel, une courte rue transversale conduit à
la belle place d’Amalienborg, que décore la statue équestre de
Frédéric V, le pacifique et libéral successeur du rigide Christian VI. Le
palais d’Amalienborg [9] , qui a donné son nom à la place, se
compose de quatre édifices entièrement distincts, mais absolument
semblables, qui se font pendant aux quatre coins, reproduisant avec
symétrie cette maigre et froide colonnade qu’on retrouve si souvent
sur la façade des monuments publics de Copenhague. L’un de ces
palais bourgeois sert de résidence habituelle à Sa Majesté Christian
IX, dont la petite cour tient à l’aise dans cette maison de Socrate de
la royauté.
[9] Borg, château, dans le sens de l’allemand burg. Il
désigne un ensemble de constructions, le château avec
ses dépendances, les bâtiments élevés à son abri et sous
sa protection. Le mot slot signifie plus particulièrement
palais, et on le joint souvent au nom des châteaux :
Amalienborg slot, Christiansborg slot.

On ne se figure pas le nombre de palais que possède


Copenhague : peut-être y en a-t-il plus qu’à Paris, et les alentours de
la ville en sont aussi largement peuplés. La vieille monarchie danoise
a semé partout les témoignages de sa magnificence et de son goût
pour les arts. Copenhague renferme à elle seule, en y comprenant
les quatre bâtiments d’Amalienborg, une douzaine de palais, dont
plusieurs ont été changés en musées. Rosenborg et Christiansborg
sont les seuls qui méritent de nous arrêter un moment.
Christiansborg ne s’élève guère au-dessus de la banalité
architecturale de ses modestes confrères que par sa masse et ses
proportions immenses. La façade a la majesté régulière et un peu
froide du plus pur style classique. Ce palais géant semble fait pour
loger une armée plutôt qu’un homme. Le roi Christian VI le fit bâtir,
en un jour d’ambition, pour rivaliser avec le souvenir de Louis XIV, et
l’on assure que trois mille ouvriers y travaillèrent sans interruption
pendant six ans, ce qui paraît une légende renouvelée du temple de
Salomon. Dix mille poutres énormes furent enfoncées dans le sol
pour le raffermir, et toutes les charrettes de Copenhague et des
environs suffirent à peine au déblayement du terrain et au transport
des matériaux. Après l’incendie de 1795, qui l’avait entièrement
détruit, le jeune prince royal, qui fut depuis Frédéric VI, le fit rebâtir
sur le premier plan pierre à pierre, et ne l’habita jamais. C’était
recommencer la folie primitive dans des circonstances aggravantes,
et doubler l’étendue de la faute. On eût dit que les architectes de
Christiansborg voulaient compenser la diminution de leur puissance
par l’augmentation de leur luxe, et qu’ils espéraient dissimuler au
peuple la décadence de la monarchie danoise et l’affaiblissement du
royaume sous la pompe toujours accrue de leur palais, comme ces
banquiers qui ajoutent une aile à leur château, multiplient leurs fêtes
et prennent quelques laquais de plus, lorsqu’on commence à dire
qu’ils sont ruinés. Le prédécesseur du roi actuel, Frédéric VII, de
populaire mémoire, logeait dans un coin du vaste monument, qui ne
sert plus aujourd’hui, en dehors des salles consacrées au musée de
peinture et à diverses collections, qu’aux réunions des chambres et
aux grandes cérémonies officielles.
La perle de tous ces palais, c’est Rosenborg, construit, au début
du dix-septième siècle, par l’illustre architecte Inigo Jones, le Vitruve
anglais, celui auquel Londres doit Whitehall. Rien de plus original et
de plus charmant que la physionomie de cet édifice, avec sa
maçonnerie de briques rouges, ses trois tours noires aux flèches
élancées, sa façade étroite et la prodigalité d’ornements dont l’a
décoré la fantaisie de l’artiste. Rosenborg tient à la fois de l’église
gothique, du donjon féodal et du château de la Belle au bois
dormant. On y arrive par un délicieux jardin plein d’ombrages et
d’eaux vives. Sous ces tilleuls deux fois centenaires, qui ont vu
passer le grand roi Christian IV, et abrité plus d’une fois, dit-on, les
entrevues furtives de Caroline-Mathilde et de Struensée, les petits
Danois se livrent à leurs ébats tumultueux, avec ces rires et ces
larmes qui sont les mêmes partout et constituent la langue
universelle. Par les allées sinueuses, le long des pelouses et des
parterres de fleurs, on arrive jusqu’à un pont-levis fermé d’une grille
de fer, qui clôt le palais comme une forteresse.
Rosenborg est le musée des souverains danois. On y a réuni,
salle par salle, les portraits des rois, depuis Christian IV, qui l’a fait
construire, et les objets qui leur ont appartenu : meubles,
vêtements, tapisseries, glaces, cristaux, armes, bijoux, ivoires. Il y a
là d’incomparables richesses artistiques et historiques, des merveilles
de luxe, d’élégance et de goût, qui racontent aux yeux charmés les
splendeurs de la dynastie d’Oldenbourg. A côté des épées de Charles
XII et de Gustave-Adolphe, armes de soldats, faites pour tuer et non
pour éblouir, étincelle, sous sa garniture de diamants, l’épée à
poignée d’émail de Christian IV, et reluit de mille feux le
harnachement de velours brodé de perles, qui coûta deux millions à
ce magnifique monarque. Non loin des chenets en argent massif, des
buffets en or, des porcelaines de Saxe, des étoffes splendides, des
lustres et des vases en cristal de roche, des carabines ciselées, des
tables, des fauteuils, des écrans incrustés de saphirs et de rubis, qui
rappellent les noms de Frédéric III, Christian V et VI, s’alignent, sur
de riches étagères, les innombrables verreries de Venise envoyées
par le doge à Frédéric IV. Près de la corne d’argent des Oldenbourg,
qui remonte au chef de la dynastie, vous verrez la coupe de chasse
de Christian VI, qui contient deux bouteilles, et que cet héroïque
buveur, digne de ses aïeux, vidait tout d’une haleine. De nos jours,
quel est celui, roi ou chasseur, qui pourrait se vanter d’en faire
autant ? Plus loin, on voit mieux encore : c’est un cavalier avec son
cheval, en argent creux, disposé de façon à pouvoir servir de coupe
lorsqu’on en a enlevé la partie supérieure, qui forme le couvercle. La
tradition parle de vaillants Danois du bon vieux temps, qui vidaient
en un repas ce bol gigantesque, bien autrement redoutable que la
botte de Bassompierre. Les Danois d’aujourd’hui savent boire en fils
non dégénérés de ce dieu Thor, à qui trois barils de bière suffisaient
à peine pour apaiser sa soif, même quand il se cachait sous le
déguisement d’une fiancée. Tout dégénère pourtant, et le cheval
bachique de Rosenborg n’est plus aujourd’hui qu’un objet d’art.
Le regard finit par se fatiguer de ces magnificences ; mais si l’on
monte à l’étage supérieur, c’est bien autre chose encore. La galerie
du trône et du couronnement est une véritable salle des Mille et une
Nuits. Son plafond sculpté, ses fonts baptismaux d’argent, autour
desquels se déroule en bas-reliefs le baptême de Jésus-Christ ; ses
cariatides, ses tapis, ses tentures, ses candélabres, composent un
ensemble saisissant. Le trône est gardé par trois grands lions
d’argent, symboles des trois détroits, le Sund, le Grand-Belt et le
Petit-Belt, qui font au Danemark une barrière de vagues. Partout, à
Copenhague, sur les écussons et au frontispice des palais,
reparaissent ces lions allégoriques, aiguisant leurs griffes et secouant
leurs crinières, comme les monstres dont Ulysse entendit les
hurlements autour du rocher de Scylla.
Rosenborg est une magique évocation du passé. On en sort avec
des éblouissements dans les yeux, et l’imagination enflammée par
cet entassement de merveilles historiques. Les richesses de deux
siècles sont concentrées dans cet écrin de pierre, où vous apparaît,
en toute sa splendeur, l’âge d’or de la monarchie danoise, alors
qu’elle régnait sur la Norwége, qu’elle humiliait la Suède, qu’elle
occupait l’Europe de sa gloire, et que l’oriflamme rouge, à croix
blanche, se promenait triomphalement sur toutes les mers.
V
LA VILLE LITTÉRAIRE, ARTISTIQUE ET
SAVANTE. — LE MUSÉE THORVALDSEN ET LA
STATUE D’ŒHLENSCHAGER.

Rosenborg n’est pas le seul musée de Copenhague, il s’en faut.


Les collections de tout genre y abondent, ainsi que les écoles, les
bibliothèques, les établissements d’instruction. Il n’est pas de ville où
l’on trouve plus de trésors d’art et de science, où l’enseignement soit
plus répandu et mieux en honneur.
Si j’étais M. Joanne, j’énumérerais soigneusement les dix ou
douze musées de Copenhague ; on m’en dispensera sans peine. Je
n’ai fait, d’ailleurs, que les parcourir au pas accéléré, m’arrêtant
seulement à ce qui m’offrait un intérêt local, un trait de race, un
caractère indigène. Au musée de Christiansborg, assez pauvre en
maîtres italiens ou français, l’école flamande et surtout l’école
hollandaise, dont le Danemark subit longtemps l’influence avec
docilité, se trouvent représentées largement ; mais ce n’est pas là ce
que j’y cherche, j’y cherche l’art national du Danemark. J’oublie Le
Poussin, Salvator Rosa et Gérard Dow, pour m’arrêter devant les
beaux portraits de Juel et les compositions d’Eckersberg, qui a été
l’initiateur de la peinture contemporaine dans son pays natal ; devant
les paysages de Skovgaard et de Rump, les batailles de Sonne, les
marines de Melbye et de Simonsen, les scènes de genre d’Exner, le
peintre des villageois ; les toiles humoristiques de Marstrand ; les
tableaux d’histoire de Bloch, un artiste énergique et original, et
toutes ces toiles où revit, dans sa vérité et dans sa poésie, la beauté
mélancolique et voilée de la nature du Nord [10] .
[10] La plupart de ces peintres (je parle des vivants),
étaient représentés à l’Exposition universelle, mais d’une
façon incomplète, qui ne donnait point une idée
suffisante de leur talent. On y a pu voir aussi les groupes
de M. Jerichau, directeur des beaux-arts, les beaux
bustes de M. Bissen, d’un modelé si large, si vivant, et les
dessins pleins de goût, d’élégance et de distinction d’un
artiste dont le gracieux talent a reçu depuis quelques
années ses lettres de naturalisation en France.

Mais si l’on veut étudier l’art danois dans sa plus haute et sa plus
pure expression, c’est au musée Thorvaldsen qu’il faut aller.
Thorvaldsen est un de ces hommes qui suffisent à la gloire d’une
époque et d’une nation. Le Danemark peut s’enorgueillir, à juste
titre, d’avoir produit l’un des plus grands sculpteurs du dix-neuvième
siècle, le rival et le vainqueur peut-être de Canova ; le maître illustre,
dont l’influence ne s’est pas seulement exercée sur l’école danoise,
sortie tout entière de lui, mais domine aujourd’hui encore presque
toute la sculpture du nord de l’Europe et celle de l’Allemagne.
A quelques pas du palais de Christiansborg s’élève un édifice qui
a l’aspect d’un mausolée. L’architecture reproduit en partie celle des
sépulcres grecs et étrusques, et la décoration rappelle les ornements
des tombeaux antiques. C’est à la fois le musée et la sépulture de
Thorvaldsen. Le grand sculpteur repose dans la cour centrale, sous
un petit tertre ombragé de lierre, au milieu de ses innombrables
chefs-d’œuvre.
Le monument fut érigé par la ville de Copenhague, avec le
concours d’une souscription publique, du vivant même de
Thorvaldsen, pour recevoir les objets d’art qu’il avait légués à ses
compatriotes. La façade est surmontée d’un groupe de la Victoire
arrêtant son quadrige et, sur les murs extérieurs, de vastes
compositions en ciments de diverses couleurs incrustés dans la
pierre, représentent le retour de Thorvaldsen dans sa ville natale en
1838, et le transport de ses œuvres du vaisseau jusqu’au Musée.
L’art antique a fourni les motifs de toutes les décorations. Ici, c’est
un génie qu’un char emporte dans l’arène ; là, ce sont des vases et
des trépieds, comme les anciens en donnaient pour prix dans les
jeux publics, couronnés des lauriers et des palmes du triomphe.
Entre le vestibule, qui occupe toute la largeur de l’édifice, et la
grande salle du fond, sont disposés en enfilade une série de
cabinets, dans chacun desquels s’élève une statue choisie, entourée
d’un cortége de bustes et de bas-reliefs. Les plafonds sont égayés de
cartouches dans le goût des peintures de Pompéi ; mais la nudité des
murailles, simplement recouvertes d’une couche de couleur brunâtre,
laisse toute leur valeur aux statues, qui se détachent
vigoureusement dans les conditions les plus favorables et les mieux
calculées pour les faire valoir. Le musée Thorvaldsen rachète sa
physionomie vraiment trop funèbre par son heureux aménagement
et l’intelligente appropriation des moindres parties de l’édifice au but
qu’on s’est proposé. C’est vraiment le temple de l’art.
Un Grec du temps de Périclès se fût promené avec délices dans
ce monument peuplé de chefs-d’œuvre où l’antiquité revit.
Thorvaldsen est un élève de Phidias : il a, sans effort, et comme par
un épanouissement naturel, la noblesse, la simplicité sévère,
l’harmonie et la grandeur des lignes, la science du dessin, la pureté
de style, l’élégance correcte et la clarté lumineuse des maîtres
souverains. Ce fils du Nord, dont le génie de bonne heure éveillé
s’échauffa lentement, et resta longtemps à demi engourdi comme
dans les brumes de son pays natal, a l’heureuse fécondité, la
hardiesse tranquille, la perfection calme et sûre d’elle-même, qui
caractérisent le génie grec. Ses bustes sont presque tous admirables
par l’accent de réalité, le caractère et l’expression qu’il leur donne,
sans jamais violer en rien les vieilles traditions classiques. Par la
science de la composition, la pondération des groupes, la sagesse du
plan, la gravité des lignes, il a conquis dans le bas-relief une
suprématie qui n’est pas discutée. La plupart de ses sujets antiques,
les Trois Grâces, l’Amour triomphant, la Vénus, le Jason, le Mercure,
le Bacchus, l’Adonis, le Ganymède, semblent arrachés aux ruines du
Parthénon. Bien qu’il ait surtout la noblesse et la force, il a aussi la
finesse ingénieuse et la grâce délicate. Toutefois son œuvre charme
plus qu’elle n’émeut ; elle s’adresse aux yeux et à l’esprit sans arriver
jusqu’au cœur ; elle ne cause que cette admiration presque froide où
l’âme ne se sent pas suffisamment intéressée. Il resta toujours, sous
l’inspiration du puissant artiste, un peu de cette glace du Nord que
les flammes du soleil d’Italie ne suffirent point à faire fondre
entièrement, et tout en rendant à ce tranquille et harmonieux génie
l’hommage qu’il mérite, je lui voudrais parfois plus de chaleur, de vie
et d’élan pathétique.
Le musée Thorvaldsen contient les dessins, les esquisses et les
modèles originaux en plâtre de son œuvre entière, qui est immense.
On y a joint tous les objets d’art qui se trouvaient en sa possession
au moment de sa mort, et ce second musée n’offre qu’un intérêt
bien médiocre à côté du premier. Les tableaux danois y abondent,
mais les bons ouvrages y sont rares. On y remarquera surtout un
très-spirituel et très-vivant portrait de l’artiste, par son ami Horace
Vernet. Thorvaldsen est dans son atelier, en costume de travail,
tenant en main l’ébauchoir et accoudé sur le socle qui supporte la
statue d’Œhlenschläger. Une bonhomie loyale et une sorte de
naïveté rêveuse se lisent sur cette figure encadrée de longs cheveux
gris et percée de petits yeux bleus. La tête est puissante, et pourtant
elle a quelque chose d’enfantin ; le regard est limpide comme une
source ; l’expression a cette placidité qui fit plus d’une fois accuser
d’insouciance et même de paresse l’un des artistes les plus
prodigieusement, mais aussi les plus tranquillement actifs qu’on ait
jamais vus.
Lorsque Thorvaldsen avait quitté Rome pour revenir dans sa
patrie, on l’avait accueilli comme un triomphateur. Quand il mourut,
la nation fit cortége à son cercueil, et ses funérailles eurent presque
le caractère d’une apothéose. Moins de six ans après, l’ami et
l’émule du grand sculpteur, qui nous a conservé ses traits ; celui qui
éleva la gloire de la poésie danoise presque aussi haut que
Thorvaldsen avait élevé la gloire de l’art danois, Œhlenschläger
mourait à son tour. Tous les spectacles et toutes les réjouissances
publiques étaient suspendues pendant huit jours. La stalle qu’il avait
coutume d’occuper au grand théâtre restait vide et voilée d’un crêpe
durant six mois. Vingt mille personnes, le prince royal, le conseil
entier des ministres, les généraux, tout le clergé, tous les corps et
métiers avec leurs bannières, suivaient par les rues sablées et
jonchées de verdure, entre les maisons tendues de draperies
funèbres, le cercueil du poëte, que les étudiants avaient réclamé
l’honneur de porter eux-mêmes. Nous sommes ici chez un peuple
qui sait honorer ses grands hommes et qui est digne d’en avoir.
J’ai vu, à deux pas de l’hôtel Phœnix, au milieu d’une avenue
plantée d’arbres, la statue d’Œhlenschläger. Il est représenté en robe
de chambre, assis dans son fauteuil ; il a le front haut, le visage
ouvert et la mâle stature de ces héros du Nord qui revivent si bien
dans ses vers. Personne n’a mieux chanté que lui ce « pays
charmant, couvert de larges hêtres, à côté de la Baltique amère, —
qui s’appelle le vieux Danemark, et qui est la demeure de Freya » ;
cette patrie des géants héroïques, « dont les os reposent sous les
monuments des collines », et qui n’a point perdu sa beauté, « car la
mer bleue lui fait une ceinture, et le feuillage vert une couronne ; et
de nobles femmes, de belles filles, des hommes vaillants et des
jeunes gens au cœur déterminé peuplent les îles des Danois [11] . »
Thorvaldsen est un Grec, qui demande son inspiration à l’Olympe ;
Œhlenschläger, un Scandinave pur-sang, qui est allé chercher la
sienne dans le Walhalla.
[11] Fædrelandssang, ou Chant national
d’Œhlenschläger. Comme la plupart de ses poésies, ce
chant est presque intraduisible, car il a surtout un mérite
de style.

Il y a peu d’exemples, en poésie, d’une activité, d’une abondance


et d’une variété pareilles à celles d’Œhlenschläger. Il a abordé tous
les genres, — tragédies, comédies, opéras, épopées, odes, ballades,
idylles, épigrammes, satires, contes et romans, que sais-je encore ?
— et dans tous il a marqué sa trace. Esprit curieux, naïf et mobile,
comme un poëte doublé d’un enfant, cet homme du Nord a en lui
quelque chose de la flamme et aussi de la couleur du Midi. Mais ce
qui domine, dans la diversité de cette œuvre multiple qu’on ne peut
examiner en détail, la figure qui se dégage et qui restera la sienne
aux yeux de la postérité, c’est celle du poëte patriotique et national,
qui a rendu un nouvel éclat aux vieilles chroniques et aux traditions
populaires. L’auteur d’Hakon Jarl, de Palnatoke, d’Axel et Valborg,
d’Hagbart et Signe, de la Mort de Balder et des Dieux du Nord est un
scalde inspiré pour qui les Sagas et les Eddas n’ont plus de secret,
qui déchiffre les runes mystérieuses, qui a ressuscité les géants et
leurs fils, ces intrépides et farouches vikings, dont la félicité suprême
consistait en un combat perpétuel arrosé de perpétuelles libations.
Œhlenschläger fait autorité comme un contemporain dans le
domaine primitif, reconquis et restitué par lui. C’est le classique de la
poésie nationale ; c’est l’Hésiode de la mythologie du Nord. Il a
mérité cette couronne de poëte scandinave que son rival suédois,
Tegner, déposa solennellement un jour sur sa tête dans la cathédrale
de Lund.
VI
LE MUSÉE DES ANTIQUITÉS SCANDINAVES ET
LES CHANTS POPULAIRES DU NORD.

Œhlenschläger a puisé à pleines mains dans le riche trésor des


chants populaires, sans plus dédaigner la légende que l’histoire ; la
danse du troll espiègle et mutin, que les terribles coups d’épée des
vieux adorateurs de Thor. Ces chants sont innombrables : on en
compte plus de trois mille, précieusement recueillis par les érudits et
les critiques, et qui forment une mine inépuisable de traditions et de
poésie. M. Xavier Marmier, qui a tant fait pour répandre chez nous la
connaissance de la littérature des peuples du Nord, nous en a donné
un recueil curieux, qu’il eût pu facilement doubler. Souvent mes amis
danois m’ont chanté et traduit ces vieilles mélodies nationales, que
tout le monde aime et connaît chez eux, et qui apportent le plus
précieux concours à l’étude de l’histoire et des mœurs.
Il n’est pas possible ici de séparer le Danemark de la Suède et de
la Norwége : au fond, c’est le même peuple et c’est la même langue.
La vieille souche scandinave s’est divisée en trois branches, mais qui
ont été plus d’une fois réunies et le seront peut-être encore. Leurs
annales, leurs traditions et leurs chants se mêlent sur presque tous
les points.
Beaucoup de ceux-ci remontent fort haut. Ils plongent par leurs
racines dans les temps héroïques et quasi-fabuleux, d’où ils sont
venus sur les lèvres des nourrices et des paysans, jusqu’à ceux qui
les ont recueillis pour la première fois, mais non sans avoir subi bien
des modifications en route. La plupart datent du moyen âge. La
forme est souvent plus moderne que le fond, et le style a été
remanié et rajeuni. Par la contexture générale, ils se rapprochent des
ballades allemandes et écossaises ; mais le refrain y joue un rôle
plus considérable. D’après leur date et leurs sujets, on les divise en
cinq groupes principaux.
Le premier groupe comprend les chansons héroïques proprement
dites Kœmpeviser [12] , roulant sur des traditions guerrières qui
remontent, pour la plupart, aux temps antérieurs à l’introduction du
christianisme. Les exploits y revêtent un caractère gigantesque et
fabuleux, et madame de Sévigné, qui aimait tant les grands coups
d’épée des romans de La Calprenède, eût pris un bien autre plaisir à
ceux d’Axel, de Vonved et de Viderik, si elle avait pu seulement
oublier que ces terribles hommes du Nord ne parlent, ni n’agissent
en preux chevaliers de la cour de Louis XIV. On ne saurait lire les
combats du fils de Verland, le forgeron magique, contre le géant
Langben, et d’Orm, le jeune écuyer, contre le géant Berner, sans
songer à la fois à l’histoire biblique de David et de Goliath et aux
légendes chevaleresques de Brut et d’Artus. Les héros des
Niebelungen y figurent, car les Niebelungen ne sont qu’une
dérivation et un amoindrissement des vieux poëmes scandinaves, et
l’on y voit Sivard, le Sigurd de l’Edda, ici arracher des chênes, fendre
les enclumes et tuer les serpents magiques ; là, galoper à cheval,
sans prendre un moment de repos, pendant quinze jours et quinze
nuits, et sauter à quinze pieds au-dessus des murailles dans les
forteresses dont la porte est fermée. On y rencontre Charlemagne et
Ogier le Danois. La Norwége chante encore une chanson populaire
sur Roland et la bataille de Roncevaux. L’empereur Théodoric, qui
tient une si grande place dans les traditions semi-historiques et
semi-fabuleuses du moyen âge, y revient souvent, sous le nom de
Diderik. Le cheval Skimming et le cheval Grane, les bonnes épées
Birting et Mimering qui coupent les géants en deux, y rappellent le
Bayard des quatre fils Aymon et la Durandal de Roland. Ces
rapprochements seraient infinis. Il y a comme un grand fonds
commun de poésie populaire où tous les peuples ont puisé, et
souvent, d’un bout de l’Europe à l’autre, les mêmes traditions
reparaissent, arrangées suivant le génie des différentes nations.
[12] Ce nom s’applique, par extension, à toutes les
anciennes chansons populaires.

Le caractère de la race et celui de la nature ont gravé fortement


leur empreinte sur ces productions incultes, pleines d’une majesté
sauvage et sombre. Les hommes y sont plus grands que nature, et
les moindres combats y prennent des proportions épiques. La touche
en est vigoureuse, mais la couleur monotone et le dessin naïf. En
lisant ces chants guerriers, on sent qu’il y manque la rude
déclamation des scaldes, accompagnée par la harpe aux accords
puissants, dont les sons vibraient comme ceux de la trompette. Les
mélodies sont mâles, quelques-unes remplies d’une ardeur martiale
et d’une sorte d’impétuosité belliqueuse [13] . Les plus grandes et les
plus belles chansons de cette classe appartiennent d’abord à
l’Islande, où, comme en un sanctuaire inaccessible au reste du
monde, s’est conservé, avec la pureté de la langue primitive, le
trésor de ces traditions nationales, dont la réunion composa l’Edda ;
puis en Norwége et dans les Feroë, ce groupe d’îles arides et
chétives, où la vieille poésie, comme un foyer vivace, console et
réchauffe le pauvre paysan dans sa cabane solitaire.
[13] Voy. dans le recueil de Mélodies populaires
scandinaves, arrangées pour le piano par M. Gade, chef
d’orchestre au Théâtre-Royal, le Tournoi, Svend Vonved,
Grimmer et Kamper, les Chevaliers sur la montagne de
Dovre, toutes danoises.

Le Tournoi donnera une idée de ce que sont les Kœmpeviser :

Sept et soixante-dix furent les chevaliers qui quittèrent le


château. Arrivés à Brattingsborg, ils dressèrent leur tente.

Le roi Nilaus était sur le belvédère, il regardait à l’horizon :


« Les chevaliers aiment bien peu leur vie, puisqu’ils souhaitent
nous combattre.
« Arrive, Sivard Snarensvend. Tu as vu les pays étrangers :
examine les armes de ces chevaliers, et va les visiter dans
leurs tentes. »

Sivard Snarensvend entre dans la première tente :


« Chevaliers du roi de Danemark, soyez les bienvenus chez
mon seigneur.

« Ne vous fâchez pas, nobles seigneurs, ne le prenez pas


en mauvaise part. Demain nous voulons bien vous combattre.
Montrez-moi vos armes. »

Le premier bouclier porte un lion couronné ; c’est l’écu du


roi Diderik.

Le second bouclier porte un martel ; c’est l’écu de Viderik


Verlandson, lui qui ne fait point de prisonniers, qui tue [14] .

[14] Comme le roi Diderik (Théodoric), Viderik, fils de


Verland, joue un très-grand rôle dans les Kœmpeviser. Le
père de ce dernier est l’armurier magique, l’élève
d’Oberon le Nain, qui forge les épées et les boucliers des
héros.

Sur le troisième bouclier brille un aigle rouge ; c’est l’écu


de Holger (Ogier) le Danois, qui est toujours victorieux.

Le quatrième bouclier porte un violon et un archet ; c’est


l’écu de Folmer Spillemmand (le ménestrel), qui préfère le
boire au sommeil.

Tels étaient les champions et les écus. Impossible de les


tous énumérer. Le noble Sivard Snarensvend ne pouvait plus
attendre davantage :
« Lequel des chevaliers du roi de Danemark veut lutter
contre moi ? Il ne doit plus tarder. Il me rejoindra sur la
lande. »

Les chevaliers jetèrent le dé sur la table. Le sort désigna le


jeune Humble pour lutter avec Sivard.

Le jeune Humble ferma brusquement l’échiquier. Il ne


tenait plus à jouer. Je ne vous dis que la vérité pure, ses
joues étaient très-pâles.

« Je te dis, Viderik Verlandson : tu es un homme hardi.


Prête-moi aujourd’hui Skimming, ton cheval ; prête-le-moi sur
caution.

« Je te donne huit châteaux en gage, et puis ma sœur


jeune et charmante. Elle vaut encore mieux.

— Sivard a la vue bien basse ; il ne voit pas où porte son


glaive, et si Skimming est blessé aujourd’hui, tous tes parents
ne le guériront point. »

Humble monte sur Skimming, et chevauche avec grande


allégresse. Skimming était bien étonné de sentir des coups
d’éperon…

Les vers suivants décrivent la défaite de Humble. Il raconte son


extraction à Sivard, qui le reconnaît comme le fils de sa sœur,
l’embrasse, lui dit de reprendre son cheval et veut bien se déclarer
vaincu par lui. Il se fait lier avec des lanières de cuir à un grand
chêne par Humble. Celui-ci revient trouver le roi Nilaus, et l’avertit
d’aller chercher Sivard enchaîné sur la lande. Nilaus n’en veut pas
croire ses oreilles. Au moment où il monte à cheval, Sivard, qui a eu
honte de sa situation humiliante, vient au-devant du roi, traînant
après lui l’arbre qu’il a arraché. La chanson finit par une grande fête
en l’honneur des chevaliers danois, où Sivard Snarensvend (le
garçon rapide) danse, le chêne à la ceinture.
On peut assigner le treizième siècle comme limite générale aux
Kœmpeviser proprement dits. Parmi les chansons qui roulent
particulièrement sur les croyances superstitieuses du Nord et sur les
êtres mystérieux dont l’imagination du peuple a rempli la mer et les
montagnes, beaucoup se rapportent aussi à la même date. Ce
deuxième groupe répond à une nouvelle face de la poésie instinctive
et spontanée : il représente le sentiment de la nature réfléchi dans la
fantaisie populaire et fécondé par le christianisme, la puissance des
anciennes traditions, le penchant au merveilleux, inné dans le cœur
de la foule que tout mystère attire, et si particulièrement vivace en
ces pays du Nord encore peuplés des légendes héroïques de la vieille
mythologie scandinave. Les magiciens et les sorciers aiment à
s’envelopper dans un voile de brumes ; le conte de fées éclôt aussi
bien dans le brouillard et la tempête que sous les rayons brûlants du
soleil.
Vous retrouverez dans ces chansons de féeries beaucoup de
thèmes communs à la poésie populaire de tous les pays : c’est un
amant qui sort de sa tombe pour revoir et consoler sa bien-aimée ;
c’est une mère qui revient de l’autre monde pour caresser et soigner
ses petits enfants, maltraités par une marâtre ; c’est un soldat ou un
chevalier dont le fantôme apparaît pour ordonner à sa veuve de
restituer le champ mal acquis, si elle veut procurer le repos à son
âme, ou pour révéler, comme le père d’Hamlet, le crime dont il a été
victime. Mais on y trouve aussi bien des traits particuliers aux
peuples du Nord. Les elfes, ces sirènes de la colline, qui dansent
dans les rayons de la lune pour séduire le voyageur ; les trolls, qui
gardent les trésors dans la montagne ; le nek, dont la harpe retentit
dans les flots du torrent ; l’homme des eaux, qui attire les jeunes
filles dans son palais de cristal, et la femme des eaux, qui devine
l’avenir [15] , tels sont les héros habituels de ces chants merveilleux.
Tantôt ils célèbrent la puissance des runes, ces talismans magiques
dont l’effet rappelle, en le dépassant, celui des incantations de
Canidie, et tantôt le pouvoir de la harpe d’or, qui charme les oiseaux
et les flots et qui force le havmanden à la barbe verte de quitter ses
grottes profondes pour restituer sa proie.
[15] Voy., dans le recueil de Gade, le morceau intitulé
le Roi des Danois fait saisir une femme des eaux. La
mélodie étrange de cette chanson sent la fraîcheur acerbe
de la mer.

Quelques-unes de ces ballades étranges sont d’un charme exquis


et d’une forme presque parfaite :

— Je sommeillais sur la colline des elfes. Deux jeunes filles


s’avancent vers moi. L’une me frappe doucement à la joue, et
l’autre me chuchote à l’oreille :
« Éveille-toi, beau garçon, si tu veux danser avec nous.
Pour toi, mes jeunes sœurs chanteront leur plus doux chant. »
— L’une d’elles, la plus belle des femmes, commence à
chanter. Le fleuve rapide s’arrête pour l’entendre ; les petits
poissons l’écoutent en remuant la queue, et les oiseaux
gazouillent d’admiration dans le bois.
« Écoute, beau garçon, veux-tu demeurer avec nous ? Je
t’apprendrai le secret des runes puissantes. Je te dirai
comment on dompte l’ours et le sanglier, comment on chasse
le dragon qui garde les trésors. »
— Et les jeunes filles dansaient mollement de tous côtés,
comme font les elfes, et je les contemplais, appuyé sur la
garde de mon épée… Si, par la grâce de Dieu, le chant du coq
n’avait tout à coup retenti, je restais avec elles sur la colline.
C’est pourquoi, cavaliers qui chevauchez à travers la forêt, ne
vous endormez jamais sur la colline des elfes.

Ailleurs, c’est l’homme de la mer qui monte sur un cheval de


l’eau la plus limpide, avec une bride et une selle du sable le plus
blanc, et qui entre à l’église pour y choisir sa fiancée. Toutes les
images des saints se retournent à son approche, mais la fille de
Marksig, en le voyant, songe en son cœur et se dit sous son voile :
« Dieu veuille que ce beau cavalier soit pour moi ! » Il s’approche
d’elle et lui prend la main, puis tous deux s’en vont en dansant
jusqu’au rivage, où la jeune fille tombe tout à coup dans les flots.
Mais quand elle a vécu huit ans avec lui et l’a rendu père de sept
enfants, un jour elle entend le son des cloches en berçant son
dernier-né ; elle demande à l’homme des eaux d’aller à l’église, et
elle ne revient plus [16] . Ou bien c’est le roi de la montagne, être
terrible, qui a attiré chez lui une jeune fille et l’a épousée. Elle lui
donne huit enfants, avec cette fécondité des contes populaires que
le bon Perrault a traduite en une phrase devenue proverbiale. Après
quoi, elle désire revoir sa mère, et le roi de la montagne le lui
permet, à condition qu’elle ne parlera pas de lui. Au premier mot
qu’elle prononce sur son mari, celui-ci paraît à côté d’elle, la frappe
rudement pour la punir d’avoir manqué à sa promesse et la ramène
dans la montagne. Là, il la force de boire un breuvage qui lui fait
oublier père et mère, frère et sœur, le ciel et le soleil, Dieu et Jésus-
Christ [17] .
[16] J’ai réuni deux chansons dans cette courte
analyse ; la seconde est la suite naturelle de la première.
[17] Cette chanson est suédoise.

Le groupe des chants historiques est riche surtout en Danemark,


où il embrasse une période de trois siècles, et écrit à sa façon la
chronique des rois, de 1200 à 1500 [18] . C’est peut-être là qu’on
trouve les plus belles chansons, dont la poésie contraste
singulièrement avec la rare sécheresse de la plupart de nos chants
historiques français. La Mort de la reine Dagmar, que j’ai citée plus
haut, appartient à ce groupe, qui comprend aussi un très-
remarquable cycle de neuf ballades roulant sur le meurtre d’Éric VII
(1585) par son marsh (connétable) Stig, dont il avait séduit la
femme, et sur le sort des deux filles innocentes du meurtrier, qui
s’expatrient pour chercher partout un asile. Après avoir tué le roi
dans une grange, le connétable est proscrit par le jeune fils de la
victime, et il se retire en son château fortifié de l’île de Hjelm, d’où il
fait des excursions dans le voisinage, portant partout avec lui le fer
et le feu. Le château est enlevé et démoli ; le connétable prend la
fuite et meurt bientôt, mais ses amis continuent la guerre en pirates
et dévastent les côtes du Danemark. Ses filles passent d’abord en
Suède, d’où elles sont chassées par le roi, neveu d’Éric VII, puis en
Norwége, où elles trouvent un asile dans le palais du souverain. Le
chant qui raconte leurs pérégrinations présente une forme assez
caractéristique. Il est d’un style monotone, d’un rythme lent et
plaintif comme une psalmodie. Le dernier vers de chaque strophe se
répète au commencement de la suivante, et entre chaque tercet le
refrain revient comme un glas funèbre :
[18] Le premier livre imprimé en Danemark (1495) est
le Danske Riimkronnike, où chacun des anciens rois
raconte en vers sa vie, ses exploits et sa mort. La Suède
et la Norwége ont aussi leur vieille histoire versifiée, tout
comme le Danemark.

« L’aînée prit la main de la plus jeune. Elles partent pour la


Norwége. Le roi Erik rentrait à la maison.
— Elles erraient seules dans le monde.
— Le roi Erik rentrait à la maison. Les filles de Marsh Stig
vont au devant de lui : « Quelles sont ces femmes
étrangères ?
— Elles erraient seules dans le monde.
— Quelles sont ces femmes étrangères ? Pourquoi restez-
vous ici si tard ? — Nous sommes les deux filles du Marsh
Stig.
— Elles erraient seules dans le monde.
— Nous sommes les filles de Marsh Stig ; ayez pitié de
nous, seigneur. — Savez-vous brasser ? Savez-vous cuire le
pain ?
— Elles erraient seules dans le monde.
— Nous ne savons brasser, ni cuire le pain… mais nous
savons filer de l’or et tisser de belles images…
— La sœur aînée arrangeait le métier, et la plus jeune
travaillait. La première image qu’elles tissèrent — fut la sainte
Vierge et Jésus-Christ. La seconde image qu’elles tissèrent —
fut la reine de Norwége et toutes ses dames. Elles tissaient
des cerfs, elles tissaient des daims, — elles tissaient elles-
mêmes, tristes et souffrantes, elles tissaient de leurs doigts
rapides — tous les petits anges de Dieu. »

L’aînée finit par mourir de douleur, et la cadette épouse le fils du


roi.
On peut rattacher à ce groupe quelques productions plus
récentes, comme la chanson suédoise de Malcolm Sinclair, qui a été
adaptée à un air ancien. Sinclair, revenant de Turquie, fut surpris et
tué, dans une forêt de la Silésie, par des émissaires russes, qui lui
enlevèrent ses dépêches (1739). Sa mort fut célébrée aussitôt dans
un chant populaire, où l’on voit un jeune berger conduit par un
vieillard vénérable aux portes de la montagne, qui s’ouvrent et leur
livrent passage jusqu’aux Champs Élysées. Là, dans un grand
château, ils aperçoivent autour d’une table de marbre les anciens
héros et rois de la Suède, surtout ceux du nom de Charles. Le poëte
anonyme les décrit tous, et pour tracer le portrait de Charles XII, il
trouve dans la douleur nationale des accents d’une grande poésie.
Sinclair entre tout saignant de ses blessures ; il raconte le guet-
apens dont il est tombé victime, et les héros écartent leurs rangs
pour lui faire place parmi eux. Ainsi, en plein dix-huitième siècle, au
milieu des fadeurs de la poésie cultivée, l’imagination populaire,
frappée fortement, retrouvait le Walhalla scandinave.
Les chansons de chevalerie et d’amour forment un des groupes
les plus nombreux. Le Chevalier au bocage, le Chevalier Brenning, la
Petite Tove et beaucoup d’autres ont bien du charme ; mais on ne
peut tout traduire ni tout analyser. Parmi ces chants figure la plus
longue de toutes les ballades danoises, celle d’Axel Thordsen, qui a
deux cents strophes de quatre vers, sans compter le refrain, qui
reparaît deux cents fois. Une pièce d’une telle dimension peut
sembler monotone, et elle l’est, en effet, quand on la lit, mais non
quand on la chante. Il y a un rapport intime, dans la poésie
populaire, entre la mélodie et les paroles, et on ne peut les séparer
sans presque la détruire. Le texte et la musique ne font qu’un corps
et qu’une âme : celle-ci explique et complète celui-là, dont certains
détails mêmes n’existent souvent que pour elle. C’est surtout en
chantant cette interminable ballade d’Axel Thordsen, dont les
événements dramatiques ont fourni à Œhlenschläger le cadre tout
fait d’une de ses plus belles tragédies, qu’on aperçoit le rapport fin,
piquant et toujours nouveau qu’il y a entre le contenu de chaque
strophe et le vers du refrain.
Une dernière classe comprend les chansons amoureuses ou
familières de date plus récente. L’élément lyrique y prédomine de
plus en plus, tandis que le vieux fonds épique va toujours en
s’atténuant. La Suède et la Norwége fournissent à ce groupe son
principal contingent. Tout le monde en Suède vous chantera la
Chanson de la Dalécarlie :

Le fin cristal reluit comme le soleil, comme les astres


étincellent parmi les nuages. Je connais une fille
resplendissante de vertu, une fille de ce village :

« Mon amie, mon amie, ma fleur de rose, Dieu fasse que


nous soyons ensemble !… »

La Norwége n’a point l’accent si lyrique, mais elle a un sentiment


plus intime et peut-être plus pénétrant.

« Ah ! Ola, Ola, mon doux ami, pourquoi me causer une si


grande douleur ? Non, je n’aurais pas cru que vous me
pussiez trahir, moi qui étais si jeune.

« J’ai versé des torrents de larmes ; je croyais en devenir


folle ; j’ai répandu plus de pleurs qu’il n’y a de jours en mille
années.
« J’ai soupiré bien souvent ; bien souvent j’ai séché mes
larmes. Dans mes rêves souvent je pensais : Quel bonheur, si
toujours il était à moi !

« Je n’oublierai jamais la dernière fois que je vous vis à


table : vous me tendiez la main ; j’avais près de moi un
garçon si beau que le soleil en pâlissait.

« Que de tristesse l’amour entraîne avec soi ! Ah ! Dieu,


protége tous ceux qui aiment ! L’amour est un feu si brûlant !
Personne n’en connaît bien la souffrance. »

Ces douleurs de l’abandon, la poésie populaire de la Norwége,


comme celle de tous les pays, les a chantées plus d’une fois, et
presque toujours avec une émotion communicative dans une
expression familière. Je laisse de côté les chansons burlesques de ce
pays, qui jouissent d’un renom particulier ; mais qu’on me permette
de citer encore la complainte de la fille abandonnée, où chaque
strophe se compose de deux vers : l’un dépeignant le bonheur
passé ; l’autre, par antithèse, le malheur présent. L’air en est d’une
tristesse profonde, d’un sentiment et d’une couleur admirables.

L’an dernier, je gardais les chèvres dans les vallées


profondes ; cette année, je passe avec mon enfant par les
fermes.

L’an dernier, je pouvais danser quand sonnait joyeusement


le violon ; cette année, il faut que je berce l’enfant lorsqu’il
pleure.

L’an dernier, j’ai dormi chez le plus beau des garçons ;


cette année, je me tourmente en enveloppant l’enfant de
guenilles.
L’an dernier, j’avais dix-sept ans, et tout le monde me
désirait ; cette année, j’en ai dix-huit, et personne ne me
regarde plus.

Ne te ris pas de moi, jeune fille : le même sort peut


t’arriver. Nul ne sait quand le frappera le malheur.

On me pardonnera cette digression, qui n’en est pas une, sur les
chansons populaires, où se manifestent si naïvement le génie d’une
race et son caractère national, et ces citations directement puisées à
la source, qui donneront peut-être à l’un de nos lecteurs l’envie de
reprendre et de compléter le curieux recueil de M. Marmier. Les
chants modernes n’ont, d’ailleurs, ni l’intérêt, ni la signification des
Kœmpeviser, où l’on trouve une peinture si frappante et si sincère,
dans sa rudesse même, des mœurs, des idées, des croyances du
Nord. A ce point de vue, on peut dire des légendes poétiques du
Danemark qu’elles sont plus vraies que l’histoire, et le recueil formé
par M. Svend Grundtvig [19] pourrait susciter un nouveau Saxo
Grammaticus.
[19] Gamle danske Folkeviser (Anciennes chansons
populaires danoises). M. Svend Grundtvig est le fils du
célèbre pasteur dont il sera question plus loin.

Pour achever de faire connaissance avec les mœurs des anciens


hommes du Nord, il faut entrer maintenant au Musée des antiquités
scandinaves, qui est le commentaire vivant d’Œhlenschläger, des
Sagas et des chansons populaires. C’est une exhumation des âges
héroïques, et au milieu de ces armes colossales, de ces cuirasses, de
ces cottes de maille, de ces lourdes épées, de ces fers de lance, de
ces umbos de bronze et de fer arrachés aux entrailles du sol qui les
avait gardés pendant quinze ou vingt siècles, l’imagination évoque
pêle-mêle les personnages mythiques des deux Eddas, côte à côte
avec ces terribles Northmans qui faisaient pleurer Charlemagne.
Mais le Musée des antiquités scandinaves remonte bien au delà
de Sigurd, plus haut qu’Odin et Balder, plus loin, bien plus loin que
les premières figures qu’on voit apparaître, à peine distinctes du
chaos et ébauchées en formes encore indécises, dans les Sagas les
plus lointaines. Les temps primitifs, décrits par les poëmes les plus
reculés ; les origines cosmogoniques et mythologiques, entrevues,
avec une mystérieuse terreur, dans les perspectives sans fin du
passé par l’œil des sibylles du Nord, ne sont que de l’histoire
moderne en regard de ces époques englouties dans la nuit la plus
absolue, et qui n’ont laissé d’autre trace que des débris informes
retrouvés au fond des tombeaux.
C’est en Danemark qu’on a découvert les monuments les plus
nombreux et peut-être les plus caractéristiques des premières
périodes de l’humanité, et c’est là aussi, on peut le dire, que l’étude
des temps préhistoriques a pris naissance. Les sépulcres maçonnés
des dolmens et les chambres de bois des tumuli, les enclos de
pierres, les marais, les tourbières et les lacs ont livré par milliers à la
science ces documents authentiques, qui remplissent les salles du
Musée des antiquités scandinaves. Il y a vingt ans, on eût repoussé
dédaigneusement du pied, comme des cailloux vulgaires, ces
grossiers blocs de silex dont les éclats semblaient le fruit du hasard,
avant que l’œil attentif des savants eût trouvé le secret de ce travail
rudimentaire dans l’étude approfondie des moindres détails et le
rapprochement des formes. Aujourd’hui, on recueille partout avec un
soin pieux ces ébauches d’armes et ces embryons d’outils, qui
représentent le point de départ de la civilisation et le premier effort
de l’humanité.
Plus on remonte dans le passé et plus cette collection unique,
peut-être la plus riche du monde, abonde en documents de tout
genre. Les haches, les massues, les pioches et les marteaux de
pierre, les harpons, les flèches et les hameçons en os de rennes ou
d’élans, ressuscitent sous nos yeux les périodes antédiluviennes. Ces
coquilles d’huîtres, au milieu desquelles reste soudé encore le
couteau qui servait à les ouvrir, écrivent le premier chapitre, après la
pomme d’Ève, de l’histoire de la gourmandise humaine, et ces dents
de chien, percées d’un trou, qu’on portait au cou en guise de perles,
représentent les débuts de la coquetterie féminine. Les instruments
de bois ont péri pour la plupart, mais les entrailles de la terre ont
gardé les autres et les ont tenus en réserve pour révéler au dix-
neuvième siècle un monde dont il ne soupçonnait pas l’existence. La
matière indestructible et l’habitude d’enterrer avec le cadavre du
mort les objets qui lui avaient servi pendant sa vie, les ont sauvés
d’une destruction certaine. L’âge de la pierre s’est, du reste,
prolongé en Danemark, comme en Suède et en Norwége, plus avant
qu’ailleurs, et il y subsistait toujours, tandis que l’âge de bronze et
l’âge de fer régnaient en d’autres pays. La vieille Chersonèse
cimbrique a longtemps gardé la rudesse des mœurs primitives, et
l’on s’y servait encore d’armes et d’ustensiles en silex après
l’introduction du christianisme, qui ne pénétra sur la terre d’Odin
qu’au neuvième siècle.
Mais l’homme a découvert le cuivre et l’étain, et il en a fait le
bronze ; il a trouvé l’or, et la richesse de la matière semble lui avoir
révélé en même temps le secret de l’art. Avec ses nouveaux outils, il
creuse des arbres, il les façonne en cercueils et en bateaux, il se
forge des boucliers, des épées, des colliers, des bracelets, des
couronnes, des urnes et des vases d’un travail délicat. Voici la
pesante épée pointue et sans garde, qui servait non à frapper, mais
à piquer l’ennemi. Voici les lours colossaux où sonnaient les héros
des Sagas, et qui, sous le souffle vigoureux des vieux jarles,
rendaient un accent plus terrible que celui du cor de Roland à
Roncevaux. On a pu voir au Champ-de-Mars, en 1867, dans la
galerie de l’histoire du travail, le plus grand et le plus curieux de ces
géants de bronze, près duquel les bugles et les cuivres redoutables
de l’artillerie musicale de M. Sax ne sont que des jouets d’enfants.
Figurez-vous un énorme serpent vertébré, long de près de sept
pieds, contourné sur lui-même en forme d’une S retournée, et dont
le tube, étroit à son embouchure, va s’élargissant toujours jusqu’à
l’extrémité opposée, qui se termine par un large pavillon plat comme
une cymbale !
Les monuments de l’âge de fer ne présentent pas moins
d’intérêt. Là encore les plus anciens sépulcres ont fourni la récolte la
plus abondante, et la première période est plus riche que la
suivante. On a trouvé dans le tombeau du belliqueux roi Gorm et de
la reine Thyra, sa femme, un gobelet d’argent, un plat et une sorte
de grossier bas-relief en bois offrant l’imitation d’un guerrier, qui
sont de précieux spécimens de l’art scandinave au dixième siècle.
Tous les autres objets proviennent de tombes anonymes, et la
curiosité du spectateur qui voudrait attacher le nom d’un héros à
chacune de ces reliques en est réduite à de pures hypothèses. La
variété des armes exposées sous les vitrines témoigne du génie
destructif des Northmans. Les lames tordues alternent avec les
scramasax recourbés ; les piques, les javelots, les fers de lances,
avec les arcs hauts de cinq pieds et les flèches encore garnies du
goudron qui servait à attacher les plumes ; la hache, avec la fibule
en forme d’écaille de tortue qui attachait à l’épaule le vêtement du
Jute et du Cimbre, et avec la classique épée des vikings, à la longue
poignée, à la lame forte et grossière, au double tranchant, décorée
d’inscriptions runiques et garnies d’un bouton triangulaire ou en
forme de feuilles de trèfle.
Le Groënland se sert, aujourd’hui encore, de quelques objets
semblables à ceux de l’âge de pierre. Les vieilles traditions et les
procédés de la civilisation primitive n’ont subi presque aucune
atteinte dans cette colonie danoise, gardée par une large barrière de
vagues et de glaces contre les invasions du progrès. Dans le musée
ethnologique de Copenhague, la galerie du Groënland forme comme
une succursale naturelle au musée des antiquités du Nord. Mais je
m’arrête sur le seuil, et je me borne à montrer du doigt ces
nouvelles richesses. Si l’on ne résistait à l’attrait, les musées de
Copenhague ne vous lâcheraient plus.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebookmass.com

You might also like